Подготовка
Я использую linux поэтому все команды приведены для этой операционной системы. Для начала, установим все необходимые зависимости:
Arch Linux:
sudo pacman -S stlink arm-none-eabi-gdb
Mac OS:
brew install stlink arm-none-eabi-gdb lsusb
Необходимые файлы
- Для Black Magic
blackmagic_dfu.bin
,blackmagic.bin
. - Бутлоадер для nRF52840
bootloader.hex
.
С недавнего времени появился новый бутлоадер, в котором используется синий светодиод на плате nRFMicro. Мигает при ресете и режиме бутлоадера. Очень удобно советую использовать далее его
led_bootloader.hex
команды для прошивки такие же. Просто скачайте и переименуйте вbootloader.hex
.
Для удобства можно закинуть все файлы в одну папку, все последующие команды запускать из нее.
./nrf/
| bootloader.hex
| blackmagic_dfu.bin
| blackmagic.bin
Делаем из BluePill Blackmagic
Подключаем ST-Link к BluePill, boot0
ставит в положение 1
. И зашиваем два бинарника следующими командами:
st-flash write blackmagic_dfu.bin 0x08000000
st-flash write blackmagic.bin 0x08002000
После успешной прошивки, необходимо переставить boot0
в положение 0
воткнуть BluePill через USB в компьютер.
Проверим что устройство появилось:
lsusb
Black Magic должен появиться в списке USB устройств.
...
Bus 001 Device 009: ID 1d50:6018 OpenMoko, Inc. Black Magic Debug Probe (Application)
...
Разблокировка Загрузчика nRF52840
Посмотрим порты, которые используются Black Magicом:
sudo dmesg | grep tty
[ 6813.936071] cdc_acm 1-3:1.0: ttyACM0: USB ACM device
[ 6813.941697] cdc_acm 1-3:1.2: ttyACM1: USB ACM device
Есть еще один способ посмотреть чем заняты порты
ls /dev/tty.*
В последних подключенных устройствах мы увидим следующее:
ttyACM0
— Black Magic GDB serverttyACM1
— Black Magic UART Port
Для загрузки бутлоадера в nRFMicro нам нужен только GDB server. Поэтому дальше я буду использовать /dev/ttyACM0
.
Подключаем джамперы к STM32F103C8T6
Black Magic. B14
— SWD
, A5
—
SWC
. Вторые концы джамперов соединяем с соответствующими контактами на nRFMicro.
Разблокируем загрузчик:
sudo arm-none-eabi-gdb --batch -ex "target extended-remote /dev/ttyACM0" -ex "mon swdp_scan" -ex "att 1" -ex "mon erase_mass"
Target voltage: unknown
Available Targets:
No. Att Driver
1 Nordic nRF52 M3/M4
2 Nordic nRF52 Access Port
0x00000a60 in ?? ()
erase..
Error erasing flash with vFlashErase packet
Can't detach process.
Зашиваем бутлоадер:
sudo arm-none-eabi-gdb --batch -ex "target extended-remote /dev/ttyACM0" -ex "mon swdp_scan" -ex "file bootloader.hex" -ex "att 1" -ex "mon erase" -ex load
Target voltage: unknown
Available Targets:
No. Att Driver
1 Nordic nRF52 M3/M4
2 Nordic nRF52 Access Port
0xfffffffe in ?? ()
erase..
Loading section .sec1, size 0xb00 lma 0x0
Loading section .sec2, size 0xf000 lma 0x1000
Loading section .sec3, size 0x10000 lma 0x10000
Loading section .sec4, size 0x5de8 lma 0x20000
Loading section .sec5, size 0x70c8 lma 0xf4000
Loading section .sec6, size 0x8 lma 0x10001014
Start address 0x00000000, load size 182712
Transfer rate: 27 KB/sec, 966 bytes/write.
[Inferior 1 (Remote target) detached]
Если все сделано правильно, то можно перевоткнуть USB-C у прожоры. После этого на компьютере появится Mass Storage Device в который можно будет заливать прошивку для клавиатуры.
Проблемы и их решения
1. Модуль не прошивается
Если модуль не прошивается или не стирается бутлоадер, проверьте мультиметром
плату на короткое замыкание. Между GND
и VCC
должно быть напряжение отличное
от 0 вольт.
Проверьте пайку контактов 37 – SWD
, 39 – SCL
. Это два вывода около пина 0.09
.
2. Не работает OLED дисплей
Скорее всего не допаяны пины шины I2C
, это внутренние два пада (28, 30) на модуле.
Пройдитесь хорошо по ним паяльником с флюсом, если у вас есть тонкое жало,
можно залезть им в сквозное отверстие и хорошо прогреть.