Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

търся помощ за CAN, J1939, bitfield codec
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16375
Страница 1 от 1

Автор:  NikB [ Вто Фев 26, 2019 6:22 pm ]
Заглавие:  търся помощ за CAN, J1939, bitfield codec

Опитвам се да проумея endian разбирането в една библиотека за bitfield codec в GitHub.
(Някъде бях мярнал, че тази библиотека се ползва във Форд, за codec за битови полета за CAN, J1939 протокола)

В цитираната библиотека,
във файла 8byte.c,
във функцията uint64_t eightbyte_get_bitfield()
и подобните, разликата между Litle и Big endian е единствено едно преподреждане на целия пакет:
Код:
if(data_is_big_endian) {
        source = __builtin_bswap64(source);
}


Обаче, това не ми изглежда вярно - така се сменя и началото на битовото поле.

В приложение съм постнал тълкуването на Brusa за подредбата на битови полета

ПИТАНЕТО:
Има ли общоприето тълкуване на Big/Litle endian за подреждането на битови поледа с различна дължина в байтовете на пакета?

ПП Ако имате логове, тестове, картинки или документация от различни фирми по темата - ще ми бъде много полезно :)

Прикачени файлове:
bitfields_brusa.jpg
bitfields_brusa.jpg [ 142.21 KiB | Прегледано 4892 пъти ]

Автор:  Zdrav [ Вто Фев 26, 2019 8:58 pm ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

Това е най-идиотското нещо от CAN. Не е само за J1939.
И много подвеждащо е че на много места го водят като Little/Big Endian. Щото в случая става дума за преподреждане на битовете.
Не съм поглеждал кода от линка в GitHub, Но диаграмите са верни. Като в моята скромна практика съм срещал само втория вариант.
Имай предвид че изпращането започва от бита най-горе в ляво, после ги кара по хоризонталния ред до края на реда. След което минава на най-левия бит от следващия ред и т.н.

Автор:  NikB [ Сря Фев 27, 2019 10:36 am ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

Zdrav написа:
..., Но диаграмите са верни. Като в моята скромна практика съм срещал само втория вариант...

Благодаря :), ако имаш логове от някакво устройство, чийто декодирани стойности са ясни, би ли могъл да ги споделиш?

Автор:  [ Сря Фев 27, 2019 3:25 pm ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

В J1939 стандартно данните са само Little Endian, т.е. втората диаграма.
Номерацията на битовете в един байт започва от единица, отдясно е младши,
отляво е старши битът (SAE J1939-71). Не съм сигурен дали J1939 стандарта
позволява в Proprietary Messages данните да са в Big Endian, трябва да проверя,
но съм почти на 99% сигурен, че не го позволява :-)

Функцията __builtin_bswap64() е предназначена за конвертиране на 64-битови числа
от/към Big/Little Endian, с bit order вътре в байта отляво старши, отдясно младши. При
друг bit order само с прост swap на байтове няма да стане.

Автор:  NikB [ Сря Фев 27, 2019 3:37 pm ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

Има маса фирми, които в спецификациите си имат J1939 съобщения , и заедно с тях - някакви измислени съобщения - нямам предвид J1939 Proprietary Messages, а съвсем измислени съобщения, на които CAN ID не се формира както е в J1939.
Долу поствам един пример - на картинката в червено са заградени измислените съобщения, в синьо - J1939, a в лилаво са endian-ите.
Та с тези, смесените, се боря най-трудно :)

Прикачени файлове:
brusa.jpg
brusa.jpg [ 225.1 KiB | Прегледано 4804 пъти ]

Автор:  Zdrav [ Чет Фев 28, 2019 12:51 am ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

логове нямам.
за "странните" ID- та изглежда че са 11 битови. по принцип е позволено в една мрежа да имаш съобщения и с 11 и с 29 битови ID-та.
имал съм такава ситуация, макар че беше временно, докато трае развоя, имахме ECU -та които пращаха съобщения с 11 битови ID- та.
накрая всички съобщения бяха с extended 29 bit ID-та.

Автор:  NikB [ Пет Мар 01, 2019 3:19 am ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

Това, че са 11 и 29 бита е маловажно (Пишеш, че в една мрежа сте ги имали - по-горе е описание на един девайс, който има и двата вида Id) - за нашите драйвери при приемане няма значение какво е Id, а при предаване се указва и всичко е ок.

Проблемът е че нямам достатъчно информация за bitfield подредбите, за да си направя тестовете.

Автор:  Zdrav [ Пет Мар 01, 2019 8:50 am ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

предполагам не търсиш информация за точно тези "измислени" съобщения, които се виждат на твоите картинки.
Щото няма как да ги видиш в "мои" логове. Съжалявам, но не пазя никакви логове или .dbc файлове и явно не мога да ти бъда полезен за да си направиш тестовете.

Автор:  NikB [ Пет Мар 01, 2019 9:24 am ]
Заглавие:  Re: търся помощ за CAN, J1939, bitfield codec

:), да, така е. Търся информация, споделен опит, за всякакви възможни подредби на всякакви девайси.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/