Rps ty 002 simple soft что это
Перейти к содержимому

Rps ty 002 simple soft что это

  • автор:

Mikrotik — Плюсы и минусы

Периодически на Хабрахабре проскакивает упоминание данных роутеров (в основном их советуют в q&a на вопросы о выборе роутера). Также в рунете достаточно много ресурсов и тем посвященных данному железу. Но очень мало информации о плюсах и главное минусах данного решения. Данной статьёй я и хочу несколько поправить ситуацию. Также надеюсь, что в комментариях меня дополнят и расскажут что-нибудь новое.

Для начала можно обратиться к википедии ru.wikipedia.org/wiki/MikroTik и узнать, что

Mikrotīkls Ltd (торговая марка MikroTik) — латвийский производитель компьютерного сетевого оборудования. MikroTik разрабатывает, устанавливает и продает проводные и беспроводные маршрутизаторы, операционные системы к ним и сопутствующее оборудование. Компания была основана в 1995 году с целью продажи оборудования на развивающихся рынках. В 2007 году в компании работало более 70 сотрудников.

Можно разделить железо, которое называется RouterBoard и операционную систему, которая называется RouterOS. В разговорной речи, когда говорят об этом всём, говорят просто Mikrotik.

Теперь перейдём к плюсам и минусам.

Какие плюсы есть у микротика

1. Стоимость — в своей ценновой категории конкурентов просто нет.

2. Функциональность — По сравнению с Dlink, TP-Link, Zyxell и прочими «домашними» роутерами функционал огромен. Сравнивать надо больше с Cisco, Juniper и прочим «взрослым» железом или с системами linux или freebsd (только сетевой стек). Перечислять не вижу смысла, но могу заметить, что можно реализовать практически любую «хотелку» в сетевых технологиях.

3. Надёжность и стабильность — если микротик настроен и протестирован он будет работать ОЧЕНЬ долго и безпроблемно. Также очень спасают встроенный скриптовый язык (с помощью которого можно настроить всевозможные действия на проблемы) и технология WatchDog которая спасает при зависшем роутере. Все проблемы какие у меня были, возникали из-за проблем с питанием (очень много и часто грозы). При наличии хорошего заземления и ИБП проблем практически нет. Хотя периодически на форумах и слышу про баги и браки, но сам ни разу не сталкивался (если не считать свои кривые руки багом).

4. Документация и обновления — есть вполне подробная официальная википедия. Все прошивки лежат прямо на сайте, доступные для скачивания даже без авторизации. В отличии от той же Cisco где простое обновление получить иногда проблема (требуется статус сертифицированного специалиста или вообще говорят, что это только для тех.поддержки)

5. Единая ОС и система конфигурации — так как везде используется RouterOS это позволяет и быстро менять оборудование, востанавливать на новое железо или просто передавать-советовать другим как и что сделать.

6. Масштабируемость — Есть предложения практически для каждого сегмента малого и среднего бизнеса (для крупного я бы не рекомендовал). Причём если вам не хватает к примеру какого-нибудь из Core-серии, всегда можно развернуть RouterOS на мощном x86 сервере с нужной производительностью.

А теперь можно перейти к минусам —

1. Если вам требуется реально бесперебойная работа, то микротик вам вряд ли подойдёт. Но это уже железо совсем другого уровня (несколько блоков питания, резервирование всего и вся, и прочие радости жизни). Однако есть примеры внедрения на RouterOS на нескольких х86 серверов + VMware Fault Tolerance, да и VRRP не зря придумали.

2. Если вам требуется маршрутизировать более 10G трафика ежесекундно (да есть Core-серия, но будем откровенны — на ней тоже не всё гладко).

3. Когда вам требуется шифрование по ГОСТу, или у вас динамическая маршрутизация на EIGRP, или и прочие радости Vendor Lock.

4. Если вы не разбираетесь в сетях — конечно настроить по куче мануалов из сети не очень сложно, но для обычного пользователя достаточно трудоёмкий процесс.

5. Если вы являетесь продавцом железа — предположим, что вы закладываете наценку в 20%. Тогда вам выгоднее продать ту же CISCO, чем Mikrotik. Так как CISCO дороже и соответственно принесёт вам большую прибыль.

6. Если вам нужно устройство «всё-в-одном» — NAS, торренто-качалка, DLNA, кофеварка и всё другое то вряд ли вам подойдёт Mikrotik. Это именно роутер (хотя через встроенные средства виртуализации и можно реализовать, но работать это будет не очень стабильно)
*здесь должна была быть картинка с троллейбусом из буханки хлеба*

7. Если вы Ричард Столман или трепетно относитесь к GPL. Потому что да. Нарушают. RouterOS основана на Linux, но что было изменено и как никто не знает.

8. Минус от пользователя с хабры, высказанным им в одном из постов —

«DrDiza: ставлю клиентам в офис. для небольшой нагрузки — самое то. поствил и забыл. минус в том, что эти клиенты больше не звонят, потому что у них все работает. и платных вызовов у меня все меньше.»

9. Отсутствует «корпоративная» техподдержка и гарантии — здесь нет чтобы вам в течении 2 часов заменили железку на новую. Или удалённо подключившись настроили что-либо. Либо разбираться самому, либо платить фрилансерам. Вообще поддержка есть и если вам не требуется “здесь и сейчас”, то вполне возможно вам она подойдёт.

10. Малое распространение марки — это достаточно существенный минус. И он как для потребителей, так и для специалистов. Так как RouterOS слабо распространен, то и спрос на специалистов разбирающихся в ней мал. Так и для фирм — если у вас сеть построена на данной ОС и затем ваш системный администратор ушел, вам будет сложнее найти специалиста который бы разбирался в данном вопросе. Да и вдалеке от крупных городов найти роутеры Mikrotik подчас достаточно большая проблема

На этом пожалуй всё, жду ваших комментариев, вопросов и дополнений.

PS: Уважаемые хабрапользователи, если вы сравниваете железо, давайте сравнивать хотя бы примерно сопоставимое по цене — не надо сравнивать железку за 3000 рублей и железку за 3000 долларов 🙂

  • Mikrotik
  • сети
  • RouterOS
  • всё равно никто не читает теги
  • Системное администрирование
  • Сетевые технологии

Магнитола. Прошивка. CAN BUS. MCU. Часть 3

После установки магнитолы, а точнее ее подключению, начал поиски как же заставить работать все кнопки, получать температуру потому что сразу ее не показывало, ну и включение БК (который у меня находиться не между спидометром и тахометром, а в штатной магнитоле). Догадывался что изначально что то не так в CAN BUS, что он или MCU настроен на другую машину.

Фото в бортжурнале Peugeot 301 (2012)

Первым делом начал искать хоть какое то инфо по магнитоле, как оказалось на 4pda совсем не та версия Allwiner T3-T8. Начал гуглить по модели, и попал на блог (cobaltr4.ru/).

Вычитал как зайти в сервис, для этого нужно на рабочем столе зайти в «Настройки«, далее нажать «Об Устройстве«

Фото в бортжурнале Peugeot 301 (2012)

И поочерёдно нажать «Версия Ядра» — «Версия ОС» — «Версия Ядра» — «Версия ОС» -Версия Ядра» — «Версия ОС» (по 3 раза если в кранце)

Фото в бортжурнале Peugeot 301 (2012)

Появилось секретное меню или по другому инженерное.

Фото в бортжурнале Peugeot 301 (2012)

В разделе Other я нашел настройку CAN BUS и настойку MCU под марку авто.

Фото в бортжурнале Peugeot 301 (2012)

В комплекте китаец прислал CAN BUS фирмы Raise, тут было все верно, в разделе CAN Type стоял я так понимаю концерн PSA, но это не давало никакого эффекта.
Не долго думая решил прошить магнитолу, на том же блоге (cobaltr4.ru/) человек слил со своей магнитолы прошивку, так как модели идентичны по железу решил рискнуть.
Моя версия ОС — XWQC01D1-O55-1.0.4.3.1 — 20190603
Версия с сайта — XWQC01D1-O55-1.0.4.3.1_20190715
По последним цифрам понял что моя родная на месяц старее.
Моя версия MCU — STM32-20190514-11-KC1-24
Версия MCU с сайта — STM32-201907121001KC1-1022
Тут дела обстояли хуже моя версия была на два месяца старее. А MCU это как раз та плата которая понимает авто.
!ПЕРЕД ПРОШИВКОЙ ПРОЧИТАЙТЕ ДО КОНЦА! (есть шанс что собьются настройки инженерного меню, поэтому предварительно советую по заходить во все вкладки и переписать параметры, хотя у меня все сохранилось)
Скачав прошивку и распаковав ее на выходе получил два файла mcu-201907121001KC1-1022.upd и os_update_XWQC01D1-O55-1.0.4.3.1_20190715_204335_b1.zip закинул на флешку (флешка в файловой системе FAT32). Вставляем в любой USB порт магнитолы флешку и система автоматически распознает файлы обновления.
Появиться меню прошивальщика.

Фото в бортжурнале Peugeot 301 (2012)

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

Сразу после прошивки я полез в сервисное меню посмотреть что поменялось в MCU и когда я зашел в CAN Type был приятно удивлен, появилось в выборе авто Peugeot 307 408 3008

Фото в бортжурнале Peugeot 301 (2012)

После выбора MCU плата начала прошиваться под авто, и магнитола ушла в перезагрузку.
При включении обнаружил маленькую победу, кнопки заработали (хоть кнопки следующий трек и предыдущий работали наоборот) Появилась в статус баре температура (как в штатной магнитоле), и заработало приложение БК с расходои топлива и остатком пробега.

Фото в бортжурнале Peugeot 301 (2012)

(на некоторых фото вы может обратили внимание что проскакивает температура, это потому что фото делалось в разное время что бы дополнить статью)
! ВНИМАНИЕ ! Человек с cobaltr4.ru писал что возможны проблемы с работой тач-скрина, звука, радио или Bluetooth, это означает что нужно восстановить настройки в инженерном меню. У него после перепрошивки они сбросились, хотя у меня осталось все на своих местах.
! ВЫПРОСИЛ У КИТАЙЦЕВ НОВЫЕ ПРОШИВКИ НА ЭТО УСТРОЙСТВО ! Поделился с блогом cobaltr4.ru там можете найти, или написать мне я выгружу на обменник кину вам ссылку.

В этой части думал объединить прошивку в настройками, но решил разделить, да бы не было сильно много в одной части. В следующей части будет логотип, включение/выключение камеры на задний ход, реверс кнопок, пауза на выключение, цвет кнопок, тонкая настройка подсветки.

Альтернативная прошивка для китайских CANBUS адаптеров

В данной заметке предоставлена информация о таком типе устройств как CANBUS адаптер для андроид магнитол, на али такие устройства продаются под названиями «canbus box», «canbus decoder» и тому подобные вариации названий, я же далее в заметке буду называть такие устройства CAN адаптером или просто адаптером.
По большей части материалы из заметки это пересказ из моего блога на drive2.ru, но надеюсь эта информация может быть полезна всем тем кто хотел бы внедрить себе в автомобиль CAN адаптер или изменить логику его работы.
Внешне CAN адаптер выглядит, как маленькая коробочка размером со спичечный коробок с одним разъемом на 16 или 20 выводов. Большинство CAN адаптеров на ali продается уже с разъемами под штатную проводку конкретной модели автомобиля, а для этого уже нужны минимальные знания в электрике и схемы электропроводки автомобиля.

Если совсем кратко, то CAN адаптер предназначен для облегчения интеграции андроид магнитолы в автомобиль, он выделяет из шины MS CAN автомобиля цифровые сигналы и передает их в андроид-магнитолу. При отсутсвии CAN адаптера необходимо искать самостоятельно в штатной проводке нужные аналоговые сигналы.

Основные функции CAN адаптера это формирование четырех выходных сигналов:
«Зажигание»(IGN) или «Аккумулятор»(ACC), уровнем 12 Вольт, для включения андроид-магнитолы
«Подсветка»(ILLUM), уровнем 12 Вольт, для изменения подсветки в андроид-магнитоле
«Парковочный тормоз»(PARK), уровнем GND, для информирования андроид-магнитолы о нахождении автомобиля в состоянии поездки/парковки.
«Задняя передача»(REAR), уровнем 12 Вольт, для переключения андроид-магнитолы на камеру заднего вида и включения питания для камеры заднего вида.

Дополнительные функции CAN адаптера это отображение в андроид магнитоле состояний внутренних узлов автомобиля и управление некоторыми из них через информационную линию RX/TX(uart):
— отображение состояния парковочных датчиков
— отображение положения руля в виде динамической разметки при заднем ходе
— отображение состояния открытых дверей
— отображение состояния не пристегнутых пассажиров и водителя
— установка времени в автомобиле
— отображение режима климат контроля и управление им;
— трансляция нажатий кнопок на руле в андроид-магнитолу
— отображение уровня топлива
— доступ к трип-компьютеру
— управление штатным усилителем

Теперь подробнее о выходных сигналах формируемых CAN адаптером. Для любой андроид-магнитолы кроме питания, нужен как минимум еще один дополнительный сигнал — это сигнал «Зажигание»(IGN). Сигнал зажигания(IGN) необходим для андроид-магнитолы, чтобы магнитола включалась или выходила из спящего режима при запуске автомобиля и выключалась или засыпала при глушении автомобиля.
Сейчас наверное в большинстве андроид-магнитол есть спящий режим, с ним андроид-магнитола готова к работе уже через пару секунд после запуска автомобиля, иначе при каждом запуске автомобиля андроид в магнитоле будет загружаться несколько минут. Но у спящего режима магнитолы есть один минус — это потребление тока порядка 10-20мА в спящем режиме, и зимой или при малых пробегах это может быть критично.
Так например в моей андроид-магнитоле, купленной в 2019 году не было спящего режима, через несколько месяцев после покупки, производитель с обновлением прошивки в андроид-магнитоле добавил функцию спящего режима. Помня о потреблении магнитолы в спящем режиме, я на зиму отключаю спящий режим в магнитоле, а по приходу тепла снова включаю спящий режим, отключение/включение спящего режима в моей магнитоле занимает пару минут.

Необязательный сигнал «Подсветка»(ILLUM) используется для подсветки кнопок андроид-магнитолы или для уменьшения яркости экран магнитолы ночью и увеличения яркости экрана днем.

Необязательный сигнал «Задняя передача»(REAR) используется для переключения экрана магнитолы на камеру и подключения питания к камере заднего вида, в противном случае придется тянуть от задних фонарей, это во первых неудобно, а во вторых на некоторых машинах, с импульсным контролем сгоревшей лампочки, такое питание для камеры будет создавать помехи в картинке с камеры.

Необязательный сигнал «Парковочный тормоз»(PARK) используется для разграничения некоторой функциональности в движении и на парковке, например для запрета просмотра видео в движении.

Часть андроид магнитол для конкретных моделей автомобилей продается уже с CAN адаптером и со всей необходимой проводкой и разъемами, что конечно же очень удобно. Моя же андроид-магнитола продавалась без CAN адаптера, но этот недостаток компенсировался стоимостью магнитолы в 50$. Впрочем для своего автомобиля Freelander2, я не смог найти CAN адаптер ни пару лет назад ни сейчас. Но с помощью самодельного CAN адаптера я смог сделать отображение датчиков штатного парктроника на андроид магнитоле, об этом подробне в заметке о подключении штатных парктроников к андроид магнитоле. Благодаря этой заметке несколько человек смогли сделать отображение парктроников в своих автомобилях Freelander2, в том числе и в рестайловом Freelander2.

Собственно после этой заметки началась и эта история, когда в прошлом году коллега приобрел на али андроид-магнитолу для своего xc90, в комплекте с магнитолой был CAN адаптер, но в его работе было обнаружено несколько проблем:
— не работало переключение треков в проигрывателе по нажатию кнопок на руле
— не было отображения парктроников
— не было отображения положения руля
Открыв этот CAN адаптер и увидев в на плате процессор GD32F103 я легкомысленно сказал коллеге, что можно исправить все недочеты данного адаптера, написав под него свою программу, т.к. на этот процессор есть в свободном доступе документация и к тому же он является клоном STM32F103 и поэтому для него можно использовать все средства разработки доступные для микропроцессоров STM32. Но на тот момент времени заниматься этим не было совсем.

Прошла осень, зима, и затем весна, коллега периодически спрашивал, когда уже будем обновлять прошивку в адаптере, но времени все так же не было этим заниматься. Но по наступлению лета, за счет доставки обедов на работу, появилось свободное время, которое раньше тратилось на обеденные поездки, благодаря этому за несколько дней с помощью мультиметра плата адаптера была исследована и в результате нарисована схема адаптера OD-VOLVO-02.

В целом на схеме нет ничего лишнего, функционал схемы совпадает с общим описанием CAN адаптера, это 4 выходных сигнала(IGN, ILLUM, BRAKE, REAR) и последовательный порт(RX/TX) для информационной связи с андроид-магнитолой. Обозначения и номиналы элементов на схеме совпадают с надписями печатной плате. Для программирования микроконтроллера через интерфейс SWDIO/SWCLK на плате есть специальный внутренний разъем CON2. Для обновления прошивки можно использовать любой SWDIO/SWCLK программатор, я перепрошивал микроконтроллер на плате с помощью китайского ST-LinkV2 с али, и программы openocd.
Распиновка сигналов на внешнем разъеме CAN адаптера OD-VOLVO-02 точно совпала, с найденной в сети распиновкой других китайских CAN адаптеров на 16 выводов, поэтому можно предположить что различные китайские производители CAN адаптеров делаю физически совместимые адаптеры, что в дальнейшем потвердилось.

По готовой схеме устройства написать прошивку уже было только вопросом времени. Процесс написания прошивки был итеративным и чередовался с тестами на автомобиле во время обеденных перерывов. На урале это лето выдалось теплым и было приятно провести немного времени на улице с автомобилем — немного переключиться на другое занятие от основной работы.
Помимо устранения недостатков в оригинальной прошивке, коллега попросил добавить дополнительный функционал:
— задержку снятия питания с камеры, при переключении из R в D
— управление уровнем подсветки экрана андроид-магнитолы.
В последствии этот функционал был реализован и сделан настраиваемым.
Для удобства прошивки и отладки CAN адаптера на автомобиле была сделана проводка для подключения адаптера в разъем OBD2 автомобиля. Через OBD2 разъем CAN адаптер получает питание и доступ к шине MS CAN, линия RX/TX адаптера выведена на переходник usb2com. К переходнику usb2com уже можно подключить ноутбук или телефон с андроидом для контроля работы адаптера. Если необходимо было проверить функционал CAN адаптера, то адаптер подключался к магнитоле, если надо было прошить, наладить или настроить адаптер, то адаптер подключался к разъему OBD2 автомобиля.

Для отладки и возможности настройки в CAN адаптере был реализован отладочный интерфейс через информационную линию RX/TX. Нормально через линию RX/TX передаются данные о состоянии автомобиля в андроид-магнитолу, но подключившись к линии RX/TX ноутбуком или андроид телефоном можно переключить адаптер в режим наладки и тогда через линию RX/TX будет доступен простой текстовый отладочный интерфейс. С помощью отладочного интерфейса можно контролировать правильность функционирования адаптера или вносить изменения в его конфигурацию. Изменение конфигурации работы адаптера и переключение в отладочный режим происходит, при нажатии соответствующих клавиш на клавиатуре:
OOOOOOOOOOOOO переключение в режим наладки(необходимо отправить минимум 10 символов за 1 секунду)
o переключение в штатный режим работы
b выбор эмулируемого протокола из списка Raise VW(PQ), Raise VW(MQB), Oudi BMW(Nbt Evo, HiWorld VW(MQB)
c выбор автомобиля из списка FL2 2007MY, FL2 2013MY, XC90 2007MY
I увеличение порога уровня подсветки
i уменьшение порога уровня подсветки
D увеличение задержки выключения камеры
d уменьшение задержки выключения камеры
m выбор активного CAN сообщения
s сохранение конфигурации

На следующем скриншоте показан отладочный интерфейс CAN адаптера

Т.к. данные постоянно меняются и чтобы избежать эффекта текста бегущего по экрану, для работы с отладочным интерфейсом нужна программа эмулятор терминала, для windows подойдет putty или hyperterminal.
В разделе Configuration отображаются настройки CAN адаптера:
Car модель автомобиля
Vin VIN автомобиля(отображается только в FL2)
CanBox эмулируемый canbus протокол
Illum уровень подсветки(в процентах) в салоне при котором формируется выход Illum
Rear Delay задержка(в милисекундах) на отлючение сигнала REAR
В разделе State отображается текущее состояние CAN адаптера и автомобиля:
Acc, Ign, Selector, Wheel — состояние положения ключа, зажигания, селектора АКПП у положения руля(не отображается в FL2)
R — состояние выхода REAR
Illum, ParkLights, NearLights — уровень подсветки в салоне и состояние габаритных огней и ближнего света
Can, Msgs, Irqs — отладочные счетчики CAN сообщений
CanX/Y — текущее состояние сообщения CanY определенным ID из списка Y со всеми ID

Адаптер извлекает из шины MS CAN данные в режиме прослушки, не посылая никаких запросов в электронные блоки автомобиля, поэтому информацию которою он может извлечь из шины CAN зависит от автомобиля, так в Freelander2 в шине MS CAN не передается информация о положении руля и нажатия кнопок, а в шине MS CAN автомобиля XC90 не передается VIN код автомобиля.

При поиске и расшифровке CAN данных в автомобиле использовалась техника, когда в автомобиле записываются все CAN сообщения, при одновременном создании определенного шаблона в данных, а затем в записанных CAN сообщениях, с помощью программы отображающей данные в виде графиков, происходит поиск нужного шаблона и идентификация данных. Под шаблоном в данных подразумевается изменение состояния узлов автомобиля во времени, например, пять раз открыли и закрыли дверь водителя, затем 4 раза открыли и закрыли дверь пассажира и т.д. Запись конкретного шаблона с данными в отдельные файлы облегчает последующий анализ и поиск.
Такой анализ я производил с помощью программы plot, о которой уже ранее упоминал в заметке о расшифровке данных в CAN шине. С времени опубликования этой заметки в программу plot была добавлена поддержка формата файлов log(can-uitils) и trc(canhacker), а также группового отображения(все 8 байт CAN сообщения) сообщения на графиках. С помощью группового отображения можно бысто проанализировать данные в сообщениях с конкретным CAN ID, а уже затем без группового отображения можно более точно попытаться интерпретировать данные из каждого байта CAN сообщения применяя различные маски и коэффициенты.

Ниже, для понимания сложности процесса поиска данных, приведены пара скриншотов приложения plot с данными из MS CAN шины автомобиля XC90. Имея терпение и фантазию несложно обнаружить нужные данные во всем потоке CAN сообщений.
На первом скриншоте виден шаблон(серый цвет) заданный при записи: 3 коротких нажатия на кнопку PREV, пауза, 3 коротких нажатия на кнопку PREV, пауза, 3 длинных нажатия на кнопку PREV.

На втором скриншоте виден шаблон(зеленый и бирюзовый цвета) заданный при записи: 3 быстрых изменения уровня подсветки, пауза, 3 быстрых изменения уровня подсветки, пауза, 3 медленных изменения уровня подсветки.

В процессе расшифровки CAN данных для XC90 я попытался найти в сети готовые результаты по расшифровке CAN сообщений в XC90 и нашел интересную информацию в заметке о самодельном CAN адaптере для XC90 пользователя Olegelm о том, что в автомобилях Volvo каждый электронный блок имеет уникальный идентификатор и он разный для всех машин одной модели. Это было задумано чтобы модули из одного автомобиля нельзя было поставить в другой автомобиль, и тем самым уменьшить воровство автомобилей и автодеталей.
Поэтому получается информация по расшифрованным данным из автомобиля XC90 коллеги скорее всего не подойдет для другого экземпляра XC90. Для другого экземпляра XC90 можно будет использовать только информацию по расположению данных внутри 8 байт CAN сообщения, а сам идентификатор нужно будет подобрать самостоятельно.
Может быть из-за уникальности адресов штатная прошивка CAN адаптера XC90 и имела проблемы, т.к. китайцы не смогли сделать универсальную прошивку подходящую для всех XC90. Я не смог найти информацию по какому алгоритму происходит присвоение идентификаторов электронных блоков в автомобилях марки Volvo, можно предположить что по VINу или дате производства. Может быть есть специалисты по Volvo которые смогут это прокомментировать.

В прошивке эмулируются 4 различных протокола для взаимодействия с андроид-магнитолой:
— Raise VW(PQ)
— Raise VW(MQB)
— Oudi BMW(Nbt Evo
— HiWorld VW(MQB)
При выборе типа подключенного адаптера в андроид магнитоле предлагается список из десятка различных производителей адаптеров, на али чаще всего встречающиеся адаптеры от Raise и HiWorld. Наибольший функционал по отображению узлов автомобиля в андроид магнитоле у марки Volkswagen и адаптеров Raise и HiWorld, поэтому эти протоколы были выбраны для эмуляции.

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

Помимо вышесказанного коллега ездил на автомобиле, тестировал работу CAN адаптера и выявлял замечания по его работе, для решения этих замечаний мне нужно было время и сам адаптер, но также и коллеге нужен был адаптер, получалось так, что адаптер в одно и тоже время нужен был и мне и ему. Покупать такой же второй CAN адаптер VOLVO-OD-O2 смысла не было, но у меня был адаптер для марки VW, который я приобрел чуть позднее покупки своей магнитолы, ради удовлетворения любопытства, что у него внутри. Внутри у него оказался процессор с надписью PocketLink, тогда в 2019, я не смог перепрошить этот адаптер, т.к. до конца не понимал, что это за процессор, да сейчас надпись на чипе PocketLink не даст информации о том что находится внутри этого чипа.

Видимо потратив чуть больше времени чем ранее мне удалось понять, что что внутри находится процессор NUC131, и для него свободно доступен BSP на гитхабе. Далее опять же с помощью мультиметра была проанализирована плата и нарисована схема в KiCAD этого адаптера. Китайцы сэкономили на шелкографии поэтому обозначения на схеме сделаны произвольными, но номиналы совпадают. По схеме с помощью примеров из BSP была добавлена поддержка этой платы в прошивке. Прошивка стала поддерживать уже две платы и можно было спокойно меняться адаптером с коллегой при очередном обновлении тестовой прошивки.
Схема адаптера VW_NC03 немного попроще OD-VOLVO-02, но основной функционал тот же: 4-е выходных сигнала и последовательный порт.

В дальнейшем во время экспериментов плату из CAN адаптера VW_NC03 я окирпичил — больше не смог перепрошить, поэтому на али был заказан еще один адаптер VW_NC03, но внутри него уже оказалась плата VW_NCD01 датируемая 2021 годом, а плата VW_NC03 была с датой 2017 года. Анализ с помощью мультиметра показал, что эта плата по схемотехнике почти полностью совместима с VW_NC03, но процессор в ней уже другой. Отладка через openocd показала, что процессор внутри был явно Nuvoton, имел схожие с NUC131 идентификаторы, и как оказалось для него подходит прошивка для платы VW_NC03, поэтому отдельной схемы или прошивки я не стал для него создавать. Но формально можно сказать, что прошивка поддерживает 3 различных адаптера.

В целом китайские процессоры в китайских адаптерах оказались не хуже и не лучше тех же STM32, внутри у них такое же армовское ядро cortex-m как и в STM32, поэтому могу рекомендовать такие адаптеры для каких-либо автомобильных поделок. Самостоятельная сборка подобного устройства на рассыпных элементах или из нескольких платок получится не дешевле, а тут готовое устройство c 4 программируемыми выходами и в корпусе.

Кто захочет приобрести на али такие адаптеры, то адаптер VW_NC03 можно найти по словам canbus box volkswagen, и далее выбирать адаптер с надписью HW:VW-NC-003. О обычно у продавца можно приобрести либо только адаптер или комплект из адаптера с проводкой, стоимость адаптера начинается от 7$.
По словам «volvo xc90 canbus» или «OD VOLVO 02» на али можно найти CAN адаптер для Volvo также с проводкой или без.
А комплект проводки от XC90 подходит по разъемам для Freelander2, поэтому владельцы Freelander2 в комплектации с шиной MOST смогут использовать такую проводку при установке андроид-магнитол в своих автомобилях. С разъемами из этой проводки можно акуратно подключиться в штатную проводку Freelander2 «разъем в разъем», не разрушая штатную проводку. На сером разъеме есть AUX и сигнал для усилителя FM радио, который многие используют вместо сигнала IGN. На зеленом разъеме есть шина MS CAN для подключения CAN адаптера и сигнал с резистивного делителя кнопок руля.

Исходный текст прошивки и готовые файлы для перепрошивки адаптеров доступны на гитхабе: github.com/smartgauges/canbox. Для перепрошивки адаптера нужен ST-Link V2 и программа openocd, я использовал версию с гитхаба: github.com/OpenNuvoton/OpenOCD-Nuvoton.
Для сборки прошивки использовался arm-none-eabi-gcc из состава ubuntu, перепрошивка адаптера осуществляется командами make flash_volvo_od2 и make flash_vw_nc03 для адаптеров OD-VOLVO-02 и VW_NC03 соответственно.

Если кто-то дойдет до стадии прошивки, я подготовил виртуальную машину с линуксом со всем необходимым инструментарием для сборки и прошивки, машина доступна по ссылке: drive.google.com/file/d/1…kctj8inW/view?usp=sharing

Данные пользователя в виртуальной машине
Login:user
Password:user

Краткая подсказка по командам в линуксе:
mc — файловый менеджер
cd canbox — переход в каталог с исходниками canbox
git pull — получить обновления исходников canbox с гитхаба
make clean — очистить текущую сборку прошивки
make — собрать новую сборку прошивки
make flash_vw_nc03 — прошить прошивку в плату WV-NC-003
На скриншоте пример как выглядит процесс прошивки

По итогу достаточного длинного изложения:

1) Коллега работой адаптера доволен, но уже закидывает вопросики про чип двигателя )
2) Прошивка поддерживает 2(3) CAN адаптера.
3) Потребление адаптера OD-VOLVO-02 в спящем режиме 4мА(с штатной прошивкой 20мА)
4) Потребление адаптера VW_NC03 в спящем режиме 1мА(с штатной прошивкой 1мА)
5) Прошивка поддерживает 2(3) автомобиля(рестайловый Frelander2 — с точки зрения шины CAN это другой автомобиль)
6) Прошивка поддерживает 4 протокола для связи с андроид-магнитолой

PS
Спасибо kostya-sha за наводку на проект с исходниками андроид-магнитолы, в нем гораздо проще посмотреть реализацию протоколов различных canbox-производителей,
например протокол Raise VW(MQB): github.com/runmousefly/Wo…n_Golf7_Protocol.java#L23

PSPS
Интересные ссылки по теме CAN для Volvo:
1) Описание протокола диагностического ПО(VIDA) hackingvolvo.blogspot.com/2012/12/success.html
2) Реализация устройства на основе диагностических запросов к блокам: github.com/vtl/volvo-ddd
3) Реализация устройства на основе прослушки данных: github.com/vtl/volvo-kenwood

Multiqueue tuntap interface

Узнал вот, что tuntap поддерживает такую фичу, решил попробовать.

Мой юзкейс — создаю очередь из 5 дескрипторов, первый используется ТОЛЬКО для записи пакетов в интерфейс, остальные 4 — ТОЛЬКО для чтения из своего потока.

Отправляю icmp для теста, в tcpdump вижу, что пакеты отправляются И принимаются интерфейсом, однако прикладной софт из дескрипторов, предназначенных для чтения ничего не получает. если же читаю из того же дескриптора, через который отправляю данные — все читается.

М.б я не правильно понял назначение этих очередей?

vvviperrr ★★★★★
29.03.17 18:36:22 MSK

никто не сталкивался?

vvviperrr ★★★★★
( 29.03.17 20:51:51 MSK ) автор топика
Ответ на: комментарий от vvviperrr 29.03.17 20:51:51 MSK

А ты при этом на всех дескрипторах выполняешь чтение ?

Думаю, что в другие дескрипторы данные будут попадать по мере заполнения приемных буферов.

Я бы для проверки послал снаружи кучу больших пингов, а на приемной стороне читал бы из дескрипторов с паузой в Х-секунд или просто сделал паузу, а потом посмотрел сколько пакетов попали в каждый из дескрипторов.

IMHO Multiqueue на передачу удобно если данные формируются из нескольких мест или нужно обеспечить скорость передачи данных больше, чем позволяет 1 поток.

IMHO на прием multiqueue нужен если 1 поток не успевает обрабатывать входящие данные.

vel ★★★★★
( 29.03.17 23:01:35 MSK )
Ответ на: комментарий от vel 29.03.17 23:01:35 MSK

А ты при этом на всех дескрипторах выполняешь чтение ?

яж говорю, читаю только их четырех, а пишу в один.

IMHO на прием multiqueue нужен если 1 поток не успевает обрабатывать входящие данные

я и не успеваю. нужно прочитать данные, распарсить ip заголовок, обработать данные. хотел городить обычные треды с tls буфером, а тут прочитал про такую фишку.

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

vvviperrr ★★★★★
( 29.03.17 23:09:01 MSK ) автор топика
Ответ на: комментарий от vel 29.03.17 23:01:35 MSK

Думаю, что в другие дескрипторы данные будут попадать по мере заполнения приемных буферов.

еще раз, пишу в один, читаю из ОСТАЛЬНЫХ четырех. данных нет ВООБЩЕ. они попадают в очередь первого дескриптора (из которого я не читаю). как — одному торвальдсу известно. код модуля с наскока не осилил.

vvviperrr ★★★★★
( 29.03.17 23:15:10 MSK ) автор топика
Ответ на: комментарий от vvviperrr 29.03.17 23:09:01 MSK

я и не успеваю. нужно прочитать данные, распарсить ip заголовок

т.е. в ifconfig видны дропы на приеме через этот тап?

А не пробовал включить RPS/XPS для tap ?

типа «echo F >/sys/class/net/tapX/queues/rx-0/rps_cpus» ?

vel ★★★★★
( 29.03.17 23:15:53 MSK )
Ответ на: комментарий от vel 29.03.17 23:15:53 MSK

т.е. в ifconfig видны дропы на приеме через этот тап?

нет. просто в случае с несколькими пользователями туна начинается конкуренция. пока первого не обработают ко второму не смогут приступить.

вопрос тащемта не в этом был. я понимаю как это разрулить на потоках. вопрос именно о специфичном поведении multiqueue.

vvviperrr ★★★★★
( 29.03.17 23:21:55 MSK ) автор топика
Последнее исправление: vvviperrr 29.03.17 23:24:56 MSK (всего исправлений: 1)

Ответ на: комментарий от vvviperrr 29.03.17 23:21:55 MSK

гм, что-то я «ifr.ifr_flags = IFF_ATTACH_QUEUE; ioctl(fd, TUNSETQUEUE,&ifr)» там не заметил.

vel ★★★★★
( 29.03.17 23:28:50 MSK )
Ответ на: комментарий от vel 29.03.17 23:28:50 MSK

я просто указал на ботл нек текущей реализации. а с multiqueue каждый поток бы читал из своего tun дескриптора.

vvviperrr ★★★★★
( 29.03.17 23:32:54 MSK ) автор топика
Ответ на: комментарий от vvviperrr 29.03.17 23:21:55 MSK

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

mky ★★★★★
( 29.03.17 23:33:19 MSK )
Ответ на: комментарий от mky 29.03.17 23:33:19 MSK

По исходникам не видно, чтоб он подключал несколько очередей.

vel ★★★★★
( 29.03.17 23:38:47 MSK )
Ответ на: комментарий от vel 29.03.17 23:38:47 MSK

а отправляю всегда в первый

vvviperrr ★★★★★
( 29.03.17 23:40:53 MSK ) автор топика
Последнее исправление: vvviperrr 29.03.17 23:41:49 MSK (всего исправлений: 2)

Ответ на: комментарий от vvviperrr 29.03.17 23:32:54 MSK

я не заметил, чтоб приложение открывало несколько раз устройство и подключало к ним multiqueue

vel ★★★★★
( 29.03.17 23:42:10 MSK )
Последнее исправление: vel 29.03.17 23:43:13 MSK (всего исправлений: 1)

Ответ на: комментарий от vel 29.03.17 23:42:10 MSK

выше, в ветке test

читал, там ничего не сказано о таком поведении

vvviperrr ★★★★★
( 29.03.17 23:43:22 MSK ) автор топика
Последнее исправление: vvviperrr 29.03.17 23:43:41 MSK (всего исправлений: 1)

Ответ на: комментарий от vvviperrr 29.03.17 23:43:22 MSK

У тебя 1 дескриптор и несколько тредов. Для работы с multiqueue нужно несколько дескрипторов.

vel ★★★★★
( 29.03.17 23:45:57 MSK )
Ответ на: комментарий от mky 29.03.17 23:33:19 MSK

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

сейчас так и делаю. пишу в первый, читаю из второго. данные на втором НЕ появляются, пакеты дропаются

tun0: flags=4305 mtu 1500 inet 10.1.1.1 netmask 255.255.255.0 destination 10.1.1.1 inet6 fe80::a53d:13d9:e913:2d89 prefixlen 64 scopeid 0x20 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 1457 bytes 99959 (97.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 79 bytes 8972 (8.7 KiB) TX errors 0 dropped 500 overruns 0 carrier 0 collisions 0 

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

vvviperrr ★★★★★
( 29.03.17 23:46:06 MSK ) автор топика
Последнее исправление: vvviperrr 29.03.17 23:47:37 MSK (всего исправлений: 1)

Ответ на: комментарий от vel 29.03.17 23:45:57 MSK

вот создаю 5 дескрипторов, пишу в первый, на остальные вешаю треды-читалки.

внимательнее, версия с multiqueue только в ветке test!

vvviperrr ★★★★★
( 29.03.17 23:47:23 MSK ) автор топика
Последнее исправление: vvviperrr 29.03.17 23:48:52 MSK (всего исправлений: 1)

Ответ на: комментарий от vvviperrr 29.03.17 23:47:23 MSK

ifr.ifr_flags = IFF_ATTACH_QUEUE; ioctl(fd, TUNSETQUEUE,&ifr)

для каждого полученного дескриптора ?

vel ★★★★★
( 29.03.17 23:50:11 MSK )
Ответ на: комментарий от vel 29.03.17 23:50:11 MSK

 A new ioctl(TUNSETQUEUE) were introduced to enable or disable a queue. When calling it with IFF_DETACH_QUEUE flag, the queue were disabled. And when calling it with IFF_ATTACH_QUEUE flag, the queue were enabled. The queue were enabled by default after it was created through TUNSETIFF. 

The queue were enabled by default after it was created through TUNSETIFF

если бы они все были бы disabled, то я вообще ни откуда данные б не прочитал

vvviperrr ★★★★★
( 29.03.17 23:52:10 MSK ) автор топика
Последнее исправление: vvviperrr 29.03.17 23:53:43 MSK (всего исправлений: 2)

Ответ на: комментарий от vel 29.03.17 23:50:11 MSK

вобщем да, очереди определяются на основе хеша. это нормальное поведение.

vvviperrr ★★★★★
( 30.03.17 00:00:14 MSK ) автор топика
Ответ на: комментарий от vvviperrr 29.03.17 23:52:10 MSK

ну, поверим документации 🙂

Ты сам себе пакет посылаешь ? А если с другой машины/netns ?

IMHO При маршрутизации через localhost без явного разрешения RPS/RFS/XPS multiqueue не будет работать.

vel ★★★★★
( 30.03.17 00:02:19 MSK )
Последнее исправление: vel 30.03.17 00:03:19 MSK (всего исправлений: 1)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *