riscv-openocd
riscv-openocd copied to clipboard
"Failed to read memory" on GD32VW553K-START
Using latest released "Nuclei OpenOCD" and "Nuclei RISC-V Embedded Toolchain" from https://nucleisys.com/download.php#tools, I can connect to the GD32VW553K chip using this config file, and I can connect to the GDB server opened by it with riscv64-unknown-elf-gdb, but trying to read peripheral memory always fails.
C:\Users\Max\Downloads\nuclei-openocd-2024.06-win32-x32\Nuclei\OpenOCD\2024.06>bin\openocd.exe -f C:\Users\Max\Downloads\openocd_gd32vw55x.cfg
Open On-Chip Debugger 0.11.0+dev-02400-g1dac85c02 (2024-06-26-03:40)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : Using CMSIS-DAPv2 interface with VID:PID=0x28e9:0x0797, serial=9A678C590435
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: JTAG supported
Info : CMSIS-DAP: SWO-UART supported
Info : CMSIS-DAP: Atomic commands supported
Info : CMSIS-DAP: Test domain timer supported
Info : CMSIS-DAP: FW Version = 0255
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : cmsis-dap JTAG TLR_RESET
Info : cmsis-dap JTAG TLR_RESET
Info : JTAG tap: riscv.cpu tap/device found: 0x10307a6d (mfg: 0x536 (Nuclei System Technology Co Ltd), part: 0x0307, ver: 0x1)
Info : JTAG tap: auto0.tap tap/device found: 0x790007a3 (mfg: 0x3d1 (GigaDevice Semiconductor (Beijing) Inc), part: 0x9000, ver: 0x7)
Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 5 -expected-id 0x790007a3"
Info : [riscv.cpu] datacount=4 progbufsize=2
Info : coreid=0, nuclei debug map reg 00: 0x0, 16: 0x0, 32: 0x0
Info : Examined RISC-V core; found 1 harts
Info : hart 0: XLEN=32, misa=0x4010912f
[riscv.cpu] Target successfully examined.
Info : starting gdb server for riscv.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
For example, for the RCU peripheral (reset and clock unit):
x/4x 0x40021000
0x40021000: 0x00000000 0x00000000 0x00000000 0x00000000
All zeroes. At the same time, OpenOCD says
Error: Target riscv.cpu: Failed to read memory (addr=0x40021000)
Error: progbuf=failed, sysbus=failed, abstract=failed
Error: Target riscv.cpu: Failed to read memory (addr=0x40021004)
Error: progbuf=failed, sysbus=failed, abstract=failed
Error: Target riscv.cpu: Failed to read memory (addr=0x40021008)
Error: progbuf=failed, sysbus=failed, abstract=failed
Error: Target riscv.cpu: Failed to read memory (addr=0x4002100c)
Error: progbuf=failed, sysbus=failed, abstract=failed
Other RAM addresses read just fine.
x/10x &SystemCoreClock
0x20000004 <SystemCoreClock>: 0x09896800 0x00000064 0x20000048 0x00000000
0x20000014 <SystemExceptionHandlers>: 0x080003b2 0x080003b2 0x080003b2 0x080003b2
0x20000024 <SystemExceptionHandlers+16>: 0x080003b2 0x080003b2