题库分类:嵌入式单片机适合经验:1—5年难度:中高级题型:故障定位题 + 接口调试题
面试题
SPI从设备返回的数据整体偏移了一位,或者每隔几帧就出现一次错误,你会怎样排查?
面试官真正想考什么
面试官想看你是不是只会“检查一下接线”。SPI数据错位通常不是物理连接问题,而是时钟极性(CPOL)和相位(CPHA)配置不匹配、主从时钟关系理解不到位、或者DMA传输和中断响应之间的时序竞争。
回答思路
第1步:用逻辑分析仪抓取完整波形
不要只看数据内容,要同时抓取SCK、MOSI、MISO和CS四路信号。对比主设备发出的时钟和从设备返回的数据时序关系,看数据是在时钟的上升沿还是下降沿变化的,CS拉低后第一个时钟边沿是什么时候。这一步是后续所有判断的证据基础。
第2步:核对CPOL和CPHA配置
SPI有四种工作模式(Mode 0/1/2/3),由CPOL(时钟空闲电平)和CPHA(数据采样边沿)决定。主设备和从设备必须使用同一种模式。如果CPOL配反了,空闲时时钟状态就不对;如果CPHA配反了,采样边沿和数据变化边沿错位,就会出现整体偏移一位或交替出错。查主从设备的芯片手册确认推荐的SPI模式。
第3步:检查CS时序和帧边界
CS拉低后到第一个时钟边沿之间需要满足一定的建立时间(不同器件要求不同,有些需要几个微秒)。如果CS拉低后立刻就开始发时钟,从设备可能还没准备好,导致第一帧数据丢失或错位。同样,CS拉高后到下一次拉低之间也需要足够的恢复时间。用逻辑分析仪测量CS到SCK的时序关系。
第4步:排查DMA和中断的时序竞争
如果错误是偶发的(不是每次都错位),很可能是DMA传输和中断处理之间的竞争。比如DMA还没完成上一帧数据的搬运,新帧就开始了,导致数据被覆盖或错位。检查DMA传输完成中断的处理逻辑,确认是否在传输完成标志清除前就重新启动了传输,或者中断里有没有修改SPI配置寄存器。
第5步:验证修改后的稳定性
修改配置后做长时间循环测试,覆盖不同的数据模式和传输速率,确认错误率归零。如果是DMA相关的问题,还要在不同中断负载下测试。

可直接使用的参考回答
我会先用逻辑分析仪同时抓SCK、MOSI、MISO和CS四路信号,看数据变化沿和采样沿是否对得上。然后核对主从设备的CPOL和CPHA配置是否一致。如果CS到第一个时钟边沿的时间不满足从设备的建立时间要求,就在CS拉低后加适当延时。对于偶发性错位,我会重点排查DMA传输完成中断和SPI配置寄存器之间的竞争关系,必要时在中断里加状态机保护。
面试官可能继续追问
Mode 0和Mode 3的区别是什么?
Mode 0是CPOL=0/CPHA=0,空闲低电平,第一个边沿采样;Mode 3是CPOL=1/CPHA=1,空闲高电平,第二个边沿采样。两者最终采样效果相同但时钟极性和边沿不同。为什么从设备手册推荐的模式和主设备默认配置不一样?
不同芯片厂商对SPI模式的定义和默认值不同,必须逐个查手册确认,不能假设一致。DMA模式下怎么避免SPI数据覆盖?
使用双缓冲或乒乓缓冲机制,确保DMA搬运完成标志清除后再启动下一次传输。SPI和I²C在调试方法上有什么本质区别?
SPI是同步全双工,四线信号必须同时观察时序关系;I²C是半双工两线,更关注总线状态机和ACK。
容易失分的表达
“检查一下线接对没有。”——数据整体错位通常不是接线问题,是配置问题。
“换一根短线就好了。”——没有分析根因,物理连接问题通常表现为信号丢失而非规律性错位。
“把SPI速率降下来就行了。”——如果配置本身不对,降速不能根本解决问题。
面试前准备动作
准备一张四种SPI模式的时序图,标注CPOL、CPHA和数据采样边沿。
整理一个CPOL/CPHA配置不匹配导致数据错位的排查案例。
练习用逻辑分析仪同时抓取SPI四路信号并分析时序关系。
参考资料
ST: AN3169 - SPI protocol and its use with STM32 microcontrollers
Microchip: SPI Mode Selection for Device Communication
核心关键词:SPI时钟配置、CPOL、CPHA、DMA竞争、数据错位、逻辑分析仪

扫码关注





























