珠海极海半导体有限公司是一家致力于开发工业级/车规级微处理器、高性能模拟芯片及系统级芯片的集成电路设计型企业,总部为纳思达股份有限公司(“纳思达”,002180.SZ)。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。
近来遇到比较多spi的调试,其中一例相当典型,分享给大家:
案例:
1.应用场景:厨房环境检测
2.主要功能: MCU通过外设ADC/UART/SPI 把数据采集好放入显示屏幕上,其中SPI是驱动外部显示屏幕。
3.产品问题:单独测试调试样机以及老化没有出现任何问题,批量出现千分之一的概率屏幕不显示任何数据。
对于这种概率性问题调试是比较困难的,首先非必现,其次逻辑上都是通顺的。
那么只能从电气属性上着手分析,
#概率非常小,说明器件通信逻辑上问题不大。
#抓取波形,发现配置波形数据都是正确的。
#分析屏幕初始化过程:首先是初始化SPI,接着通过SPI初始化屏幕,最后驱动屏幕亮起;由以上的结论,可以推断问题出现在SPI初始化以及未初始化SPI之前。
#再抓取初始化SPI以及初始化SPI之前波形分析:
发现SPI CS 配置前为浮空,MCU 进入SPI初始化的这段时间,GPIO(CS/CLK/MISO/MOSI)都是浮空状态,如果没有外部干扰,用示波器观察是纹波较大的低电平;但如果有干扰的话,这种电平状态很容易被改变。这期间如果有手部干扰,CLK 上容易产生干扰脉冲,而此时CS 可能还是低电平,因此对于SPI屏幕来说,CLK 上产生的干扰脉冲可能被当成了有效脉冲。然后当 MCU 第一次去驱动SPI屏幕时,又未将 CS 做一次拉高再拉低的操作,所以前面的 CLK 干扰脉冲被当成有效脉冲,并入正常的 SPI 时序中,造成第一次SPI时序完整性被破坏,最终驱动不亮SPI屏幕。
所以强烈建议:MCU 初始化SPI前,MCU应尽早将 CS 拉高,CLK 拉低,在后续进行 SPI传输前,再按需将 CS 拉低进行通信;同时 SPI 一次操作完毕,应及时将 CS 拉高,释放 SPI 总线。这样才能保证 SPI 外设的操作稳定性。
|