CAN-数据收发过程(数据链路层) _基于autosar架构

本文内容来自下面两篇文章的整合:

1. AUTOSAR架构的CAN通讯

2. CAN协议标准及相关内容

本文先简要描述了CAN收发通讯的整体过程。

然后,介绍了CAN协议的数据链路层结构中MAC和LLC层服务原语和数据帧格式。

最后,在了解数据链路层的服务原语和数据帧的前提下,详细描述了autosar架构中以下三者之间的通信信号传递过程:

【BSW 调度器】-【BSW模块中的communication模块】-【CAN控制器】

其中BSW- communication模块,选取了4个核心通信模块:

  • communication service(autosar com 模块,PDU Router模块),
  • communication hardware abstraction(CAN Interface 模块),
  • communication driver(CAN driver模块)。

图片

↑ communication功能模块在autosar架构中的位置 

图片

↑  核心通信模块在communicatio功能模块中的位置

目录

CAN通讯过程——收,发

CAN-数据链路层的结构

LLC子层

MAC子层

基于AUTOSAR的CAN通讯

CAN通讯——接收(Indication)

CAN通讯——发送(request,confirm)


CAN通讯过程——收,发

CAN通讯过程包括,数据的接收、发送、错误处理等,本文主要讲CAN通讯的收发过程。

发送时,用户先请求提供者,然后提供者发送,再向用户确认;

接收时,提供者通知用户,如下图。

 

其中涉及3个服务原语

  • 请求(request),即服务用户向服务提供者发起请求服务;

  • 通知(indication),即服务提供者向服务用户通知一个对其重要的服务提供者内部事件;

  • 确认(confirm),即服务提供者向服务用户传达先前请求服务的结果,是成功还是失败,是完成还是未完成。

当信息经过LLC或MAC传输,即发送或者接收,同样地遵循上述的规则。

LLC和MAC是CAN数据链路层的子层。

CAN-数据链路层的结构

数据链路层在OSI模型中的位置,上接网络层,下接物理层。

数据链路层的作用是:在通信实体间建立数据链路联接,传输的基本单位为“帧”,并为网络层提供差错控制和流量控制服务。

数据链路层的结构:由MAC(介质访问控制子层)和LLC(逻辑链路控制子层)组成

LLC子层

对在同一条网络链路上的设备之间的通信进行管理。数据链路控制子层主要负责逻辑上识别不同协议类型,并对其进行封装,也就是说数据链路控制子层会接受网络协议数据、分组的数据包并且添加更多的控制信息,从而把这个分组传送到它的目标设备。

LLC数据帧

一个LLC数据帧由3个位段(bit field)组成,即id,长度和数据3段,基本对应于上篇文章的CAN协议帧的三段,其中id段稍有不同,它包含3个部分:基本id,扩展flag和扩展id,但在MAC子层会将id段处理成CAN协议帧的id段格式。

img

 在LLC层传输时,服务原语的使用格式为:

MAC子层

MAC层,介于LLC子层和PLS子层之间(提供上下的访问接口,解包接收数据、打包发送数据,接收、发送介质访问管理)。

MAC子层分为两条完全独立的操作部分,即发送和接收。MAC发送或接收的数据帧就是CAN协议帧。

发送部分,MAC子层要实现:数据打包和发送介质访问管理。

  1. 数据打包,包括:LLC数据帧的接收;CRC序列计算;MAC数据帧的构建(即增加SOF,SRR位,IDE位,RTR位,保留位,CRC,ACK和EOF到LLC数据帧)。
  2. 发送介质访问管理,包括:识别到总线空闲时发起发送;位填充;仲裁,仲裁失败转为接收模式;ACK检查等;向物理层发送一串位流(a serial bit stream)。

接收部分:MAC子层要实现:接收介质访问管理和数据解包。- 

  1. 接收介质访问管理,包括:从物理层接收一串位流;删除填充的位;发送ACK等。

  2. 数据解包,包括:移除数据帧的MAC特定信息;把LLC数据帧和接口控制信息给LLC子层。

MAC层的服务原语格式为:

MAC层数据帧

MAC发送或接收的数据帧就是CAN协议帧,格式为:

 

基于AUTOSAR的CAN通讯

CAN通讯——接收(Indication)

图片

具体过程描述如下:

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

  2. CAN Driver模块的Can_MainFunction_Read函数将访问CanController(硬件)的寄存器,如前面文章所述的仲裁寄存器,数据寄存器和数据长度寄存器,并读取这些寄存器的数据;

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

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

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

上述第2步为什么需要读取仲裁寄存器,数据寄存器和数据长度寄存器?这是因为ISO 11898-1标准规定了LLC数据帧的格式(id,数据长度和数据3段),当然还需要根据对应的芯片手册定义来访问其他的寄存器,最终保证读取数据的有效性。

CAN通讯——发送(request,confirm)

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

 图6 CAN发送的流程图

图6描述了数据发送的具体过程,即:

  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函数将访问仲裁,数据长度和数据寄存器,将数据写入。

图7描述了数据发送后的确认过程,即:

  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函数,确认发送状态。

 图7 CAN发送确认的流程图

  • 17
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
由于CAN网络管理涉及到CAN总线上节点的配置、通信协议的制定、节点的状态监测和故障诊断等多方面内容,因此在实现CAN网络管理代码时,需要按照autosar架构的要求进行模块划分和设计。 1. CAN网络管理模块的划分 根据autosar架构的要求,CAN网络管理模块可以划分为以下几个子模块: (1) 通信协议制定模块 该模块负责定义CAN网络通信的具体协议,包括数据帧格式、数据传输方式、错误检测和纠错等内容。 (2) 节点配置与控制模块 该模块负责对CAN网络节点进行初始化配置和控制,包括节点地址、波特率、过滤器设置、发送和接收缓冲区等的管理。 (3) 节点状态监测模块 该模块负责对CAN网络节点的状态进行监测,包括总线状态、节点状态、错误状态等。 (4) 故障诊断模块 该模块负责对CAN网络节点进行故障诊断和故障处理,包括错误码的生成和发送、故障存储和清除等。 2. CAN网络管理模块的设计 在设计CAN网络管理模块时,需要考虑以下几个方面: (1) 模块之间的接口定义和数据交互方式 在autosar架构中,模块之间的接口通常采用标准化的接口描述语言定义,以保证模块之间的兼容性和可重用性。同时,需要考虑到数据交互的效率和安全性,采用适当的数据传输方式和数据保护机制。 (2) 模块的功能实现和算法选择 在实现CAN网络管理模块的功能时,需要选择合适的算法和数据结构,以满足功能需求和性能要求。同时,需要考虑到系统的可扩展性和可配置性,以方便用户进行功能定制和配置。 (3) 模块的测试和验证 在实现CAN网络管理模块后,需要进行模块的测试和验证,以保证模块的正确性和稳定性。同时,需要考虑到模块的集成和系统级测试,以保证整个系统的功能和性能。 总之,基于autosar架构的CAN网络管理代码实现需要从模块划分、接口定义、功能实现和测试验证等方面进行全面考虑和设计,以实现高效、可靠和可扩展的CAN网络管理功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

picoasis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值