文章目录
- CAN模块系统框图
- Microchip MCC Harmony下CAN模块配置选项
- CAN模块工作模式
- CAN模块中断模式
- CAN工作速率Bit Timing Calculation配置
- CAN 接收的配置
- CAN 发送的配置
- CAN 过滤器工作流程说明
- CAN 过滤器的配置
CAN模块系统框图
CAN的英文全称:Control Area Network
Microchip下32位ARM MCU的CAN模块框图如下:
- 遵循ISO 11898-1:2015标准
- 兼容Bosch CAN 2.0A, B标准和ISO CAN FD标准
- CAN消息的存储都放在MCU内部的SRAM,通过高速总线进行访问
- 需要单个或者2个外部消息RAM
Microchip MCC Harmony下CAN模块配置选项
CAN模块工作模式
在MCC配置模式下,添加CAN模块后进行配置
- NORMAL (CAN 2.0B模式):
- CAN FD模式:
- Restricted Operation Mode (限制性操作模式):
- 节点能够接收数据帧和远程帧
- 能够对接收到的有效帧进行应答
- 不能发送数据帧、远程帧、主动错误帧和过载帧
- 当CAN 发送时无法及时从外部RAM中读到数据,会自动进入该模式,需手动进入配置模式,清除ASM标志位
- 该模式可以用来实现CAN波特率自适应 (工作在不同波特率,当收到有效帧后手动退出该模式)
- Bus Monitoring Mode: (总线监听模式):
- 节点能够接收数据帧和远程帧
- 节点不能传输数据
- 用来分析CAN总线上的数据
- 需要单个或者2个外部消息RAM
- External Loop Back Mode (外部回环模式):
- 数据帧在内部回环并会发送到总线上
- 可以用来做硬件测试
- Internal Loop Back Mode: (内部回环模式):
- CAN数据帧在内部回环,不发送到总线上
- 可以用来做自我诊断
CAN模块中断模式
- 开启Interrupt Mode (建议勾选):
- 提供Tx FIFO/Event, Rx FIFO和中断回调注册接口
- CAN初始化时开启CAN中断
- 有CAN中断处理函数,在中断处理中调用注册的回调接口
- 不选中Interrupt Mode:
- 提供CAN中断状态查询和清除接口
- 提供Tx Event和Rx FIFO状态查询接口
CAN工作速率Bit Timing Calculation配置
CAN的工作速率和采样点计算公式如下:
CAN波特率计算公式 =
CAN Clock Freq/Rate Prescaler/(1+TSEG1+TSEG2)
采用点计算公式 =
(1+TSEG1)/(1+TSEG1+TSEG2)
MCC支持自动计算比特率,只需要输入所需要的工作速率:
CAN 接收的配置
- RX FIFOx配置:
- 包括RX FIFOx深度、RX FIFOx中断触发门槛
- 覆盖模式(Overwrite)还是阻塞模式(Blocking)
- RX Buffer配置:
- RX Buffer的深度(可以存多少个CAN数据帧)
CAN RX工作在阻塞模式:
- 在阻塞模式下RX FIFO工作流程:
- 开始工作时Get Index和Put Index索引值都为0
- 新收的数据帧存储在Put Index所指向的FIFO存储区
- Put Index值自动+1 (0 ~ 63)
- 当FIFO所有单元存满(Get Index == Put Index)
- 新接收的数据帧会被丢弃
CAN RX工作在覆盖模式:
- 在覆盖模式下RX FIFO工作流程:
- 开始工作时Get Index和Put Index索引值都为0
- 新收的数据帧存储在Put Index所指向的FIFO存储区
- Put Index值自动+1 (0 ~ 63)
- 当FIFO所有单元存满(Get Index == Put Index)
- 新接收的数据帧会覆盖最旧的数据
- Put Index值自动+1
CAN RX工作在FIFO模式和Buffer模式的对比:
-
RX FIFO模式:
- CAN模块提供2个RX FIFO,FIFO0和FIFO1
- 每个FIFO最大的存储深度是64(64个完整CAN数据帧)
- 通过过滤器的设置可指定接收数据帧存储到指定FIFO
- FIFO存储的数据帧读取遵循先入先出的原则
- 可以配置为高优先级帧的缓存区
- 可通过配置将普通帧和高优先级帧存放在不同FIFO
-
RX Buffer模式:
- CAN模块提供1个专属RX Buffer
- Buffer最大的存储深度是64(64个完整CAN数据帧)
- 通过过滤器的设置可指定接收数据帧存储到Buffer
- 可以指定位置读取存储在Buffer里的数据帧
- Buffer里存储进新数据后该buffer区域会被锁定直到数据被取走并手动清除标志位信息
- 可以用来存储CAN的debug message
CAN 发送的配置
- TX FIFO 配置:
- 包括TX FIFO深度(最大32个存储深度)
- 发送的数据遵循先入先出原则
- 通过Watermark来设置TX FIFO空闲中断门槛
- TX Pause配置:
- 满足AUTOSAR关于transmit cancellation要求
- 满足ECU某些场合需要优先级控制的要求
- TX Buffer配置:
- TX Buffer的深度(最大32个存储深度)
- 可以往指定的TX Buffer存储单元写入数据
- 在发送的帧的ID都是相同的情况下,编号越小的TX Buffer具备更高的发送优先级
- TX Buffer里面帧的ID越小,发送优先级越高
- TX Buffer和TX FIFO混用的情况下,TX Buffer里面某个帧的ID值如果小于FIFO里面下一个发送帧的ID,则Buffer里的具有更小ID的帧会优先发送
CAN 过滤器工作流程说明
- CAN 帧过滤器处理流程:
- 根据帧ID判定是标准帧还是扩展帧
- 判断是否为远程帧
- 未使能远程帧接收则直接丢弃接收到的远程帧
- 判断是否开启了帧过滤器
- 未开启任何过滤器则认为接收的帧不匹配
- 有开启过滤器则执行过滤规则
- 判断接收的帧是否满足匹配规则
- 如拒绝接收不满足匹配规则的帧则直接丢弃
- 满足匹配规则的帧将会被放入接收缓存区
- 判断接收缓存区是否空闲
- 缓存区未空则存储接收的数据帧
- 缓存区满(阻塞模式)则丢弃接收的数据帧
CAN 过滤器的配置
- Store in RX FIFOx:
- 满足过滤规则的帧将存储在指定的FIFO中
- Set Priority:
- 接收的帧标记优先级并不存储
- 会触发HPM(High Priority Message)中断
- Set Priority and store in RX FIFO x:
- 满足过滤规则的帧将存储在指定的FIFO中
- 接收的帧标记为高优先级
- 会触发HPM(High Priority Message)中断
- 标记为高优先级的帧需要遵循先入先出原则
- Store into RX Buffer:
- 满足过滤规则的帧将存储在对应的Buffer中
- Buffer中的数据必须及时处理
- 否则新收的数据会被拒收