CANOpen(一)-- CAN通信基础补充

【专栏】CANOpen系列教程

CAN与CANOpen(一)_maifansnet的博客-CSDN博客_canopen

《CANOpen轻松入门》--周立功

目录

 1. CAN组成

2. 位填充

3. 优先级

4. 位时序

CAN总线波特率

5. 数据帧


CAN既是一种总线,又是一种协议。

CAN总线协议只定义了物理层数据链路层,在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件或固件,只要了解如何调用相关的接口和寄存器,即可完成对CAN的控制。简单说,CAN总线就是一层硬件协议,比如:差分信号电平的定义,数据帧的定义等。

CAN网络拓扑结构如下图:

CANOpen(一)-- CAN通信基础补充_第1张图片

 1. CAN组成

一个CAN节点主要包含:MCU应用程序、can控制器、can收发器。

(1)MCU应用程序可分为:

业务逻辑代码:根据项目需求而定,比如读取传感器数据并对其做出响应逻辑处理。

协议层代码:比如CANOpen。

底层驱动代码:配置CAN总线相应参数、控制收发的代码。

(2)CAN控制器:

我们一般说的xx芯片带有CAN,表示CAN控制器集成在芯片内了,只需要操作其中的寄存器即可。

(3)CAN收发器:

将CAN收发引脚(CAN_TX和CAN_RX)的TTL信号转换成CAN总线的差分电平信号

2. 位填充

当同样的电平持续5位则添加一个位的反型数据。

(1)发送单元的工作:在发送数据帧和遥控帧时,SOF~CRC段间的数据,相同电平如果持续5位,在下一位则要插入1个与前5位反型的电平。

(2)接收单元的工作:在接收数据帧和遥控帧时, SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个位)再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

3. 优先级

在CAN总线空闲态,最先开始发送消息的单元获得发送权。

多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。

CANOpen(一)-- CAN通信基础补充_第2张图片

当单元1仲裁失利后,自动转换为接收,同时控制器将会在下一轮继续发送这次未完成的数据。

数据帧和遥控帧的优先级:

具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,可继续发送。

标准格式和扩展格式的优先级:

标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。

4. 位时序

为了实现位同步,CAN协议把每一个数据位的时序分解成如下图所示的4个段。分解后的最小时间单位是Tq,而一个完整的位由8~25个Tq组成。

 CANOpen(一)-- CAN通信基础补充_第3张图片

信号的采样点位于PBS1与PBS2段之间,通过控制各段的长度,可以对采样点的位置进行偏移,以便准确地采样。 

CAN总线波特率

CAN总线属于异步通信(异步就是通信设备之间通过约定一样的时间来收发数据),而这个时间就会决定其波特率。

假设上图中的1Tq = 1us,而每个数据位由19个Tq组成,则传输一位数据需要时间T1 = 19us,从而每秒可以传输的数据位个数为:1x10^6/19 = 52631.6 (bps),即每秒可传输的数据位的个数称为通讯波特率。

5. 数据帧

CANOpen(一)-- CAN通信基础补充_第4张图片

帧起始:表示帧开始的段,1个位的显性位。

仲裁段:通过ID来判断总线上哪一个节点具有优先发送的权利。ID越小(显性为0),优先级越高。RTR = 0代表数据帧,RTR = 1代表远程帧。

控制段:4位的DLC,1个IDE(数值为0)位和r0保留位。

数据段:数据从MSB(最高位)开始输出。

CRC段:检查帧的传输错误的段,CAN报文包含一段15位的CRC校验码,一旦接收节点算出的CRC码跟接收到的CRC码不同,则它会向发送节点反馈错误信息,利用错误帧请求它重新发送。CRC码一般由CAN控制器硬件计算得出,出错时的处理则由软件控制最大重发数。

ACK段:用来确认是否正常接收,由ACK槽和ACK界定符2个位构成。

  • A.发送单元在 ACK 段发送 2 个位的隐性位。
  • B.接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位, 通知发送单元正常接收结束。这称作“发送 ACK”或者“返回 ACK”。

帧结束:由7个隐性位构成。

你可能感兴趣的:(通信,嵌入式,单片机,canopen)