CAN详解

一、CAN

        CAN是控制器局域网络(Controller Area Network)的简称,是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,在欧洲已是汽车网络的标准协议。
        CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。

二、硬件连接

        CAN总线只有2根线与外部相连,并且内部集成了错误探测和管理模块,是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信速率最高可达1Mbps(40m以内),最长传递距离达10km(速率为5kbps以下)。网络节点目前可达110个,报文标志符2032种(CAN2.0A),扩展标准(CAN2.0B)中报文标志符几乎不受限制。
        CAN网络可以理解为多台CAN设备连接在同一条CAN总线上组合成的网络,其中的CAN设备我们称之为节点。CAN网络拓扑结构如下图:
在这里插入图片描述
        一个CAN节点主要包含三类:

  • MCU应用程序,根据程序分层可分为三部分:
    (1)业务逻辑代码:是根据项目需求而定,也很好理解。比如我读取一个传感器数据,并对其做出相应逻辑处理。
    (2)协议层代码:比如后续要讲述的CANOpen。
    (3)底层驱动代码:配置CAN总线相应参数、控制收发的代码
  • CAN控制器。内部结构还是挺复杂的,一般现在CAN控制器都是与处理器集成在一起。包含一些控制、状态、配置等寄存器。比如有些STM32芯片带有CAN,也就是说CAN控制器已经集成在STM32芯片中了,我们只需要编程操作其中的寄存器即可。
  • CAN收发器。将CAN收发引脚(CAN_TX和CAN_RX)的TTL信号转换成CAN总线的电平信号。

        可以把CAN总线通信认为是UART通过RS485进行通信:CAN控制器就如UART的控制器,而CAN收发器就如RS485转换芯片。

三、通信协议

        一般比较常见的CAN通信协议主要有三种:J1939、CANopen、devicenet。这些CAN通信协议的最大特点就是废除了传统的站地址编码,而代之以对通信数据块进行编码。
        CAN协议是通过以下5种类型的帧进行的:

  • 数据帧,用于发送单元向接收单元传送数据的帧。
  • 远程帧,用于接收单元向具有相同ID的发送单元请求数据的帧。
  • 错误帧,用于当检测出错误时向其它单元通知错误的帧。
  • 过载帧,用于接收单元通知其尚未做好接收准备的帧。
  • 间隔帧,用于将数据帧及遥控帧与前面的帧分离开来的帧。

        数据帧和遥控帧有标准格式扩展格式两种格式。标准格式有11个位的标识符(ID),扩展格式有29个位的ID。

四、数据帧

        数据帧结构上由7个段构成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。
在这里插入图片描述

  • 帧起始帧结束
    在这里插入图片描述
  • 仲裁段
    在这里插入图片描述
  • 控制段
    在这里插入图片描述
  • 数据段
    在这里插入图片描述
  • CRC段
    在这里插入图片描述
  • ACK段
    在这里插入图片描述

五、远程帧

在这里插入图片描述
        数据帧与远程帧的区别:
在这里插入图片描述

六、错误帧

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、过载帧

在这里插入图片描述

八、帧间隔

在这里插入图片描述

九、CAN数据处理流程

在这里插入图片描述

<think>好的,用户想了解TMS570的CAN协议详细信息和使用方法。首先,我需要回忆一下TMS570系列微控制器的基本特性,特别是其通信模块部分。TMS570是TI的高性能汽车级MCU,常用于安全关键应用,CAN协议作为汽车通信的重要标准,肯定是其重要外设之一。 接下来,我需要确定用户可能需要的具体内容。他们可能想知道如何配置CAN控制器,包括初始化步骤、波特率设置、消息对象的配置,以及中断处理等。此外,可能还涉及到实际应用中的注意事项,比如错误处理、总线仲裁、验收过滤器的使用等。 然后,我需要检查自己掌握的资料是否准确。例如,TMS570的CAN模块是否支持CAN 2.0B,是否支持FD,或者是否有多个CAN控制器实例。同时,代码示例对于用户来说可能非常有用,所以需要确保示例的正确性,包括寄存器配置和API使用。 用户可能还关心如何与实时操作系统(如RTOS)集成,或者如何诊断CAN总线问题。此外,安全性相关的功能,比如ECC保护或双核锁步,可能在汽车应用中很重要,需要提及。 需要避免过于技术化的术语,但又要足够详细,让用户能够实际应用。可能还需要区分不同型号的TMS570之间的差异,但如果没有具体型号,保持一般性的描述。 最后,生成相关问题时,要考虑用户可能进一步的需求,比如如何优化CAN通信、处理高负载情况、调试工具的使用,或者与其他协议如LIN或FlexRay的对比。这些问题可以帮助用户深入理解并解决实际开发中的问题。</think>### TMS570 CAN协议详解 TMS570系列微控制器是TI推出的高性能汽车级MCU,其CAN模块支持ISO 11898-1标准,提供32个独立消息对象和多种工作模式[^1]。 #### 1. 硬件特性 - 支持CAN 2.0B协议(标准帧和扩展帧) - 最高1Mbps通信速率 - 集成32个可配置消息对象 - 硬件验收过滤功能 - 自动重传机制 #### 2. 基础配置步骤 **波特率设置公式**: $$ BRP = \frac{SYSCLK}{2 \times (T_q \times Baudrate)} - 1 $$ 其中$T_q$为时间量子总数(通常为8-25) **示例配置代码**: ```c void CAN_Init(void) { canREG1->CTL |= 0x00000001; // 初始化模式 canREG1->BTR = (7UL << 16) | (13UL << 24) | 4; // 500kbps @80MHz canREG1->IF1CMD = 0x00000080; // 配置消息对象 canREG1->CTL &= ~0x00000001; // 退出初始化模式 } ``` #### 3. 消息传输流程 - **发送流程**: 1. 设置消息对象ID(标准/扩展) 2. 写入数据到数据寄存器 3. 置位传输请求位 - **接收流程**: 1. 配置验收过滤器 2. 设置中断回调函数 3. 读取数据寄存器 #### 4. 关键寄存器说明 | 寄存器 | 功能描述 | |--------|----------| | CAN_CTL | 全局控制寄存器 | | CAN_BTR | 波特率配置寄存器 | | CAN_IF1CMD | 接口控制寄存器 | | CAN_TXRQx | 传输请求寄存器 | #### 5. 安全机制 - 双核锁步校验 - ECC保护机制 - 总线错误检测计数器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值