本帖最后由 wowangru 于 2018-11-7 13:58 编辑
SPI就像一个环形位移寄存器,本身没有校验。 没有不出错的通讯! 我现在想给SPI增加校验功能。
我如何才知道从机有没有正确接收呢? 从机发的数据主机有没有正确接收呢?
如果要直到是不是非得下一个数据包才能知道? 这样是不是效率会受影响!!
SPI DMA接收完中断是否代表数据已经接收完成全部到了 接收数组?
SPI DMA发送完中断是否代表仅仅缓冲区数据空,但是有字节在位移寄存器里面 没有发送出去,请问有几个字节?假如我是按byte发送,如何解决这种情况呢,是否非得再往spi写入数据才能发送缓冲区剩余的数据? 这样每一帧会多无效的字节,如何解决呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
当时就可以知道
假设需要发100byte,定义b[101]
101保存crc
主机计算crc放入101里面,发101byte到从机,从机接收到第100byte时,可以计算前面100byte的crc,
在主机发第101byte时,从机把crc返回给主机。
主机发完第101后,收到从机的crc,一看,我操,不对啊,再来一次,如果对,就next
b里面也可以保存一个计数器
SPI DMA接收完中断是否代表数据已经接收完成全部到了 接收数组?
SPI DMA发送完中断是否代表仅仅缓冲区数据空,但是有字节在位移寄存器里面 没有发送出去,请问有几个字节? 假如我是按byte发送,如何解决这种情况呢! 是否非得多往SPI写入数据才能发出位移寄存器中剩余的数据? 这样多了无效的字节,有解决办法吗
硬件上,SPI是按包的。
软件上,每包有校验。
这个贴子的2楼,是我们在用的从机协议: https://www.amobbs.com/thread-5674423-1-1.html
包分小点,最后拼起来,spi 用10m的话,100ns完全可以计算过来,可以不要用crc,用简单的xor计算,收一个byte,从机xor一次,理论上1/72m时间可以完成一条指令,速度上完全可以
速度要求高的话还是用fpa吧
一周热门 更多>