
SPI概述
SPI通信安全
SPI配置
常见错误及故障排查

本系列专栏聚焦功能安全软件工程实践,将针对车载/工控场景下的主流AUTOSAR基础软件模块,系统性拆解落地思路。结合模块基础功能介绍、芯片合规要求、MCAL适配标准等,凝练工程调试与集成的避坑经验。
本次系列会覆盖CAN、COM、MCU、ADC、PORT、DIO等多款核心MCAL模块,聚焦功能安全的工程逻辑与合规落地方法。希望不管是功能安全入门新手,还是需要梳理项目流程的开发者,都能在这里找到贴合实战的参考内容。
SPI是汽车嵌入软件的常用通信技术之一,主要用于主芯片与从芯片之间的通信,本文将从基本概念、软件配置、常见问题排查三个方面对SPI展开详细介绍,帮助读者快速了解SPI通信技术。

1. SPI概述
1.1 基本概念
SPI(Serial Peripheral Interface)是串行外设接口的缩写,由Motorola于1980年推出,是一种全双工、同步、串行通信总线;
SPI采用主从模式工作,包括一个主设备、一个或多个从设备;
SPI至少需要四根线:
MOSI:数据线,主设备输出、从设备输入;
MISO:数据线,主设备输入、从设备输出;
SCLK:时钟线,用于主设备和从设备进行时钟同步;
CS/SS:片选线,用于选中对应从设备,与主设备通信。
1.2 工作模式
SPI工作模式由极性(CPOL)和相位(CPHA)共同决定。CPOL表征空闲时的时钟线状态:CPOL=0,表示空闲时时钟线为低电平,CPOL=1,表示空闲时时钟线为高电平;CPHA表征采样的时刻:CPHA=0,在时钟周期的第一个变化沿时采样,CPHA=1,在时钟周期的第二个变化沿时采样。包含下表中的四种模式:
表1 SPI工作模式

为了更清晰的描述SPI总线的时序,下图展示了模式0的时序:在空闲状态下,SCLK串行时钟线在低电平,当片选(SS)被拉低后,数据开始传输,数据线MOSI/MISO在上升沿采样,在下降沿切换(将移位寄存器中的数据发送到数据线上)。

图1 SPI模式0时序图
1.3 通讯过程
SPI主机和从机都有一个串行移位寄存器,主机通过向它的移位寄存器写入数据来发起传输:
1)主设备首先拉低对应设备的CS/SS信号线,表示选中该设备进行通信;
2)主设备发送同步时钟信号,在主设备和从设备之间建立起同步时钟信号,通过CPOL和CPHA配置来设置空闲时钟状态,数据传输和数据采样所在的时钟沿;
3)主设备将要发送的数据写入发送数据缓存区,数据自动转移到移位寄存器,移位寄存器通过MOSI引脚,将数据一位一位发送给从设备,同时MISO接口接收到从设备移位寄存器发过来的数据;
4)从设备也将自己移位寄存器中的数据通过MISO信号线发送给主设备,通过MOSI信号线接收主设备发送的数据,这样两个寄存器中的内容就实现了交换。

图2 SPI通讯过程
2. SPI通讯安全
若SPI传输的数据是功能安全相关的,则需要启用相关的安全机制,来保证传输数据的有效性,常见的安全机制有以下几种:
1)奇偶校验:数据帧中增加奇偶校验位来校验传输的数据,读操作如果校验不正确,则忽略该帧数据,并重新进行读取操作;写操作如果校验不正确,则忽略该帧数据,或触发中断重新进行写操作;
2)ECC:诊断SPI相关寄存器的内存错误,对于单比特故障,ECC能够修复该故障;对于双比特或多比特故障,则触发中断,进行相关处理;
3)寄存器回读:对于SPI配置相关的寄存器,进行回读,验证配置的正确性;
4)超时检查:设置SPI通信超时时间,通过看门狗或软件定时器实现;
5)Counter:通过增加Counter,判断Counter是否加1,来检测数据帧是否丢失、重复;
6)通道冗余:使用两个独立的SPI通道传输相同数据,接收端对冗余的通道数据进行校验。
3.SPI配置
SPI配置内容总体包括:时钟配置、通道配置、外设配置、Job配置、Sequence配置这几大类,具体配置项如下:
1)SPI时钟
启用SPI对应的时钟门控;
设置系统主频、外设分频等,确保 SPI 外设获得足够频率。
2)SPI通道
数据宽度:一帧数据的宽度,该参数的配置需查看从芯片的芯片手册;
字节序:数据传输的字节序,包括MSB和LSB,该参数的配置需查看从芯片的芯片手册;
3)外设配置
波特率:每秒中可传输的最大bit数,该参数由从芯片决定:不能超过从芯片所定义的最大波特率;
CPOL:时钟空闲时的电平,该参数由从芯片决定,主从芯片需要保持一致;
CPHA:数据采样的时刻,是第一个时钟变化沿采样还是第二个时钟变化沿采样, 该参数由从芯片决定,主从芯片需要保持一致;
4)Job配置
Job由一个或多个的channel组成;Job与片选引脚关联,换句话说与不同的MCU关联,因此同一个job内的channel,将被发送到相同的MCU。
Job优先级:同一个Sequence内的Job发送顺序;
硬件设备:该Job所关联的硬件,也就是该Job会被发送到哪个从芯片;
5)Sequence配置
Sequence由一个或多个Job组成;同一个Sequence内的Job可以配置发送的优先级。
4. 常见错误及故障排查
4.1 片选信号问题
现象:
从设备无响应、返回全0xFF或随机值。
原因:
1)CS引脚未初始化为输出;
2)忘记在通信前拉低CS;
3)通信结束后未拉高CS(导致从设备持续“忙碌”);
4)多从机场景下CS冲突(多个被同时选中)。
检查点:
1)用万用表/示波器确认CS电平变化是否符合预期;
2)检查GPIO配置。
4.2 时钟极性/相位问题
现象:
收到的数据“错位”、高位变低位、数据完全不对。
原因:
模式配置错误,未与从芯片保持一致。
检查点:
1)用逻辑分析仪抓波形,观察数据是在时钟哪个边沿稳定;
2)尝试切换4种模式逐一测试。
4.3 波特率设置过大
现象:
低速正常,高速丢包;偶发性错误。
原因:
超过从设备最大支持频率。

最后,请大家思考及回顾以下问题:
问 | 菊花链是否是SPI通信? |
答 | 菊花链是基于SPI的一种通信技术。 |
问 | SPI的配置工具常用的有哪些? |
答 | EB Tresos、EAS、Davince等。 |

本文从基本概念、软件的配置实现、故障排查三个方面对SPI通信进行了介绍。在实际应用过程中,配置项,通信问题及原因和本文种所列举的内容可能会有出入,但大同小异。


我们功能安全团队成立于2008年,是国内较早从事功能安全技术研究的团队,作为功能安全国家标准委员会成员参与功能安全、预期功能安全标准制定,作为芯片创新联盟核心成员参与车规级自主芯片功能安全国标制定。目前有专职的功能安全技术人员80余人,团队成员大多来自985/211高校,核心项目实施团队拥有8年以上电控产品开发经验,可以提供面向量产车型开发从概念设计到正式投产的全栈功能安全咨询服务,当前已成功为国内外整车及零部件企业提供150+项工程咨询服务。

未来,我们将紧跟行业发展趋势和市场需求,结合自身汽车电子产品研发和国内外咨询实践,一如既往地坚持自主创新道路,为智能汽车安全保驾护航。

如涉及文字或图片侵权请及时与我们联系反馈,文章版权及解释权归原作者及发布单位所有,如需转载或引用文本的任何内容,请注明出处。

✌✌tips:敬爱的读者朋友们,由于微信的推送规则,即使您关注了我们,可能也常常收不到推送,记得点击"HiFusa"名片,设为星标⭐ ,文章会自动推送哦!

杨康 | 作者
董小雨|刘天宇 | 编辑
夏信凯|杨康 | 图片
董小雨|赵宁|邵亮 | 校审
hifusa@hirain.com | 联络/投稿
转发分享!
推荐阅读 · 其他合集
【功能安全基础知识】
【行业观察】
【AI功能安全】
【安全组件设计】
夜雨聆风