HMI工业级芯片Model3(简称M3芯片)CAN通信如何配置

Model3(简称M3芯片)简介:

上图:基于Model3芯片的核心板
Model3 是一款高性能的显示交互和智能控制 MCU,采用国产自主高算力 RISC-V 内核,内置片上 1MB 大容量 SRAM 以及 64Mb PSRAM,并提供丰富的互联外设接口,配备了 2D 图像加速引擎和 PNG 解码/JPEG 编 解码引擎,可以满足各类交互设计场景和多媒体互动需求,具有高可靠性、高安全性、高开放度的特点,可以面向于泛工业领域应用。
上图:Model3芯片功能框图
  • Model3(简称M3芯片)接口图如下:

今天小编主要介绍Model3(简称M3芯片)CAN通信的架构及寄存器说明

CAN通信简介:

CAN控制器,多应用于汽车控制系统和一般工业环境中的区域网络控制。CAN是一种多主机、多广播的通信协议,CAN总线上的各个节点都可以向总线发送数据,多个节点同时发送时利用仲裁机制,从而确保最高优先级的数据可以正常发送到总线上,具有很高的实时性和可靠性。

Model3芯片(简称M3芯片)CAN接口基本特性如下:

  • 支持CAN2.0A和CAN2.0B协议

  • 支持11位标识符(标准格式)和29位标识符(扩展格式)

  • 可编程通信速率最高达1Mbps驱动配置

  • 支持多种操作模式:正常模式、只听模式、自测模式、休眠模式、复位模式

  • 错误检测与处理:错误计数、错误报警阈值可配置、错误捕获、仲裁丢失捕获

CAN配置指南:

  • 驱动配置
Board options --->
    [*] Using CAN0
    [ ] Using CAN1

zx-rtt CAN的driver层是基于RT-Thread的CAN驱动框架实现的,所以需要使能RT-Thread的CAN驱动框架:

RT-Thread options --->
    RT-Thread Components --->
        Device Drivers --->
            [*] Using CAN device drivers
            [*] Enable CAN hardware filter
            [ ] Enable CANFD support

备注:

  1. CAN模块不支持CANFD

  2. 为了使用方便,选择Using CAN0/1后会自动选择CAN驱动框架

  • 测试说明

硬件准备:

  1. 测试板:带有两个CAN接口的测试板

  2. PC:用于和测试板交互

  3. 串口线:连接测试板的调试串口

软件:

  1. PC端串口终端软件

  2. can_sample测试程序

CAN收发测试:

将测试板上的两个CAN接口对接。执行can_sample命令,CAN0会向CAN1发送数据,CAN1会打印接收到的数据。

注意:

Model3芯片(简称M3芯片)的CAN 只能设置1个过滤表,支持屏蔽模式;如果要支持双过滤模式,扩展帧只能过滤id28~id13,id12~id0和rtr不能过滤。

Model3芯片(简称M3芯片)CAN的架构还有寄存器说明:

CAN控制器原理框图如上图所示

  • 位时序逻辑BTL:负责同步位时序,确保数据传输的稳定性,以预先配置的波特率发送和接受报文。

  • 位流处理器BSP:负责对发送数据进行位填充、附加CRC等处理,并为位时序逻辑模块生成位流;负责对接收的位流进行去填充、验证CRC等处理;负责检测总线上的错误并将错误报告给错误管理逻辑。

  • 接收过滤器:是一个可编程的报文过滤单元,允许控制器根据报文的标识符接收或拒绝该报文,可以过滤掉总线发送的与节点无关的消息,使节点效率提高。

  • 缓冲FIFO:大小为64byte,负责存储通过接收过滤器的报文。FIFO中的第一条报文将被映射到13byte 的接收缓冲寄存器中可被CPU访问,直到该报文被清除,空间被释放。随后,接收缓冲寄存器将继续映射FIFO 中的下一条报文。

  • 错误管理逻辑EML:负责更新发送错误计数TEC 和接收错误计数REC 的数值,记录错误类型、错误位置,更新控制器错误状态,确保BSP 模块发送正确的错误标志;还负责记录报文仲裁丢失时的bit位置。

CAN典型应用如上图所示

运行模式

  • 控制器包含5种运行模式,由模式寄存器(CAN_MODE)定义设置。

    • 复位模式:Reset Mode,进入复位模式,控制器离线不参与总线任何活动,可修改CAN控制器的各种参数配置。退出复位模式后,控制器需等待11 个连续隐性位出现(等效于总线空闲),才能正常接收和发送报文。

    • 正常模式: Normal Mode,CAN 控制器可以发送和接收包含错误信号在内的报文。

    • 自测模式:Self-Test Mode, 与正常模式相同,但在该模式下,CAN 控制器发送报文时,即使没有接收到应答,也不会产生应答错误。通常在控制器自测时使用该模式。

    • 只听模式: Listen Only Mode,CAN 控制器可以接收报文,但在CAN 总线上保持完全被动。因此,CAN 控制器将无法发送任何报文、应答或错误信号,错误计数将保持冻结状态。该模式用于CAN 总线监控。

    • 休眠模式:Sleep Mode,无总线活动及无中断发生,可进入低功耗休眠模式,该模式下时钟停止。SLEEP_MOD为0或总线有信号输入时唤醒,产生唤醒中断。

位时序

  • 为了实现位同步,每个正常位时间划分为几个不重叠时间的片段,包括同步段SS,传播段PS,相位缓冲段PBS1,相位缓冲段PBS2,一个完整的位由8~25个时间定额Tq组成。

    • 如图所示,将传播段PS和相位缓冲段PBS1合并形成新的时间段Ts1。

    • 在复位模式下,配置总线时序0寄存器(CAN_BTR0)和总线时序1寄存器(CAN_BTR1)中的BRP、SJW、TS1、TS2、SAM等参数,决定CAN的波特率。

    • SJW具体作用是增大或减小CAN波特率的容许偏差量,其大小与波特率值没有太大关系,可理解为波特率精度调节,SJW值越大则总线获得更宽波特率容忍度。

 

  • 位时序各参数计算关系如下:

    • 时间定额Tq = 2*(BRP[5:0]+1)*Tpclk,其中Tpclk为APB时钟(通常为24MHz)周期。

    • 位时间Tbit = [1+ (TS1+1) + (TS2+1)]*Tq;

    • 波特率Baud = 1/Tbit;

    • 采样点= [1 + (TS1+1)]/ [1+ (TS1+1) + (TS2+1)]。

    • 举例:假设单次采样SAM为0,且SJW=2,TS1=8,TS2=1,BRP=0,则波特率为24M/[2*(0+1)*(1+9+2)]=1Mbps,采样点为(1+9)/ (1+9+2)=83%。建议选取规则:TS2>=SJW;BRP尽量小、SJW尽量大;采样点选取范围75%~85%之间;尽量采用单次采样。

 

通信报文

  • CAN通信报文类型包含数据帧、远程帧、错误帧、过载帧、间隔帧这5种类型。

 上图:CAN标准格式和扩展格式数据帧上图:CAN标准格式和扩展格式远程帧

 

上图:CAN错误帧、过载帧、间隔帧 

中断管理

  • 控制器提供8种中断包括总线错误中断、仲裁丢失中断、被动错误中断、唤醒中断、数据溢出中断、错误报警中断、发送中断、接收中断。

    • 由中断寄存器(CAN_INTR)定义,通过设置中断使能寄存器(CAN_INTEN)中相应使能位,每个中断源都可以单独允许和禁用。

    • 当有一个或多个中断触发,控制器IRQ有效,当所有中断位都被清除,控制器IRQ失效。

    • 中断寄存器被读取后,除接收中断外,其中的中断位将自动清除。

    • 接收中断直到通过RXB_REL 指令位清除所有接收报文后,才能被清除,否则会影响接收缓冲状态RXB_STAT。

  • 接收中断RX_INT:当接收FIFO 中有待读取报文(接收数据计数寄存器(CAN_RXC)中RXC > 0)时触发此中断。计数的报文数量包括有效报文和溢出报文。直到通过RXB_REL 指令位清除所有挂起接收报文后,接收中断才会失效。

  • 发送中断TX_INT:当发送缓冲器空闲,将其他报文加载到缓冲器中等待发送时,都会触发此中断。

  • 错误报警中断ERRW_INT:状态寄存器(CAN_STAT)中ERR_STAT或BUS_STAT的位值发生改变(由0变1或由1变0)都会触发此中断。触发时状态值可分以下几种:

    • ERR_STAT = 0 与BUS_STAT = 0:如果控制器处于主动错误状态,则表示TEC 和REC 的值都返回ERRWT 所设阈值之下;如果控制器此前处于总线恢复状态,则表示此时总线恢复已成功完成。

    • ERR_STAT = 1 与BUS_STAT = 0:表示TEC 或REC 数值已超过ERRWT所设阈值。

    • ERR_STAT = 1 与BUS_STAT = 1:表示控制器已进入离线状态(TEC> =255)。

    • ERR_STAT = 0 与BUS_STAT = 1:表示总线恢复期间,控制器TEC 数值已低于ERRWT所设阈值。

  • 仲裁丢失中断ARBLOST_INT :控制器发送报文并且丢失仲裁时触发此中断。丢失仲裁位置将被捕获记录在状态寄存器(CAN_STAT)的ARBLOST_CAP中,状态被清除之前(通过CPU 的读取),将不会再记录新的仲裁丢失位置。

  • 总线错误中断ERRB_INT:控制器在总线上检测到错误时触发此中断。错误类型和错误位置都将被捕获记录在状态寄存器(CAN_STAT)的ERR_TYPE和ERR_CODE中。状态被清除之前(通过CPU 的读取),将不会再记录新的总线错误信息。

 

数据缓冲器

  • 下表描述了数据缓冲寄存器布局。发送和接收缓冲寄存器的访问地址范围相同(0x40~0x70),且只有当控制器处于非复位模式时才可访问。

  • 发送缓冲寄存器:CPU 的写入操作访问,配置待发送报文,指定报文的帧类型、帧格式、帧标识符和数据。CPU通过控制寄存器(CAN_MCR)配置发送报文模式:

    • 正常报文发送,需将TX_REQ置1。

    • 自发自收,需将SELF_REQ 置1。

    • 单次发送,需将TX_REQ 和ABORT_REQ同时置1。

  • 接收缓冲寄存器:CPU 的读取操作访问,接收缓冲寄存器映射到缓冲FIFO 中的第一条报文,获取第一条报文的帧类型、帧格式、帧标识符和数据。读取完接收缓冲寄存器中的报文后,CPU 通过控制寄存器(CAN_MCR)中的RXB_REL置1来释放接收缓冲寄存器,若接收FIFO 中仍有待处理的报文,按照接收报文的先后次序将最早接收到的报文映射到接收缓冲寄存器中。

  • 缓冲FIFO: 是一个64字节大小的内部缓冲器,以先进先出原则存储接收到的报文。接收缓冲寄存器为FIFO中可访问窗口,偏移地址0x40~0x70,将被映射到FIFO 中第一条报文,一条报文可在FIFO 中占3 ~ 13字节空间,其中字节序与接收缓冲寄存器相同。当控制器接收到一条报文时,接收数据计数器RXC增加1,最大值为64。如果FIFO中有足够空间,报文内容将被写入到FIFO 中。首先,CPU读取接收缓冲寄存器中的报文后,通过将RXB_REL置1,释放FIFO 中第一条报文所占的空间, RXC将减小1。然后,接收缓冲寄存器将映射FIFO 中的下一条报文。

  • FIFO数据溢出:在任何情况下,FIFO 中可以存储的报文数量取决于各条报文的长度,当FIFO 中没有足够空间完整地存储新的报文,控制器会产生数据溢出,通过状态位或数据溢出中断反馈给CPU。FIFO在内部将溢出报文标记为无效,后续接收到的溢出报文仍然将增加RXC 到最大值64。为了清除FIFO 中的溢出报文,应重复调用RXB_REL,直到RXC为0。这样可以读取接收FIFO 中的所有有效报文,并清除所有溢出报文。

上图:CAN缓冲FIFO存储报文过程

接收过滤器

  • 接收过滤器,是一个可编程的报文过滤单元,允许控制器根据报文的标识符、帧类型、第一个数据字节接收或拒绝该报文,由4个接收代码寄存器(CAN_RXCODE)和4个接收屏蔽寄存器(CAN_RXMASK)定义组成。

  • 如 图 8 所示,每条报文中的位必须匹配RXCODE 值所指定的模式或者被RXMASK值屏蔽,才能使该报文通过过滤并存储到接收FIFO中。

  • 接收代码寄存器、接收屏蔽寄存器,分别与缓冲0~3寄存器(偏移地址0x40~0x4C)、缓冲4~7寄存器(偏移地址0x50~5C)地址空间相同,所以只有控制器在复位模式时,才能访问这两个寄存器。

 

上图:接收过滤器原理

  • 单过滤模式:在模式寄存器(CAN_MODE)中将FILTER_SEL设置为1启动单过滤模式。根据RXCODE / RXMASK的值定义单个过滤器,其定义及过滤报文格式如图1-11所示。

 

  • 双过滤模式:在模式寄存器(CAN_MODE)中将FILTER_SEL设置为0启动双过滤模式。根据RXCODE / RXMASK的值将定义2个过滤器,分别为过滤器0和过滤器1,其标准格式和扩展格式下过滤报文定义如图1-12和图1-13所示。双过滤模式下,如果报文通过这2个滤波器中至少一个,则表示该报文成功通过过滤。

  • 上图:双过滤模式下SFF标准格式过滤报文定义

上图:双过滤模式下EFF扩展格式过滤报文定义 

错误管理

  • 错误计数包含发送错误计数TEC和接收错误计数REC,错误计数将决定CAN控制器当前的错误状态(如主动错误、被动错误、离线)。

  • 除了错误状态外,控制器还提供错误报警阈值ERRWT功能,这个功能可在控制器进入被动错误状态前,提醒用户当前发生的严重总线错误。

  • 控制器当前的错误状态通过TEC、REC、ERR_STAT 、BUS _STAT和ERRWT体现,这些数值和状态位的变化将触发中断,从而提醒用户当前的错误状态变化(参考中断管理)。

 

错误捕获

  • 错误捕获功能允许控制器以错误代码的形式,记录总线错误类型和错误位置。

  • 当检测到一个总线错误时,总线错误中断ERRB_INT将被触发,相应的错误代码将记录在状态寄存器(CAN_STAT)的ERR_CODE中。

  • 在当前错误代码被读取前,后续的总线错误中断触发时,将不会再记录。

仲裁丢失捕获

  • 仲裁丢失捕捉功能允许控制器记录仲裁丢失的bit位置。

  • 当控制器丢失仲裁时,所丢失bit位置将被记录在状态寄存器(CAN_STAT)的ARBLOST_CAP中,同时触发仲裁丢失中断ARBLOST_INT。

  • 在当前仲裁丢失捕获bit位置被读取前,后续的仲裁丢失中断触发时,将不会再记录。

 

上图:仲裁丢失位置记录 

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值