In CANOpen, expedited SDO requests and responses include the index and sub-index of the request. All CANOpen master implementations that I've looked at require only one SDO per device be sent at once, for example:
Client: Initiate Upload Request, index = 0x1000, subindex = 0x00
=== Client waits
Server: Initiate Upload Response, index = 0x1000, subindex = 0x00, 4 bytes, data=XXX
Client: Initiate Upload Request, index = 0x1001, subindex = 0x00
=== Client waits
Server: Initiate Upload Response, index = 0x1001, subindex = 0x00, 4 bytes, data=XXX
It's theoretically possible for multiple SDOs to be sent before the response to the first SDO is received as long as an expedited transfer is used, for example:
Client: Initiate Upload Request, index = 0x1000, subindex = 0x00
Client: Initiate Upload Request, index = 0x1001, subindex = 0x00
=== Client waits
Server: Initiate Upload Response, index = 0x1001, subindex = 0x00, 4 bytes, data=XXXX
Server: Initiate Upload Response, index = 0x1001, subindex = 0x00, 4 bytes, data=XXXX
Is this behavior allowed under the standard or must only one SDO request be "in the air" at once? Can I count on this behavior from devices acting as an SDO server?