SPI(Serial Peripheral Interface)面试题汇总

1. 描述一下SPI通讯过程。

答:
SPI通信使用4根线:

  • SCK(Serial Clock):时钟信号线,由主设备产生。
  • MOSI(Master Out Slave In):主设备发送数据线。
  • MISO(Master In Slave Out):主设备接收数据线。
  • CS/SS(Chip Select/Slave Select):片选信号线,低电平有效。

通信开始时,主设备拉低对应从设备的CS线,然后通过SCK提供时钟信号,数据通过MOSI发送给从设备,同时通过MISO接收从设备的响应数据。通信结束后,CS线被拉高。


2. 什么是SPI的四种工作模式(CPOL和CPHA)?请解释它们。

答:
SPI的四种工作模式由CPOL(时钟极性)CPHA(时钟相位) 组合决定:

模式 CPOL CPHA 说明
模式0 0 0 SCK空闲为低电平,数据在第一个上升沿采样
模式1 0 1 SCK空闲为低电平,数据在第一个下降沿采样
模式2 1 0 SCK空闲为高电平,数据在第一个下降沿采样
模式3 1 1 SCK空闲为高电平,数据在第一个上升沿采样

主从设备必须设置相同的模式才能正常通信。


3. SPI通信中的数据传输过程是怎样的?

答:

  1. 初始化:主设备配置SPI控制器(模式、时钟、比特序等)。
  2. 片选:拉低目标从设备的CS线。
  3. 数据传输
    • 主设备通过MOSI发送数据,同时通过MISO接收数据。
    • SPI是全双工的,每次发送一个字节的同时也会接收一个字节。
    • 读操作时,主设备需发送“虚拟数据”(如0x00)以产生时钟。
  4. 结束通信:拉高CS线。

4. 如何实现多个SPI从设备共享一个SPI总线?

答:

  • 独立片选法:每个从设备使用独立的CS线,主设备通过拉低对应的CS线选择通信对象。
  • 菊花链法:从设备的MISO接下一个从设备的MOSI,所有设备共用SCK和CS,数据依次传递。

5. 如何确定SPI数据传输的比特序(LSB First / MSB First)?

答:
比特序由从设备的数据手册规定。常见的是MSB First。主设备在配置SPI控制器时需设置相应的比特序寄存器,确保与从设备一致。


6. 在嵌入式系统中使用SPI时,有哪些常见的软件实现方式?

答:

  • 轮询方式:简单但效率低,CPU需不断查询状态。
  • 中断方式:传输完成后触发中断,CPU可处理其他任务。
  • DMA方式:由DMA控制器直接搬运数据,极大减轻CPU负担,适合大数据量传输。

7. SPI通信中,如何进行错误处理?

答:
SPI本身无错误校验机制,常见处理方式包括:

  • 应用层CRC或校验和
  • 超时机制
  • 重传机制
  • 硬件错误标志检测(如溢出错误)
  • 保证信号完整性(布线、去耦等)

8. SPI数据量大时怎么处理?(DMA)

答:
使用DMA控制器:

  • CPU初始化DMA,指定源/目标地址和数据量。
  • DMA直接与SPI寄存器交互,无需CPU参与数据传输。
  • 传输完成后DMA发出中断,CPU处理数据。
    适用于高速、大数据量场景,提升系统效率。

9. 当MQTT网络出现故障时,如何确保消息的可靠传递和恢复?

答:

  • 使用QoS 1或QoS 2确保消息至少一次或仅一次送达。
  • 启用持久化会话和保留消息功能。
  • 实现消息队列或缓存机制,暂存未发送消息。
  • 设置故障检测与自动重连机制。

10. 如何保证MQTT消息的可靠传输?

答:
MQTT通过三种QoS等级保证可靠性:

  • QoS 0:最多一次,不保证送达。
  • QoS 1:至少一次,通过确认和重传确保送达。
  • QoS 2:仅一次,通过两次握手确保消息不重复。
    另可结合持久化会话、保留消息等功能提升可靠性。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐