002_SPI通信调试页面中看到的返回值与逻辑分析仪解析出的不一致
一、问题描述
- MCU与复杂驱动之间采用SPI通信,且由于驱动芯片的内部逻辑电路设计的原因通信为半双工的形式。
- SPI一个通信周期内传输九字节数据。在一个SPI的通信周期内,MCU通过SPI向复杂驱动芯片发送读命令(一字节) + 寄存器地址(三字节) + 五个空字节(0x00U)
- 复杂驱动芯片在接受到第一个空字节之后开始向MCU发送寄存器的值(四字节)
- SPI通信频率为700K,逻辑分析仪采样频率为20M
- 调试时,调试界面看到的SPI返回值(最后四个字节)和逻辑分析仪解析出的值不一样
二、原因分析
- 查阅该驱动芯片的手册发现,当该芯片收到第一个空字节20n后就会向MCU发送寄存器的值,不会等待到时钟跳变沿。
- 逻辑分析仪采样频率20M远大于SPI通信频率700K,正常情况下数据在时钟跳变沿变化,完全不会采集到错误值。
- 20M的采样频率对应50ns的采样周期,大于驱动芯片20ns的等待期,故导致逻辑分析仪采样不准确。
三、解决方法
增大逻辑分析仪的采样频率即可解决此问题。