AUTOSAR MCAL SPI

  • AUTOSAT SPI
  • SPI物理层介绍
  • SPI 在AUTOSAR的配置主要参数
  • SPI EB配置参数
  • AUTOSAT SPI

    以下内容基于标准AUTOSAR文档以及EB Tresos工具说明

    SPI物理层介绍

    SPI,Serial Peripheral interface,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HCXX系列处理器上定义的。
    

    SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200。

    SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

    优点:支持全双工通信、通信简单、数据传输速率快;

    缺点:没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据的可靠性上有一定的缺陷。

    SPI物理层
    SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时),这四根线分别是MISO、MOSI、SCLK、CS。

    备注:
    常见的SPI主要是3线SPI,4线DSPI,6线QSPI,具体可百度搜索,此文主要讲4线DSPI


    CS:控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(一般默认为低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。也就是说:当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低。

    MISO/MOSI/SCLK:通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,MISO,MOSI则基于此脉冲完成数据传输。数据输出通过MOSI线,数据在时钟上升沿或下降沿时采样,同时也会有返回数据用于接受。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。下图是SPI通信的一个简单例子:

    SPI通信模式
    SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的,但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式。

    时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿:

    CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时;

    CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时;

    CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿;

    CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿。

    在高电平有效状态时,第一边沿为上升沿,第二边沿为下降沿;在低电平有效状态时,第一边沿为下降沿,第二边沿为上升沿。

    具体四种模式如下:

    CPOL = 0,CPHA = 0

    时钟高电平时为有效状态,时钟上升沿(第一个边沿)采样。

    CPOL = 0,CPHA = 1

    时钟高电平时为有效状态,时钟下降沿(第二个边沿)采样。

    CPOL = 1,CPHA = 0

    时钟低电平时为有效状态,时钟下降沿(第一个边沿)采样。

    CPOL = 1,CPHA = 1

    时钟低电平时为有效状态,时钟上升沿(第二个边沿)采样。

    SPI内部工作机制
    SPI可分为主、从两种模式,并且支持全双工模式,所以这也就导致STM32的SPI接口比较复杂。比如:配置SPI为主模式、配置SPI为从模式、配置SPI为单工通信、配置SPI为双工通信等等。下图为SPI工作框图和单从机工作模式的总线连接图:

    主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。串行移位寄存器通过MOSI信号线将字节传送给从机,同时从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

    SPI是一个环形总线结构,由CS、SCLK、MISO、MOSI构成,其时序其实很简单,主要是在SCLK的控制下,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

    假设主机的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候,主机将会通过MOSI信号线传输给从机最高位1,自身寄存器变成0101010x。同时,MISO信号线会从从机处返回一个数据给主机,那么这时寄存器为0101010MISO,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个SPI时序。

    主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。也就是说,当上升沿主机发送数据的时候,从机也发送了数据。所以为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位。

    SPI 在AUTOSAR的配置主要参数

  • 波特率
    SPI为主从模式,波特率需要小于从芯片的最大波特率设置

  • 极性相位
    初始状态为高电平,那么 Leading 就是它的第一个上升沿;
    初始状态为低电平,那么 Leading 就是它的第一个下降沿。

  • CS使能电平
    数据有效是的电平状态

  • CLK Idle电平
    数据无效时的电平状态

  • 数据大小端
    MSB/LSB

  • 数据位宽
    8bit,16bit,32bit需要看从芯片支持模式

  • 数据长度
    根据所协议去设定数据长度

  • CS2CLK时间
    按datasheet设置,否是可能通信失效

  • CLK2CS时间
    按datasheet设置,否是可能通信失效

  • CS2CS时间
    按datasheet设置,否是可能通信失效

  • SPI通信模式(同步 or 异步)
    从物理层面SPI通信都是同步机制,此处设置是设置软件层面的同步和异步通信模式:同步就是软件等SPI收发完成,才能执行其他命令;异步是软件发起SPI通信请求,由硬件(可能使用DMA)去搬运收发数据,收发完成产生中断,建议数据量较大的时候使用。

  • Buffer模式(IB or EB)
    IB为SPI内部寄存器Buffer,存储数据量较小
    EB为使用SysRAM存储Buffer,所有的SPI通信都可以设置为EB模式。

  • SPI EB配置参数

  • SpiChannel
  • SpiExternalDevice
  • SpiJob
  • SpiSequence
  • 通常情况下下,上面几个配置组每块芯片配置一个组就可以,在使用的使用会使用Channel和Sequence的Index去设置和调用Spi函数。

    遇到一些标准的代码厂商也会在一个ExternalDevice下配置多个Channel&Sequence,如Vector 的EEPROM模块,其实就是把SPI发送从芯片的寄存器和数据分开配置,实际上和所有的配置成一一对应的没有区别。

    最后:如果需要可以私信我分享代码使用示例。

    物联沃分享整理
    物联沃-IOTWORD物联网 » AUTOSAR MCAL SPI配置指南

    发表评论