CAN协议
文章目录
CAN介绍
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。
- Controller意味着 ECU electronic control unit电子控制单元。
ECU集成了供电系统 单片机 驱动系统,是汽车里面最小的控制模块。
CAN就是为了让ECU进行通讯而设计。组成局域网进行通讯。
- 现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。CAN在欧洲是汽车网络的标准协议。
CAN 有两种标准
- ISO11898是针对通信速率为125Kbps~1Mbps 的高速通信标准。
- ISO11519-2是针对通信速率为 125Kbps以下的低速通信标准。
异步通讯
- I2C、 SPI 等具有时钟信号的同步通讯方式不同, CAN 通讯是一种异步通讯
- CAN只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
半双工
- 由于CAN 总线协议的物理层只有 1 对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说, CAN 通讯是半双工的,收发数据需要分时进行。
CAN的优势
多主控制
- 在总线空闲时,所有单元都可以发送消息(多主控制)
- 两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。
通信速度较快,通信距离远
- 最高 1Mbps(距离小于 40M)
- 最远可达 10KM(速率低于 5Kbps)。
具有错误检测、错误通知和错误恢复功能
- 所有单元都可以检测错误(错误检测功能)
- 检测出错误的单元会立即同时通知其他所有单元(错误通知功能)
- 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
故障封闭功能
- CAN 可以判断出错误的类型
- 总线上暂时的数据错误(如外部噪声等)
- 持续的数据错误(如单元内部故障、驱动器故障、断线等)。
- 当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
连接节点多
- CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。
- CAN 通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不受限制。
- 实际上可连接的单元数受总线上的时间延迟及电气负载的限制
- 降低通信速度,可连接的单元数增加。
- 提高通信速度,则可连接的单元数减少。
ISO11519-2物理层特性
- 标准的低速、远距离“开环网络”,要求每根总线上各串联有一个“2.2 千欧”的电阻。
- 最大传输距离为 1km,最高通讯速率为 125kbps
- 电气特性
- 1:
- 0:
ISO11898物理层特性
高速网络
- 标准的高速、近距离“闭环网络”。
传输速率与传输距离
- 线最大长度为 40m,通信速度最高为 1Mbps。
通讯节点
- CAN 通讯节点由一个 CAN 控制器及 CAN 收发器组成
- 控制器与收发器之间通过CAN_Tx 及 CAN_Rx 信号线相连
§ CAN_Tx 及 CAN_Rx 使用普通的类似 TTL 逻辑信号 - 收发器与 CAN 总线之间使用 CAN_High 及 CAN_Low信号线相连
§ CAN_High 及CAN_Low 是一对差分信号线
- 控制器与收发器之间通过CAN_Tx 及 CAN_Rx 信号线相连
电气特性
差分线使用两根线表示一个信号。
- 逻辑 1 时(隐性电平):CAN_High 和 CAN_Low线上的电压均为 2.5v,即它们的电压差 VH-VL=0V
- 表示逻辑 0 时(显性电平),CAN_High 的电平为 3.5V, CAN_Low 线的电平为 1.5V,即它们的压差为2V。
线与特性
- 在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。
- 假如有两个 CAN 通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的, 即可以认为显性具有优先的意味。
终端电阻
- 在 CAN 总线的起止端都有一个 120Ω的终端电阻,来做阻抗匹配,以减少回波反射。
CAN 收发芯片 JTA1050
- 经过TJA1050前是逻辑TTL电平
- 经过TJA1050之后会转换成CAN的高低电平
连接 - STM32 的 CAN 通过 P9 的设置,连接到 TJA1050 收发芯片
- 然后通过接线端子(CAN)同外部的 CAN 总线连接。
- 实际中通过跳线帽将 PA11 和 PA12 分别连接到 CAN_RX 和 CAN_TX 上面。
需要注意
- CAN 和 USB 共用了 PA11 和 PA12,所以他们不能同时使用。
- 在战舰 STM32 开发板上面是带有120Ω的终端电阻的,如果我们的开发板不是作为 CAN 的终端的话,需要把这个电阻去掉,以免影响通信。
CAN 协议5 种帧
5种帧介绍
CAN 协议是通过以下 5 种类型的帧进行的:
数据帧和遥控帧有标准格式和扩展格式两种格式。
- 标准格式有 11 个位的标识符(ID),扩展格式有 29 个位的 ID。
数据帧的构成
数据帧一般由 7 个段构成,即:
(1) 帧起始。表示数据帧开始的段。
(2) 仲裁段。表示该帧优先级的段。ID
(3) 控制段。表示数据的字节数及保留位的段。
(4) 数据段。数据的内容,一帧可发送 0~8 个字节的数据。
(5) CRC 段。检查帧的传输错误的段。
(6) ACK 段。表示确认正常接收的段。
(7) 帧结束。表示数据帧结束的段。
帧起始
- D 表示显性电平2.5,R 表示隐形电平0(下同)。
帧起始(Start Of Frame),这个比较简单,标准帧和扩展帧都是由 1 个位的显性电平表示帧起始。
仲裁段
- RTR((Remote Transmission Request Bit)远程传输请求) ,用于标识是否是远程帧(0,数据帧;1,远程帧)
- IDE(Identifier Extension Bit),译作标识符扩展位) 位为标识符选择位(0,使用标准标识符;1,使用扩展标识符)
- SRR(Substitute Remote Request Bit) 位为代替远程请求位,为隐性位,它代替了标准帧中的 RTR 位。
仲裁段,表示数据优先级的段,当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输,标准帧和扩展帧格式在本段有所区别
- 标准格式的 ID 有 11 个位。从 ID28 到 ID18 被依次发送。禁止高 7 位都为隐性(禁止设定:ID=1111111XXXX)。
- 扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性ID=1111111XXXX)。
根据识别码ID就可以识别到底是发给哪个设备。
控制段
- r0 和 r1 为保留位,必须全部以显性电平发送,但是接收端可以接收显性、隐性及任意组合的电平。
- DLC(Data Length Code),译为数据长度码) 为数据长度表示段,由 4 个数据位组成,高位在前,DLC 段有效值为 0~8,但是接收方接收到 9~15 的时候并不认为是错误。表示本报文中的数据段含有多少个字节.
控制段,由 6 个位构成,表示数据段的字节数。标准帧和扩展帧的控制段稍有不同
数据段
数据段,该段可包含 0~8 个字节的数据。从最高位(MSB)开始输出,标准帧和扩展帧在这个段的定义都是一样的。
CRC段
CRC 段,该段用于检查帧传输错误。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)组成,标准帧和扩展帧在这个段的格式也是相同的。
- CRC 的值计算范围包括:帧起始、仲裁段、控制段、数据段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
- CRC 校验码之后,有一个 CRC 界定符,它为隐性位,主要作用是把 CRC 校验码与后面的 ACK 段间隔起来。
ACK段
ACK 段,此段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位组成。标准帧和扩展帧在这个段的格式也是相同的。
- 发送单元的 ACK,发送 2 个位的隐性位
- 发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送 ACK)。所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。
- 接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送 ACK/返回 ACK。
在 ACK 槽和帧结束之间由 ACK 界定符间隔开。
帧结束
帧结束(End Of Frame),这个段也比较简单,标准帧和扩展帧在这个段格式一样,由 7 个位的隐性位组成,7 个隐性位表示结束。1111111
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!