Autosar SPI规范简读

Autosar SPI 概述

  • 基础知识介绍
    在AutoSar标准中,与SPI通讯相关的三个术语:Channel、Job和Sequence。
    1个Channel对应1个发送缓冲区和1接收缓冲区;1个Job对应着1次SPI通讯发送的内容(既SPI 一次片选过程所传输的内容)。1个Sequence 对应着1个SPI通讯序列(job序列)。多个Job可以分配给一个Sequence。
    关于每个术语的详细解释,参考AutoSar标准。SPI通讯是基于Sequence触发的,即使发送1个Job也要将该Job分配给1个队列,然后通过触发Sequence来实现Job的传输。

  • 两种使用方法
    方法1: 对应1个SPI外设芯片,分配1个Job、1个Sequence。使用此种方法,触发一次Sequence,只能传输一个Job,当对外设发送多个Job时,需要多次触发Sequence,且在下一次触发Sequence时,必须确保上一次Sequence已经传输完毕,否则下一次Sequence传输会因为上一次Sequence传输占用SPI总线而失败。
    方法2:对应1个SPI外设芯片,结合对外设芯片的控制方法,分配多个Job和多个Sequence,有目的分配Job到相应的Sequence中。在不同控制逻辑中,触发不同的Sequence,传输不同个数的Job序列。当对1个Sequence分配多Job时,触发此Sequence就可以完成多个Job的传输,SPI 驱动本身来保证Job序列的传输,不会产生下一个Job传输因为上一个Job占用SPI总线而失败的情况。
    对外设传输多个Job时,使用方法2可以降低CPU使用率。
    在这里插入图片描述

  • Channel、Job、Sequence
    AUTOSAR 提供了三种SPI的抽象。Channel Job Sequence。
    一张图可以说明三者的关系。

  • 同步调用与异步调用
    AUTOSAR 为SPI 提供了两种方式通信的接口。
    同步调用 Spi_SyncTransmit
    异步调用 Spi_AsyncTransmit
    同步调用,是需要等待返回调用结果,而异步调用这是发起任务,一般可以通过回调函数来告知调用结果。

数据类型定义

1. Spi_ConfigType结构体

  • Channel配置包含:
    1. EB/IB buffer的使用情况
    2. 传输位宽 (1~32bits)
    3. 传输数据个数
    4. 传输字节序LSB/MSB
    5. 传输的默认值

  • Job配置包含:
    1. 使用哪个SPI硬件实例
    2. 使用该实例的哪个片选引脚cs
    3. 片选功能是否启用
    4. 片选高/低有效
    5. 波特率
    6. clock 和 chip select之间的时间
    7. 时钟在空闲时是高/低
    8. 数据传输在上升沿/下降沿
    9. 优先级(低0~3高)
    10. Job完成的通知函数
    11. MCU相关的属性(可选)
    12. Channels(至少1个)

  • sequence配置包含:
    1. Jobs (至少1个)
    2. 在每个Job完成后是否产生中断
    3. Sequence完成的通知函数

部分API函数

void Spi_Init( const Spi_ConfigType* ConfigPtr )
 1. 初始化所有ConfigPtr相关寄存器
 2. 定义ConfigPtr相关的默认值
 3. 设置SPI状态为“IDLE”,job、sequence的状态设为“ok”
 4. 对于Level2,异步模式设为polling,禁用spi相关中断

Std_ReturnType Spi_DeInit( void )
 1. 如果驱动状态不是BUSY,将spi外设置为复位上电后的状态
 2. 如果驱动状态是BUSY,请求被拒绝
 3. 去初始化后,模块的状态是UINIT

Std_ReturnType Spi_WriteIB( Spi_ChannelType Channel, const Spi_DataBufferType* DataBufferPtr )
 1. 返回值:E_OK:该命令被接受,E_NOT_OK:该命令被拒绝。
 2. 将入参数据写入对应channel的内部缓存
 3. 如果入参DataBufferPtr为NULL,将传输默认值

Std_ReturnType Spi_ReadIB( Spi_ChannelType Channel, Spi_DataBufferType* DataBufferPointer )
 1. 返回值:E_OK:该命令被接受,E_NOT_OK:该命令被拒绝。
 2. 同步读取一条或多条数据
 3. 应该在Transmit后调用,以获取相关数据

Std_ReturnType Spi_SyncTransmit( Spi_SequenceType Sequence )
 1. 返回值:E_OK:该命令被接受,E_NOT_OK:该命令被拒绝。
 2. 在SPI总线上传输数据
 3. 驱动状态设为“BUSY”
 4. Sequence、Job状态设为“PENDING”
 5. 此时如果有其他Sequence正在传输,应该返回 E_NOT_OK,并上报错误。

Spi_StatusType Spi_GetStatus( void )
 1. 获取驱动状态

  • 16
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SPI(Serial Peripheral Interface)是一种串行外设接口,用于在微控制器、存储器和其他外设之间进行通信。AUTOSARAutomotive Open System Architecture)是一种在汽车电子系统中广泛应用的标准化软件架构。 AUTOSAR SPI传输是指在AUTOSAR架构中使用SPI接口进行数据传输。SPI传输在汽车电子系统中具有重要作用,可用于连接各种外设,如传感器、执行器和存储器等。SPI接口通过主从模式进行通信,其中一个设备作为主设备控制通信过程,而其他设备则作为从设备接收和发送数据。 在AUTOSAR架构中,SPI传输通常是通过驱动程序来实现的。驱动程序负责配置和控制SPI接口的各种参数,如时钟频率、传输位数和传输模式等。SPI传输的数据可以是单向的,主设备向从设备发送数据,也可以是双向的,主设备和从设备之间进行数据的双向传输。 AUTOSAR SPI传输的主要优点包括高速传输、可靠性和灵活性。SPI接口可以以高速率进行数据传输,适用于对实时性要求较高的应用场景。此外,SPI传输也具有较低的传输延迟和较小的系统开销。AUTOSAR架构还允许SPI接口的配置和扩展,以满足不同外设的需求。 然而,AUTOSAR SPI传输也面临一些挑战。首先,SPI接口不具备数据包传输机制,需要在协议层上进行数据包的封装和解析。其次,SPI传输的线路长度受限,通常适用于近距离的设备连接。最后,SPI传输也存在数据安全性和冲突的问题,需要在设计阶段进行充分考虑。 总之,AUTOSAR SPI传输是一种在AUTOSAR架构中使用SPI接口进行数据传输的方法。它可以实现高速、可靠和灵活的数据传输,广泛应用于汽车电子系统中。对于开发人员来说,了解和理解SPI传输的原理和使用方法,对于设计和实现汽车电子系统具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值