ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

通讯协议-SPI

通讯协议-SPI SPI总线1、SPI是一种同步串行全双工总线2、SPI采用主从方式工作提供时钟的设备为主设备一般可以挂载多个从设备主从关系不可以切换3、每个从设备需要四根线完成通讯分别是时钟线SCLK片选信号线CS主机输出从机输入MOSI主机输入从机输出MISO。4、SPI通讯根据片选信号选择当下需要通信的设备因此主设备如果需要控制多个从设备则需要有多条片选。5、SPI速率无固定标准取决于主控芯片和从设备支持的最高频率。因为SPI没有像UART那样的起始/停止位SPI每个时钟周期直接传输一位数据接收一位数据。所以SPI的时钟频率也叫波特率直接决定了传输速度。理论上SPI的时钟频率可以很高甚至达到数百兆赫兹。但实际中从设备的处理能力往往是瓶颈。比如ADXL355加速度计的SPI接口最大支持10MHz超过这个频率它就“跟不上”了。SPI拓扑1、芯片与芯片之间如果支持SPI且电平标准一致直连即可通讯否则需要电平转换专用电平转换芯片。由于SPI的速度比较快所以需要使用专用的电平转换芯片不能使用MOS或三极管。2、每个从机需要单独的片选信号一般为低有效。需要和某个从机通讯时主机将对应从机的CS拉低而其他从机的CS保持高电平。3、由于片选信号的存在未被选中的设备CS为高的MISO信号将保持为高阻态因此SPI可以采用推挽结构获得更强的驱动能力所以SPI在电路设计上直连即可SPI串联电阻在高速电路设计中需要考虑到阻抗匹配问题单端线控制阻抗50ohm驱动器输入阻抗一般为30ohm左右所以常会在SPI信号源端串连20~30ohm的电阻。另走线上总会有寄生电容若没有端接电阻的存在上电瞬间的电压变化可能会非常陡峭造成一系列的震荡所以需要添加串阻来抑制震荡源端串联22R电阻作用1、阻抗匹配抑制反射2、增加阻抗抑制震荡SPI时序1、SPI在时钟的跳变沿采样2、通过配置软件寄存器可以配置时钟空闲电平和具体采样方式时钟极性CKPCPOLCKP0时时钟空闲为低电平CKP1时时钟空闲为高电平。时钟相位CKECPHACKE0时时钟第一个跳变沿采样CKE1时时钟第二个跳变沿采样。说说SPI存在4种模式的由来SPI的4种模式Mode 0、1、2、3并不是协议强制要求的“规定”而是为了兼容不同厂商芯片的时序习惯而衍生出来的时钟极性和相位组合。简单说SPI没有统一的“标准”时钟所以通过CPOL时钟极性和CPHA时钟相位这两个参数定义了4种“采样-移位”的时序组合以确保主从机在正确的时刻锁存数据。核心概念时钟极性和相位SPI通信由主机的SCLK时钟驱动数据在MOSI/MISO上传输。关键问题是数据到底是在时钟的上升沿还是下降沿被采样空闲时时钟是高还是低CPOL时钟极性决定SCLK空闲时CS拉低前是高电平还是低电平。CPOL 0空闲低电平CPOL 1空闲高电平CPHA时钟相位决定数据是在SCLK的第一个边沿还是第二个边沿被采样。CPHA 0在第一个边沿采样前沿采样CPHA 1在第二个边沿采样后沿采样这两个参数组合就产生了4种模式。为什么需要这4种模式原因一历史原因——芯片厂商的“自由发挥”SPI协议最初由摩托罗拉提出但并不是一个严格的标准。早期的Flash、EEPROM、ADC、传感器等芯片各自定义了自己的SPI接口时序。有的芯片喜欢在上升沿发送数据有的喜欢在下降沿发送有的空闲电平要求高有的要求低。如果SPI只支持一种固定模式那么很多老芯片就无法与新主机兼容。因此协议设计者实际上是各厂商的共识定义了这4种组合让主机可以通过软件配置来适配任意从机。原因二物理层面的时序容错建立时间Setup Time数据必须在时钟边沿到来前稳定。保持时间Hold Time数据必须在时钟边沿后保持一段时间。不同的芯片对建立/保持时间的要求不同。通过选择不同的CPHA可以让数据在更安全的窗口被采样。比如如果主机的时钟边沿太陡峭或者线路过长你可能需要选择在第二个边沿采样CPHA1给数据多留一点稳定时间。原因三与极性的匹配——避免毛刺有些芯片内部逻辑是“低电平有效”或“高电平有效”的。如果时钟极性与芯片的内部逻辑不匹配可能会导致在CS拉低后SCLK的第一个边沿产生毛刺glitch被误认为是有效时钟。通过调整CPOL可以让SCLK在CS有效期间保持稳定避免误触发。4种模式的具体表现以8位数据为例模式CPOLCPHA空闲时钟数据采样边沿典型应用Mode 000低上升沿最常用绝大多数芯片默认Mode 101低下降沿部分TI芯片Mode 210高下降沿部分Motorola芯片Mode 311高上升沿与Mode 0一样常见兼容性最好直观理解Mode 0时钟空闲为低数据在时钟上升沿被锁存。Mode 3时钟空闲为高数据在时钟上升沿被锁存和Mode 0的采样沿相同但极性相反。为什么Mode 0和Mode 3最常用Mode 0因为空闲低电平与大多数CMOS逻辑的默认状态一致且上升沿采样符合“边沿触发”习惯所以默认首选。Mode 3因为空闲高电平在CS拉低后时钟先有一个下降沿然后再上升沿采样这给了从机一个“准备”时间且兼容性极好很多芯片手册直接写“SPI Mode 3”。实际工程中的建议查数据手册每个SPI外设芯片都会在手册中明确标注“Clock Polarity (CPOL) ...Clock Phase (CPHA) ...”或者直接写“Support SPI Mode 0/3”。用示波器验证如果手册不清晰可以在调试时用示波器抓取CS、SCLK、MOSI的波形看数据是在哪个边沿被锁存然后反向配置主机的模式。不要随意切换一旦确定模式不要随意改否则会导致数据错位或通信失败。
返回列表