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

      最后更新:2022-02-22 07:08:49 手机定位技术交流文章

      【专栏】CANOpen系列教程

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

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

      目录

      1. CAN组成

      2. 位填充

      3. 优先级

      4. 位时序

      CAN总线波特率

      5. 数据帧

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

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

      CAN网络拓扑结构如下图:

      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总线空闲态,最先开始发送消息的单元获得发送权。

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

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

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

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

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

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

      4. 位时序

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

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

      CAN总线波特率

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

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

      5. 数据帧

      帧起始:表示帧开始的段,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个隐性位构成。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/18801.html

          热门文章

          文章分类