Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F105 CAN/USB протокол обмена
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Artos5
Добрый день уважаемые форумчане!
Появилась задача сделать переходник RS232 <> CAN и USB <> CAN типа 2 в одном.
задача связать компы с CAN , с компьютерами имеющими шину RS232.

Интересует следующее:
1) по какому протоколу работает
2) Какие грабли могут возникнуть
3) как эти грабли обойти

Первый вопрос очень важен. Так как информации вообще не нашел....
Кто знает хоть немного данную тему , помогите пожалуйста . Буду очень признателен за любую помощь!
С уважением Артем.
Golikov A.
Кан посылка по 8 байт и адрес с подтверждением доставки. Так и шлите в комп и так принимайте обратно, и добавте статус пересылки, чтобы обеспечить контроль доставки, ну и контрольную сумму конечно

Совсем честно не получиться, не подтвердить кан узлам доставку в случае если комп отвалился вам. Конечно не удасться
Artos5

Golikov A. Спасибо Вам большое! Вы сильно мне помогли. Буду дальше разбираться.
Artos5
Цитата(Golikov A. @ Aug 1 2015, 15:05) *
Кан посылка по 8 байт и адрес с подтверждением доставки. Так и шлите в комп и так принимайте обратно, и добавте статус пересылки, чтобы обеспечить контроль доставки, ну и контрольную сумму конечно


а можете пример дать , как статус добавить? А нельзя просто принять полученный поток от кан и отправить в uart или usb ? И наоборот .
Golikov A.
в кане нет потока, там кадровая организация, а если говорить про кан опен, то там вообще адресуются не узлы, а данные... адрес имеет параметр, а не объект.

я бы так сделал:

от компьютера, по URAT или USB принимаем данные в виде
адрес (битность зависит от версии кан), полезная нагрузка (8 байт), контрольная сумма.
Проверяем контрольную сумму (для UART это может быть важно, USB вроде имеет встроенную)
Пихаете полученные данные 8 полезных байт в кан, по тому адресу что в адресе
Проверяете флаг удачной передачи, если послалась шлем в компьютер ОК, если нет Ошибка

от устройства, без фильтрации пакетов, получаем данные, дербаним из них адрес и 8 байт полезной нагрузки, добавляем контрольную сумму, пихаем в компьютер... Тут к честно не получится, потому что кану надо акнуть данные еще до того как их компьютер получить, иначе вся сеть подвиснет. Но можно попробовать предусмотреть аварийный код, настраиваемый с компьютера адрес и данные, которое ваше устройство начнет рассылать по кан сети, если компьютер отвалится...

вот собственно все и покрыто комп - кан и обратно.
Artos5
Спасибо большое! Очень сильно помогли ! wink.gif

Смотрю тут: https://ru.wikipedia.org/wiki/Controller_Ar....B4.D1.80.D0.B0

Что то вообще запутался.. sm.gif
Golikov A.
в каком месте запутались? как знать что вас удивило, а что нет... %)
Artos5
Цитата(Golikov A. @ Aug 4 2015, 08:25) *
в каком месте запутались?


Я не совсем то запутался. Просто вижу что длина поля не строго 8 битная.
Мне кадр запаковать в байтовый массив и отправить в uart или usb com так ? Плюс контрольная сумма.
Если бы где почитать это самое преобразование кан посылки в uart .

Мне так сделать? Вот:

=======================================
Начало кадра 1 Сигнализирует начало передачи кадра
Идентификатор 11 Уникальный идентификатор
Запрос на передачу (RTR) 1 Должен быть доминантным
Бит расширения идентификатора (IDE) 1 Должен быть доминантным (определяет длину идентификатора)
Зарезервированный бит (r0) 1 Резерв
=======================================

эти 15 бит запаковать в два байта , и отправить в UART.
Cледующие 4 бита

====================
Длина данных (DLC) 4 Длина поля данных в байтах (0-8)
====================

запаковать в третий байт .

Потом 0-8 байт данных

потом CRC 2 байта
и т.д.

Верно?
Golikov A.
в целом все верно, можно и так.

я бы только данные сделал бы всегда 8 байт (чтобы пакеты стали фиксированной длинны, поле длинны в отдельном байте - хорошая идея, оставить) так легче их распаковывать, если по скорости пройдете.

признаки начала передачи, запрос на передачу, и так далее я бы выкинул, они уарту ненужны
на адрес бы отвел всегда 3 байта, (он может быть 11 или 19 бит)

получил бы посылку фиксированной длины 3 + 1 + 8 + 2 = 14 байт, сумму CRC надо заново считать из кан посылки ее взять не выйдет, вы поля кроите, потому заменил бы ее обычной суммой циклической и все...

Artos5
Цитата(Golikov A. @ Aug 6 2015, 14:43) *
можно и так.


Весь прикол в том , что это устройство предполагается сделать как некий аналог другого устройства , который по рассказам заказчика снят с производства.
У меня есть скрины мануала такого устройства , всего остального включая протокол - нету...

Вот краткое описание девайса:
http://cs625521.vk.me/v625521435/44245/4ATk8_51yME.jpg
http://cs625521.vk.me/v625521435/4424f/hbKwBTGY6lo.jpg
Golikov A.
ну тогда надо дербанить входной протокол того утерянного устройства, может авторы себе как-то по другому видели что там происходит в обмене. Отлично от толпы китайцев что весь инет завалили такими девайсами, тот же ебай или али смотрите...
_3m
Цитата(Artos5 @ Aug 6 2015, 14:48) *
Весь прикол в том , что это устройство предполагается сделать как некий аналог другого устройства , который по рассказам заказчика снят с производства.
У меня есть скрины мануала такого устройства , всего остального включая протокол - нету...

Проверьте действительно ли там CAN интерфейс.
Вдруг это UART с физикой CAN.
Artos5
Цитата(_3m @ Aug 7 2015, 08:32) *
Проверьте действительно ли там CAN интерфейс.

Да если там логика uart-a то это будет легко победить )
Но скорее всего там все таки полный CAN .
Вот скрины:
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.