Bootloader JN5169 содержит уязвимость которая позволяет получить доступ к прошивке микроконтроллера при установленной защите CRP_LEVEL=1. Подробнее здесь https://re-engr.ru/jn5169-fw-lock/
Бинарный файл /wire/mon5169.bin
записывается во FLASH память. В программе реализован командный интерфейс. В качестве канала связи используется USART0.
Скрипт /wire/upload.py
записывает прошивку в свободную память и делает ее активной.
- 0.3 (Dec 26 2022)
- Изменен порядок загрузки монитора. Искажение магического числа действующей прошивки происходит после успешной загрузки монитора;
- Добавлена проверка контрольной суммы в ответах JN5169;
- Добавлен алгоритм исключающий повреждение действующей прошивки устройства при повторной попытке записи монитора;
- Исправлены информационные сообщения;
- Dec 26 2022
- Команды 'o' и 'u' (чтение OTP и User data) выводят информацию в консоль в виде читаемых ASCII-символов;
- Команда 'e' считывает область EEPROM размером 16380 байт (выходной файл XMODEM имеет размер 16384 байта);
- Команда '.e' очищает область EEPROM размером 16380 байт;
- Исправлены информационные сообщения;
- Добавлен вывод в консоль значений возвращаемых функциями из SDK;
- Запустить JN5169 с низким уровнем на контакте /BOOT (пин 22, DO1);
- В скрипте
/wire/upload.py
указать корректный номер COM-порта (например port='COM5'); - Выполнить скрипт
/wire/upload.py
. Сообщение Completed указывает на успешное завершение. Ошибки смотреть здесь; - Запустить JN5169 с высоким уровнем на контакте /BOOT (пин 22, DO1);
Запустить TeraTerm (рекомендуется). Подключиться к COM-порту с параметрами 115200 8n1, no flow control
. Нажать клавишу Enter. Вы увидите приветствие:
Monitor for JN5169
Author: re-engr.ru (Dec 26 2022)
Press key to read:
'f' - flash (512KB)
'w' - firmware
'b' - bootloader
'r' - RAM
'e' - EEPROM
'u' - user data
'o' - OTP
'n' - NIB
Input cmd for:
'.e' - erase EEPROM
'.p' - erase PDM
'.r' - recovery FW
Команды f, w, b, r, e
для передачи данных используют протокол XMODEM-CRC.
'f' - flash (512KB)
- прочитать FLASH память по физическим адресам;'w' - firmware
- прочитать прошивку устройства. Полученный файл имеет необходимый заголовок и может быть записан в другое устройство;'b' - bootloader
- прочитать сегмент с прошивкой бутлоадера;'r' - RAM
- прочитатать всю RAM;'e' - EEPROM
- прочитать всю EEPROM (16320 байт);'u' - user data
- прочитать данные из области User data;'o' - OTP
- прочитать однократно программируемую область памяти;'n' - NIB
- прочитать информацию о zigbee сети в которой находится устройство (PAN ID, Short Addr, MAC Coord, Key). Так же определяется версия SDK;
'.e' - erase EEPROM
- физическая очистка памяти 16320 байт EEPROM (все байты 0x00);'.p' - erase PDM
- все блоки памяти (63 блока по 64 байта каждый = 4032 байта) , со своим ID, помечаются как очищенные. Структура "файловой системы" сохраняется;'.r' - recovery FW
- переключиться на прошивку устройства. Сектор памяти с монитором очищается.
Выберите память для чтения. Например EEPROM. Нажмите 'e'. Сообщение говорит об ожидании приемника:
e Receiver waiting (XMODEM-CRC)...
В TeraTerm перейдите: File > Transfer > XMODEM > Receive...
Укажите имя файла. В поле "Option" выбрать CRC
и галочку Binary
. Нажмитре "Save", начнется прием данных и сохранения их в файл. Сообщение об успешной передаче данных:
Receiver waiting (XMODEM-CRC)... Done
Ошибки смотреть здесь;
- " CS bad" - конрольная сумма ответа JN5169 не совпадает. Проверьте соединение и повторите попытку;
- " Writable sector not found" - не удалось определить сектор доступный для записи программы Монитор. Свяжитесь с разработчиком;
- " Flashing error" - JN5169 ответил ошибкой при записи программы. Проверьте соединение и повторите попытку;
- "PDM Initialization status: PDM_E_STATUS_INTERNAL_ERROR" - функция PDM_eInitialise(0) вернула ошибку. Что-то пошло не так;
- "0xF000 record found. Length error: " - попытка определить версию SDK через размер структры с ID 0xF000 не удалась. Неизвестная длина;
- "0xF000 record not found" - структуры с ID 0xF000 нет в памяти. Возможно EEPROM очищена;
- "0xF100 record found. No network information" - устройство не содержит информации о ZigBee сети;
- "0xF100 Data structure error" - структура с ID 0xF100 имеет неизвестный формат;
- "Failure. Segment 0x12" - при стирании EEPROM произошла ошибка на блоке 0x12;
- "Initialization PDM: PDM_E_STATUS_INTERNAL_ERROR" - при инициализации драйвера PDM произошла ошибка;
- "Firmware recovery failed" - маловероятная ошибка при восстановлении рабочей прошивки устройства;
- "No firmware for recovery" - не удалось обнаружить в памяти прошивку для восстановления. Возможны различные причины. Свяжитесь с разработчиком;