AUTOSAR架构的CAN通讯
原文地址:AUTOSAR架构的CAN通讯 (qq.com)https://mp.weixin.qq.com/s/C_C9pX87CpdZFTFmhajoIA
1. AUTOSAR概念
关于AUTOSAR概念之类的内容不在此展开,权威资料请参见AUTOSAR官网。
引自:AUTOSAR
AUTOSAR (AUTomotive Open System ARchitecture) is a worldwide development partnership of vehicle manufacturers, suppliers, service providers and companies from the automotive electronics, semiconductor and software industry.
宏观地介绍可参见:autosar.org/fileadmin/A
2. AUTOSAR软件分层架构
AUTOSAR架构在三个软件层之间划分出最高的抽象层:应用层(Application Layer, ASW),运行时环境(Runtime Environment, RTE)和底层软件(Basic Software, BSW),三者均在微控制器上运行。这里我们主要关注的是底层软件,它进一步分层为:服务层,ECU抽象层,微控制器抽象层和复杂驱动,如图1所示。
图1 AUTOSAR架构,引自[1]
每层按功能组继续划分,如图2所示。
图2 基于功能划分的AUTOSAR架构,引自[1]
本系列文章的主题是CAN通讯,即属于通讯功能,对该功能再按模块细分,如下图3所示。其中CAN通讯的核心模块有4个:COM模块,PDU Router模块, CAN Interface模块和CAN Driver模块。
图3 AUTOSAR通讯模块,引自[1]
3. CAN接收
回顾之前文章 menghuyouyou:CAN通讯系列--CAN总线基础3 ,根据ISO 11898-1标准可知,CAN接收功能需要使用通知(Indication)服务,那么怎么基于AUTOSAR架构实现呢?总的来说,AUTOSAR架构的CAN接收的软件实现流程图如下图4所示:
图4 CAN接收的流程图
具体过程描述如下:
BSW调度器周期性调用CAN Driver模块的Can_MainFunction_Read函数;
CAN Driver模块的Can_MainFunction_Read函数将访问CanController(硬件)的寄存器,如前面文章所述的仲裁寄存器,数据寄存器和数据长度寄存器,并读取这些寄存器的数据;
数据读取结束后,这时继续调用CAN Interface模块的CanIf_RxIndication函数,这样数据从CAN Driver模块传给了上一层的CAN Interface模块;
CAN Interface模块再调用PduR模块的PduR_RxIndication函数,将数据传到PduR模块;
PduR模块路由到Com模块,调用Com_RxIndication函数,将数据传到Com模块,Com模块将会把数据存入其缓存,供应用层软件读取使用。
上述第2步为什么需要读取仲裁寄存器,数据寄存器和数据长度寄存器?这是因为ISO 11898-1标准规定了LLC数据帧的格式(id,数据长度和数据3段),当然还需要根据对应的芯片手册定义来访问其他的寄存器,最终保证读取数据的有效性。
另外再根据ISO 11898-1标准说明本文及之后内容,如下图5的红线之上部分。上述的4个核心模块,除了CAN Driver能够访问或配置硬件,其他模块均不能。它们之间将通过数据协议单元(PDU)形式实现数据传输,这些内容后面文章会进行详细介绍。
图5 协议层交互,引自ISO11898-1
4. CAN发送
CAN发送功能需使用请求(Request)服务和确认(Comfirmation)服务,AUTOSAR架构的CAN发送功能如下图6、7所示。
图6 CAN发送的流程图
图6描述了数据发送的具体过程,即:
BSW调度器周期性调用Com模块的Com_MainFunction_Tx函数,Com模块将从其缓存器中读取需发送的数据;
Com模块的Com_MainFunction_Tx函数将调用PduR模块的PduR_ComTransmit函数,将数据传给PduR模块;
PduR模块路由到CAN Interface模块,调用CanIf_Transmit函数,这样数据从PduR模块传给了下层的CAN Interface模块;
CAN Interface模块再调用Can Driver模块的Can_Write函数,将数据写入相应的寄存器;
与CAN接收功能一样,Can_Write函数将访问仲裁,数据长度和数据寄存器,将数据写入。
图7描述了数据发送后的确认过程,即:
BSW调度器周期性调用CAN Driver模块的Can_MainFunction_Write函数;
CAN Driver模块的Can_MainFunction_Write函数将访问CanController(硬件)有关寄存器,读取有关数据供向上层确认;
数据读取结束后,这时继续调用CAN Interface模块的CanIf_TxComfirmation函数,这样数据从CAN Driver模块传给了上层的CAN Interface模块;
CAN Interface模块再调用PduR模块的PduR_TxConfirmation函数,将数据传到PduR模块;
PduR模块路由到Com模块,调用Com_TxConfirmation函数,确认发送状态。
图7 CAN发送确认的流程图
5. 小结
CAN发送和接收暂时留下了非常多的概念和内容未做解释,本文主要目的在于让大家很迅速地了解AUTOSAR架构下的CAN接收与发送的软件实现过程,先有一个大致的理解就行。
当然对于没有接触过AUTOSAR知识的人来说很陌生,上述内容很抽象,很难懂。因为这些内容都来源于下图8所示的AUTOSAR文档,所以想要掌握AUTOSAR架构的CAN通讯,则不得不去认真研读这些文档,当然最好能结合实际的项目代码或者能使用AUTOSAR配置工具。
图8 CAN通讯有关的AUTOSAR文档
为了让大家明白上述内容,了解这些AUTOSAR文档,接下来的文章将会借助这些文档尽可能详细地介绍AUTOSAR的CAN通讯软件实现。
AUTOSAR架构的CAN通讯相关推荐
- AUTOSAR架构的CAN通讯学习(一)——整体概述
本文是针对链接中文章的学习笔记https://mp.weixin.qq.com/s?__biz=MzUyODA2MjkyNA==&mid=2247490026&idx=1&sn ...
- autosar中com模块_AUTOSAR架构的CAN通讯
原标题:AUTOSAR架构的CAN通讯 1. AUTOSAR概念 关于AUTOSAR概念之类的内容不在此展开,权威资料请参见AUTOSAR官网. 引自:AUTOSAR AUTOSAR( AUTomot ...
- autosar can协议栈 源码解读_AUTOSAR架构的CAN通讯
宏观地介绍可参见:autosar.org/fileadmin/A 2. AUTOSAR软件分层架构 AUTOSAR架构在三个软件层之间划分出最高的抽象层:应用层(Application Layer, ...
- tms570 can 接收大量数据_CAN通讯系列--AUTOSAR架构的CAN Interface7
上篇文章简介了AUTOSAR架构的CAN Driver模块,本文将更进一步,来了解CAN Driver模块对接的唯一上层模块--CAN Interface. 9 CAN interface CAN I ...
- “使用达芬奇软件实现Autosar架构:配置和注意事项“
Autosar (Automotive Open System Architecture) 是一种开放式的汽车电子系统架构.它通过规范化电子控制单元 (ECU) 之间的通讯和软件架构,以实现不同厂商之 ...
- AUTOSAR架构的故事(干货)
本文来源于"嵌入式软件实战派". 1 AUTOSAR架构概览 之前文章<老板说项目要上AUTOSAR,我慌得一批>讲过,在新世纪,汽车产业蓬勃发展,欧洲大陆的车企们,瞄 ...
- AUTOSAR架构概述
AUTOSAR整体思路概述 一.总体概述 AUTOSAR是Automotive Open System Architecture(汽车开放系统架构)的首字母缩写,是一家致力于制定汽车电子软件标准的联盟 ...
- 读懂Adaptive Autosar架构-入门篇
虽然现在绝大多数的量产车主要还是一个代步工具以满足我们的出行需求,而与我们的信息娱乐生活所分离,在未来汽车将与我们的日常息息相关.想要达到这一目标汽车E/E架构和软件架构将会有巨大的革新.本文的前部分 ...
- AUTOSAR架构的通信系统研究
#AUTOSAR架构的通信系统研究 参考 Classic Autosar 专栏; AUTOSAR 专栏 1; AUTOSAR 专栏 2; AUTOSAR架构深度解析从入门到放弃; AUTOSAR 专栏 ...
最新文章
- 第七章——DMVs和DMFs(2)——用DMV和DMF监控索引性能
- 经典PV操作问题 [转]
- sklearn快速入门教程 -- 机器学习工具的快速入门指引
- 相当于零负担的延时程序(转)
- Vue使用jsPdf将页面导出成pdf文件
- vagrant网站中box下载方法
- mysql相关命令操作
- es6 async函数实例:按顺序完成异步操作
- 在'for'循环中获取索引
- awk命令详解_python学习之利用urllib和urllib2访问http的GET/POST详解
- 安装Office2007
- 转: Protobuf 的 proto3 与 proto2 的区别
- 瑞星力荐金山毒霸 原来是广告程序 作崇
- JDK官网下载历史版本
- 差分脉冲编码调制(DPCM)编码过程详解
- [状压DP]帮助Bubu
- 2018/7/9日~年中总结
- 2015-10-28 C#4
- 空间句法插件Axwoman 6.3安装教程
- 幂律分布参数估计幂律分布公式计算
热门文章
- 中国婴幼儿早教市场规模逐年攀升,未来发展潜力巨大
- 方差计算公式的变形及应用
- 什么是PSE认证,菱形和圆形的区别是什么
- 一元线性回归的详细推导过程
- 血与泪!eclipse 打包 三方jar
- 【Container讲师专访】CloudStack+Docker构建云端信息安全实验场,i 春秋的容器落地实践...
- scipy,weibull_min中文翻译(也就是一般的weibull分布,可以通过改变参数设置为三参数或者两参数。)
- 计算机等级考试二级哪个科目比较容易过?看看学长怎么说
- matlab机器人工具箱的使用(5)
- Vmware核心处理器及内核数量相关概念