Getting error: "Invalid combination of start bit, signal size, and byte order", when packing message in big endian format using vehicle network toolbox

2 views (last 30 days)
I am trying to transmit a 4 byte can message in big endian format using the vehicle network toolbox using the code below.
message = canMessage(0x123, false, 4);
pack(message, 0x12345678, 31, 32, 'BigEndian');
But when i run it i get the error below when packing the message.
Error using can.Message/pack
Invalid combination of start bit, signal size, and byte order.
Error in canDebug (line 2)
pack(message, 0x12345678, 31, 32, 'BigEndian');
I have tried fixing the issue using the following changes, all errornous:
message = canMessage(0x123, false, 4);
pack(message, 0x12345678, 32, 32, 'BigEndian');
Error using pack
Expected STARTBIT to be a scalar with value < 32.
Error in can.Message/pack (line 614)
validateattributes(startBit, {'numeric'}, ...
Error in canDebug (line 2)
pack(message, 0x12345678, 32, 32, 'BigEndian');
message = canMessage(0x123, false, 4);
pack(message, 0x12345678, 0, 32, 'BigEndian');
Error using can.Message/pack
Invalid combination of start bit, signal size, and byte order.
Error in canDebug (line 2)
pack(message, 0x12345678, 0, 32, 'BigEndian');

Answers (1)

Muskan
Muskan on 21 Feb 2024
The start bit and the byte order are not independent. You can further refer to the following MATLAB Answer for a better understanding:
I hope this helps!
  1 Comment
Søren Lang
Søren Lang on 21 Feb 2024
I have been looking at that question, though if you compress the message to 2 bytes, as to keep the message short and to the point.
message = canMessage(500,false,2);
pack(message,int16(1000),16,16,'BigEndian')
value = unpack(message,16,16,'BigEndian','int16')
You get the error:
Error using pack
Expected STARTBIT to be a scalar with value < 16.
This is because bit position 16 does not exist when doing 0 indexing as is done with the vehicle network toolbox.
When doing big endian the byte array is reversed, eg.
[0x12 0x34 0x56] -> [0x56 0x34 0x12]
Thus the startbit will be given as the total amount of bits in the message minus 8 bits. Thus to run the above code, it should look like below.
message = canMessage(500,false,2);
pack(message,int16(1000),8,16,'BigEndian')
value = unpack(message,8,16,'BigEndian','int16')

Sign in to comment.

Products


Release

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!