SPI能看到时钟却读到0xFF、0x00或错位数据,通常不能只怀疑程序。时钟极性、采样边沿、片选时序和电气完整性都可能让接收端在错误的时间读数。
硬件面试:SPI通信数据总是错一位,CPOL、CPHA和片选时序怎么排查?

一、面试参考回答
先确认主从设备的数据手册要求的SPI Mode:CPOL决定空闲电平,CPHA决定在第几个边沿采样。再把CS、SCLK、MOSI、MISO四路同时抓取,对照时序图核对片选建立时间、首位数据有效时间和末位保持时间。若时序逻辑正确,再检查信号幅值、上升沿、地参考及走线负载。
二、四根线一起看,不能只盯MISO
CS必须在事务开始前有效,且满足器件规定的建立时间;某些器件要求命令与数据保持同一次片选。
确认SCLK空闲电平和第一个有效采样边沿,避免CPHA设置错误导致首位或末位错位。
用逻辑分析仪先核对协议,再用示波器检查电压幅值、振铃和建立保持裕量;逻辑分析仪的数字判定无法替代模拟波形检查。
三、现场排查的优先顺序
先把SPI频率降下来,看故障是否随速率变化。
核对字长、MSB/LSB先后顺序、半双工/全双工配置以及片选是否被软件意外拉高。
检查MISO是否被上拉/下拉、器件是否真正上电、片选是否接错。
不要把“Mode 0最常见”当成默认正确答案。主从两端必须符合目标器件手册的时序定义。
逻辑分析仪解码正确,但MCU读到的数据仍不对,你还会查哪些寄存器或DMA配置?

扫码关注































