Page 1 of 1

ECU Receive address not divisible by 16

PostPosted: Thu Mar 05, 2020 5:17 am
by aNinjaneer
What happens when you need to grab an address that is not divisible by 16 and not within 8 of a number that is divisible by 16? For example, if you need to receive the address 0x024A, the nearest prior address divisible by 16 is 0x0240. Since the offsets only go up to 7, that means the highest address you can receive is 0x0247, missing the 0x024A. Is this correct? Is the note not correct in saying that the base ID must be divisible by 16? Or is there a way to access the remaining 8 addresses?

Re: ECU Receive address not divisible by 16

PostPosted: Thu Mar 05, 2020 1:03 pm
by MalcolmG
the documentation is actually wrong and you can receive addresses that are divisible by 8, so all addresses are available.

Re: ECU Receive address not divisible by 16

PostPosted: Thu Mar 05, 2020 2:57 pm
by Stephen Dean
Hi,

The Base address needs to be divisible by 16, certain addresses that are divisible by 8 but not 16 will partially work, but some of the messages will not be received in the correct slots.

You can also receive 32 16bit messages, the help is incorrect on that.

Re: ECU Receive address not divisible by 16

PostPosted: Thu Mar 05, 2020 8:07 pm
by MalcolmG
Any chance you can expand on that statement Stephen? What defines whether an address divisible by 8 works or not? I've used it a few times with base addresses ending with (hexadecimal) 8 and everything was where I expected it to be, why would it sometimes work and sometimes not?

Re: ECU Receive address not divisible by 16

PostPosted: Fri Mar 06, 2020 6:57 am
by aNinjaneer
So, given my example, how would you receive address 0x024A? Or is that not possible? Why does the base ID need to be divisible by 16 if there are only 8 messages received from that base? That means you can't ever capture half of the possible addresses.

Re: ECU Receive address not divisible by 16

PostPosted: Fri Mar 06, 2020 7:41 am
by MalcolmG
aNinjaneer wrote:So, given my example, how would you receive address 0x024A? Or is that not possible? Why does the base ID need to be divisible by 16 if there are only 8 messages received from that base? That means you can't ever capture half of the possible addresses.

In my experience (not using that exact address, but reading an IZZE Racing IMU on 0x4EC and 0x4ED), I have been able to use the base address 0x4E8; so based on that I would suggest you try 0x248, and the data on message 0x24A should appear under CAN 2 Offset 0-6; although based on what Stephen has said it's possible it might not work this way.

Re: ECU Receive address not divisible by 16

PostPosted: Fri Mar 06, 2020 11:12 am
by Stephen Dean
I've had some further discussions with the engineers regarding this, and there are some legacy restrictions from the V1.3 Build versions of the GPR Packages that have been carried over into the V1.4 Builds. In the V1.3 Packages there was 64 separate channels available for use, but the proviso with the use of them was that the starting address had to end with a 0, i.e. 0x240 and the whole message range (0x240 - 0x24F) was allocated to the CAN Receive channels. If the block started with a number other than 0, such as 0x248, then the messaging would still go to 0x24F, but would not roll over to the next message block (0x250).

Within the message blocks there are some other restrictions, in that currently you can use 0x248, and this will read through to 0x24F, but a higher or lower starting number will give you an Invalid CAN Bus error as the address is not cleanly divisible by 8 or 16.

So to read an address at 0x24A, the ECU Receive CAN ID Base is set to 0x248, and then the messages will be available in the CAN 2 Offset X messages.

Re: ECU Receive address not divisible by 16

PostPosted: Fri Mar 06, 2020 11:19 am
by Stephen Dean
MalcolmG wrote:
aNinjaneer wrote:So, given my example, how would you receive address 0x024A? Or is that not possible? Why does the base ID need to be divisible by 16 if there are only 8 messages received from that base? That means you can't ever capture half of the possible addresses.

In my experience (not using that exact address, but reading an IZZE Racing IMU on 0x4EC and 0x4ED), I have been able to use the base address 0x4E8; so based on that I would suggest you try 0x248, and the data on message 0x24A should appear under CAN 2 Offset 0-6; although based on what Stephen has said it's possible it might not work this way.


0x4E8 will work in this circumstance as it is divisible by 8, but 0x4EC and 0x4ED will not as they are not cleanly divisible by 8.

Re: ECU Receive address not divisible by 16

PostPosted: Fri Mar 06, 2020 11:27 am
by MalcolmG
SDean wrote:
MalcolmG wrote:
aNinjaneer wrote:So, given my example, how would you receive address 0x024A? Or is that not possible? Why does the base ID need to be divisible by 16 if there are only 8 messages received from that base? That means you can't ever capture half of the possible addresses.

In my experience (not using that exact address, but reading an IZZE Racing IMU on 0x4EC and 0x4ED), I have been able to use the base address 0x4E8; so based on that I would suggest you try 0x248, and the data on message 0x24A should appear under CAN 2 Offset 0-6; although based on what Stephen has said it's possible it might not work this way.


0x4E8 will work in this circumstance as it is divisible by 8, but 0x4EC and 0x4ED will not as they are not cleanly divisible by 8.
Yes, in my example I was stating that I use a base address of 0x4E8 in order to retrieve messages 0x4EC and 0x4ED (which appear as CAN 4 Offset x and CAN 5 Offset x respectively), and that it does in fact work.