Рация в «кирпиче»: восстановление прошивки (DFU/bootloader) по моделям
Перешивали рацию, посреди процесса моргнул свет или вылетела утилита — и теперь радиостанция не загружается: чёрный экран, не реагирует на кнопки, либо болтается на логотипе. Это «кирпич» (англ. brick): аппаратура исправна, но прошивка повреждена и нормально не стартует. Звучит как приговор, но в подавляющем большинстве случаев это не он. В носимых DMR-рациях рядом с основной прошивкой живёт отдельный аварийный загрузчик (bootloader), который вызывается особой комбинацией кнопок при включении и позволяет залить прошивку заново. Разберём по моделям, как войти в этот режим, чем шить и в каких редких случаях кирпич всё-таки требует программатора или сервиса.
Что такое «кирпич» и почему он лечится
Память современной DMR-рации условно делится на две части. Маленький загрузчик (bootloader) запускается первым при включении, проверяет нажатые кнопки и решает: грузить основную прошивку или встать в режим прошивки (DFU / recovery / update mode). Сама основная прошивка (firmware) лежит отдельно и занимает большую часть флеша. Когда говорят «окирпичилась рация», в 95% случаев имеют в виду именно повреждённую основную прошивку: загрузчик при этом цел и доступен.
Признаки «лечимого» кирпича:
- рация не реагирует на обычное включение, экран чёрный или с мусором;
- но особой комбинацией кнопок (см. ниже по моделям) она входит в режим прошивки — мигает или горит светодиод;
- компьютер при этом видит её как DFU-устройство или COM-порт.
Если хоть одно из двух последних условий выполняется — поздравляю, это рабочий загрузчик, и кирпич почти наверняка снимается перезаливом. А вот если ни одна комбинация не оживляет аппарат и компьютер его не видит вообще никак — тогда подозрение падает на сам загрузчик, и это уже другой разговор (последний раздел).
Сначала — бэкап, всегда
Прежде чем что-либо шить (хоть в первый раз, хоть при восстановлении), снимите дамп. Восстановить кирпич — полдела; обидно при этом потерять калибровку и каналы.
- Codeplug — ваши каналы, зоны, контакты. Считывается штатным CPS («Read radio»). Подробно — в статье про codeplug.
- Calibration / заводская калибровка — подстройка частоты, мощности, девиации именно вашего экземпляра. Лежит в отдельной области флеша. Её потеря не убивает рацию, но та начинает «врать» по частоте и мощности до повторной калибровки. У TYT MD-380 калибровку умеет выгружать/заливать md380tools (команды чтения SPI-флеша), у AnyTone — фирменная утилита.
- Полный дамп флеша — если инструмент позволяет, снимите образ целиком. Это страховка от любой неприятности.
TYT MD-380 / MD-390 (и клоны RT3/RT8)
Однодиапазонная классика на процессоре STM32F405 (1 МБ флеша, 192 КБ ОЗУ) с DMR-баребендом HR-C5000. Отдельного вокодерного чипа в ней нет — AMBE-кодек эмулируется программно прямо на STM32F405, так что «мозг» и «голос» здесь один и тот же кристалл. У радио стандартный для STM32 загрузчик в режиме DFU — самый дружелюбный к восстановлению из всей нашей подборки.
Вход в DFU:
- Выключите рацию ручкой громкости. Снимите заглушку с разъёма наушник/микрофон, подключите программирующий кабель.
- Зажмите одновременно PTT и кнопку над PTT (верхнюю боковую, не ту, что с буквой «M»).
- Удерживая обе кнопки, включите рацию ручкой громкости и отпустите кнопки.
- Светодиод должен мигать поочерёдно красным и зелёным — вы в режиме прошивки (DFU).
Чем шить: фирменная Tytera Upgrade.exe («Open Update File» → выбрать .bin → «Download Update File»), либо кроссплатформенно через dfu-util / обёртку md380-dfu из комплекта md380tools. Заметьте: TYT использует слегка нестандартный вариант DFU (форк примера STMicro), поэтому проще всего работает именно их утилита или специально заточенный md380-dfu. Подробности про прошивки и твики — в статье md380tools.
GD-77, DM-1801, RD-5R на OpenGD77
Совсем другое железо: NXP MK22 + AT1846S + HR-C6000. Прошивка OpenGD77 и её родной загрузчик. Сюда же по способу прошивки относятся двухдиапазонные TYT MD-UV380/UV390 и Retevis RT-3S — но учтите, что у них внутри STM32F405 (как у MD-380), а не MK22, поэтому и комбинация входа, и индикация у них другие (см. ниже и таблицу).
Вход в режим загрузчика (GD-77/DM-1801/RD-5R): зажмите SK1 + SK2 (на GD-77 это две кнопки под PTT: чёрная SK1 и синяя SK2) и, удерживая их, включите рацию. У MD-UV380/UV390/RT-3S комбинация иная — SK1 (верхняя боковая) + PTT при включении.
- GD-77/DM-1801/RD-5R (MK22): зелёный светодиод горит ровно, экран тёмный — загрузчик готов, можно шить. У MD-UV380/UV390/RT-3S (STM32) вместо этого светодиод на торце мигает красным↔зелёным, а в системе появляется STM DFU-устройство — это нормальный признак готовности их загрузчика.
- В обоих случаях запускаете OpenGD77 CPS, открываете «Firmware loader», выбираете правильную модель в списке, выбираете .bin — и запись стартует сразу после выбора файла.
- На GD-77-семействе зелёный мигает (а не горит) и гаснет при отпускании SK1/SK2 — тревожный знак: повреждены сигнатурные байты по адресу 0x7F800, и загрузчик отказывается шить, запуская вместо этого основную прошивку. Это лечится патч-загрузчиком с сайта OpenGD77 (раздел patched_bootloaders), который снимает проверку сигнатуры.
AnyTone (AT-D878UV и родня)
У AnyTone — собственный режим обновления и свой формат прошивки. На рынке две заметно разные аппаратные ревизии (V1 и V2/UVII), и прошивки между ними не взаимозаменяемы — это частая причина «окирпичивания»: залили файл не от той ревизии. Всегда сверяйте версию железа.
Вход в режим обновления (rescue): зажмите PTT и верхнюю кнопку PF3 (синяя, на торце, она же «тревога»/Alarm) и включите рацию. Красный светодиод начнёт мигать — вы в режиме прошивки.
Особенности формата: прошивка AnyTone — это комплект из нескольких файлов (.spi, .CDI, .CDD) с одинаковым базовым именем; все они должны лежать в одной папке. Шьётся фирменной утилитой обновления через выбранный COM-порт; существуют и сторонние flash-tools, принимающие .spi-файл и порт как аргументы.
| Модель | Вход в режим прошивки | Индикация | Чем шить |
|---|---|---|---|
| TYT MD-380/390, RT3/RT8 | PTT + кнопка над PTT, затем питание | LED мигает красный↔зелёный | Tytera Upgrade / dfu-util / md380-dfu |
| GD-77, DM-1801, RD-5R (OpenGD77) | SK1 + SK2, затем питание | Зелёный горит ровно | OpenGD77 CPS (firmware loader) |
| MD-UV380/390, RT-3S (OpenGD77, внутри STM32) | SK1 (верхняя боковая) + PTT, затем питание | LED мигает красный↔зелёный | OpenGD77 CPS |
| AnyTone AT-D878UV (V1/V2) | PTT + PF3 (верхняя), затем питание | Красный мигает | Фирменная утилита / flash-tools |
Перезалив: пошагово
Универсальный порядок восстановления, когда загрузчик жив:
- Зарядите аккумулятор, возьмите надёжный USB-кабель напрямую в порт компьютера (не через хаб и не через «зарядный» шнур без линий данных).
- Подготовьте recovery-образ: заведомо рабочий сток под вашу модель/ревизию или проверенную альтернативную прошивку. Файл должен точно соответствовать железу.
- Введите рацию в режим прошивки нужной комбинацией, убедитесь по светодиоду и по тому, что ПК её видит.
- Запустите утилиту, выберите файл, начните запись — и не трогайте ничего до явного «Done/Success».
- Выключите рацию ручкой громкости, отсоедините кабель, включите штатно.
- Залейте калибровку из бэкапа (если требуется) и соберите/верните codeplug.
Пример вызова dfu-util для STM32-рации семейства MD-380 (имена устройства и адрес — для иллюстрации, сверяйте по своей утилите):
# посмотреть, видит ли система DFU-устройство
dfu-util --list
# залить прошивку (md380-dfu делает это с правильными смещениями)
md380-dfu upgrade firmware.bin
Когда загрузчик мёртв: программатор или сервис
Бывает редкий, но настоящий кирпич: рация не входит ни в один режим прошивки, светодиод не реагирует, компьютер устройство не видит ни как DFU, ни как COM-порт. Это значит, что повреждён сам загрузчик — простой неудачной прошивкой такое почти не получить, чаще виноваты ESD-разряд, скачок питания, неудачная попытка прошить чужой/битый загрузчик или аппаратный дефект.
Лечится это только аппаратно, через сервисные выводы процессора:
- STM32-рации (MD-380/390 и MD-UV380/390/RT-3S) — подключаемся программатором ST-Link по интерфейсу SWD (линии SWDIO, SWCLK, GND, 3.3V) или JTAG к контактным площадкам на плате. В STM32CubeProgrammer стираем флеш и заливаем заведомо рабочий образ загрузчика + прошивку. Учтите: на этих рациях флеш обычно защищён от чтения (RDP) — снятие защиты стирает кристалл, так что родную калибровку нужно иметь в бэкапе заранее.
- Приём с RESET. Если ядро не даёт подключиться (прошивка перенастраивает выводы сразу после старта), пока программатор пытается законнектиться, коротко жмём аппаратный RESET — это даёт окно, чтобы зацепиться до того, как «плохой» код перехватит управление.
- NXP MK22 (GD-77/DM-1801/RD-5R) и AnyTone — аналогично через свои отладочные интерфейсы соответствующим программатором; но доступ к процессору и образ загрузчика для этих платформ найти сложнее.
Если вы не паяете и не работаете с SWD/JTAG — это прямой повод нести аппарат в сервис или к опытному радиолюбителю с программатором. Восстановление загрузчика — операция тонкая, и порча процессора при ней реальна.
Оживил — выходи в эфир
Снятый кирпич — повод залить свежую прошивку и наш codeplug, а потом зарегистрироваться в DMRhub: приватные вызовы по DMR ID, SMS и группы уже ждут. Нет покрытия рядом? Соберите хотспот и поднимайте свой узел сети там, где его нет.
Источники
- md380tools — прошивка и DFU-инструменты для TYT MD-380/390 (вход в DFU, dfu-util) — github.com/travisgoodspeed/md380tools
- Updating MD-380 Firmware — вход в DFU (PTT + верхняя кнопка), Tytera Upgrade — learn.adafruit.com
- HOWTO: Flash the OpenGD77 firmware — SK1+SK2, индикация загрузчика, сигнатура 0x7F800, patched bootloaders — opengd77.com
- Anytone AT-D878UV DMR Firmware Update (Powerwerx) — режим обновления, PTT+PF3, файлы .spi/.CDI/.CDD — powerwerx.com
- Corrupted STM32 Bootloader Recovery — восстановление загрузчика через ST-Link/SWD — lukeslab.info