nRF52: странное поведение SWD-интерфейса Печать
Добавил(а) microsin   

Если в схеме отсутствуют элементы DC-DC преобразователя (индуктивность и конденсатор), то важно помнить о его корректной настройке. Например, если в такой ситуации случайно DC-DC разрешить (NRF_POWER->DCDCEN = 1), то nRF52832 начинает работать некорректно.

Система то запускается, то не запускается, и ведет себя непредсказуемо. Особенно неприятно, что фактически перестает работать интерфейс программирования SWD. Выглядит это так, что из 10 попыток программирования в лучшем случае срабатывает одна, отладка не работает. Восстановить чип можно только если поставить низкую частоту тактов SWD-интерфейса, порядка 1 кГц.

Keil не позволяет выбрать такую частоту (допустимый минимум 5 кГц), но можно использовать J-Link Commander. После подключения необходимо выполнить команду erase, которая сотрет записанный код, чип вернется в состояние по умолчанию (по умолчанию DC-DC выключен), и DAP заработает через интерфейс SWD в нормальном режиме.

Ниже приведен пример сессии восстановления чипа в командной строке J-Link Commander V7.22. Желтым шрифтом показан ввод пользователя. На низкой частоте SWD 1 кГц процесс стирания памяти FLASH чипа nRF52832 будет происходить медленно (порядка минуты), так что надо набраться терпения.

SEGGER J-Link Commander V7.22 (Compiled Jun  2 2021 10:04:41)
DLL version V7.22, compiled Jun  2 2021 10:03:15
 
Connecting to J-Link via USB...O.K.
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware version: V8.00
S/N: 87654321
VTref=3.293V
 
 
Type "connect" to establish a target connection, '?' for help
J-Link>connect[Enter]
Please specify device / core. < Default >: NRF52832_XXAA
Type '?' for selection dialog
Device>[Enter]
Please specify target interface:
  J) JTAG (Default)
  S) SWD
  T) cJTAG
TIF>S[Enter]
Specify target interface speed [kHz]. < Default >: 4000 kHz
Speed>1[Enter]
Device "NRF52832_XXAA" selected.
 
 
Connecting to target via SWD
InitTarget() start
InitTarget() end
Found SW-DP with ID 0x2BA01477
DPv0 detected
Scanning AP map to find all available APs
AP[2]: Stopped AP scan as end of AP map has been reached
AP[0]: AHB-AP (IDR: 0x24770011)
AP[1]: JTAG-AP (IDR: 0x02880000)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FF000
CPUID register: 0x410FC241. Implementer code: 0x41 (ARM)
Found Cortex-M4 r0p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS-M7
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU
ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM
Cortex-M4 identified.
J-Link>erase[Enter]
Without any give address range, Erase Chip will be executed
Erasing device...
J-Link: Flash download: Total time needed: 48.289s (Prepare: 42.280s, Compare: 0.000s,
 Erase: 1.284s, Program: 0.000s, Verify: 0.000s, Restore: 4.724s)
Erasing done.
J-Link>