Инструменты прошивки: что выбрать между 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 BSLcc2538-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-скрипты: автоматизация без ручных шагов

Типовой надёжный пайплайн (минимум, который окупается сразу):

  1. Найти устройство (по VID/PID, серийному номеру USB‑UART, имени порта).
  2. Проверить входные данные: что файл прошивки подходит под нужную плату/чип/память.
  3. Перевести устройство в режим прошивки (кнопка/пины или управляющие линии UART, если плата это поддерживает).
  4. Запустить cc2538-bsl или dslite через subprocess.
  5. Проверить результат: код возврата, наличие verify, при возможности — версию/CRC уже из приложения.
  6. Сохранить лог и метаданные (время, порт, версия файла, серийник устройства).

Мини-защиты, которые предотвращают самые дорогие ошибки:

  • “белый список” устройств (чтобы не прошить соседний 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).