轻松掌握Microchip 32位MCU CAN模块配置,3分钟搞定

文章目录

  • 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模块框图如下:
    SAM 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模块中断模式

    MCAN中断模式配置

  • 开启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工作在覆盖模式:
    CAN覆盖模式

  • 在覆盖模式下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 过滤器的配置


    CAN过滤器的配置:

  • 过滤器数量配置:
  • 满足过滤规则的帧将存储在指定的FIFO中
  • 标准帧最大支持128个过滤器设置
  • 扩展帧最大支持64个过滤器设置
  • 过滤器支持3种模式-Classic、Dual和Range
  • Classic模式:
  • ID1为filter,ID2为mask ID
  • 需要配置满足过滤规则的帧存储方式
  • Range模式
  • ID2 >= ID1,只过滤ID1和ID2范围内的帧
  • 需要配置满足过滤规则的帧存储方式
  • Dual模式:
  • 双ID过滤模式,只过滤ID1和ID2的帧
  • 需要配置满足过滤规则的帧存储方式
    *** 非匹配的帧处理**:
  • 可以选择拒收或者存储到FIFO0或者FIFO1
  • 存储到FIFOx需要先使能对应的FIFO通道
  • ​过滤器元素配置Element Configuraton:

  • Store in RX FIFOx
  • 满足过滤规则的帧将存储在指定的FIFO中
  • Set Priority
  • 接收的帧标记优先级并不存储
  • 会触发HPM(High Priority Message)中断
  • Set Priority and store in RX FIFOx
  • 满足过滤规则的帧将存储在指定的FIFO中
  • 接收的帧标记为高优先级
  • 会触发HPM(High Priority Message)中断
  • 标记为高优先级的帧需要遵循先入先出原则
  • Store into RX Buffer
  • 满足过滤规则的帧将存储在对应的Buffer中
  • Buffer中的数据必须及时处理
  • 否则新收的数据会被拒收
  • 作者:ZHangZMo

    物联沃分享整理
    物联沃-IOTWORD物联网 » 轻松掌握Microchip 32位MCU CAN模块配置,3分钟搞定

    发表回复