SDO 报文格式详解
官方概念:SDO protocol (CiA)
细节对齐 CiA 301(PAS 正式文本)与公开协议描述
SDO = 确认的 点对点对象字典访问:Client 发起,Server 拥有 OD
1. 通道与 COB-ID
一个 SDO 通道 = 两帧不同 CAN-ID 的配对:
| 方向 | 预定义 COB-ID | 含义 |
|---|---|---|
| Client → Server | 0x600 + Node-ID |
请求(常称 SDO RX,相对从站) |
| Server → Client | 0x580 + Node-ID |
响应(SDO TX) |
- 第一路 SDO Server 通道强制预定义,所有 CANopen CC 设备必须支持
- 参数对象:
1200h…(Server)、1280h…(Client) - DLC 恒为 8(不足补 0)
术语(从 Client 视角):
| 术语 | 含义 |
|---|---|
| Upload | Client 读 Server 的 OD |
| Download | Client 写 Server 的 OD |
2. 通用 8 字节布局
1 | Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 |
| 字段 | 说明 |
|---|---|
| Command Specifier | 命令字节:高 3 bit 为 ccs/scs,其余为标志 |
| Index | 16-bit OD 索引,小端 |
| Subindex | 8-bit |
| Data | Expedited 数据,或 Size,或 Abort 码等 |
3. 命令字节:Client(ccs)与 Server(scs)
3.1 高 3 位命令说明符
| Bits 7–5 | Client 发送 (ccs) | Server 发送 (scs) |
|---|---|---|
| 0 | Download segment | Upload segment |
| 1 | Initiate download | Download segment 应答 |
| 2 | Initiate upload | Initiate upload 响应 |
| 3 | Upload segment | Initiate download 应答 |
| 4 | Abort transfer | Abort transfer |
| 5 | Initiate block upload | Block download 响应 |
| 6 | Initiate block download | Block upload 响应 |
3.2 Initiate 阶段其余标志(常见)
对 Initiate download/upload 请求:
| Bit | 名 | 含义 |
|---|---|---|
| 4 | — | 保留,写 0 |
| 3–2 | n | Data 域中非数据字节数(仅当 e=1 且 s=1 时有效) |
| 1 | e | 1=Expedited(数据在本帧);0=Normal(分段) |
| 0 | s | 1=给出大小;0=未指示大小 |
数据有效长度(expedited 且 s=1):4 - n 字节,落在 Byte4… 中。
4. Expedited Download(写 ≤4 字节)
4.1 Client 请求(ccs=1, e=1, s=1)
例:向节点 5 写 0x6040:00 = 0x000F(2 字节)
计算:n = 4−2 = 2;命令字节 = (1<<5) | (2<<2) | (1<<1) | 1 = 0x2B
1 | COB-ID: 0x605 |
4.2 Server 应答(scs=3,Initiate download response)
典型成功应答(无数据):
1 | COB-ID: 0x585 |
5. Expedited Upload(读 ≤4 字节)
5.1 Client 请求(ccs=2, e/s 依实现,常 e=0 s=0 发起)
读 0x6041:00:
1 | COB-ID: 0x605 |
5.2 Server 响应(含数据)
若返回 2 字节状态字 0x0237:
1 | COB-ID: 0x585 |
6. Segmented(Normal)传输(>4 字节)
流程概要(CiA / 公开描述一致):
- Initiate:协商 Index/SubIndex,e=0;Data 域可带总长度(若 s=1)
- 随后多帧 Segment:每段最多 7 字节应用数据(1 字节协议头)
- Segment 命令字节含 toggle 与 c(最后一段) 等标志
分段适合长字符串、大参数块;实现时必须正确交替 toggle,否则 Abort 05030000h。
7. Block Transfer(可选加速)
- 按块(最多约 127 segment)确认,减少每段握手
- 适合固件/大批量;设备双方都需支持
- 细节见 CiA 301;公开概述见 CiA SDO
8. Abort Transfer
任一方可中止:
1 | Command = 0x80 |
8.1 常用 Abort Code(节选)
| Abort Code | 含义 |
|---|---|
05030000h |
Toggle 未交替 |
05040000h |
SDO 协议超时 |
05040001h |
命令说明符无效/未知 |
06010000h |
不支持的对象访问 |
06010001h |
读只写对象 |
06010002h |
写只读对象 |
06020000h |
对象不存在 |
06090011h |
子索引不存在 |
08000000h |
一般错误 |
线上字节例:02 00 01 06 → 码 06010002h。
9. 完整读写时序(报文级)
1 | Client 605: 40 41 60 00 00 00 00 00 # initiate upload 6041h |
10. 与概念篇关系
工程用法、超时、配置顺序见:03-SDO与PDO通信.md
对象字典寻址见:01-对象字典与预定义连接集.md
下一篇:12-PDO报文与映射编码.md
正在加载留言…