新闻中心

EEPW首页 > 网络与存储 > 设计应用 > SPI接口与CRC算法在双DSP数据通信中的应用

SPI接口与CRC算法在双DSP数据通信中的应用

作者:时间:2011-02-27来源:电子产品世界收藏

  从机发送/主机接收的驱动设计

本文引用地址:http://www.eepw.com.cn/article/117273.htm

  (1) 从机发送数据的驱动设计。当从机的发送FIFO为空时,将触发并进入发送中断服务函数, 在此函数中将待发送的16字数据写入发送FIFO,然后向主机发出接收申请。

  (2) 主机接收数据的驱动设计。在确知从机已将待发送的数据写入发送FIFO之后,主机即向从机发送一帧无效数据,目的是提供从机发送数据所需的同步时钟。与此同时,主机可接收到自从机发出的16字数据,并触发接收中断,在相应的中断服务函数中将数据读出即可。

  通信协议的设计与实现

  协议的内容与实现

  (1) 数据帧格式。主机与从机遵循相同的帧格式。每个数据帧长度为32字节,其中前30字节为有效数据,后两字节为前30字节的校验码。

  (2) 主机的收/发机制。主机的收/发流程如图4所示。在主机中启动定时器中断功能,在定时中断服务函数中读取MRE和SE信号的状态。其中SE信号标识了从机对前一数据帧的校验结果,为0表示校验失败,当主机读取到此状态时,就将前一数据帧重发;MRE信号标识了从机的待发数据准备状态,为0表示从机已将待发送的一帧数据写入发送FIFO,主机读取到此状态时,应立即启动接收操作,当主机接收到一帧新的数据时,应立即对齐进行校验,并根据校验结果设置MCRCE信号的状态,作为从机是否重发的依据。

  (3) 从机的收/发机制。从机的收/发流程如图4所示。在从机中启动定时器中断功能,在定时中断服务函数中读取MCRCE信号的状态,此信号标识了主机对前一数据帧的校验结果,为0表示校验失败,从机读取到此状态时应将前一数据帧重发。若不需重发,则继续发送新的数据帧。当从机将待发送的数据帧写入发送FIFO后,立即将MRE信号置为0,请求主机接收;当从机接收到新的数据帧后,立即进行校验,若校验失败,则将SCRCE信号置为0,请求主机将前一数据帧重发。

  基于CRC算法的校验机制

  协议将数据帧全部视作有效数据,使用同步时钟协调双方的发送/接收,实现数据的正确传输。为进一步提高通信双方的差错检测能力,带来更高的可靠性保障,在接收方引入了数据校验机制。考虑到CRC (Cyclic Redundancy Check) 算法误码检测能力强且易于实现[5],本系统使用CRC算法实现接收方的数据帧校验。

  CRC校验的原理可概括如下:被校验的n位数据块可看作是n阶二进制多项式m(x)=an-1xn-1 + an-2xn-2 + ⋯ + a1x + a0,发送方和接收方约定一个r阶的生成多项式g(x),发送方以xrm(x)为被除数,以g(x)为除数,做除法运算,得到余数多项式y(x)即为m(x)的校验码,将该校验码附在n位数据块之后一并发送至接收方。接收方以接收到的数据多项式为被除数,以g(x)为除数,做除法运算,若余数为0,证明校验成功,否则校验失败。

  为提高计算效率,本系统采用一种基于查表机制的并行处理方法。

  首先选择生成多项式g(x),考虑到CRC-16国际标准工程实用价值较高,此处也采用该标准,此时g(x)=x16 + x15 + x2 + 1。将所有单字节数据的CRC-16校验码提前计算出来,存于表中待查。

  将待校验的数据块(长度为30字节)看作是多字节序列,取第一个字节B30并查表得其两字节余式,将此余式的高字节与B29做模2加运算,低字节与B28做模2加运算,分别得结果B*29和B*28,并得到新的多字节序列< B*29 B*28⋯B3B2B1>,再取B*29重复进行上述操作,得新的多字节序列< B**28B*27⋯B3B2B1>,如此往复,直到最后多字节序列变为< B*2B1>,将此序列左移16位得< B*2B100>,取B*2并查表得其两字节余式,将此余式的高字节与B1做模2加运算,低字节与0做模2加运算,分别得结果B*1和C*2,得新的序列< B*1C*20>,再重复此操作,可得双字节序列< C**2C1>,此即序列的CRC-16校验码。

  将此校验码附于之后,一并发送至接收方;接收方对全部32字节的数据序列进行上述CRC-16编码运算,若余式为0则认为校验成功,否则证明传输过程中有丢码或误码。

通信相关文章:通信原理




关键词: SPI CRC 201102

评论


相关推荐

技术专区

关闭