I am trying to build an embedded system based on CANOpen principles. I constructed most of the object dictionary. I am mainly communicating with SDO (mostly expedited transfer). I have used CANOpen once before as a master (so my limits were clear), however I am in the slave side now.
Recently I am requested that the software of my device is to be updated over the same protocol. In order to do this, I leaned towards SDO block transfer, but I cannot figure out how it is done; what is the maximum size that can be transferred over SDO block transfer?
In SDO block transfer, as defined in CiA301 standard.
size : 4 bytes addressing = 4GB
However considering block and seq:
1 < blksize < 128
0 < seqno < 128
Each segment consists 7 bytes of data
1 block: blksize (127) * seqno(0 to 127: 128) * 7 = ~111KB
In contrast, in the same initiation, we set an m value (consisting of index and sub-index).
1 sub-index: 4 bytes
1 index: ~256(1 byte addressing)* 4 = ~1KB
Object dictionary: ~64K(2 bytes addressing) * ~1KB = ~64MB
Which one (or none) is true? I am confused here.