Чтение периферийного регистра микроконтроллера Cortex M0 с использованием JLink и GDB

Я пытаюсь прочитать регистр ADC MCU с помощью GDB, но не могу найти, как это делается.

Использование x\10x 0x40012708 в gdb просто возвращает нули, как и любой периферийный регистр с отображением памяти, который я пытаюсь прочитать.

Это возможно сделать? Если да, то как это делается?

Спасибо!


person evading    schedule 12.02.2016    source источник


Ответы (1)


Я бы посоветовал сначала проверить работоспособность вашей установки. Например, вы можете попытаться прочитать регистр CPUID, который присутствует на всех процессорах Cortex-M0 — см. раздел 4.3 Общее руководство пользователя устройств Cortex™-M0.

Он расположен по адресу 0xE000ED00 и должен содержать значение 0x410CC200. Если вы сможете прочитать это, это будет хорошим знаком.

Вам, вероятно, следует сначала попробовать использовать команду J-Link, а затем GDB-Server и GDB. После этого я выполнил процедуру на плате Olimex, используя LPC1114/301 Cortex-M0. Я использовал программное обеспечение J-Link V5.10n и поставил -none-eabi-gdb версии 7.10.1.20151217-cvs, которая является частью Linaro gcc 5.2 для пакета процессоров ARM Cortex-M.

Запустите JLink.exe, используя следующие параметры:

jlink.exe -if SWD -speed 4000  -AutoConnect 1 -device Cortex-M0

Вы должны увидеть что-то похожее на:

SEGGER J-Link Commander V5.10n (Compiled Feb 19 2016 18:39:46)
DLL version V5.10n, compiled Feb 19 2016 18:39:11<br/>
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: [My J-Link EDU Serial Number]
License(s): FlashBP, GDB
OEM: SEGGER-EDU
Emulator has Trace capability
VTref = 3.313V
Device "CORTEX-M0" selected.

Found SWD-DP with ID 0x0BB11477
Found Cortex-M0 r0p0, Little endian.
FPUnit: 4 code (BP) slots and 0 literal slots
CoreSight components:
ROMTbl 0 @ E00FF000
ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB008 SCS
ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 000BB00A DWT
ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 000BB00B FPB
Cortex-M0 identified.
J-Link>

Теперь вы можете прочитать регистр CPUID с помощью команды J-Link Commander mem32 и убедиться, что регистр CPUID содержит ожидаемое значение:

J-Link>mem32  0xE000ED00,1

Вы должны получить:

E000ED00 = 410CC200

Если это так, я бы сказал, что ваша установка J-Link/Cortex-M0, вероятно, работает. Теперь мы можем убедиться, что сервер GDB и GDB тоже работают нормально.

Запустите JLinkGDBServerCL.exe со следующими параметрами:
JLinkGDBServerCL.exe -if SWD -speed 4000 -device Cortex-M0
SEGGER J-Link GDB Server V5.10n Версия командной строки JLinkARM.dll V5.10n (DLL скомпилирована 19 февраля 2016 г. 18:39:11)

-----GDB Server start settings-----
GDBInit file:                  none
GDB Server Listening port:     2331
SWO raw output listening port: 2332
Terminal I/O port:             2333
Accept remote connection:      localhost only
Generate logfile:              off
Verify download:               off
Init regs on start:            off
Silent mode:                   off
Single run mode:               off
Target connection timeout:     0 ms
------J-Link related settings------
J-Link Host interface:         USB
J-Link script:                 none
J-Link settings file:          none
------Target related settings------
Target device:                 Cortex-M0
Target interface:              SWD
Target interface speed:        4000kHz
Target endian:                 little

Connecting to J-Link...
J-Link is connected.
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware: V8.00
S/N: [My J-Link EDU Serial Number]
OEM: SEGGER-EDU
Feature(s): FlashBP, GDB
Checking target voltage...
Target voltage: 3.31 V
Listening on TCP/IP port 2331
Connecting to target...Connected to target
Waiting for GDB connection...

Оставьте сервер GDB работающим и запустите GDB в другом сеансе консоли Windows:

arm-none-eabi-gdb
GNU gdb (GNU Tools for ARM Embedded Processors) 7.10.1.20151217-cvs
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-w64-mingw32 --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

Теперь мы можем подключиться к серверу GDB и снова попытаться отобразить содержимое регистра CPUID:

(gdb) target remote localhost:2331
Remote debugging using localhost:2331
0xfffffffe in ?? ()
(gdb) monitor halt
(gdb) monitor reset
Resetting target
(gdb) x/1xw  0xE000ED00
0xe000ed00:     0x410cc200
(gdb)

Если вы снова получаете 0x410cc200, ваша настройка J-Link/Cortex-m0/GDB Server/GDB должна работать, и теперь вы должны попытаться снова прочитать свой регистр ADC с помощью этой команды:

x/1xw 0x40012708

Если бы вы могли прочитать регистр CPUID, но не регистр ADC, и если бы адрес для регистра ADC был правильным, у меня не было бы объяснения этому поведению прямо сейчас - зная точную марку/модель вашего MCU. использование может, конечно, помочь в дальнейшем.

Обратите внимание, что с этого момента вы должны указывать точную модель вашего MCU в качестве аргумента для параметров -device J-Link Commander/GDB Server вместо Cortex-M0. Вы можете получить список, введя команду ? в командной строке J-Link Commander.

person Frant    schedule 20.02.2016