SPI协议如何校验? 有没有同一个数据包完成校验的方法?

2019-12-15 12:17发布

本帖最后由 wowangru 于 2018-11-7 13:58 编辑

SPI就像一个环形位移寄存器,本身没有校验。   没有不出错的通讯!    我现在想给SPI增加校验功能。  
   我如何才知道从机有没有正确接收呢?  从机发的数据主机有没有正确接收呢?   
   如果要直到是不是非得下一个数据包才能知道? 这样是不是效率会受影响!!


SPI  DMA接收完中断是否代表数据已经接收完成全部到了 接收数组?
SPI DMA发送完中断是否代表仅仅缓冲区数据空,但是有字节在位移寄存器里面 没有发送出去,请问有几个字节?假如我是按byte发送,如何解决这种情况呢,是否非得再往spi写入数据才能发送缓冲区剩余的数据? 这样每一帧会多无效的字节,如何解决呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
loveavr999
1楼-- · 2019-12-17 02:46
wowangru 发表于 2018-11-7 12:33
也就是必须两个包才能直到有没有收发成功?

当时就可以知道

假设需要发100byte,定义b[101]
101保存crc
主机计算crc放入101里面,发101byte到从机,从机接收到第100byte时,可以计算前面100byte的crc,
在主机发第101byte时,从机把crc返回给主机。

主机发完第101后,收到从机的crc,一看,我操,不对啊,再来一次,如果对,就next

b里面也可以保存一个计数器

wowangru
2楼-- · 2019-12-17 05:33
 精彩回答 2  元偷偷看……
loveavr999
3楼-- · 2019-12-17 08:18
如果spi速度太快,从机是有点够呛
wowangru
4楼-- · 2019-12-17 13:19
本帖最后由 wowangru 于 2018-11-7 13:57 编辑
loveavr999 发表于 2018-11-7 13:48
如果spi速度太快,从机是有点够呛


SPI  DMA接收完中断是否代表数据已经接收完成全部到了 接收数组?
SPI DMA发送完中断是否代表仅仅缓冲区数据空,但是有字节在位移寄存器里面 没有发送出去,请问有几个字节? 假如我是按byte发送,如何解决这种情况呢!  是否非得多往SPI写入数据才能发出位移寄存器中剩余的数据?  这样多了无效的字节,有解决办法吗
aozima
5楼-- · 2019-12-17 17:38
本帖最后由 aozima 于 2018-11-7 13:57 编辑

硬件上,SPI是按包的。

软件上,每包有校验。

这个贴子的2楼,是我们在用的从机协议: https://www.amobbs.com/thread-5674423-1-1.html
loveavr999
6楼-- · 2019-12-17 23:35
wowangru 发表于 2018-11-7 13:42
这个方法我想过!!只有FPGA可以实现吧?  arm的话发送101个字节 就已经收到了101字节。   从机计算100字 ...

包分小点,最后拼起来,spi 用10m的话,100ns完全可以计算过来,可以不要用crc,用简单的xor计算,收一个byte,从机xor一次,理论上1/72m时间可以完成一条指令,速度上完全可以

速度要求高的话还是用fpa吧

一周热门 更多>