文章目录
0. 前言
按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。
在嵌入式系统设计中,SPI(Serial Peripheral Interface)是一种广泛使用的同步串行通信协议,它以其简单高效的特点在微控制器与外围设备之间架起了高速数据传输的桥梁。本文旨在深入探讨SPI通讯的工作原理、关键特性及其在现代嵌入式系统中的应用。
1. 工作原理
SPI是一种全双工(即同时发送和接收数据)的同步串行通信总线,最初由摩托罗拉(Motorola)开发,现已成为行业标准。其基本架构基于四根信号线:
- SCLK(Serial Clock):时钟信号,由主设备产生,用于同步数据的发送和接收。
- MOSI(Master Out Slave In):主设备的输出,从设备的输入,用于主设备向从设备发送数据。
- MISO(Master In Slave Out):主设备的输入,从设备的输出,用于从设备向主设备发送数据。
- SS(Slave Select,或称为CS_N):芯片选择信号,由主设备控制,用于选择与哪个从设备进行通信。
这里需要说明下,这四根信号线中只有SCLK是必须的,其余3条线都可以根据实际情况进行裁剪。
上图信号线说明:SPISIMO=MOSI, SPISOMI=MISO, SPISCS=SS, SPICLK=SCLK
2. 模式与配置
在SPI(Serial Peripheral Interface)通讯中,CPOL和CPHA是两种重要的配置参数,它们共同决定了SPI通信的模式,影响着数据传输的时序和同步。
2.1 CPOL (Clock Polarity)
CPOL定义了SPI时钟信号SCLK在空闲状态时的电平。它有两种状态:
- CPOL = 0:这意味着在没有数据传输时,SCLK信号线处于低电平。当开始数据传输时,SCLK会切换到高电平。
- CPOL = 1:这表示在没有数据传输时,SCLK信号线处于高电平。数据传输开始时,SCLK会切换到低电平。
2.2 CPHA (Clock Phase)
CPHA确定了数据采样和传输相对于SCLK边沿的位置。它也有两种状态:
- CPHA = 0:数据在SCLK的第一个边沿(无论是上升沿还是下降沿,取决于CPOL的状态)被采样。换句话说,数据的有效边沿发生在时钟的第一次跳变。
- CPHA = 1:数据在SCLK的第二个边沿被采样。这意味着数据的有效边沿发生在时钟的第二次跳变,即在SCLK完成一次完整的周期后。
2.3 组合模式
根据CPOL和CPHA的不同组合,SPI通讯可以分为四种模式:
- Mode 0 (CPOL=0, CPHA=0):时钟在空闲时为低电平,数据在时钟的上升沿被采样,在下降沿被移出。
- Mode 1 (CPOL=0, CPHA=1):时钟在空闲时为低电平,数据在时钟的下降沿被采样,在上升沿被移出。
- Mode 2 (CPOL=1, CPHA=0):时钟在空闲时为高电平,数据在时钟的下降沿被采样,在上升沿被移出。
- Mode 3 (CPOL=1, CPHA=1):时钟在空闲时为高电平,数据在时钟的上升沿被采样,在下降沿被移出。
在配置SPI通信时,主设备和从设备必须设置相同的CPOL和CPHA值,以确保数据正确地被发送和接收。否则,数据传输将失败,因为双方将在不同的时钟边沿期望数据。因此,理解和正确设置这些参数对于建立可靠的SPI通信至关重要。
3. 特性与优势
SPI的主要优势包括:
- 高速传输:相比其他串行协议,SPI提供了更高的数据传输速率(>10Mbps),适合于高速数据交换场景。
- 全双工:同时支持数据的发送和接收,提高了通信效率。
- 简单的硬件接口:仅需四根线即可实现复杂的通信任务,节省了微控制器的管脚资源。
- 多设备支持:通过独立的SS信号,可以轻松地在同一个SPI总线上连接多个从设备。
4. 在自动驾驶汽车中的应用
在NVIDIA Orin系列模块中,SPI(Serial Peripheral Interface)通讯协议的使用提供了模块与外部设备之间的一种高速、全双工的串行数据传输方式。以下是SPI通讯在Orin中的应用情况概述:
SPI接口数量:
- Jetson AGX Orin SOM(System-on-Module)提供了3个通用的SPI总线(SPI1、SPI3和SPI6),这使得设计者可以连接多个SPI设备,而无需担心资源竞争。
SPI控制器特性:
- 主控和从设备模式:SPI控制器支持主控和从设备模式,允许Jetson AGX Orin既可以作为SPI总线的主控设备,也可以作为从设备工作,增加了其在不同应用中的灵活性。
- 独立的FIFO:每个SPI接口都有独立的接收和发送FIFO,这有助于数据的缓冲和管理,减少了CPU的干预,提高了数据传输的效率。
- 软件控制的位长度:支持从4位到32位的软件可控数据包大小,适应不同设备的数据传输需求。
- 打包模式支持:对于特定的位长度,如4位、8位、16位和32位,提供了打包模式的支持,简化了数据的封装和解封过程。
- 芯片选择控制:CS_N(Chip Select)信号既可以由软件控制,也可以由硬件自动生成,这提供了更灵活的设备管理和控制。
- 同时收发:支持同时接收和发送数据,实现了真正的全双工通信。
SPI6特殊模式:
- SPI6支持的模式相对有限,仅支持Mode 0,且为半双工模式,这意味着在同一时间只能进行数据的发送或接收,不支持同时进行。
- SPI6还支持单数据速率(SDR)模式,以及SPI×1和SPI×2的双模式,但这些模式均为半双工操作。
应用实例:
- 传感器读取:SPI常用于与各种传感器(如温度、湿度、压力传感器)进行通信,以收集环境数据。
- 存储器接口:SPI可以用来与非易失性存储器(如EEPROM、Flash)以及某些类型的RAM进行通信。
- 设备配置:用于配置和读取外部设备的参数,如网络模块或电源管理单元的设置。
- 通信扩展:在需要多个设备的情况下,SPI可以作为一个扩展通信链路,连接多个从设备。
5. 结论
SPI通讯以其独特的同步串行机制,成为嵌入式系统设计中不可或缺的一部分。通过对SPI协议的深入了解和合理应用,可以显著提升系统的性能和响应速度,特别是在需要高速数据交换的场合。随着嵌入式技术的发展,SPI将继续发挥其重要作用,促进智能设备的创新与进步。