打工人日报#20251113
打工人日报#20251113
SPI
SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全双工、同步的通信协议,主要用于微控制器(MCU)与各种外设之间进行通信,如 EEPROM、Flash、传感器、ADC(模数转换器)、DAC(数模转换器)等。以下是对 SPI 协议的详细介绍:
物理层
通信线:
主机输出从机输入(MOSI,Master Out Slave In):主机通过这条线向从机发送数据。
主机输入从机输出(MISO,Master In Slave Out):从机通过这条线向主机发送数据。
串行时钟(SCK,Serial Clock):由主机产生,用于同步主机和从机之间的数据传输。每个时钟周期传输一位数据。
从机选择(SS,Slave Select):也称为片选信号(CS,Chip Select),主机通过拉低对应的从机的 SS 线来选择与之通信的从机。在多从机系统中,每个从机都有自己独立的 SS 线。
设备角色:
主机(Master):负责发起通信,产生 SCK 信号,并控制 SS 线选择从机,同时通过 MOSI 和 MISO 线与从机进行数据交换。
从机(Slave):在被主机选中(对应的 SS 线被拉低)后,根据主机提供的 SCK 信号,通过 MOSI 接收主机发送的数据,并通过 MISO 向主机发送数据。
数据传输过程
数据发送:
主机通过控制 SS 线选中要通信的从机。
主机在 SCK 的每个时钟周期,通过 MOSI 线向从机发送一位数据。同时,从机在 SCK 的同步下接收这些数据。
数据接收:
从机在接收到主机发送的数据的同时,也会在每个 SCK 时钟周期通过 MISO 线向主机发送一位数据。主机在接收自己发送的数据的同时,也能接收到从机返回的数据。
传输单位:数据通常以字节(8 位)为单位进行传输,但也可以根据需要进行多位或多字节的连续传输。在多字节传输时,主机和从机按照字节顺序依次发送和接收数据。
时钟极性(CPOL)和时钟相位(CPHA)
时钟极性(CPOL):定义了 SCK 在空闲状态下的电平。
CPOL = 0:SCK 在空闲状态下为低电平。
CPOL = 1:SCK 在空闲状态下为高电平。
时钟相位(CPHA):决定了数据采样的时刻。
CPHA = 0:数据在 SCK 的第一个跳变沿(上升沿或下降沿,取决于 CPOL)被采样。
CPHA = 1:数据在 SCK 的第二个跳变沿被采样。
组合模式:CPOL 和 CPHA 的不同组合形成了 SPI 的四种工作模式:
模式 0(CPOL = 0,CPHA = 0):SCK 空闲时为低电平,数据在 SCK 的上升沿发送,下降沿接收。
模式 1(CPOL = 0,CPHA = 1):SCK 空闲时为低电平,数据在 SCK 的下降沿发送,上升沿接收。
模式 2(CPOL = 1,CPHA = 0):SCK 空闲时为高电平,数据在 SCK 的下降沿发送,上升沿接收。
模式 3(CPOL = 1,CPHA = 1):SCK 空闲时为高电平,数据在 SCK 的上升沿发送,下降沿接收。
主机和从机必须配置为相同的 SPI 工作模式才能正确通信。
SPI 协议的特点
高速通信:SPI 协议能够支持较高的时钟频率,从而实现快速的数据传输,适用于对数据传输速度要求较高的应用场景。
简单灵活:SPI 协议的硬件接口简单,软件实现相对容易,并且支持多从机通信,具有较高的灵活性。
全双工通信:主机和从机可以同时进行数据的发送和接收,提高了数据传输效率。
SPI 协议在嵌入式系统中应用广泛,为微控制器与各种外设之间的通信提供了一种高效、可靠的方式。
阅读
《晚熟的人》
火把与口哨

