CC2538 Bootloader Flash

CC2538 Bootloader Flash

Radu

После нескольких дней ковыряния, чтения интернетов, и немножко дебага протокола, я выяснил что стик можно прошивать с помощью копеечного USB-UART конвертера. Программатор покупать не обязательно. Правда есть нюансы.

Итак. У микроконтроллера CC2538 есть такая штука как backdoor bootloader, который позволяет прошиться через uart. Эта возможность включается специальным битом в прошивке, и если вы покупаете свежий чип с завода этот бит установлен. По умолчанию в любой прошивке этот бит снимается, так что как только вы вливаете какую либо прошивку больше по uart вы прошиваться не сможете, и тогда придется таки раскошелиться на jtag программатор.

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

Последовательность действий для прошивки по uart такая.

1) сперва нужно подготовить саму прошивку — нужно включить тот самый бит. В принципе можно и не готовить, но как я уже сказал тогда получиться прошиться только один раз.

Для этого качаем любую прошивку из упомянутых в статье. Я себе прошивал https://github.com/reverieline/CC2538-CC2592-ZNP/blob/master/MODKAMRU_V3/MODKAMRU_V3_USB.hex

Далее мотаем в самый конец и видим строку

:0CFFD400FFFFFFEF000000000000200015

Ее нужно поменять на

:0CFFD400FFFFFFF700000000000020000D

Может показаться что это магия, но тут все просто. Формат строки можно прочитать на википедии в статье intel hex. Нас же интересует байт 0xEF, который стал 0xF7. Описание этого байта можно найти в документе CC2538/CC26x0/CC26x2 Serial Bootloader Interface от TI.

Краткое описание битов в этом байте:

— биты 0-2 отвечают за выбор ноги, которая будет выбирать входить в бутлоадер или нет. Ноги выбираются из диапазона PA0-PA7. Я выбрал PA7 — она в стике не задействована, и проверив тестером выглядит как будто подтянута к питанию. Я ее и задействовал. Соответственно биты 0-2 нужно установить в 1 (они и так уже в 1)

— бит 3 выбирает по какому уровню на выбранной ноге входить в бутлоадер. Я буду входить только тогда, когда нога будет прижата к земле — ставим в этом бите 0

— бит 4 — он, собственно, и отвечает за включение backdoor bootloader. включим этот бит.

Последний байт это контрольная сумма. Поскольку мы к 0xEF добавили 8, чтобы получить 0xF7, то это же значение нужно отнять от контрольной суммы — 0x15-8=0x0d

Вот и вся магия

2) Подключаем USB-UART.

Тут все как обычно: подключаем VCC, GND, TX к RX, а RX к TX

Нужно только не забыть переключить USB-UART переходник в режим 3.3В, иначе спалите стик.

3) Я нашел как минимум 2 прошивальщика

https://github.com/1248/cc2538-prog

https://github.com/JelmerT/cc2538-bsl

Я прошивался первым, зато второй позволяет верифицировать прошивку. Я думаю без разницы каким шиться

4) мне показалось не очень удобным (скажу больше жутко геморройным) закорачивать пинцетом ногу PA7 на землю, чтобы войти в бутлоадер. Поэтому я приколхозил небольшую кнопочку на суперклей (возле разъема USB как раз есть свободный пятачок), и припаял ее тоненькими проводками куда нужно.

Вот и все. Можно шиться хоть каждую неделю теперь. Нужно только не забывать делать битовую магию из шага 1, иначе дверка прикроется.

Выражаю благодарность автору стика за предоставленные схемы, гербера и STL. Тут разве что исходников прошивки для полного комплекта не хватает. Также буду благодарен, если глубокоуважаемый Jager запостит это отдельным постом на сайт — вдруг кому нибудь пригодиться.


Спасибо, Александр Маслюченко!!!




Report Page