STM32F411 «Black Pill» USB & Libopencm3 bug

Небольшая заметка по результатм исследования бага с неработающей инициализацией USB с библиотекой LibOpenCm3 для китайской платки WeAct «Black Pill» v2.0.
Если не у вас не работают примеры для USB, и система даже не проводит энумерацию подключенного устройства, то вам надо:

  1. Заинклюдить otg_fs.h
    #include <libopencm3/usb/dwc/otg_fs.h>
  2. После вызова функции usbd_init отключить VBUS sensing
    OTG_FS_GCCFG |= OTG_GCCFG_NOVBUSSENS | OTG_GCCFG_PWRDWN;
    OTG_FS_GCCFG &= ~(OTG_GCCFG_VBUSBSEN | OTG_GCCFG_VBUSASEN);

Фикс-реквест все еще с 2020 года ждет мержа.
https://github.com/libopencm3/libopencm3/pull/1256

Прошивка Motorola GM300. Групповое фото фейлов.

Вот так выглядят попытки прошить две мои мотороллы.

  • Прошивалка для COM порта на транзисторах.
  • Прошивалка на буферной микросхеме на COM.
  • USB to UART TTL на китайской (судя по цене) FT232RL
  • Переходник USB to UART TTL на соплях, и оригинальной FT232RL
  • Моя отладочная плата для Atmega8, с оригинальной FT232RL
  • USB to TTL на CH430 c диодиком. Чисто по-приколу

Судя по тому, что я нарыл, те записи в консоль, которые выводил dosbox, имеют смысл. Вот тут пишут что для прошивки была выбрана оригинальная микросхема от FTDI, по причине того что старые рации требуют нестандартных скоростей, таких как 952 bps или 7680 bps. И что большая часть переходников, включая оригинальные PL2303 не работают. И лишь FTDI FT232RL аккуратно эмулирует все возможности чипа последовательного порта компьютера.

Попытки прошивки я выполнил и под Linux, и под Windows. Без результата.
Я даже попробовал виндовую бесплатную утилиту Radio Doctor. Но и она не смогла обнаружить рацию.

Значимые отличия были при попытке прошивки через железный COM под виндой. Досбокс потоком ругался на «framing error». При использовании оригинальной FT232RL под виндой, жалоб dosbox на частоту 952 bps замечено небыло, но было единичное ругание на невозможность установить скорость 9600.
Под линуксом даже с оригинальной FT232RL досбокс писал ошибку установки скорости в 952 bps.
Так же пытался принудить железный COM под линуксом задействовать частоту 952 bps принудительно выставив делитель частоты в 121 при помощи утилиты setserial

$ setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test

$ setserial /dev/ttyS0 divisor 121

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


Новая Motorola GM300

Сегодня забрал еще одну рацию в состоянии «все работает».

В комплекте и тангента была, и родные заглушки/перемычки сзади были. Но! Она тоже не шьется!!!

Отрицательный результат, тоже результат. И теоретически у меня на руках 2 рабочие рации. И очень вероятно, где-то с прошивкой косячу я. Осталось только понять где. Меня очень сильно смущают сообщения при старте dosbox «Desired serial mode not supported (952,7,e,1)». Они означают что идет попытка инициализировать последовательный порт на скорости 952 бод/с. Что вообще выглядит нестандартной скоростью, на грани глюка. В мануалах под винду, народ руками выставляет порту скорость 2400 бод/с, и я рискну предположить, что это и должна быть скорость порта, на которой идет общение с MCU рации.

Очень сильно бы помог дамп работы при помощи логического анализатора, дабы понять, какая там актуальная скорость. Но чего нет, того нет. Копание продолжается.

Эквивалент нагрузки 50 ом

Было:

Стало:

Сегодня сходил на радиорынок, и подобрал наконец радиатор к 50 омной нагрузке. Теперь можно будет, когда дойдут руки, собрать ламповый усилитель на КВ. На что нагрузить теперь есть. 🙂

Оживление мелюзги

Валялись у меня пару QRP трансиверов Pixie, один китайский, а другой самодельный. Были сделаны в те времена когда у меня и осциллографа небыло. И соответственно, не заработали после сборки. Сейчас что-то про них вспомнил, и решил поковырять.

У китайского оказался резистор не того номинала в цепи кварца (привет китайцам), у моего был незаметный непропай у перемычки. Оживил. Надо будет попробовать доучить морзянку и хоть какую связь провести. 🙂

Насилуем труп. Продолжение

Распотрошил топленую Мотороллу GM300 опять. По схеме дошел от разъема тангенты до ноги микроконтроллера. На ноге контроллера передаваемые данные от компьютера присутсвуют. Ответа нет. Печалька. Причем станция включается, пиликает и даже вроде работает. Т.е. микроконтроллер жив. Но не отвечает.
Буду ждать вторую станцию.

Антенные заботы

Вообще, чего я начал эту возню с GM300. Давным-давно, еще когда у меня небыло позывного, решил я поднять первый в Нижнем Новгороде APRS гейт. Спаял переходник, настроил DireWolf на Raspberry Pi. И пошел получать позывной. Получил. Но возник вопрос с антенным хозяйством. Жил я тогда на съемной квартире, на 2 этаже в пятиэтажке в центре города. Отложил до лучших времен. Прошло пару лет, я обзавелся своей квартирой. Но! Скатная крыша, и 4 этаж. Но собрал антенну slim jim. И поставил в угол. Прошли года, у меня свой дом. Алексей RA3TLB, выкладывает видео на своем канале с рассказом о APRS. Я чешу репу, и достаю из угла свою антенну, и вспоминаю как конфигурить DireWolf. Вполне успешно настроил все. Но поскольку не хочу делать APRS гейт тяп-ляп, было решено возвести хорошую антенную мачту у дома.

Осенью я выкопал яму в 2,5 метра глубиной, вставил туда каркас из стального уголка, и залил бетоном. По весне грунт усядется, бетон схватится окончательно и можно наконец будет возвести свою, персональную, офигенную стальную мачту. 🙂

А пока зимой вяло занимаюсь подготовкой антенн, передатчика и софта.

Сегодня опять стер пыль с антенны, и решил поглядеть на какую частоту она попала. Ибо когда я ее делал, векторного анализатора NanoVna (да будут благословенны его создатели).

Почти попал в 144.800 Подстроил антеннку. Будем посмотреть потом.

Итоги на начало года

Хрен его знает зачем, но захотелось зафиксировать некую контрольную точку в своем бложике (ибо нахрена он нужен?)

На «Мешке» за тысячу рублей куплена рация Motorola GM300 в состоянии «как есть, не проверял, вроде включается».
Рация ко мне приехала. Не включается. Просто отлично. Но слава богу это GM300, что ремонтопригодна аки Форд Т. Схемы есть, мануалы есть, чини вдоволь.

Вскрытие показало что рация была когда-то подтоплена в каком-то болоте.

Но, в целом кроме ржавины на разных экранах и кварцах, платы не пострадали. Рации была прописана ванна в Трилоне-Б, затем в безводном изопропиловом спирте. Ижанит внутри был истреблен, рация собрана. И вновь не включилась. Наступило время чтения сервис-мануалов и разглядывания схем. Закончилось это тем, что на batlabs.com было найдено описание типичных проблем. Одно из которых было «рация не включается вообще». И предложением «проверьте ручку включения питания/громкости. Питание проходит через нее, и идет на logic unit». Не веря, что мне может так повезти, проверяю выход питания с ручки… И да! Сдох выключатель. Прополоскал в изопропопиле, покрутил ручку… Станция ожила!

Наступило время прошить ее.
Собрал программатор на транзисторах.

Подключаю, запускаю RSS в DosBox — не работает.
ОК. Собираю на MAX232 c буфером.

Не работает. Офигеваю, достаю шнурок USB to UART-TTL, и на обломке макетки леплю тупейший адаптер.

Не работает. Причем логический анализатор показывает, что сервисная утилита пытается отправлять данные, но ответа не получает. Загадки во тьме…
Что же по итогу этих игр? Я пошел на Авито, и купил еще одну такую рацию за 1500 рублей, но точно рабочую 🙂 Придет — буду ставить эксперименты далее.