AUTOSAR MCAL系列之SPI通信

2021年5月5日
评论
393

 

SPI接口在微控制器和外围设备芯片间传输应用广泛,且较为晦涩,所以整理分享,供大家学习参考。本文从属于Mcal系列。

0  什么是SPI?

SPI(Serial Peripheral interface)是Motorola公司推出的串行外围设备接口,是一种高速的,全双工,同步的通信总线,在芯片管脚有四根线:SCLK,MISO,MOSI,CS。
文末附1有单工、半双工和全双工的区别阐述当然,文末还有其他福利。

AUTOSAR MCAL系列之SPI通信

SPI总线主要应用在EEPROM,FLASH,实时时钟,AD转换器,以及数字信号处理器和数字信号解码器之间。SPI在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局节省了空间,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。

下图为SPI 的内部简明图。
AUTOSAR MCAL系列之SPI通信
MISO:主设备数据输入,从设备数据输出。
MOSI:主设备数据输出,从设备数据输入。
SCLK:时钟信号,由主设备产生。
CS:从设备片选信号,由主设备控制。当从设备的片选被拉低的时候,才能从SPI总线上获取数据信息。(注意:SS或CS都表示片选,SS: Slave Select,CS:Chip Select)

1  SPI 特点

SPI通信采用主从模式,主要特点如下:

  • 可同时发出和接收串行数据;

  • 可以当作主机或从机工作;

  • 主机发送时钟频率可编程控制;

  • 有发送结束中断标志;

  • 写冲突保护;

  • 总线竞争保护;

 

AUTOSAR MCAL系列之SPI通信

SPI的优点是支持高速、同步、全双工、非差分、总线式通信。缺点是并没有明确的流控制,也没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。

2  物理连接方式

SPI硬件上有一个SPI_DR寄存器和两个缓冲器(发送缓冲器和接收缓冲器),主模式:SPI_DR会先从发送缓冲器读出数据,然后通过MOSI引脚一位一位地将数据发出去,在发送的过程中,SPI_DR的数据会左移(如果是高位先发送),并且会从MISO引脚读入数据填补SPI_DR左移后的空缺。传输数据后,SPI_DR再把数据并行写入接收缓冲寄存器。

AUTOSAR MCAL系列之SPI通信

SPI主从设备两端都有一个移位寄存器,数据在移位寄存器上通过逐位移动来实现同步双工通信,在主机发送数据的同时也会收到从机发来的数据。需要注意的是传输过程是通过主机写入一个需要发送的数据开始。
如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。发送结束可以设置中断。

SPI通信的模式

SPI通信的从设备在出厂时被配置成某种模式,从设备无法变更。通信双方的通信模式要一致才能正常通信,我们只能配置主设备的通信模式。

CPOL:clock polarity,时钟极性。
CPHA:clock phase,时钟相位。
时钟极性( CPOL):
CPOL用于定义时钟信号在空闲状态下处于高电平还是低电平,为1代表高电平,0为低电平。时钟极性对传输协议没有重大影响,只是规定了串行同步时钟在空闲时的电平为高还是为低。

时钟相位( CPHA):

在同步接口中,肯定存在一个接口时钟,用来同步采样接口上的数据。CPHA就是用来定义数据采样在第几个边沿的,数据的采样时刻。1代表第二个边沿采样,为0代表第一个边沿采样。

SPI通信模式是通过CPOL和CPHA来控制主设备的通信模式。

通过配置极性和相位为0或1,可配置成为4种不同的传输时序:极性为0,时钟空闲为低电平,反之为高;相位为0,据在第一个时钟跳变沿被采集,为1的话在第二个跳变沿被采集。

如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样。
如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。

时钟相位主要是在设置数据在什么时候改变和什么时候被采样。

在配置SPI模块时,SPI 主机和从设备时钟相位和极性应该一致。

AUTOSAR MCAL系列之SPI通信

CPOL=0,CPHA=0:

此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:

此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是 SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

AUTOSAR MCAL系列之SPI通信

CPOL=1,CPHA=0:

此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:

此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是 SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

数据帧格式:可软件设置MSB或LSB哪个在先(SPI_CR1寄存器中LSBFIRST位),也可设置输入输出数据帧是8位或者16位(SPI_CR1寄存器DFF位)。
需要注意的是,根据SPI被配置成主或者从模式,MIMO和MOSI引脚的功能会自动改变,实现发送和接收的切换。

附1:单工、半双工和全双工的区别

单工数据传输只支持数据在单一方向上传输,即同一时间只有一方能接受或发送信息,不能实现双向通信,如电视、广播。
半双工数据传输允许数据在两个方向上传输,但在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。在同一时间只可以有一方接受或发送信息,可以实现双向通信。如对讲机。

AUTOSAR MCAL系列之SPI通信

全双工数据通信允许数据同时在两个方向上传输,即全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信。如电话通信。

weinxin
扫码关注公众号
关注公众号领精彩彩蛋!
自动驾驶汽车中E/E架构开发的要求 汽车技术

自动驾驶汽车中E/E架构开发的要求

对于开发下一代自动驾驶汽车的工程师来说,确认全新E/E架构的需求是一项艰巨的挑战。当今车辆的日益复杂化已是一种被广泛认同的趋势,车辆互联、自动驾驶等功能也逐渐在落地,且强大、更复杂功能也正在路上。在整...
万字长文趣味解读整车OTA,建议收藏! 汽车技术

万字长文趣味解读整车OTA,建议收藏!

本文共三大章节,分别为整车OTA为什么困难重重、整车OTA需要注意些什么、uboot介绍,字数接近二万五千字,建议收藏阅读。 第1篇 整车OTA为什么困难重重 什么是汽车OTA 首先,我们先来看看各位...
汽车HMI设计原则 汽车技术

汽车HMI设计原则

汽车制造商必须为汽车显示屏选择正确的设计原则,否则分心驾驶将达到新的水平 近几年,车载大屏设计越来越受到车企的青睐,比如,梅赛德斯-奔驰)凭借其全新的全宽仪表盘显示器MBUX超屏吸引了大量关注。几乎所...
AutoSar模式管理总揽 汽车技术

AutoSar模式管理总揽

介绍下AUTOSAR中的模式管理(Mode Manager)的机理。了解模式管理之前,先解释下三个重要的概念:模式、状态和阶段。 Mode(模式) 模式是运行在车辆中的各种状态机(不仅仅是ECU状态管...

发表评论