CANFD支持范围过滤器 (Range filter) 、专用ID的过滤器 (Filter for dedicated IDs)和经典位屏蔽过滤器 (Classic bit mask filter)。
[/ol]总结本章介绍了CAN协议栈的发展历史、电气特性、基础理论、标准协议栈解析等干货知识点。
第二章 CANopen协议栈详解本章目录前言
一、CANopen简介二、CANopen的发展历史三、CANopen ID四、CANopen协议栈框架五、PDO六、SDO 6.1、快速SDO报文格式: 6.2、普通SDO报文格式: 6.2.1 普通SDO的读操作报文格式 6.2.2 普通SDO的写操作报文格式七、NMT八、时间戳协议九、同步协议十、紧急报文协议总结
CANopen是基于CAN(控制器局域网)总线的一种高级通信协议,被广泛应用于自动化和嵌入式系统中。本章旨在提供详细的CANopen相关知识、最佳实践和实际应用案例。包括但不限于CANopen标准: 对CANopen规范进行深入讲解,包括但不限于通信对象(COB-ID)的管理,进程数据对象(PDO)、服务数据对象(SDO)和网络管理(NMT)等核心概念。一、CANopen简介CANopen是基于Can的应用层协议,其报文分为过程数据对象 (PDO) 和服务数据对象(SDO)CANopen本身的设计目的就是实现小网络、控制信号的实时通讯,所以为了节约时间开销,最大限度保证实时性,CANopen作了一些定义:报文传输采用CAN标准帧格式,即11bit的ID域,以尽量减小传输时间;网络控制报文均采用数据最小字节数。比如心跳报文,只有1个字节数据;实时更新的过程数据无需接收方报文应答,即采用生产消费模型,降低总线负载;需要接收方确认的配置参数一般都是采用快速单字传输,即1个报文最大传送1个32位的参数变量,避免分帧引起的实时性降低。[/ol]
从 OSI 的 7 层网络模型的角度来看同,CAN(Controller Area Network)现场总线仅仅定义了第 1 层(物理层,见 ISO11898-2 标准)、第 2 层(数据链路层,见 ISO11898-1 标准);而在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件(Software)或固件(Firmware),只要了解如何调用相关的接口和寄存器,即可完成对 CAN 的控制。
4am1dv33ioz64040244823.png
CAN 总线的工业自动化应用中,由于设备的互通互联的需求越来越多,所以需要一个开放的、标准化的高层协议:这个协议支持各种 CAN 厂商设备的互用性、互换性,能够实现在 CAN 网络中提供标准的、统一的系统通讯模式,提供设备功能描述方式,执行网络管理功能。其中包括:应用层(Application layer):为网络中每一个有效设备都能够提供一组有用的服务与协议。通讯描述(Communication profile):提供配置设备、通讯数据的含义,定义数据通讯方式。设备描述(Device proflile):为设备(类)增加符合规范的行为。[/ol]
二、CANopen的发展历史
xe34oqrvinp64040244923.png
1994年CiA联盟(CAN in Automation ) 发布CANopen首版CiA301,CANopen的成功不是一个大供应商推动的,而是众多中小企业推动的。早期的CANopen,CAN远程还受到青睐,并且节点保护也是基于远程帧设计,后来被心跳报文取代,现在的CiA规范已经不建议使用远程帧。CiA301是CANopen最重要的最重要的基础协议,第一个版本已经定义了PDO (过程数据对象)和SDO(服务数据对象)引入了PDO的同步传输以及网络管理(NMT) 和紧急消息。后来在CiA301基础之上,针对各个行业推出一大批子协议,[/ol]
三、CANopen ID这里的CAN-ID也叫COB-ID(Communication Objectldentifier, 通信对象编号)。Node-ID节点ID,最大128个,范围0-127。[/ol]
w0l5r1eetab64040245023.png
根据不同的功能码,预定的CAN-ID如下:
casas5neue264040245123.png
四、CANopen协议栈框架
blgkmhgpy4b64040245223.png
五、PDOPDO简介:过程数据,即单向传输,无需接收节点回应 CAN 报文来确认,从通讯术语上来说是于“生产消费”模型,数据长度被限制为 1~8 字节。最多只要 1 就可以把一条信息或者一个变量传递结束。
qrxpow5pig464040245323.png
PDO协议:节点的PDO共定义8个数据对象,TPDO 和 RPDO 分别有4个,如下图所示:
oxszre5sp0t64040245423.png
PDO数据对象有三个重要参数,分别为通讯参数,映射参数,数据存放。RPDO 通讯参数 1400h to15FFh,映射参数 1600h to 17FFh,数据存放为 2000h 之后厂商 自定义区域: TPDO 通讯参数 1800h to19FFh,映射参数 1A00h to 1BFFh,数据存放为 2000h 之后厂商自定义区域。所有的 PDO 传送数据必须透过对象宇典映像到对应的索引区上。
PDO通讯参数:
4n5zug40tgz64040245523.png
①Number of entries 参数条目数量: 即本索引中有几条参数;②COB-ID: 即这个 PDO 发出或者接收的对应 CAN ID;③发送类型:即这个 PDO 发送或者接收的传输形式,通常使用循环同步和异步制造商特定事件较多;④Inhibit time 生产禁止约束时间(1/10ms): 约束 PDO 发送的最小间隔,避免导致总线负载剧烈增加,比如数字量输入过快,导致状态改变发送的 TPDO 频繁发送总线负载加大,所以需要一个约束时间来进行“滤波”,这个时间单位为 0.lms;⑤Event timer 事件定时器触发的时间(单位 ms):定时发送的 PDO,它的定时时间如果这个时间为 0,则这个 PDO 为事件改变发送;⑥SYNC start value 同步起始值:同步传输的 PDO,收到诺干个同步包后,才进行发送,这个同步起始值就是同步包数量。比如设置为 2,即收到 2 个同步包后才进行发送。
PDO映射:[/ol]为了更加直观地表现映射,将参数、应用数据、CAN 报文数据联 合起来展示,不同的映射采用不同的颜如下图所示:
ymhcq3mu2nj64040245624.png
六、SDOSDO简介:服务数据,主要用于 CANopen 主站对从节点的参数配置。为每个消息都生成一个应答,确保数据传输的准确性,在一个CANopen 系统中,通常 CANopen 从节点作为 SDO 服务器,CANopen 主节点作为客户端。
k4bqlwx2e3j64040245724.png
SDO协议:SDO 分为快速 SDO 协议和普通SDO协议,快速SDO数据长度最大4个字节,普通SDO没有最大限制。其报文格式如下图所示,由命令码、索引、子索引和数据组成。
ypp0cuthidb64040245824.png
节点的SDO定义如下图所示:
lfqcyj3101g64040245924.jpg
SDO 客户端通过索引和子索引,能够访问 SDO 服务器上的对 象字典。这样 CANopen 主节点可以访问从节点的任意对象字典项的参数,并且 SDO 也可以 传输任何长度的数据。发送方 (客户端)发送 CAN-ID 为600h+Node-ID 的报文,Node-D 为接收方(服务器) 的节点地址,数据长度均为 8 字节,实际数据小于8字节时,用0补齐到8字节。
[/ol]
快速SDO报文格式:快速SDO的读报文格式如下图所示:
3qbelx0m4we64040246024.png
快速SDO的写报文格式如下图所示:
0tjl0orpit064040246124.png
说明:图中的符号”-“表示数据不予考虑,使用0进行填充。
普通SDO报文格式:普通SDO传输的有效数据长度大于4个字节,采用分段式传输方式,读和写均分成了三个阶段:初始报文(在传输数据之前确认要传输的数据长度),传输过程报文(按照传输规格把数据进行分段传输);结束报文(数据分段的最后一段数据)。
①普通SDO的读操作报文格式分段读初始报文:获取从站(服务器)指定索引对象的读取数据长度,与快速传输的读指令一致使用0x40指令(这里同时也就说明分段读取是由从设备的返回数据所决定的,这里返回的是0x41指今而不是快速传输中的0x43、47等指令) 。
分段读传输过程报文:在传输过程中,主站(客户端先发送指今0x60的报文开始读传输,同时从站(服务器)响应0x00指令的报文上传一段数据,下一主站发送0x70指令的报文,这时从站响应0x10指令的报文继续上传下一段数据,然后又会再次按照0x60-00、0x70-10的顺序接着下传输后续的数据,每次7个字节,最后的一段数据将会进入结束报文阶段。只要总数据大小不超过7也会一开始直接进入结束阶段。
分段读结束报文:在上一个阶段中,数据是按照0x60-00、0x70-10的顺序进行交替传输,当发送到最后一段数据时,主站并不知道是到达最后一段了,所以主站发送的“0x60或70“指令保持不变,而其对应从站的响应指令”0x00或10“替换成对应的结束指令。
②普通SDO的写操作报文格式分段写初始报文:通知从站(服务器)指定索引对象的写入数据长度,使用0x21指令发送这个长度值。
分段写传输过程报文:在传输过程中,主站(客户端先发送指今0x00的报文开始读传输,同时从站(服务器)响应0x20指令的报文上传一段数据,下一主站发送0x10指令的报文,这时从站响应0x30指令的报文继续上传下一段数据:然后又会再次按照0x00-20、0x10-30的顺序接着往下传输后续的数据,每次7个字节。最后的一段数据将会进入结束报文阶段。只要总数据大小不超过7也会一开始直接进入结束阶段。
分段写结束报文:在上一个阶段中,数据是按照0x00-20、0x10-30的顺序进行交替传输,当发送到最后一段数据时,主站会把“0x00或10“指令替换成对应的结束指令,而其对应的从站响应指令”0x20或30“保持不变。
[/ol]
七、NMT网络管理NMT(NetworkManagement)采用的主从方式,主机节点可以向从节点发送和请求数据。同一个网络中只能有一个主节点,一个或者多个从节点。
NMT节点状态切换:
各种状态下支持的报文操作:
上线报文:
心跳报文:
NMT报文:[/ol]
八、时间戳协议NMT主机发送自身的时钟,为网络各个节点提供公共的时间参考。
九、同步协议该报文对象主要实现整个网络的同步传输,一般同步报文由 NMT 主机发出。
同步窗口时间:索引1007h 约束了同步发送后,从节点发送PDO 的时效,即在这个时间内发送的 PDO 才有效超过时间的 PDO将被丢弃。通讯循环周期:索引1006h 规定了同步顿的循环周期。
十、紧急报文协议当设备内部发生错误,触发该对象,发送设备内部错误代码,提示 NMT 主站。紧急报文属于诊断性报文,一般不会影响 CANopen 通讯。
总结CANopen是基于CAN(控制器局域网)总线的一种高级通信协议,被广泛应用于自动化和嵌入式系统中。本章旨在提供详细的CANopen相关知识、最佳实践和实际应用案例。包括但不限于CANopen标准: 对CANopen规范进行深入讲解,包括但不限于通信对象(COB-ID)的管理,进程数据对象(PDO)、服务数据对象(SDO)和网络管理(NMT)等核心概念。
end
一口Linux
关注,回复【1024】海量Linux资料赠送
精彩文章合集
文章推荐
?【专辑】ARM?【专辑】粉丝问答?【专辑】所有原创?【专辑】linux入门?【专辑】计算机网络?【专辑】Linux驱动?【干货】嵌入式驱动工程师学习路线?【干货】Linux嵌入式所有知识点-思维导图