# general canopen **Repository Path**: daliny/general-canopen ## Basic Information - **Project Name**: general canopen - **Description**: 实现的一种CAN通讯框架,目前已实现MCU端的代码解析,已通过测试 - **Primary Language**: C - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 0 - **Created**: 2023-02-22 - **Last Updated**: 2024-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## CAN协议备份工程 > 下面为协议文档中一段描述: 文档位于Doc目录下 根据功能码功能分为PDO报文和SDO报文,PDO报文需要按约定映射数据对象,无需协议开销,SDO报文分段传输和块传输,需要协议开销。 PDO传输采用生产者/消费者模式协议,SDO传输采用客户端/服务器模式协议。 ### PDO协议 PDO分两种用法,发送和接收,分别为Transmit-PDO(TPDO)和Receive-PDO(RPDO), TPDO为从站(组件)发送主站(控制器),RPDO为主站(控制器)发送给从站(组件)。 PDO报文传输采用定时器触发的方式,定时器时间可以通过SDO报文配置。 原则上分配PDO的FUN-ID表为:表1 PDO分配FUN-ID表 PDO FUN-ID PDO1(tx) 0x181~0x1FF PDO1(rx) 0x201~0x27F PDO2(tx) 0x281~0x2FF PDO2(rx) 0x301~0x37F PDO3(tx) 0x381~0x3FF PDO3(rx) 0x401~0x47F PDO4(tx) 0x481~0x4FF PDO4(rx) 0x501~0x57F ### SDO协议 功能码功能分为下载(写)和上传(读)功能,参考DS301协议的SDO传输协议。 SDO用于客户端和服务器之间传输多个数据集(每个包含任意大小数据块)。客户端通过寻址(对象字典的索引和子索引)来控制传输哪个数据集,数据集的内容定义在对象字典中。 SDO可采用段序列传输,也可以采用块传输,段和块传输可用于OTA升级数据报文传输。 #### 段传输: 先发送一个初始化分段指令,让客户端和服务器各自准备好处理接下来的分段。对于传输数据量小于等于4个字节情况,可以在初始化分段指令中包含数据,无需再分段传输(称为快速SDO传输)。 #### 块传输: 其中每个块可由多至127段(包含序号和数据)的段序列组成。先发送一个初始化块,让客户端和服务器准备好处理接下来的块,并议定每块的分段数。在传输完成阶段。客户端和服务器通过校验来验证之前接收到的数据集的正确性。 SDO段服务传输流程: - SDO下载,分为SDO下载启动,SDO下载分段。 - SDO上传,分为SDO上传启动,SDO上传分段。 - SDO中止传输 SDO块服务传输流程: - SDO块下载,分为SDO块下载启动,SDO下载块,SDO块下载结束。 - SDO块上传,分为SDO块上传启动,SDO上传块,SDO块上传结束。 SDO段传输一共定义了六种带应答的服务(SDO下载,SDO上传,SDO上传启动,SDO下载启动,SDO分段下载和SDO分段上传)和一种不带应答的服务(SDO中止传输),它们共同进行SDO段正常传输和加速传输。 SDO块传输一共定义了八种带应答的服务(SDO块下载,SDO块上传,SDO块上传启动,SDO块下载启动,SDO子块下载,SDO子块上传,SDO块上传结束和SDO块下载结束)和一种不带应答的服务(SDO中止传输),它们共同进行SDO块正常传输和加速传输。