TC389-MCMCAN模块

  • 0 前言
  • 1 MCMCAN模块
  • 2 CAN Node的配制
    • 2.1 初始化
    • 2.2 Normal Operation
    • 2.3 CAN FD Operation
  • 3 CAN Node的Receive
    • 3.1 数据格式 Rx Buffer
    • 3.2 数据接收管理
      • 3.2.1 Dedicated Rx Buffer
      • 3.2.2 Rx FIFO
    • 3.3 过滤器 Filter
  • 4 CAN Node的Transmission
    • 4.1 数据格式 Tx Buffer
    • 4.2 数据发送管理
      • 4.2.1 Dedicated Tx Buffer
      • 4.2.2 Tx FIFO
      • 4.2.3 Tx Queue
    • 4.3 Tx Event FIFO
  • 5 CAN Node的Timeout

0 前言

>>返回AUTOSAR系列文章目录<<

1 MCMCAN模块

TC389的CAN模块称为MCMCAN模块,TC389共有3个MCMCAN模块,分别为CAN0,CAN1和CAN2,相关参数如下

每个MCMCAN模块在全局地址空间中都有一块专属的Message RAM区域,MCMCAN模块所有的寄存器、缓存空间不得超出这块区域,但是在区域内可自由分配

CAN0的功能最全,下面以CAN0模块为例:

  • CAN0模块共有4个CAN Node和1个TTCAN Node
  • CAN0模块的Message RAM共32K byte,所有的buffer、FIFO、Queue、register等等都在这段区域开辟,Host CPU可直接访问Message RAM
  • CAN0模块有1个User Interface,管理CAN0模块的时钟、中断、引脚等等

每个CAN Node:

  • 每个CAN Node都采用Bosch的M_CAN方法来实现
  • 每个CAN Node都支持classical CAN和CAN FD,其中CAN FD支持64 bytes 数据传输
  • 每个CAN Node有2个引脚,TXD和RXD
  • 每个CAN Node有1个Node Timer
  • 每个CAN Node有最多64个Rx Buffer,支持最多2个Rx FIFO
  • 每个CAN Node有最多32个Tx Buffer,支持最多1个Tx FIFO / Tx Queue

2 CAN Node的配制

2.1 初始化

软件reset、硬件reset或者Bus Off后,CCCRi.INIT (i=0-3) 置1,CAN Node停止收发

CCCRi.INIT (i=0-3)置0使CAN Node进入运行状态,位流处理器(Bit Stream Processor,BSP) 等到下一个Bus Idle状态完成和CAN Bus的同步,可以进行CAN收发

CAN Node配置寄存器只有在CCCRi.INIT和CCCRi.CCE都为1的时候才能修改

  • CCCRi.CCE只有在CCCRi.INIT为1的时候才能置1,在CCCRi.INIT为0自动置0

2.2 Normal Operation

默认模式

  • event-driven,不是time triggers
  • classical CAN,不是CAN FD

2.3 CAN FD Operation

CCCRi.FDOE (i=0-3) 是收发CAN FD frame功能启用位

  • CCCRi.FDOE (i=0-3)置0(默认),则只收发classical CAN frame
  • CCCRi.FDOE (i=0-3)置1且CCCRi.BRSE (i=0-3)置0,则开启没有bit rate switching的CAN FD frame功能
  • CCCRi.FDOE (i=0-3)置1且CCCRi.BRSE (i=0-3)置1,则开启有bit rate switching的CAN FD frame功能
  • 收发classical CAN frame总是可以的

有bit rate switching的CAN FD:CAN FD frame的control field, data field和CRC field以更高的bit rate进行传输

在CAN FD Operation下,之前CAN协议的保留位被解读为FDF位

  • 11-bit ID的CAN frame的保留位为FDF位
  • 29-bit ID的CAN frame的第一个保留位为FDF位

FDF=隐性(recessive,1)表示 CAN FD Frame
FDF=显性(dominant,0)表示 classical CAN Frame

在CAN FD Frame中,FDF之后的两个位res和BRS决定是否bit rate switching

  • res=显性和BRS=隐性表示有bit rate switching
  • res=隐性的编码保留用于协议的未来扩展

CAN FD Frame的Data Field可以设置12、16、20、24、32、48、64 byte

在CAN FD帧中,如果BRS位是隐性的,将在BRS位之后改变bit timing

  • 在BRS位之前, CAN FD arbitration phase, the standard CAN bit timing使用Nominal Bit Timing 和 Prescaler Register NBTPi(i=0-3)
  • 在BRS位之后, CAN FD data phase,the data phase bit timing使用Data Bit Timing和Prescaler Register DBTPi (i=0-3)
  • bit timing在CRC位切换回来
  • CAN FD data phase最大bit rate取决于fASYN
  • fASYN=20 MHz且bit time为4 tq, data phase的bit rate为5 Mbit/s,MCMCAN模块可以稳定支持
  • fASYN=80 MHz, data phase的bit rate为8 Mbit/s,需要用户自己考虑环境因素

唤醒信息必须以classical CAN格式传输

3 CAN Node的Receive

每个CAN Node都是CAN Message的收发实体

3.1 数据格式 Rx Buffer

CAN Node接收到Rx Frame以Rx Buffer的形式存放在Message RAM中,最多可以存放64个Rx Buffer数据

  • 所有Rx Buffer地址必须连续,首地址在RXBCi.RBSA (i=0-3)中设置

每个Rx Buffer占用的RAM空间大小和能容纳的CAN Frame的Data Field大小是对应的

  • RAM Size[byte] = Data Field[bytes] * 1/2 + 4

Rx Buffer由寄存器RxMsgk_R0 (k=0-63)、 RxMsgk_R1(k=0-63)和RxMsgk_DBm(k=0-63, m=0-63)组成

  • RxMsgk_R0.ID (k=0-63)是Message ID,支持Standard ID和Extended ID,Standard ID放在高11位
  • RxMsgk_R0.RTR (k=0-63)是Data Frame或Remote Frame标志位
  • RxMsgk_R0.XTD (k=0-63)是Standard ID或Extended ID标志位
  • RxMsgk_R0.ESI (k=0-63)是 Transmitting Node Error State Indicator
  • RxMsgk_R1.RXTS (k=0-63)是 Rx Timestamp
  • RxMsgk_R1.DLC (k=0-63)是 CAN Frame data length
  • RxMsgk_R1.BRS (k=0-63)是 Bit Rate Switch标志位
  • RxMsgk_R1.FDF (k=0-63)是classical CAN或者CAN FD标志位
  • RxMsgk_R1.FIDX (k=0-63)对应的Filtering Element
  • RxMsgk_R1.ANMF (k=0-63)没有被任何Filtering Element匹配的标志位
  • RxMsgk_DBm(k=0-63, m=0-63)是8 bit寄存器,每个存储1 byte Data Field数据

3.2 数据接收管理

3.2.1 Dedicated Rx Buffer

Rx Buffer可以单个进行管理,每个Rx Buffer称为Dedicated Rx Buffer

  • 所有的Dedicated Rx Buffer地址必须连续,首地址和Rx Buffer的首地址一样,在RXBCi.RBSA (i=0-3)中设置
  • 所有Dedicated Rx Buffer占用Message RAM大小必须相同,按最大的设计,在RXESCi.RBDS (i=0-3)中设置

每个Dedicated Rx Buffer可设置过滤器(Filter),当CAN Bus上的CAN Message符合Filter时写入CAN Message数据

每个Dedicated Rx Buffer写入数据后都会被锁住,不会再从CAN Bus上写入新数据,直到CPU访问完Dedicated Rx Buffer后解锁

3.2.2 Rx FIFO

多个连续的Rx Buffer可以组成Rx FIFO进行管理,每个CAN Node最多可以设置2个Rx FIFO,分别为Rx FIFO 0,Rx FIFO 1

  1. FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存区域,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址
  2. FIFO可容纳元素数量称为深度Deepth,每个元素大小称为Size
  3. FIFO有写入指针WritePointer指向当前要写入数据的Element,完成一次写入后,WritePointer+1,指向下一个Element。写到最后Element后WritePointer回到第一个Element,循环往复
  4. FIFO有读取指针ReadPointer指向当前要读取数据的Element,完成一次读取后,WritePointer+1,指向下一个Element。读到最后Element后ReadPointer回到第一个Element,循环往复
  5. 当WritePointer追上ReadPointer时,代表所有Element都是最新值,称为Full状态,停止写入,等待读取
  6. 当ReadPointer追上WritePointer时,代表所有Element都已被读取,称为Empty状态,停止读取,等待写入
  7. 当FIFO进入Full状态后依然写入,则称为溢出(Overflow),为了避免溢出,可设置水线(Watermark),Watermark<Deepth。当已被读取的Element达到Watermark时降低读取速度或者提高写入速度

每个Rx FIFO最多可以包含64个Rx Buffer数据

  • Rx FIFO的首地址为RXF0Ci.F0SA (i=0-3)和RXF1Ci.F1SA (i=0-3)
  • 深度为RXF0Ci.F0S (i=0-3)和RXF1Ci.F1S (i=0-3)
  • 水线为RXF0Ci.F0WM (i=0-3)和RXF1Ci.F1WM (i=0-3)

同一个Rx FIFO每个Rx Buffer的RAM Size必须相同,按最大的设计,在RXESCi.F0DS (i=0-3)和RXESCi.F1DS (i=0-3)中设置

Rx FIFO在溢出后的处理方式分为两种,Blocking Mode和Overwrite Mode,在RXF0Ci.F0OM (i=0-3)和RXF1Ci.F1OM (i=0-3)中设置

  • Blocking Mode:FIFO溢出后不再写入数据,新Message被抛弃
  • Overwrite Mode:FIFO溢出后用最新的Message覆盖最老的Element

Dedicated Rx Buffer和Rx FIFO 可以同时存在,但最多只能64个Rx Buffer,且按照Dedicated Rx Buffer、Rx FIFO 0、Rx FIFO 1的顺序排布

3.3 过滤器 Filter

Dedicated Rx Buffer和Rx FIFO可以设置过滤器(Filtering),确定CAN Bus上哪些Message被接收

CAN Node提供多个Filtering Element,每个Filtering Element定义1条过滤规则:

  • 128个Standard Message ID Filtering Element,由StdMsgk_S0 (k=0-127)设置
  • 64个Extended Message ID Filtering Element,由ExtMsgk_F0 (k=0-63)设置

每条Filtering Element可配制以下信息:

  • Enable或者Disable此Filtering Element
  • 设置过滤类型:范围过滤、精确过滤、bit mask过滤
  • 设置优先级
  • 设置按规则接收(Acceptance)或者拒绝(Rejection)
  • 设置通过规则后储存给Dedicated Rx Buffer(64个独立)、Rx FIFO 0、Rx FIFO 1其中1个

每条Message都按顺序检测Filtering Element,只要任何1个Filtering Element检测成功,则接受Message,后续Filtering Element不再检测

4 CAN Node的Transmission

4.1 数据格式 Tx Buffer

CAN Node准备发送的Tx Frame以Tx Buffer的形式存放在Message RAM中,最多可以存放32个Tx Buffer数据

  • 所有Tx Buffer地址必须连续,首地址在TXBCi.TBSA (i=0-3)中设置

每个Tx Buffer占用的RAM空间大小和能容纳的CAN Frame的Data Field大小是对应的

  • RAM Size[byte] = Data Field[bytes] * 1/2 + 4

Tx Buffer由寄存器TxMsgk_T0 (k=0-31)、 TxMsgk_T1(k=0-31)和TxMsgk_DBm(k=0-31, m=0-63)组成

  • TxMsgk_T0.ID (k=0-31)是Message ID,支持Standard ID和Extended ID,Standard ID放在高11位
  • TxMsgk_T0.RTR (k=0-31) 是Data Frame或Remote Frame标志位
  • TxMsgk_T0.XTD (k=0-31) 是Standard ID或Extended ID标志位
  • TxMsgk_T0.ESI (k=0-31) 是 Transmitting Node Error State Indicator
  • TxMsgk_T1.DLC (k=0-31) 是 CAN Frame data length
  • TxMsgk_T1.BRS (k=0-31) 是 Bit Rate Switch标志位
  • TxMsgk_T1.FDF (k=0-31) 是classical CAN或者CAN FD标志位
  • TxMsgk_T1.EFC (k=0-31) 储存Tx Events控制位
  • TxMsgk_T1.MM (k=0-31) CPU记录的信息
  • TxMsgk_DBm(k=0-31, m=0-63) 是8 bit寄存器,每个存储1 byte Data Field数据

4.2 数据发送管理

4.2.1 Dedicated Tx Buffer

Tx Buffer可以单个进行管理,每个Tx Buffer称为Dedicated Tx Buffer

  • 所有Dedicated Tx Buffer地址必须连续,首地址和Tx Buffer首地址一样,在TXBCi.TBSA (i=0-3)中设置
  • 所有Dedicated Tx Buffer占用Message RAM大小必须相同,按最大的设计,在TXESCi.TBDS (i=0-3)中设置
  • Dedicated Tx Buffer数量在TXBCi.NDTB (i=0-3)中设置

每个Dedicated Tx Buffer可通过TXBARi.ARn (i=0-3, n=0-31) 申请发送Message

多个Dedicated Tx Buffer同时申请发送时按Message ID仲裁,多个Dedicated Tx Buffer具有相同Message ID时按Tx Buffer的排序仲裁

4.2.2 Tx FIFO

多个连续的Tx Buffer可以组成Tx FIFO进行管理,Tx FIFO和Tx Queue只能二选一。通过TXBCi (i=0-3)切换FIFO模式和Queue模式

每个Tx FIFO最多可以包含32个Tx Buffer数据:

  • 首地址在TXBCi.TBSA (i=0-3)中
  • 深度在TXBCi.TFQS (i=0-3)中

Dedicated Tx Buffer和Tx FIFO 可以同时存在,但最多只能32个Tx Buffer,且按照Dedicated Tx Buffer、Tx FIFO的顺序排布

  • 每次发送仲裁,将所有Dedicated Tx Buffer和最老的Tx FIFO Tx Buffer比较优先级,Message ID最小的先发送

4.2.3 Tx Queue

多个连续的Tx Buffer可以组成Tx Queue进行管理,Tx FIFO和Tx Queue只能二选一。通过TXBCi (i=0-3)切换FIFO模式和Queue模式

每个Tx Queue最多可以包含32个Tx Buffer数据:

  • 首地址在TXBCi.TBSA (i=0-3)中
  • 深度在TXBCi.TFQS (i=0-3)中

Tx Queue中Tx Buffer的Message ID越小优先级越高,Message ID小的先发送,Message ID相同则Tx Buffer顺序在前的先发送

Dedicated Tx Buffer和Tx Queue可以同时存在,但最多只能32个Tx Buffer,且按照Dedicated Tx Buffer、Tx Queue的顺序排布

  • 每次发送仲裁,将所有Dedicated Tx Buffer和Tx Queue中的Tx Buffer比较优先级,Message ID最小的先发送,Message ID相同则Tx Buffer顺序在前的先发送

4.3 Tx Event FIFO

CAN Node每次发送Message,将本次发送的信息记录进一个Tx Event FIFO

Tx Event FIFO最大32 Element,由寄存器TxEventk_E0 (k=0-31)和TxEventk_E1(k=0-31)组成

  • TxEventk_E0.ID (k=0-31)是Message ID,支持Standard ID和Extended ID,Standard ID放在高11位
  • TxEventk_E0.RTR (k=0-31) 是Data Frame或Remote Frame标志位
  • TxEventk_E0.XTD (k=0-31) 是Standard ID或Extended ID标志位
  • TxEventk_E0.ESI (k=0-31) 是 Transmitting Node Error State Indicator
  • TxEventk_E1.TXTS (k=0-31) 是时间戳Timestamp,记录发送时间
  • TxEventk_E1.DLC (k=0-31) 是 CAN Frame data length
  • TxEventk_E1.BRS (k=0-31) 是 Bit Rate Switch标志位
  • TxEventk_E1.FDF (k=0-31) 是classical CAN或者CAN FD标志位
  • TxEventk_E1.ET (k=0-31) Tx event或Transmission in spite of cancellation标志位
  • TxEventk_E1.MM (k=0-31) CPU记录ID of Tx message status.

5 CAN Node的Timeout

CAN Node向Rx FIFO 0, Rx FIFO 1和Tx Event FIFO提供32 bit的Timeout Counter

  • Timeout Counter由TOCCi (i=0-3)配制
  • Timeout Counter的当前值由TOCVi.TOC (i=0-3)读取

Timeout Counter从TOCCi.TOP (i=0-3)开始递减,到达0时,set 中断标志位IRi.TOO (i=0-3)

  • 当Timeout Counter配置为Continuous Mode,从CCCRi.INIT (i=0-3) reset开始第一次运行,触发中断后立即重置Timeout Counter继续运行
  • 当Timeout Counter配置为Rx FIFO 0、Rx FIFO 1或Tx Event FIFO模式时,从相应FIFO存储第一个数据时开始第一次运行,触发中断后需要手动重置Timeout Counter

>>返回AUTOSAR系列文章目录<<

TC389-MCMCAN模块相关推荐

  1. 英飞凌TC397芯片ASCLIN和MCMCAN模块讲解

    英飞凌TC397芯片ASCLIN和CAN模块讲解 一.车用总线概述 1.车用LIN总线 2.车用CAN总线 3.车用FlexRay总线 4. 车用MOST总线 二.TC397-ASCLIN模块 1. ...

  2. AURIX TC397 CAN MCMCAN

    目录 TC397_CAN简介 CAN Loop-Back CAN Transceiver CAN00 标准帧和扩展帧 微信公众号 TC397_CAN简介 不同于TC297的MultiCAN+, TC3 ...

  3. AUTOSAR-Fls模块

    AUTOSAR-Fls模块 0 前言 1 TC389中的Data Flash基础知识 1.1 Data Flash操作区域 1.2 Data Flash操作指令 2 Fls模块的设计原理 2.1 Fl ...

  4. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  5. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能

    1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...

  6. Python 多线程总结(1)- thread 模块

    thread 模块 1. 单线程 首先看下单线程程序运行的例子,如下所示, import timedef loop0():print 'start loop0 begin', time.ctime() ...

  7. 关于python导入模块和package的一些深度思考

    背景 在python中有导入模块和导入package一说,这篇文章主要介绍导入模块和package的一些思考. 首先什么是模块?什么是package? 模块:用来从逻辑上组织python代码(变量,函 ...

  8. Python Re 模块超全解读!详细

    内行必看!Python Re 模块超全解读! 2019.08.08 18:59:45字数 953阅读 121 re模块下的函数 compile(pattern):创建模式对象 > import ...

  9. python性能分析之line_profiler模块-耗时,效率 时间

    20210203 直接用pycharm 自带的 20201215 直接装不上的情况下 先下载安装文件 再安装 line_profiler使用装饰器(@profile)标记需要调试的函数.用kernpr ...

最新文章

  1. appium 控件定位
  2. 使用ELK 搭建core文件展示平台
  3. 税收征收管理法律制度
  4. SpringMVC+ZTree实现树形菜单权限配置
  5. boost::type_erasure::equality_comparable相关的测试程序
  6. matlab绘图 excel,『在matlab上如何导入excel表格然后画图』excle表格如何使用绘图笔...
  7. JMetro“ Metro”选项卡,Java的TreeView和ContextMenu(JavaFX)
  8. 粉丝提问:有没有人会做彩虹表
  9. Flex2.0实现文件上传功能(服务器为ASP.NET)
  10. jQuery: 操作select option方法集合
  11. 两个特征是独立好还是正相关好_stata速学|相关分析|主成分分析|因子分析
  12. MFC小笔记:控件随窗口变化
  13. python教程龟叔_Python新手入门
  14. mysql从库数据源_SoapUI Pro教程:如何使用MySQL服务器作为数据源-从MySQL数据库获取数据...
  15. php 用什么缓存最好,在PHP中缓存中/大型数据集的一些最好的工具/策略是什么?...
  16. asp文件上传原理及分析
  17. Unity VideoPlayer视频播放器
  18. 教你将手机里的图片转成PDF的2种方法
  19. 随机变量的期望和方差
  20. 华为路由器忘记密码_如果忘记密码,如何访问路由器

热门文章

  1. SV学习笔记—子程序
  2. 使用logrotate完成日志自动切分并轮转
  3. cad lisp程序大集,超经典CAD lisp程序集锦、CAD快捷键大全
  4. 站长工具箱-免费站长工具箱软件下载
  5. linux sudo 权限_在Linux中使用sudo委派权限
  6. 第一次与病毒亲密接触——江民倒下了,瑞星能坚挺
  7. 链家网8000+万个文件何处安家?
  8. php match 1 0,PHP8 新特性 match 表达式详解
  9. RSA基本原理及常见攻击方法
  10. 大数据浪潮下,企业财务人员应如何提升数据分析能力?