AUTOSAR架构的CAN通讯学习(二)——CAN Driver

本文是针对如下链接文章的学习笔记:
https://mp.weixin.qq.com/s?__biz=MzUyODA2MjkyNA==&mid=2247490064&idx=1&sn=638103e9fe5f073f636e84ba71b1a3f1&chksm=fa775ab3cd00d3a5615ddf74864ee5b22851c0f4b3758bb870358186272397d1a94d98a4ee47&scene=178&cur_album_id=1584282669947912193#rd

1、协议数据单元(Protocol Data Unit, PDU)
PDU包括协议控制信息(Protocol Control Information,PCI)和服务数据单元(Service Data Unit, SDU)。

PDU不仅仅是数据(SDU),还携带了来自哪要去哪的信息(PCI);每到哪都会删掉之前的信息,添加这是哪要去哪的信息(不同层的PCI更新)

2、L-PDU
如图1,针对OSI参考模型,会根据不同的OSI层相应地给PDU添加前缀,在CAN模块中,数据链路层的PDU就叫L-PDU。
在这里插入图片描述
图1

知识点补充:
ISO 11898-1定义了CAN的数据链路层和部分物理层,如图2。数据链路层具体可分为逻辑链路控制、媒介访问控制
在这里插入图片描述
图2 ISO 11898的定位

如图3,其中LLC(逻辑链路控制)包括接受过滤、过载通知以及恢复管理;MAC层包括数据封装与解封、帧编码、介质访问管理、错误检测、序列及反序列。
在这里插入图片描述
图3 ISO 11898包含的规范

在CAN的四个核心模块:CAN Driver模块、CAN Interface模块、PDUR模块、COM模块中,只有CAN Driver模块能够访问或配置硬件,其他模块均不能。它们之间将通过数据协议单元(PDU)形式实现数据传输,如图4。
在这里插入图片描述
图4

3、Hth、Hrh:
针对写数据操作,CAN Interface模块调用Can_Write函数,其定义如图5:
在这里插入图片描述图5
该函数中,参数Hth的定义:
用来存储写入数据的硬件对象就叫Hth;
(用来存储接收数据的硬件对象就叫Hrh)

每一个硬件对象都由ID,DLC和 SDU三部分组成,如图6。
在这里插入图片描述图6
所以不难理解,Can_Write的输入参数Hth其实就是硬件对象的编号(id),而且实际上是已经定义好了硬件对象的编号与CAN ID的映射关系,比如图7所示,如果想发送CAN ID 为0x001的数据,那么调用Can_Write函数的输入参数Hth应该为4。
在这里插入图片描述
图7

4、CAN Driver相关函数(部分):
Can_SetControllerMode()
Can_Init()
Can_MainFunction_Write()
Can_MainFunction_Read()
Can_Write()

### AUTOSAR CAN 模块介绍 AUTOSAR(Automotive Open System Architecture)定义了一套标准来促进汽车软件组件之间的互操作性可移植性。CAN(Controller Area Network)作为其中的关键通信协议之一,主要用于实现车内不同ECU(Electronic Control Unit)间的可靠数据传输。 #### CAN Driver 的位置及其主要职责 CAN驱动程序位于微控制器抽象层(Microcontroller Abstraction Layer, MAL)[^1]。该层次旨在提供硬件无关性的访问接口给上层软件堆栈,使得应用程序可以独立于具体的MCU架构运行。具体来说: - **初始化**: 负责设置底层硬件资源以便能够正常工作。 - **发送/接收消息处理**: 实现了通过物理介质交换信息的功能。 - **错误检测与报告**: 对链路层发生的任何异常情况进行监测并向更高层级汇报。 ```c // 初始化CAN模块示例代码 void Can_Init(const Can_ConfigType* ConfigPtr){ // 根据配置指针完成相应的初始化过程... } ``` #### CAN NM 模块的作用及API使用方法 除了基本的数据传送外,为了维持网络的有效运作还需要专门的服务——即CAN NM(Network Management),这部分内容涵盖了节点状态管理唤醒机制等方面的工作[^2]。当涉及到实际项目中的部署时,则需按照官方文档指导来进行细致入微地调整以满足特定需求;比如指定心跳周期、超时阈值等参数。 ```c // 启动NM活动函数调用实例 Std_ReturnType CanNm_StartNetwork(void){ /* ... */ } // 停止NM活动函数调用实例 Std_ReturnType CanNm_StopNetwork(void){ /* ... */ } ``` #### ECU启动过程中涉及的其他相关模块 在整个系统启动流程里,EcuM会触发CanIf以及CanSm两个重要组成部分的动作。前者充当着应用层传输层之间桥梁的角色,而后者则专注于所有已知CAN控制器的状态转换控制任务[^3]。这意味着每当有新的连接建立或是现有链接断开之时,都会由这些子系统协同合作确保整个通讯环境的安全稳定。 #### MCAL 层面的具体工程实践指南 对于基于S32K系列芯片的产品而言,在完成了高层级业务逻辑的设计之后,还应该利用EB工具集对低级别的外围设备特性加以定制化设定,从而保障最终产品的性能表现达到预期目标[^4]。这一步骤通常是在集成测试阶段发现缺失项后补充完成的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值