60 秒回答模板

可以先讲通信过程:主机拉低片选,输出时钟,主出从入和主入从出两条数据线在每个时钟周期同时移位,所以它通常是全双工同步通信。常见四根线是 SCLK、MOSI、MISO、CS。四种模式由 CPOL 和 CPHA 组合决定,CPOL 决定空闲时钟电平,CPHA 决定第几个边沿采样,主从必须按器件手册一致配置,否则会丢第一位、整体错位或读到不稳定数据。DMA 用在连续收发大量字节时,把外设数据寄存器和内存之间的搬运交给 DMA,减少 CPU 中断频率。使用时要注意 TX/RX 缓冲区、片选保持、cache 一致性、传输完成回调、错误处理,以及有些读操作需要发送 dummy 字节才能产生时钟。

考点 四线传输
难度 真实面经题
回答目标 展示自己能把四线同步通信的时序、模式和高吞吐实现讲完整。

深入解析

01

通信由主机驱动

主机选择从设备、产生时钟并决定一次传输的字节数。从设备不会主动产生时钟,因此读从设备也需要主机发送 dummy 数据来换取返回数据。

02

四种模式看两件事

CPOL 描述空闲时时钟是高还是低,CPHA 描述数据在第一个还是第二个有效边沿被采样。只要主从对采样边沿理解不同,就可能出现位偏移或偶发错误。

03

片选是帧边界

很多器件用片选下降作为命令开始、上升作为命令结束。连续读写时如果中途释放片选,器件内部状态机可能复位;多个从设备共线时,片选还负责避免总线冲突。

04

DMA 解决搬运开销

短命令用轮询或中断即可;大块数据用 DMA 可以降低 CPU 占用。工程上要保证缓冲区生命周期、对齐、cache 同步、完成中断和错误恢复,不能只打开 DMA 就结束。

易错点

  • 只说有四根线,不说明全双工移位和主机提供时钟。
  • 把 CPOL/CPHA 背成模式编号,不能解释采样边沿。
  • 忽略片选时序,导致把多个字节事务拆坏。
  • 认为 DMA 只要打开就行,不考虑 cache、缓冲区和完成时机。

面试官追问

为什么读取数据时还要写 dummy 字节?

因为时钟由主机产生。主机必须写出占位数据来产生时钟,从设备才会在同一时钟下把数据移出。

DMA 传输时谁控制片选?

取决于控制器和驱动。有的硬件自动控制,有的需要软件在整段传输前后控制;关键是片选必须覆盖器件要求的完整事务。

如果板子上通信不稳定,你会怎么定位?

先用示波器或逻辑分析仪确认电平、时序、速率和帧格式,再对照驱动日志、错误码、重试次数和协议状态机,区分硬件连接、配置参数、总线仲裁和软件缓冲问题。