最近在做一个SPI通信,发现主机发送数据从机能接收,但从机回送的数据主机接收错误,
将从机放入发送缓冲的数据打印出来,发现和示波器上的波形数据不一样,但主机接收的和示波器数据一样,
故可确定主机的接收没问题,问题出在从机的回送上了。
数据正常波形
数据异常波形
下面是问题分析的过程:
1、配置问题?
主机和从机都是STM的芯片,配置都是一样的,但本着不怕一万只怕万一的原则,将从机从新配置了几种状态,
结果数据更乱了。故先排除配置问题
2、通信速度问题?
SPI是时钟同步的,速度才1M,应该不存在从机速度匹配问题,只要不是太快。
将主机的读取由读一串改为单个读取,结果正确了。
原来是从机回送中断不及时,导致的数据错位。(由于其他原因,SPI的中断优先级不是最高)
为了验证这一结论,从机进入中断时取反一个IO,通过示波器观察确实是中断不及时(没有拍照了)
结论
以后SPI还是用DMA比较好。
示波器是分析底层的利器
|