AUTOSAR MCAL详解:SPI(1)

14 篇文章 343 订阅

作者:Stephen Du

免责声明: 本文为个人学习笔记及总结,仅代表个人观点,尽可能保证内容准确性。
所有文字均是自己码出来的,所有图片均为自己勾画(除部分来源于原始标准)。
复制/转发请注明来源/作者。

欢迎添加微信交流学习。

在这里插入图片描述

本文将详细介绍AUTOSAR MCAL SPI模块的知识点及注意事项,本模块的配置会在其他文章进行分享。本文大部分内容来源于标准,并参照了NXP S32K1系列的 MCAL SPI的代码。
耐心看完本文后,你就对AUTOSAR MCAL SPI有了非常深入的了解。
内容较长,该模块拆分为两篇来讲。
如对AUTOSAR感兴趣,可添加关注或加好友交流

1. 模块简介

SPI驱动程序给那些通过SPI总线连接的设备提供读写服务。常见的设备,比如EEPROM,外挂Watchdog,或其他一些专用集成电路(ASIC)。当然,SPI驱动程序也提供对片上SPI外设的配置及使用。

驱动程序对功能和配置都划分了多个等级以达到高扩展性及灵活性。比如功能方面,划分为3个等级。根据不同等级可配置为同步或异步。

当然还抽象了很多其他概念,比如Sequence, Job, Channel等。重要概念/关键点请见下图:
在这里插入图片描述

2. 模块限制

  • 只支持Master模式。
  • 只支持全双工模式。
  • LEVEL 2 是为那些需要单独提供至少两路SPI总线的芯片而指定的。 否则,使用这种级别的功能没有意义。
  • 外设时钟初始化及分频由MCU模块负责
  • 如果有寄存器需要和其他外设共享,这种寄存器由MCU负责。

3. 主要概念:Sequence/Job/Channel

在这里插入图片描述

首先需要说明一下这里的Channel是软件层面的,与硬件的物理通道/Channel没任何关系,也没有进行任何绑定。软件层面的这个Channel只是对BUFF做一些配置。

Job是和外设绑定的。所以一个Channel可以同时属于多个Job,如上CH2及CH5。CH2和CH5的区别在于前者是用于不同外设,后者用同一外设。个人不推荐这么使用,因为一旦管理不好,很容易造成buff里面的数据混乱。一个Job也同样可以同时属于多个Sequence,如上Job0 。

一个Job下面可以有多个Channel,如上Job1, Job2,Job3;且应至少有一个Channel,否则没意义,如上Job5是不允许的。这种情况通常是这个Job/Seq有多个用户使用,针对每个用户分配自己独立的Channel。

同样,一个Sequence下面可以有多个Job,如上Seq3;应至少有一个Job,否则 没意义,如上Seq2是不允许的。

同一个Sequence下面的多个Job,他们拥有相同的优先级。

一个外设可有多个Job绑定。

上图可以发现,一个Sequence下面可以有不同外设(总线)的Job。

传输是以Sequence为单位,只能操作Sequence。接收是具体到某个Channel。获取状态或者回调,Job及Sequence都可以(Level1, Level2)。

4. Sequence/Job/Channel发送时序

在这里插入图片描述

如上图所示,发送任务需要等Sequence下面的所有Job及所有Channel都发送完成后,总线才空闲(释放)。

如果多个Job共用一个Channel(Sequence也一样),那么在传输过程中用户需要保证不调用读/写相关函数,否则数据一致性无法保证(数据混乱)。

在传输过程中,读/写函数自己是无法保证数据的完整性的。

允许同时发起多个Sequence传输请求。比如当一个Seq正在传输过程中,允许发起另外的Seq传输请求,但相同的Seq不能同时发起多次。驱动程序会根据当前情况选择接受或拒绝。比如新的Seq与原Seq有共享的Job,这种情况不会接受请求以防止冲突等。

Sequence传输请求是可以被取消的(Spi_Cancel),取消这个操作以Job为原子单位进行处理。取消之后还是会调用回调函数通知用户(如果使能了)。需要注意的是,取消操作是否会对外设造成损坏或其他未定义行为需要用户自己把控,驱动程序是不负责的。

Sequence下面可以包含多个Job,每个Job传输完成后会根据优先级策略(请见后文)重新进行调度。Polling模式下调度是靠用户周期调用Spi_MainFunction 函数来实现的。

  • 30
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
AUTOSARAutomotive Open System Architecture)是一种用于汽车电子系统开发的开放式系统架构。MCAL(Microcontroller Abstraction Layer)是AUTOSAR架构中的一部分,用于抽象底层微控制器硬件的接口和功能。MCAL提供了一组标准化的API(Application Programming Interface),使上层应用程序可以与不同的微控制器硬件进行交互,而不需要关注底层硬件的细节。 在AUTOSAR MCAL中,Fls_Erase函数用于擦除一个或多个Sectors。它的参数包括起始地址和长度,根据这些信息,函数会计算出需要擦除的Sectors,并一次性擦除它们。需要注意的是,起始地址和长度的计算需要避免误擦,确保擦除的范围正确。 另外,AUTOSAR MCAL中的异步请求任务(如读、写、擦除、比较)是由主函数来执行的。主函数需要周期性地被调用,如果有任务需要处理,则执行相应的任务。而获取任务结果的函数用于获取最近一次任务的结果状态,但只能获取最后一个读任务的结果,无法获取之前的写任务的结果。 总之,AUTOSAR MCAL是一种用于汽车电子系统开发的开放式系统架构,其中的MCAL模块提供了对底层微控制器硬件的抽象和标准化接口。Fls_Erase函数用于擦除Sectors,而异步请求任务的执行和结果获取则由主函数来处理。 #### 引用[.reference_title] - *1* *2* *3* [AUTOSAR MCAL详解:FLS](https://blog.csdn.net/jsls135/article/details/115231597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值