本文为记录开发过程中一次SPI调试经历,如果你也恰好遇到类似的波形或log报错,可能需要考虑是不是这个原因。
为保证项目进度需对MCU及SOC SPI通信在无A板条件下提前调试。对MCU与8155 SPI飞线连接后无法通信。其中MCU设置为主模式,8155设置为从模式。对8155单独做主模式测试波形和通讯均正常。
1.现象:断开MCU与8155 SPI连接飞线,MCU端CLK/CS/MOSI 波形均正常;初步排除MCU端功能异常;
2.飞线连接8155 SPI 后,MCU 端CLK/CS 波形正常,MOSI波形异常,表现为在一个时钟周期内数据出现多次变化,波形如下。怀疑可能是由于MCU数据输出与8155数据输出接到一起引起通信电平异常。核对MCU MOSI其连接8155管脚描述,8155对应管脚从模式是为MISO,确定应交换DI/O管脚。(事后诸葛亮,开发时你去看高通的管脚描述,这种主从都可以做的IC,几乎很难确认数据线在特定主从模式下到底是IN/OUT,最保险的是找FAE确认或者有条件实际飞线调起来试试)这个波形后续在调试国产MCU时又出现了一次,有了这次经验,很快就确定了是IO配置导致。
3.当将SPI的DIO交换以后,示波器抓取波形正常。但从设备8155依然读不到数据,读取log显示报over range中断错误,且8155发送数据波形与模式设置有差异,延后半个周期。MCU(主)输出波形,模式为00,上升沿采样,下降沿输出。其模式设置与波形显示一致。
MCU输入(8155输出)波形,8155软件配置模式与主机MCU保持一致为00,但其波形却表现为上升沿输出,下降沿采样。怀疑8155存在SPI设置模式与实际波形不匹配的问题。
4.经与高通FAE电话沟通:其表示上述两个现象其他客户此前均有类似咨询案例。
1)关于无法读取数据:SPI主从通信前需要中断握手,或定义好字节长度,查询软件MCU发字节长度64bit,8155读取字节长度16bit。经验证,重新软件读取字节长度参数后,可以正常读取SPI数据;
2)关于8155发送数据时钟周期延后半个周期,高通反馈8155做从模式进行数据输出时内部会有移位机制,可通过配置相应寄存器关闭移位功能。
小结:针对通信类的问题,波形分析是硬件分析最简单、最有说服力的依据,只有波形正常了,才有可能通信正常。软硬件相互信任和理解很重要,不要相互推诿甩锅。没有问题是解不掉的。哈哈。