目录

CAN网络简介

BSW中的CAN模块

CAN状态机

CAN报文发送

CAN报文接收

总结


第一篇从全局角度出发,简单介绍了AUTOSAR的结构,从本篇开始我们一起详细了解一下AUTOSAR软件架构下内部的组成部分。下面,我们首先介绍第一个模块-通信。在AUTOSAR BSW中通信由三个部分组成,分别是:通信驱动、通信抽象、通信服务。涉及的通信类型包括但不仅限于LIN、CAN、FlexRay、Ethernet。实际车用最广泛还是LIN和CAN,但LIN总线由于带宽及通信质量等原因,大都是用于简单执行器的控制通信。而车载ECU之间、ECU与复杂传感器之间的通信大都采用CAN通信。而以太网通信是近年来由于车载娱乐及自动驾驶业务发展对车载通信要求的提高引入的。这里我们已典型的CAN通信作为切入点,介绍AUTOSAR架构下的通信。

CAN网络简介

CAN(Controller Area Network)网络通信是一种现代的串行通信协议,被广泛应用于汽车、工业控制和其他领域。它最初由德国BOSCH公司于1986年开发,旨在满足汽车电子系统中的通信需求。然而,由于其卓越的性能和可靠性,CAN通信很快就在其他行业中也得到了广泛采用。

CAN网络通信的特点:

  • 分布式通信架构,允许多节点同时在总线收发消息;
  • 差分信号设计,提高信号抗干扰性;
  • 支持优先级仲裁,可组成多主机局部网络;
  • 相对结构简单、成本低;

关于CAN的更多基础知识这里不再详细展开。对CAN总线完全不了解的朋友这里有一篇文章仅供参考:CAN通信讲解 - 知乎

在实际应用中,CNA通信的实现需要在硬件上有CAN控制器和CAN收发器的支持。应用比较广泛的独立的CAN控制器有NXP(恩智浦)的TJA1050,独立的CAN收发器有NXP的TJA1043、TJA1044等。但现在大多主控芯片都包含片内CAN控制器,只需要搭配合适的CAN收发器即可。

BSW中的CAN模块

在AUTOSAR架构中,CAN模块属于BSW层的MCAL,其作用就是作为CAN驱动软件,驱动CAN硬件,实现CAN报文的收发。在AUTOSAR中CAN模块负责驱动一个“CAN Hardware Unit”的实体。一个CAN Hardware Unit包含一个或多个一样的CAN控制器,可以是在主芯片内部(片内)也可以是在主芯片外部(板载)。下图所示为包含2个CAN控制器连接到两路物理CAN通道的CAN Hardware Unit。

CanHardwareUnit示意图

一个CAN模块提供访问一个CAN Hardware Unit的接口,如果应用存在多个不同类型的CAN Hardware Unit那么就要实现多个CAN模块。

CAN状态机

CAN模块状态机比较简单,共有4个状态,分别为:

  • UNINIT(未初始化);
  • STOPPED(停止);
  • STARTED(启动);
  • SLEEP(睡眠);

下图所示为CAN状态机转换图。

上电后,CAN首先进入UINIT状态,直到调用Can_Init()函数,进行CAN模块初始化,然后CAN模块进入STOPPED状态,此时表示CAN模块已经初始化完成,但是并不参与总线通信。然后当函数Can_SetControllerMode(CAN_CS_STARTED)被调用后,CAN模块进入STARTED模式,在STARTED模式下CAN模块正常工作,可进行CAN报文的收发。当函数Can_SetControllerMode(CAN_CS_STOPPED)被调用后,CAN状态进入STOPPED状态,此时CAN模块停止参与总线通信。当函数Can_SetControllerMode(CAN_CS_SLEEP)被调用后,CAN状态由STOPPED状态进入SLEEP状态。当Can_DeInit()被调用后,CAN状态机进入UNINIT状态。

另外,除了由软件触发的CAN模块状态机跳转,以下硬件条件也可出发CAN状态机跳转。

  1. 硬件唤醒:当CAN状态机处于SLEEP模式下时,收到硬件唤醒信号,CAN状态机跳转STOPPED状态
  2. Bus-Off:当CAN状态机处于STARTED状态时,如果发生BusOff,那么CAN状态机跳转STOPPED状态;

CAN报文发送

Can_Write()函数用于发送报文,报文成功发送后,CAN模块会调用CanIf_TxConfirmation()上报消息发送成功(CanIf层的通知回调,此处若不理解可浏览CanIf篇)。

Can报文的发送方式有两种:中断式和轮询式。若CAN报文以中断的方式发送,那么发送回调在中断服务中调用;若CAN报文以轮询的方式发送,那么发送回调在周期函数Can_MainFunction_Write()中调用。

CAN报文接收

当有CAN报文到来时,CAN模块调用接收指示回调函数CanIf_RxIndication()。

CAN报文的接收方式有两种:中断式和轮询式。中断式时相应硬件资源的接收中断服务程序调用回调函数CanIf_RxIndication;轮询模式时,周期函数Can_MainFunction_Read 调用回调函数CanIf_RxIndication。

基于硬件特性,看具体硬件支持FIFO、Queue、ShadowBuffer。CAN模块会将接收到报文数据存放到FIFO/Queue/ShadowBuffer,供后续使用。

是的,就这样就结束了!CAN模块在报文接收过程的作用仅仅时发出一个提示并缓存数据,后续报文的处理都是CanIf完成的,将在后续介绍。

总结

  • CAN报文接收发送有两种模式:中断 或 轮询,不同模式决定任务处理方式不同;
  • CAN状态机跳转条件:软件触发(Can_SetControllerMode)和硬件触发(BusOff、唤醒)

AUTUSAR通信篇 - CAN网络通信(一:CanDrv)相关推荐

  1. Autosar BSW开发必知的“术语”+“缩写”概念-1-诊断通信篇

    如何使用该博文? ==>您可以将该篇博文当做"字典",遇到疑惑的Autosar"关键字",使用组合键Ctrl+F,快速查找该关键字. 推荐Autosar培 ...

  2. jsp给前端注入值失败_基于 qiankun 的微前端最佳实践(图文并茂) 应用间通信篇...

    引言 大家好~ 本文是基于 qiankun 的微前端最佳实践系列文章之 应用间通信篇,本文将分享在 qiankun 中如何进行应用间通信. 在开始介绍 qiankun 的应用通信之前,我们需要先了解微 ...

  3. 物联网通信篇 NBIOT_01

    NBiOT_01物联网通信篇 从今天开始懒博主开始更新了,目前先更新 物联网 通信方面 目前我所测试的通信模组有以下几种型号: NB 4G 5G 今天先来说下怎么用 使用移动 M5311模组 的MQT ...

  4. 树莓派4B学习笔记——IO通信篇(UART)

    文章目录 UART简介 树莓派使用UART与串口屏通信 串口屏简介 硬件连接 配置串口接口 树莓派打开UART接口 树莓派安装串口调试助手 编程实现 wiringSerial.h Serial简介 C ...

  5. uvm_tlm通信篇总结

    UVM通信篇之一:TLM通信概论 TLM是一个基于事务(transaction)的通信方式,通常在高抽象级的语言中被引用作为模块之间的通讯方式,例如SystemC或者UVM.TLM成功地将模块内的计算 ...

  6. Android 开发:通信篇-TCP客户端

    这节教给大家用Android写一个TCP客户端程序 官方文档 Socket - Android SDK | Android Developers 页面 编写连接程序 1.获取控件 EditText e ...

  7. ReactNative与iOS通信原理解析-通信篇

    文章首发个人博客: ReactNative与iOS通信原理解析-通信篇 导语:其实原本是想编写一篇  react-native (下文简称 rn) 在  iOS 中如何实现  jsbridge 的文章 ...

  8. Linux常用C函数-接口处理篇(网络通信函数)

    接口处理篇 accept, bind, connect, endprotoent, endservent, getsockopt, htonl, htons, inet_addr, inet_aton ...

  9. AUTOSAR从入门到精通100讲(二十)-AUTOSAR通信篇—CanIf模块

    1  位置和作用 如图1所示,CAN接口模块(下文简"CanIf")位于底层CAN驱动(CanDrv).CAN收发器(CanTrcv)和上层通信服务层(CanSm.CanNm).C ...

最新文章

  1. 如何能够得到灵敏度更高的150kHz导航信号检测板?
  2. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)
  3. 包邮送50本畅销书,涵盖数据库、Python、机器学习等!
  4. m 940 /vbulletin/_爱在当下 MM 伴你纵享别样万圣之夜
  5. 单片机0 99c语言程序,单片机C语言程序设计实训99例.doc
  6. iso27001信息安全体系认证意义
  7. 台安PLC通过手机热点远程在线模拟,远程编程,远程调试
  8. windows VM12虚拟机安装苹果系统(Mac OX 10.11)
  9. ZTE10机顶盒中心服务器,中兴机顶盒现场配置工具ZTE_STB_Tools_V1.1.0_T07.01最新版
  10. JanusGraph对于Gremlin查询语言的介绍
  11. java 文件zip打包下载 多个文件夹分类
  12. Couldn't connect to host, port: localhost, 25; timeout -1;
  13. c语言pow函数原型_c语言pow的用法
  14. 上传图片报413错误
  15. 从0开始强化学习——强化学习的简介和分类
  16. 生动理解java接口
  17. conda failed to create process
  18. 最详细的Android Bitmap回收机制(从2.3到7.0,8.0)
  19. 如何将QQLive和QQ2010和虚拟光驱运行在ubuntu上
  20. web应用使用skype教程

热门文章

  1. 如何打造出与人类自然交流的机器人?这里有四点秘籍 | 干货
  2. 2021年材料员-通用基础(材料员)多少分及格及材料员-通用基础(材料员)实操考试视频
  3. Android Q的适配 华为市场给都代码参考和文档
  4. 功能测试---进入公司如何快速熟悉公司流程,更快上手
  5. 中国移动的智慧城市之路,需要更多的狼性
  6. PTA(每日一题)7-16 jmu-分段函数l
  7. AssetClub游戏攻略
  8. 1970年至今(2007/7/20)原油价格走势图
  9. 从 0 到 1 构建加密货币价格走势图
  10. 用Python写了一个空洞机甲小游戏