流量计与sd卡spi通信接口设计与误差测试方法
技术领域
1.本发明涉及仪器仪表测试技术领域,具体地说,涉及流量计与sd卡spi通信接口设计与误差测试方法。
背景技术:2.目前国内技术还和国际先进水平有较大差距,高精度的超声波流量计还是国外品牌的天下,形成了低档产品过剩、高档产品依赖进口的局面,其中,基于集成电路、单片机和自动控制技术的高集成、多功能仪表,先进的控制理论和成熟的电路设计为流量计多种功能的实现有一定的基础,但是要提高流量的测量精度,必须进一步完善测量线路的设计,提高fpga与sd卡spi通信接口设计与便于误差测试。
技术实现要素:3.本发明的目的在于提供流量计与sd卡spi通信接口设计与误差测试方法,以解决上述背景技术中提出的问题。
4.为实现上述目的,提供了流量计与sd卡spi通信接口设计与误差测试方法,包括如下步骤:
5.s1、设置sd卡控制模块,通过控制模块控制sd卡初始化;
6.s2、设置数据处理模块,通过数据处理模块控制sd卡的命令发送、数据读取;
7.s3、设置spi通信模块,通过spi通信模块上的spi接口进行frga和sd卡之间数据或命令的传输;
8.s4、定义spi通信模块的spi接口通信协议,其中spi_cs_n是控制芯片是否被选中,spi_miso即主机的输入或者说是从机的输出,spi_mosi即主机的输出或者说是从机的输入,spi_clk是spi同步时钟信号;
9.s5、对spi通信模块接收到的数据进行误差分析。
10.作为本技术方案的进一步改进,所述数据处理模块设置有多个sd卡接口数据端,所述sd卡接口数据端由两个参数cpol和cpha进行数据表示。
11.作为本技术方案的进一步改进,所述s3中spi通信模块缺省的命令结构/协议是crc检测关闭,sd卡在sd总线模式下上电,cmd0紧跟着一个有效的crc字节,sd卡在spi模式下,默认将关闭crc,spi的时序模式为cpol=1,cpha=1,速率为25mbit。
12.作为本技术方案的进一步改进,所述s1中sd卡初始化方法步骤如下:
13.s1.1、定义sd卡控制模块接口,spi_clk为spi时钟信号,spi_miso为spi主机输入从机输出数据信号,spi_mosi为spi主机输出从机输入数据信号;
14.s1.2、延时等待sd就绪;
15.s1.3、发送74个spi_clk,且保持spi_cs_n=1,spi_mosi=1;
16.s1.4、发送cmd0命令并等待响应r1=8'h01,发送cmd1命令并等待响应r1=8'h00,发送cmd16命令并等待响应r1=8'h00。
17.作为本技术方案的进一步改进,所述s1.4中命令cmd发送方法包括如下步骤:
18.s1.4.1、发送8个时钟脉冲;
19.s1.4.2、sd卡片选cs拉低;
20.s1.4.3、连续发送8个字节命令;
21.s1.4.4、接收1个字节响应数据;
22.s1.4.5、sd卡片选cs拉高。
23.作为本技术方案的进一步改进,所述s2中sd卡数据读取方法包括如下步骤:
24.s2.1、发送命令cmd17;
25.s2.2、接收读数据起始令牌0xfe;
26.s2.3、读取512byte数据以及2byte的crc。
27.作为本技术方案的进一步改进,s3.1、sd卡控制模块控制spi_cs_n信号;
28.s3.2、将待传输的数据放置到spi数据发送寄存器spi_tx_db中;
29.s3.3、将spi发送使能标志位spi_tx_en拉高,spi发送功能被启动;
30.s3.4、标志位spi_tx_rdy被拉高,spi_tx_rdy为高电平;
31.s3.5、拉低spi_tx_en,spi模块在spi_tx_en拉低后会清零内部的计数器;
32.s3.6、spi_tx_rdy复位。
33.作为本技术方案的进一步改进,所述s5中误差分析采用误差分析算法,其算法公式如下:
34.δx=x-x0;
[0035][0036][0037][0038][0039]
其中δx是绝对误差,x是测量值,x0是被测值的真值,e为相对误差,ei为第i次的测量误差,qi为第i次的流量计读数,q
ni
为第i次装置标准流量值,e为基本测量误差,er为重复性,ta为置信度为0.95时的分布系数。
[0040]
与现有技术相比,本发明的有益效果:
[0041]
1、该流量计与sd卡spi通信接口设计与误差测试方法中,使用了sd卡的spi模式进行通信,当spi通信模块接收到的数据后,sd卡在总线模式中唤醒,在接收复位命令时如果cs信号有效,那么将进入spi模式,如果sd卡认为sd总线模式是必须的,那么它不会对命令做出响应并继续保sd总线模式,如果需要spi模式,sd卡将切换到spi模式并发出spi模式下的r1响,从而提高流量的测量精度,进一步完善测量线路的设计。
附图说明
[0042]
图1为本发明的整体步骤流程图;
[0043]
图2为本发明的sd卡初始化方法步骤图;
[0044]
图3为本发明的命令cmd发送方法步骤图;
[0045]
图4为本发明的sd卡数据读取方法步骤图;
[0046]
图5为本发明的sd卡数据接收方法步骤图。
具体实施方式
[0047]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0048]
请参阅图1-图5所示,提供了流量计与sd卡spi通信接口设计与误差测试方法,包括如下步骤:
[0049]
s1、设置sd卡控制模块,通过控制模块控制sd卡初始化;
[0050]
s2、设置数据处理模块,通过数据处理模块控制sd卡的命令发送、数据读取;
[0051]
s3、设置spi通信模块,通过spi通信模块上的spi接口进行frga和sd卡之间数据或命令的传输;
[0052]
s4、定义spi通信模块的spi接口通信协议,其中spi_cs_n是控制芯片是否被选中,spi_miso即主机的输入或者说是从机的输出,spi_mosi即主机的输出或者说是从机的输入,spi_clk是spi同步时钟信号;
[0053]
s5、对spi通信模块接收到的数据进行误差分析。
[0054]
具体使用时,首先设置sd卡控制模块,通过控制模块控制sd卡初始化,设置数据处理模块,通过数据处理模块控制sd卡的命令发送、数据读取,设置spi通信模块,通过spi通信模块上的接口进行frga和sd卡之间数据或命令的传输,定义spi通信模块的spi接口通信协议,其中spi_cs_n是控制芯片是否被选中的,只有片选信号有效时,使得在同一总线上连接多个spi设备成为可能,spi_clk是spi同步时钟信号,数据信号在该时钟的控制下逐位进行传输,spi_miso和spi_mosi是主从机进行通信的数据信号,spi_miso即主机的输入或者说是从机的输出,spi_mosi即主机的输出或者说是从机的输入,spi_tx_en为spi数据发送使能信号,spi_tx_rdy为spi数据发送完成标志位,spi_rx_en为spi数据接收使能信号,spi_rx_rdy为spi数据接收完成标志位,spi_tx_db为spi数据发送寄存器,spi_rx_db为spi数据接收寄存器,spi的工作模式有两种:主模式和从模式,spi总线可以配置成单主单从、单主多从和互为主从,该工程的fpga是spi主机,sd卡是从机,处于单主单从模式,因此,fpga将控制产生spi_cs_n和spi_clk的时序,sd卡通信可以是sd模式或者spi模式,该工程使用了sd卡的spi模式进行通信,当spi通信模块接收到的数据后,sd卡在总线模式中唤醒,在接收复位命令时如果cs信号有效(拉低),那么将进入spi模式,如果sd卡认为sd总线模式是必须的,那么它不会对命令做出响应并继续保sd总线模式,如果需要spi模式,sd卡将切换到spi模式并发出spi模式下的r1响,从而提高流量的测量精度,进一步完善测量线路的设计。
[0055]
此外,数据处理模块设置有多个sd卡接口数据端,sd卡接口数据端由两个参数cpol和cpha进行数据表示。当cp0l=1时,spi时钟信号spi_clk闲置时总是高电平,发起通信后的第一个时钟沿是下降沿;cpol=0时,spi时钟信号spi_clk闲置时总是低电平,发起
通信后的第一个时钟沿是上升沿,而cpha则用于控制数据与时钟的对齐模式,cpha=1时,时钟的第一个变化沿(上升沿或者下降沿)数据变化,那么也意味着时钟的第二个沿(与第一个沿相反)锁存数据;cpha=0时,时钟的第一个变化沿之前数据变化,那么也意味着时钟的第一个沿锁存数据。
[0056]
进一步的,s3中spi通信模块缺省的命令结构/协议是crc检测关闭,sd卡在sd总线模式下上电,cmd0紧跟着一个有效的crc字节,sd卡在spi模式下,默认将关闭crc,spi的时序模式为cpol=1,cpha=1,速率为25mbit。
[0057]
再进一步的,s1中sd卡初始化方法步骤如下:
[0058]
s1.1、定义sd卡控制模块接口,spi_clk为spi时钟信号,spi_miso为spi主机输入从机输出数据信号,spi_mosi为spi主机输出从机输入数据信号;
[0059]
s1.2、延时等待sd就绪;
[0060]
s1.3、发送74个spi_clk,且保持spi_cs_n=1,spi_mosi=1;
[0061]
s1.4、发送cmd0命令并等待响应r1=8'h01,发送cmd1命令并等待响应r1=8'h00,发送cmd16命令并等待响应r1=8'h00。
[0062]
具体使用时,首先对各个sd卡模块接口进行定义,其中spi_clk为spi时钟信号,spi_miso为spi主机输入从机输出数据信号,spi_mosi为spi主机输出从机输入数据信号,clk为pll产生时钟信号50mhz,rst_n为系统复位信号,低电平有效,sd_dout为从sd读出的待放入fifo数据,sd_fifowr为sd读出数据写入fifo使能信号,sdwrad_clr为sdram写控制相关信号清零复位信号,随后延时等待sd就绪,发送74个spi_clk,且保持spi_miso=1,spi_mosi=1,发送cmd0命令并等待响应r1=8'h01,将卡复位到idle状态,发送cmd1命令并等待响应r1=8'h00,激活卡的初始化进程,发送cmd16命令并等待响应r1=8'h00,设置一次读写block的长度为512个字节,从而完成对sd卡初始化流程。
[0063]
具体的,。s1.4中命令cmd发送方法包括如下步骤:
[0064]
s1.4.1、发送8个时钟脉冲;
[0065]
s1.4.2、sd卡片选cs拉低;
[0066]
s1.4.3、连续发送8个字节命令;
[0067]
s1.4.4、接收1个字节响应数据;
[0068]
s1.4.5、sd卡片选cs拉高。
[0069]
具体使用时,首先sd控制cmd发送8个时钟脉冲,sd卡片选cs拉低,即片选有效,连续发送8个字节命令,同时接收1个字节响应数据,sd卡片选cs拉高,即关闭sd卡,发送总共8个字节命令的格式,完成对cmd的发送命令
[0070]
此外,s2中sd卡数据读取方法包括如下步骤:
[0071]
s2.1、发送命令cmd17;
[0072]
s2.2、接收读数据起始令牌0xfe;
[0073]
s2.3、读取512byte数据以及2byte的crc。
[0074]
具体使用时,首先发送命令cmd17,sd卡模块接口接收读数据起始令牌0xfe,并读取512byte数据以及2byte的crc,从而完成对数据的读取。
[0075]
进一步的,s3中sd卡数据接收方法包括如下步骤:
[0076]
s3.1、sd卡控制模块控制spi_cs_n信号;
[0077]
s3.2、将待传输的数据放置到spi数据发送寄存器spi_tx_db中;
[0078]
s3.3、将spi发送使能标志位spi_tx_en拉高,spi发送功能被启动;
[0079]
s3.4、标志位spi_tx_rdy被拉高,spi_tx_rdy为高电平;
[0080]
s3.5、拉低spi_tx_en,spi模块在spi_tx_en拉低后会清零内部的计数器;
[0081]
s3.6、spi_tx_rdy复位。
[0082]
当需要启动spi模式进行数据传输时,先把待传输的数据放置到spi数据发送寄存器spi_tx_db中,然后将spi发送使能标志位spi_tx_en拉高,spi发送功能模块被启动,若干个时钟周期后,数据发生完毕,则spi发送完成标志位spi_tx_rdy被拉高,此时外部模块检测到spi_tx_rdy为高电平,则拉低spi_tx_en,spi模块在spi_tx_en拉低后也会清零内部的计数器,此时的spi_tx_rdy也会复位,从而完成一次数据传输。
[0083]
再进一步的,s5中误差分析采用误差分析算法,其算法公式如下:
[0084]
δx=x-x0;
[0085][0086][0087][0088][0089]
其中δx是绝对误差,x是测量值,x0是被测值的真值,e为相对误差,ei为第i次的测量误差,qi为第i次的流量计读数,q
ni
为第i次装置标准流量值,e为基本测量误差,er为重复性,ta为置信度为0.95时的分布系数。δx绝对误差与和一般的量值一样,具有大小、符号和单位,它不能直接反映测量数值的精确度,与绝对误差配合使用的是其相反数c,即c=-δx,在测量系统中一般用表格、曲线以及公式函数来表示修正值,并可以利用修正值获得测量仪表的实际值,即x0=x+c,测量仪器仪表的重复性是指在相同的测试条件下对某一测量值的多次测量,测量结果相互不一致的程度它可以反映测量系统的随机误差大小。
[0090]
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的仅为本发明的优选例,并不用来限制本发明,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。