Портируем прошивку PCAN на китайскую плату

Преамбула

В данном тексте я выполнил обзор широко известного open source проекта прошивки для PCAN-Pro. Код которой лежит на Github. Мне удалось портировать и завести прошивку на покупной учебной отладочной плате JZ-F407VET6.

В каждой разработке с CAN нужны средства отладки. Я узнал, что в интернете есть открытый проект прошивки для культового прибора PCAN и попробовал его портировать на учебную отладочную плату JZ-F407VET6.

Справка по теории

SWD— Интерфейс для программирования микроконтроллера.

Справка по USB 2.0 (Full Speed)

Конечная точка USB (Endpoint) — это конкретный буфер или канал передачи данных внутри USB-устройства, через который хост (компьютер) отправляет и получает данные, а также команды управления, сгруппированные по типу: контроль, прерывание, пакетная (bulk) или изохронная передача. Каждое устройство может иметь до 32 таких точек (по 16 для входа и выхода), которые определяют, как именно данные перемещаются между хостом и устройством (например, чтение с устройства (IN) или запись на устройство (OUT)).

USB — это последовательный двухпроводной полудуплексный способ передачи информации и электропитания на расстояние до 5 метров между электронными платами (PCB). Тип сети: точка-точка. Битовая скорость достигает 480 Mbit/s. Терминирующий резистор 90 ом. На разъёме USB 2.0 помечается черным пластиком. Кодирование битов NRZi.

Данные передаются младшим битом вперед. Для надежности используется бит стаффинг и 16битная CRC. USB работает на физическом, канальном и сетевом уровне модели OSI-7.

Справка по CAN Classic
CAN
— это двухпроводный, дифференциальный, последовательный, полудуплексный интерфейс для передачи бинарных данных между электронными платами (PCB). Кодирование битов NRZ

В качестве кабеля применяют одну витую пару проводов. Битовая скорость до 1 MBit/s.

Параметр

отличие

CAN Classic

USB 2.0

Гальваническая изоляция

0

нет

нет

определяет структуру пакета

0

да

да

Сопротивления терминирующего резистора, Om

1

120

90

порядок байт

0

Litttle endian

адрес устройства, bit

11….29

Дифференциальное напряжение, V

1,48…2

разрешение коллизий

1

да

нет

Тим сети

1

общая шина

точка-точка

Расстояние

1

40

5

колич. проводов

1

2+GND

4

Битовая скорость, MBit/s

1

1

480

CRC, bit

0

15

15

Кодирование бита

1

NRZ

NRZi

бит стаффинг

1

после каждых 5ти одинаковых

каждые 6 бит

payload, byte

1

8

8<x<1024

направления

0

Half-duplex

Half-duplex

разъём

1

трапеция

прямоугольник

год появления

1

198x

2000

колич устройств на шине

1

127

2

Для работы потребуется кое-что из оборудования:

Прибор

Количество

Программатор J-Link 

1

логический анализатор DS logic

1

Кабель USB-A-USB-mini

1

джамперы 

2

осциллограф, кабель AC для питания осциллографа

1

Переходник с USB на RS232

1

Для портирования прошивки вам потребуется плата с STM32 и CAN. Существует широко известная, доступная в продаже (2k RUR) синяя отладочная учебно- тренировочная электронная плата JZ-F407VET6 на основе микроконтроллера STM32F407VET6. На PCB как раз STM32 два CAN, USB и светодиоды. Эта плата идеально подходит для портирования прошивки PCAN-Pro-X.

Вот ее схемотехника

и блок-схема 

Прошивка настраивает USB трансивер в Full Speed режим , поэтому в электрическую цепь надо добавить программную подтяжку (1500 Om) к питанию на проводе D+ . Чтобы при подключении OS могла сразу понять тип устройства Full Speed.

Программная часть

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

Это проблему я смог решить при помощи ИИ.

Адаптация прошивки

Надо внести в исходники ряд изменений, чтобы просто разлочить прошивку. Первым делом надо прописать корректный VID (0x0C72) [vendor id ]. Чтобы Windows Peak-System драйвер обнаружил устройство корректно надо в коде прошивки прописать VID:0x0C72 и PID:0x000D.

#define USBD_VID 0x0C72

вв

в

Cобрать прошивку в конфигурации PCAN_PRO и определить вот эти макросы:

#define USBD_PID_HS 0x000d

#define USBD_PRODUCT_STRING_HS «XCAN-USB-PRO»

#define USBD_INTERFACE_CAN_STRING_HS «XCAN-USB-PRO CAN Device»

#define USBD_INTERFACE_LIN_STRING_HS «XCAN-USB-PRO LIN Device»

внести такие изменения

внести такие изменения

Прошивку надо собрать с макросами препроцессора

Макрос

Пояснение

USB_WITHOUT_ISR=1

работать без USB прерываний

PCAN_PRO=1

PCB PCAN_PRO

INCLUDE_LIN_INTERFACE=1

активировать LIN

USB_MODULE_ID=DEVICE_FS

Высокоскоростной режим USB Full speed

В скриптах сборки Make это выглядит вот так

OPT += -DUSB_WITHOUT_ISR=1

OPT += -DPCAN_PRO=1

OPT += -DINCLUDE_LIN_INTERFACE=1

OPT += -DUSB_MODULE_ID=DEVICE_FS

После этого по крайней мере прошивка будет признаваться Windows драйвером.

После пересборки и загрузки бинаря Windows стала распознавать прибор. 

Стоит отметить, что оригинальная прошивка работает абсолютно без прерываний. Все подсистемы: CAN, USB, Timer работают в режиме обыкновенного опроса.

Сопряжение с PC

Прошивка работает с версией PCAN драйвера c номером 4.2.3…..4.2.4. В случае успешного обнаружения прошивки диспетчер устройств увидит устройство

Свойства драйвера

Ключевые параметры

Диагностика драйвера

Device USBVID_0C72&PID_000D&MI_007&37ef5e6d&0&0000 was configured.

Driver Name: oem300.inf

Class Guid: {c38c9d86-471e-4d6b-9fb6-78dda20e3f70}

Driver Date: 04/08/2021

Driver Version: 4.2.3.16490

Driver Provider: PEAK-System Technik GmbH, Darmstadt, Germany

Driver Section: PkUsbPro.DeviceInstall.NT

Driver Rank: 0xFF0001

Matching Device Id: USBVID_0C72&PID_000D&MI_00

Outranked Drivers: 

Device Updated: false

Parent Device: USBVID_0C72&PID_000D6&7c39754&6&3

Клиентская утилита

Основное окно утилиты

Версию прошивки можно увидеть во вкладке View —> PCAN-USB Pro

Достоинства custom прошивки для PCAN-View

1)Это дёшево. Код для устройства взят из интернета бесплатно. Покупать надо только отладочную плату с STM32, USB, 2xCAN и LEDами.
2)Вы получаете бесплатный драйвер.
3)Вы получаете бесплатную Windows клиентскую программу для прошивки PCAN-View. Вам не надо отдельно разрабатывать клиентскую утилиту. Вы просто берёте утилиту PCAN-View из драйвера версии 4.2.3.
4)Устройство может работать на относительно высоких нагрузках CAN шины. До 1Mbit/s
5)Win драйвер позволяет подключаться к прибору из нескольких приложений

Недостатки open-source прошивки PCAN

– USB не успевает отправлять набегающий с улицы поток CAN пакетов. Пошаговая отладка J-link программатором показывает, что переполняется массив на отправку в USB. Даже вопреки тому, что USB FS — это быстрый интерфейс однако сами данные в USB отправляются 12 MBit квантами с периодом отправки 1ms. Эти кванты регулирует PC, так как мастером USB шины всегда является HOST устройство. Решение сбоя: добавить таймаут проверку, которая запрещает отправку в USB первые 5-6 секунд с момента подачи на PCB питания. Эти первые 5-6 секунд необходимы, чтобы OS Windows обнаружила новое подключенное устройство. Это исправляет зависания при включении.

–В клиентской программе PcanView нет опции дозированной отправки точного количества пакетов с последующей остановкой.

–Можно заменить каскадный таймер для таймштампов (два 16 бит) на один 32 битный. На MCU как раз TIM2(32b) TIM5(32b) свободные. 

–Нынешние 96MHz — это не предельная частота из которой можно тактировать CPU. Можно разогнать чип до 168MHz. Но для такой тактовой частоты надо переписывать настройку пред делителей CAN, которые сейчас прохардкожены для APB производной из 96MHz.

– оригинальная прошивка иногда зависает при пре сбросе электропитания. Отладка GPIO пином показывает, что зависание происходит внутри функции pcan_usb_device_poll, которая в свою очередь вызывает HAL_PCD_IRQHandler -> PCD_EP_OutXfrComplete_int-> HAL_PCD_DataOutStageCallback-> USBD_LL_DataOutStage-> ret = (USBD_StatusTypeDef)pdev->pClass->DataOut(pdev, epnum)-> device_data_out-> pcan_protocol_process_data-> pcan_protocol_set_baudrate-> assert( 0 ); и концы в воду. Прошивка зависает на assert( 0 ); Надо убрать все assert функции.

– В устройстве зависает USB при подключении на около предельной нагрузке в CAN шине. Пошаговая отладка J-link программатором показывает, что переполняется массив на отправку в USB. При старте USB не успевает отправлять набегающий с улицы поток CAN пакетов. Даже вопреки тому, что USB FS — это быстрый интерфейс однако сами данные в USB отправляются 12 MBit квантами с периодом отправки 1ms. Эти кванты регулирует PC, так как мастером USB шины всегда является HOST устройство. В исходную прошивку я добавил таймаут проверку, которая запрещает отправку в USB первые 7 секунд с момента подачи на PCB электропитания. Эти первые 5-6 секунд необходимы, чтобы OS Windows обнаружила новое подключенное устройство. Теперь баг исчез.

— Надо отключать CAN-периферию от шины на время инициализации.

Результат

Удалось получить полный контроль к исходникам прошивки прибора PCAN-Pro. Это открывает дорогу к использованию их готового клиентского ПО для PC PCAN-Pro-X (4.2.3).

Это бюджетное решение получить хороший переходник с USB на CAN. Достаточно просто купить отладочную плату с STM32 USB и двумя CAN и собрать для нее прошивку из репозитория. В результате вы фактически получите PCAN-Pro-X по цене отладочной платы. Плюс вам не надо писать Windows драйвер и клиент для Windows. Это уже появляется само после установки PEAK драйвера 4.2.3

Словарь

Сокращение

расшифровка

PCD

Peripheral Controller Driver

PHY

physical layer

PID

product id

VID

vendor id

ECU

Electronic control unit

MAC

medium access control

UART

Universal Asynchronous Receiver/Transmitter

PCAN

Peak CAN

CAN

Controller area network

Больше ссылок

Название

URL

электронная плата JZ-F407VET6 с STM32F407VET6

https://aliexpress.ru/item/1005012356651068.html?sku_id=12000058163717122&spm=a2g2w.productlist.search_results.1.2124d167uht7L0

Введение в разработку USB периферии @TimurGilfanov

https://habr.com/ru/articles/90774/

USB in a NutShell — путеводитель по стандарту USB (начало)

https://microsin.net/programming/arm-working-with-usb/usb-in-a-nutshell-part1.html

Репозиторий с проектом pcan_pro_x

https://github.com/moonglow/pcan_pro_x

Обзор USB-CAN переходника USB2CANFD_V1

https://habr.com/ru/articles/944112/

CAN — BUS

https://en.wikipedia.org/wiki/CAN_bus

Тестовый зажим SDK08 для LQFP микросхем

https://aliexpress.ru/item/1005008647216059.html?shpMethod=CAINIAO_STANDARD&sku_id=12000046082389639&spm=a2g2w.productlist.search_results.0.7a97630b1uMjz2

CAN — bus

https://en.wikipedia.org/wiki/CAN_bus

USB in a NutShell Making sense of the USB standard

https://www.beyondlogic.org/usbnutshell/usb1.shtml

peak-system

CAN adapter Female DB9 LIN Board PCAN USB to CAN terminal resistance 120 Wiring terminals

https://www.peak-system.com/

https://aliexpress.ru/item/1005005815716199.html?spm=a2g2w.orderdetail.0.0.53604aa6XtJmWW&sku_id=12000034448826076

Всё о CAN-шине и не только
https://t.me/All_About_CANbus

Клоны PCAN преспокойно продают на OZON всего за 3 902 ₽
https://www.ozon.ru/product/pcan-usb-sovmestimyy-peak-model-ipeh-002022-002021-2988457867/?at=WPtNQnkggtPvWDRJS1opvnlSwgGBX4uxMXvYLTrDmZGr

примочки для подключения логического анализатора на USB (usb test board XY-USB4)
https://aliexpress.ru/item/1005008003572918.html?shpMethod=CAINIAO_SUPER_ECONOMY&sku_id=12000043227631212&spm=a2g2w.productlist.search_results.1.71077fd4sYvNJv

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев