Инструменты прошивки: что выбрать между cc2538-bsl, UniFlash и Python
Для прошивки через UART ROM Bootloader (BSL) чаще всего берут cc2538-bsl; для прошивки через JTAG/SWD, восстановления после неудачной прошивки и “mass erase” — TI UniFlash (GUI или CLI dslite); для режима “в один клик” поверх этих утилит делают Python‑обвязку.
Оглавление
Как выбрать инструмент
cc2538-bsl выбирайте, если:
- есть доступ к UART (USB‑UART/виртуальный COM);
- нужно быстро erase → write → verify на стенде или в поле;
- важна кроссплатформенная CLI‑прошивка.
TI UniFlash выбирайте, если:
- прошиваете через отладчик (JTAG/SWD);
- нужен стабильный “официальный” процесс с логами и повторяемостью;
- требуется восстановление, когда BSL недоступен.
Python‑скрипты выбирайте, если нужно:
- автоматически находить нужный порт/устройство;
- проверять “тот ли файл” и “та ли плата”;
- запускать прошивку серийно (стенд, производство, CI).
Сравнение подходов (коротко)
| Задача | Лучше подходит | Почему |
|---|---|---|
| Прошить по UART через ROM BSL | cc2538-bsl | Простой CLI, быстро, удобно для обновлений |
| Восстановить после “неудачного” образа | UniFlash + JTAG/SWD | Когда BSL не поднимается, отладчик часто единственный выход |
| Запуск “одной кнопкой” с проверками | Python + (cc2538-bsl/UniFlash) | Контроль порта, версии, верификации, логирование |
cc2538-bsl: быстрый старт и команды
Перед первой прошивкой проверьте:
- UART уровни 3.3V (5V на линиях RX/TX — частая причина нестабильной связи).
- Устройство реально входит в BSL‑режим (кнопки/пины зависят от платы).
- Формат файла: обычно
.hex(Intel HEX) или.bin.
Базовая команда, которую стоит стандартизировать в команде — стереть, записать, проверить:
python3 cc2538-bsl.py -p PORT -e -w -v firmware.hex
Только стереть (полезно перед “чистой” прошивкой):
python3 cc2538-bsl.py -p PORT -e
Риск “потерять BSL”. На части устройств после записи валидного образа вход в ROM BSL может стать недоступен без заранее предусмотренного “backdoor”/условий входа. Планируйте доступ к JTAG/SWD хотя бы для аварийного стирания.
Всегда включайте -v (verify) и сохраняйте лог вывода. Это резко ускоряет разбор “прошилось, но не работает”.
TI UniFlash: когда нужен и что даёт CLI
UniFlash удобен, когда прошивка идёт через отладчик, а также когда нужно:
- “mass erase” и восстановление после неудачных экспериментов;
- воспроизводимые операции (одинаковые настройки у всей команды);
- пакетный запуск через CLI
dslite(вместо ручного GUI).
Практический смысл CLI:
- храните конфигурацию/параметры как часть процесса;
- запускаете прошивку одной командой;
- получаете предсказуемый лог для техподдержки и производства.
Конкретные ключи
dsliteзависят от семейства, интерфейса (JTAG/SWD) и используемого отладчика, но общий подход один: выбрать target → выбрать образ → стереть/прошить → проверить → перезапустить.
Python-скрипты: автоматизация без ручных шагов
Типовой надёжный пайплайн (минимум, который окупается сразу):
- Найти устройство (по VID/PID, серийному номеру USB‑UART, имени порта).
- Проверить входные данные: что файл прошивки подходит под нужную плату/чип/память.
- Перевести устройство в режим прошивки (кнопка/пины или управляющие линии UART, если плата это поддерживает).
- Запустить
cc2538-bslилиdsliteчерезsubprocess. - Проверить результат: код возврата, наличие
verify, при возможности — версию/CRC уже из приложения. - Сохранить лог и метаданные (время, порт, версия файла, серийник устройства).
Мини-защиты, которые предотвращают самые дорогие ошибки:
- “белый список” устройств (чтобы не прошить соседний COM‑порт);
- запрет прошивки, если
verifyне выполнен; - бэкап важных областей/настроек, если ваш продукт хранит их во флеше.
Частые ошибки
- Неверный порт: прошивальщик “не видит устройство” или пишет в другое.
- Нет прав на COM/tty: ошибка доступа к порту (особенно на Linux).
- 5V UART или плохая земля: соединение есть, но запись/верификация сыпется.
- Не тот BSL‑режим: неправильная последовательность кнопок/пинов, устройство не входит в загрузчик.
- “Прошилось, но не стартует”: образ не под вашу плату/частоту/разводку, нужен reset/переподключение питания.
- BSL недоступен после прошивки: не предусмотрен backdoor/условия входа — требуется JTAG/SWD для стирания.
FAQ
Можно ли обойтись только cc2538-bsl?
Да, если вы гарантированно сохраняете доступ к ROM BSL. На практике всё равно полезно иметь план восстановления через JTAG/SWD на случай “lockout”.
Что лучше для производства: UniFlash или cc2538-bsl?
Если есть отладчик и нужна строгая повторяемость с логами — чаще выбирают UniFlash/dslite. Если производство шьёт по UART и важна простота — cc2538-bsl + ваш Python‑скрипт с проверками.
Какой минимальный “безопасный стандарт” прошивки?
(1) erase → write → verify, (2) фиксированное правило выбора порта, (3) запрет прошивки неподходящим файлом, (4) возможность аварийного восстановления (хотя бы на одном стенде через JTAG/SWD).