目录

1 概述

2 流程

2.1 接收流程

2.2 发送流程

2.3 确认服务


通信架构介绍一文中已经对autoSAR里通信模块进行详细分析,特别是信号的接收发送,这一节,将通过CAN通信实例详细介绍,来对autoSAR的通信模块进一步加深印象!

1 概述

CAN通讯的核心模块有4个:COM模块,PDU Router模块, CAN Interface模块和CAN Driver模块。

can通信相关的文档

2 流程

2.1 接收流程

根据ISO 11898-1标准可知,CAN接收功能需要使用通知(Indication)服务,那么怎么基于AUTOSAR架构实现呢?AUTOSAR架构的CAN接收的软件实现流程图如下图所示:

1 BSW调度器周期性调用CAN Driver模块的Can_MainFunction_Read函数;

2 CAN Driver模块的Can_MainFunction_Read函数将访问CanController(硬件)的寄存器,如前面文章所述的仲裁寄存器,数据寄存器和数据长度寄存器,并读取这些寄存器的数据(ISO 11898-1标准规定了LLC数据帧的格式(id,数据长度和数据3段),当然还需要根据对应的芯片手册定义来访问其他的寄存器,最终保证读取数据的有效性。);

3 数据读取结束后,这时继续调用CAN Interface模块的CanIf_RxIndication函数,这样数据从CAN Driver模块传给了上一层的CAN Interface模块;

4 CAN Interface模块再调用PduR模块的PduR_RxIndication函数,将数据传到PduR模块;

5 PduR模块路由到Com模块,调用Com_RxIndication函数,将数据传到Com模块,Com模块将会把数据存入其缓存,供应用层软件读取使用。

2.2 发送流程

CAN发送功能需使用请求(Request)服务和确认(Comfirmation)服务,AUTOSAR架构的CAN发送功能如下两图所示。

1 BSW调度器周期性调用Com模块的Com_MainFunction_Tx函数,Com模块将从其缓存器中读取需发送的数据;

2 Com模块的Com_MainFunction_Tx函数将调用PduR模块的PduR_ComTransmit函数,将数据传给PduR模块;

3 PduR模块路由到CAN Interface模块,调用CanIf_Transmit函数,这样数据从PduR模块传给了下层的CAN Interface模块;

4 CAN Interface模块再调用Can Driver模块的Can_Write函数,将数据写入相应的寄存器;

5 与CAN接收功能一样,Can_Write函数将访问仲裁,数据长度和数据寄存器,将数据写入。

2.3 确认服务

1 BSW调度器周期性调用CAN Driver模块的Can_MainFunction_Write函数;

2 CAN Driver模块的Can_MainFunction_Write函数将访问CanController(硬件)有关寄存器,读取有关数据供向上层确认;

3 数据读取结束后,这时继续调用CAN Interface模块的CanIf_TxComfirmation函数,这样数据从CAN Driver模块传给了上层的CAN Interface模块;

4 CAN Interface模块再调用PduR模块的PduR_TxConfirmation函数,将数据传到PduR模块;

5 PduR模块路由到Com模块,调用Com_TxConfirmation函数,确认发送状态。

=>总目录<=

[4.6]-AutoSAR零基础学习-CAN通信协议相关推荐

  1. [0.0]-AutoSAR零基础学习-专栏介绍

    前言   年前公司业务变动,博主有幸参加了车载相关的开发任务,负责cdd中的某个模块,由于之前没有接触过AutoSAR,项目前期比较难受,目前项目也接近尾声了,打算把这一路的学习过程记录下来,和大家一 ...

  2. [2.5]-AutoSAR零基础学习-AutoSAR解决方案

    目录 1 etas autoSAR系统解决方案 2 INTEWORK-EAS 3 vector解决方案 4 本文解决方案 4.1 使用Matlab/Simulink来实现部分软件组件级的开发 4.2 ...

  3. [4.3]-AutoSAR零基础学习-Bsw-NvM学习 <上>

    目录 1 AutoSAR Memory Stack 1.1 内存栈结构 1.2 NV 数据的存储方式 1.3 NV数据的读写 2 NvM功能介绍 2.1 NvM与其他模块的关系 2.2 NvM数据操作 ...

  4. ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

    ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语+中英文字幕(机译)时长 ...

  5. 0基础学好python难不难_零基础学习Python难不难?Python有什么优势?

    原标题:零基础学习Python难不难?Python有什么优势? Python是一种计算机程序设计语言.首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个 ...

  6. Java零基础学习难吗

    java编程是入行互联网的小伙伴们大多数的选择,那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者,你可以很好的理解java编程语言.并不困难.如果你的学习能力比较高,那么你对Java的 ...

  7. 零基础学习java,这些书一定要看!

    学习java技术除了看视频,看书也是非常重要的,尤其是零基础同学,本文包含学习Java各个阶段的书籍推荐,史上最全,学习Java,没有书籍怎么行,就好比出征没带兵器一个道理,这些书籍整理出来给大家作为 ...

  8. 零基础学习UI设计有哪些简单有效的方法

    UI设计的普及让越来越多的人对UI有了重新的认识,很多企业对UI设计这个岗位都是非常重视的,如今很多零基础学员都想要转行做UI设计,那么针对零基础学习UI设计有哪些简单有效的方法呢?来看看下面的详细介 ...

  9. 零基础学习Java培训有什么攻略

    零基础学习Java培训有什么攻略?java是主流编程语言之一,我们在学习Java的时候需要制定Java学习路线图,Java涉及到的知识点非常的多,我们该从何学起呢?怎么系统的学习呢?来看看下面的详细介 ...

  10. 零基础学习SVN之(二):CVS与SVN的区别

    相信大家看了零基础学习SVN之(一):SCM与SVN的使用(基础篇)这篇博客之后,对版本控制就有了一定的理解,同时也应该知道SVN与CVS是比较流行的两款SCM工具.那么到底这两款工具有什么区别呢? ...

最新文章

  1. 优化mysql服务器硬件包括_MySQL优化之一:服务器硬件和操作系统
  2. 人生的意义—我们为什么活着?
  3. 计算字符串t在字符串s中出现的次数(KMP)
  4. Windows下LaTeX安装及使用,使用VS Code改善LaTeX编辑环境
  5. Flask 实战:如何从零开发“知乎”
  6. Python eval 与 exec 函数区别 - Python零基础入门教程
  7. 常见的数据库连接字符串收集
  8. WPF 美化界面,样式的使用
  9. 《Windows内核原理与实现笔记》(一)Windows系统结构和基本概念
  10. 微信小程序php后台实现
  11. 新手如何学习PLC编程?
  12. Android Toast 吐司 自定义使用 展示图片 Toast自定义教程(一)
  13. R语言基于visreg 包COX回归和连续变量交互效应(交互作用)的可视化分析
  14. npm安装ionic相关设置
  15. c++判断整数翻转溢出_C++整数溢出
  16. PS人像精修插件MUA Retouch Panel中文版(支持ps2021)
  17. 西瓜书第三章阅读笔记
  18. Java 并发编程(一) 学习教程
  19. 路由器fast服务器没响应,FAST路由器复位常见问题解决方法
  20. 51/时钟周期、时钟频率、状态周期、机器周期

热门文章

  1. 报表如何集成 echarts 官网示例图
  2. VC2015搭建OpenCV环境(超详细教程)
  3. jdk+jmeter下载安装教程
  4. 金万维异速联产品简介
  5. Oh Mathematic, Oh God,太美了
  6. MySQL数据库语句
  7. 数据库select语句详解
  8. AB-PLC下载程序与上载程序详解
  9. html5网上购物平台论文,网上购物系统毕业论文
  10. 通达信手机版服务器文件夹,【通达信】通达信的一些目录和系统文件,用法说明。以备查询。...