ipsurin пишет: Непонятно как указывать значение в регистре ERL. Что означает конструкция 0....ER+8. Количество байтов в сообщении понятно, а вот как тут описаны значения EXT и RTR непонятно. Скажем, у меня длина сообщения один байт (2,3...,8). Передача в стандартном формате и приём обычного сообщения.
Название регистра ERL можно интерпретировать как аббревиатуру Ext+Rtr+Len: Старший, пятнадцатый бит регистра является признаком расширенного формата идентификатора сообщения (EXT), следующий за ним, четырнадцатый бит регистра является признаком удаленного запроса на передачу (RTR), остальные биты регистра кодируют длину передаваемого сообщения (LEN)
При передаче обычного, не RTR сообщения со стандартным, не расширенным идентификатором, в регистр ERL записывается только длина сообщения, например:
для сообщения с длиной данных 2 байта: 0x0002
для сообщения с длиной данных 3 байта: 0x0003
...
для сообщения с длиной данных 8 байта: 0x0008
При передаче обычного, не RTR сообщения с расширенным идентификатором, в регистр ERL записывается длина сообщения + 0x8000, например:
для сообщения с длиной данных 2 байта: 0x8002
для сообщения с длиной данных 3 байта: 0x8003
...
для сообщения с длиной данных 8 байта: 0x8008
При передаче RTR сообщения со стандартным, не расширенным идентификатором, в регистр ERL записывается длина сообщения + 0x4000 сообщения, например:
для сообщения с длиной данных 2 байта: 0x4002
для сообщения с длиной данных 3 байта: 0x4003
...
для сообщения с длиной данных 8 байта: 0x4008
При передаче RTR сообщения с расширенным идентификатором, в регистр ERL записывается длина сообщения + 0xC000 сообщения, например:
для сообщения с длиной данных 2 байта: 0xC002
для сообщения с длиной данных 3 байта: 0xC003
...
для сообщения с длиной данных 8 байта: 0xC008