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 запостит это отдельным постом на сайт — вдруг кому нибудь пригодиться.
Спасибо, Александр Маслюченко!!!