宏观地介绍可参见: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通讯相关推荐

  1. autosar can协议栈 源码解读_我用一晚上时间给女朋友讲懂CAN总线的AUTOSAR网络管理...

    前言:最近正好在学习CAN总线的AUTOSAR网络管理,前期踩了很多的坑,总结了一下最近所学和大家一起学习.学的很浅,有不正确的地方请各位前辈同仁不吝赐教~ 1.什么是AUTOSAR? 官方一点:AU ...

  2. Linux内核网络协议栈:udp数据包发送(源码解读)

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  3. Python源码解读之零 Python源码整体架构

    今天打算开一个新的系列,本系列将和大家一起对Python的源码进行分析,有参考陈儒的<Python 源码剖析>(强烈推荐这本书),做到知其然知其所以然. 总体架构 首先我们先从总体结构看一 ...

  4. Feflow 源码解读

    Feflow 源码解读 Feflow(Front-end flow)是腾讯IVWEB团队的前端工程化解决方案,致力于改善多类型项目的开发流程中的规范和非业务相关的问题,可以让开发者将绝大部分精力集中在 ...

  5. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  6. jdk1.8.0_45源码解读——Map接口和AbstractMap抽象类的实现

    jdk1.8.0_45源码解读--Map接口和AbstractMap抽象类的实现 一. Map架构 如上图: (01) Map 是映射接口,Map中存储的内容是键值对(key-value). (02) ...

  7. KClient——kafka消息中间件源码解读

    目录 kclient消息中间件 kclient-processor top.ninwoo.kclient.app.KClientApplication top.ninwoo.kclient.app.K ...

  8. Hadoop源码解读系列目录

    Hadoop源码解读系列 1.hadoop源码|common模块-configuration详解 2.hadoop源码|core模块-序列化与压缩详解 3.hadoop源码|core模块-远程调用与N ...

  9. jdk1.8.0_45源码解读——Set接口和AbstractSet抽象类的实现

    jdk1.8.0_45源码解读--Set接口和AbstractSet抽象类的实现 一. Set架构 如上图: (01) Set 是继承于Collection的接口.它是一个不允许有重复元素的集合. ( ...

最新文章

  1. 揭开AI产品PRD的面纱,浅谈其和互联网产品PRD的异同
  2. 内存溢出,频繁full gc 处理思路
  3. php重定义地址栏url,thinkphp框架实现路由重定义简化url访问地址的方法分析
  4. 从零构建一个图像分类项目 -- 代码
  5. CSS布局相关基本概念
  6. c4d在运行时候显示计算机内存不足,打开c4d电脑电脑卡死怎么办
  7. android 蓝牙转串口_android蓝牙串口通讯
  8. 斗地主游戏发牌C#程序
  9. 三菱FX3U源码在V10.5的基础上增加了禁止上传功能
  10. Java8 拉姆达与集合中对象处理方式记录
  11. Android画图方式
  12. 数据分析师三个等级_数据分析课|这三个等级的数据分析师报考条件,一定是你需要的...
  13. 原生JS实现任意数据的动态表格
  14. 计算机音乐野狼,野狼disco(hook部分)单轨调教用
  15. cad捕捉不到标注线上的点_CAD为什么捕捉不到正在绘制的多段线上的点?
  16. 神武服务器物品开放,《神武4》宠物携带等级规则调整限服测试 生存大挑战等玩法优化全服开放...
  17. 力扣解法汇总537-复数乘法
  18. 使用python快速查看hdf5文件
  19. 大一c语言课程设计答辩ppt,c语言课程设计讲解内容图文.ppt
  20. JDK1.8(jdk8)的下载与安装

热门文章

  1. android view.measure的用法,自定义View--View的measure过程
  2. 2018 BMCV 《BAM: Bottleneck Attention Module》Pytorch实现
  3. 【CSDN 特稿】360 VS QQ:一场精心策划的西安事变
  4. python入门可以接私活_第一次接私活亲身经历
  5. 以攻促防:企业蓝军建设思考
  6. PrimeTime PX(Power Analysis) userguide阅读笔记
  7. 食用香精香料行业现状调研及趋势分析报告
  8. linux RPM-GPG-KEY-6 错误解决方法
  9. Jenkins:(看起来挺好看的)邮件模板样式
  10. plsql连接远程oracle(简易客户端)