我正在尝试构建基于 CANOpen 原则的嵌入式系统。我构建了大部分对象字典。我主要与 SDO 沟通(主要是加急传输)。我以前曾经使用过一次 CANOpen 作为主机(所以我的限制很清楚),但是我现在在从机端。
最近我被要求通过相同的协议更新我设备的软件。为了做到这一点,我倾向于 SDO 块传输,但我不知道它是如何完成的;通过 SDO 块传输可以传输的最大大小是多少?
在 SDO 块传输中,如CiA301标准中所定义。
size : 4 bytes addressing = 4GB
但是考虑块和序列:
1 < blksize < 128
0 < seqno < 128
Each segment consists 7 bytes of data
1 block: blksize (127) * seqno(0 to 127: 128) * 7 = ~111KB
相比之下,在同一个初始化中,我们设置了一个 m 值(由索引和子索引组成)。
1 sub-index: 4 bytes
1 index: ~256(1 byte addressing)* 4 = ~1KB
Object dictionary: ~64K(2 bytes addressing) * ~1KB = ~64MB
哪一个(或没有)是真的?我在这里很困惑。