目录
关键词
嵌入式、C语言、autosar、OS、BSW
平台说明
项目 | Value |
---|---|
OS | autosar OS |
autosar厂商 | vector , EB |
芯片厂商 | TI 英飞凌 |
编程语言 | C,C++ |
编译器 | HighTec (GCC) |
autosar版本 | 4.3.1 |
一、缩写和定义
abbreviations | 定义 |
---|---|
Hardware Object Handle (HOH) | HRH 和HTH 的统称 |
Hardware Receive Handle (HRH) | 由CAN驱动程序定义和提供。每个HRH通常只代表一个Hardware Object。HRH可用于优化软件过滤。 |
Hardware Transmit Handle (HTH) | 由CAN驱动程序定义和提供。每个HTH通常只表示一个或多个Hardware Object,这些对象被配置为硬件传输缓冲 |
Hardware Object | CAN硬件对象定义为CAN硬件单元/ CAN控制器的CAN RAM内的PDU缓冲区。可以直接理解为一个Hardware Object 就是一个L-PDU |
Data Length Code(DLC) | L-PDU中SDU 的长度 |
Physical Channel | 物理通道表示从CAN控制器到CAN网络的接口。CAN硬件单元的不同物理通道可以访问不同的网络。可以理解为一个网关 |
CAN controller | 一个can TX OR RX 连接的节点 |
CAN Hardware unit | 一个或者多个CAN controller + 一个或者多个CAN RAM area |
二、Hardware Object、MailBox 定义
我们可以将Hardware Object 理解为存放CAN L-PDU 的buffer,里面有且只有一个CAN message (包含 PCI( CAN ID + DLC) + SDU(data))[AutoSar]BSW_Com02 PDU详解。而MailBox就是一个 Hardware Object,属于CAN controller 上的物理空间。
三、FIFO 和 Dedicated Buffer
每个CAN module [AutoSar]BSW_Com08 CAN driver 模块介绍及参数配置说明 (一)都有属于自己的 RAM。在MCAL 中被分为了FIFO buffer 和
Dedicated Buffer。
一般CAN module RAM 如下:
FIFO 机制如下:
3.1 使用范围
Dedicated Buffer 用于FULL CAN ,Hareware Object与HRH/HTH一一对应,FIFO用于 basic can,即一个HRH/HTH对应多个HarewareObject。但是,Dedicated Buffer + FIFO buffer 不能超过芯片硬件的CANTx Buffer(Rx Buffer)。
3.2 在vector 和EB 中的配置
vector:
EB:
四、FULL CAN 和Basic CAN
我们可以通过CanHandleType 来配置为FULL CAN 还是 Basic CAN,其实就是选择HOH 的类型。
区别:
1.功能支持:
Basic CAN: 有一个或者多个Hardware Object(L-PDUs) 与其对应,并且 一个Hardware Object (L-PDUs) 对应某个范围内的 CAN message ID。
Full CAN: 只能有一个Hardware Object (L-PDUs)与其对应,并且 一个Hardware Object (L-PDUs) 对应一个 CAN message ID。
2.性能区别
Basic CAN: 采用硬件滤波,减少不必要的中断,节约CPU负载。L_PDU 到了上层 canif后是软件滤波。
Full CAN: 比较占用CPU负载,但是,如果硬件资源足够,优先选择FULL CAN。
五、Tx Buffer,Tx FIFO,Tx Queue
5.1 Tx Buffer
与FULL CAN 的 hardware object 一一对应,即为Dedicated Buffer。ID 越小优先级越高。
5.2 FIFO buffer
FIFO buffer 包括Tx FIFO和Tx Queue
5.2.1 Tx FIFO buffer
按照“先进先出”的方式来进行发送,忽略CAN ID优先级,一般为了防止出现优先级反转现象,不建议使用FIFO模式。
5.2.2 Tx Queue buffer
与Tx buffer 一样,ID越小优先级越高。
5.3 混合模式:Tx Buffer + Tx FIFO buffer
1.分别取出Tx Buffer中ID最小的message_A和Tx FIFO buffer 中最老的messag_B。
2.判定message_A和messag_B哪个ID小就优先发哪个。
5.4 混合模式:Tx Buffer + Tx Queue buffer
1.分别取出Tx Buffer中ID最小的message_A和Tx Queue buffer中ID最小的messag_B。
2.判定message_A和messag_B哪个ID小就优先发哪个。
六 Rx Buffer 和Rx FIFO
6.1 Rx Buffer
和Tx Buffer一样,在FULL CAN 中与单个message ID对应。当老的数据没有处理完,新的数据不会被处理。
6.2Rx FIFO
遵循先进先出的原理,一般有两个FIFO (Rx FIFO 0 and Rx FIFO 1 can be configured to hold up to 64 elements each).
当FULL 的时候有两种处理模式:
**Blocking Mode:**如果FIFO满了,只有等到数据处理完成之后才可以放入新的数据,一般推荐使用该方式;
**Overwrite Mode:**表示如果FIFO已经满了,新来的数据可以覆盖掉最老的数据。可能会导致数据丢失。
七、不同报文类型如何选择FULL CAN或者BASIC CAN
7.1 应用报文
推荐使用FULL CAN,因为一般不需要缓存,使用最新收到的报文就行。但是要注意 需要发送的报文数量必须< hardware object,如果超出,则要考虑部分使用 basic can,形成 basic + full 的组合方式。即 5.3 5.4 章节所述。
7.2 网络管理报文
因为网络管理报文为一个范围,推荐使用basic can。
7.3 标定报文
因为标定报文为一个固定ID,推荐使用full can。
7.4 诊断报文
推荐使用basic CAN。诊断报文对时序和完整性有严格要求,不允许丢失,因此要用FIFO。
八、注意事项
1.在hardware object的配置过程中,建议先将FULL CAN类型的HOH统一配置在前,Basic CAN类型的HOH配置在后,以免造成生成的代码中Maibox使用错乱。
>>>>>回到总目录<<<<<<