diff --git a/boards/risc-v/bl602/bl602evb/README.txt b/boards/risc-v/bl602/bl602evb/README.txt index 6f6306815d..427c8e34e0 100644 --- a/boards/risc-v/bl602/bl602evb/README.txt +++ b/boards/risc-v/bl602/bl602evb/README.txt @@ -1,10 +1,16 @@ +# Getting Started with nsh configuration 1. Download and install toolchain $ curl https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz -2. Download Bouffalo lab flash tools +2. Download flash tools + There are multiple tools that can be used, but option (a) is recommended. + a. blflash -- cross platform open-source (recommended) + curl -L -o blflash https://github.com/spacemeowx2/blflash/releases/download/v0.3.0/blflash-linux-amd64 + chmod +x ./blflash - $ git clone https://github.com/bouffalolab/flash_tools.git + b. Bouffalo Lab flash tools (official) + https://github.com/bouffalolab/flash_tools.git 3. Configure and build NuttX @@ -18,11 +24,174 @@ 4. Connect bl602 and computer via USB -5. Run flash tools, select the nuttx.bin generated in the previous step in the - Firmware bin field, and refer to the document for the settings of the remaining fields. - Click the download button to download bin to bl602. +5. Flash + Use option (a) or (b) based on tool selection in section 2. + a. Using blflash + Place the board in bootloader mode + bl602evb: Jumper IO8 to HI and press reset + DT-BL10: Press and hold D8, press and release EN, release D8 + + $ blflash flash nuttx.bin --port /dev/ttyUSB0 + [INFO blflash::flasher] Start connection... + [TRACE blflash::flasher] 5ms send count 55 + [TRACE blflash::flasher] handshake sent elapsed 159.674µs + [INFO blflash::flasher] Connection Succeed + [INFO blflash] Bootrom version: 1 + [TRACE blflash] Boot info: BootInfo { len: 14, bootrom_version: 1, otp_info: [0, 0, 0, 0, 3, 0, 0, 0, a4, 9b, 2, 42, e8, b4, 1d, 0] } + [INFO blflash::flasher] Sending eflash_loader... + [INFO blflash::flasher] Finished 2.563450723s 11.15KB/s + [TRACE blflash::flasher] 5ms send count 500 + [TRACE blflash::flasher] handshake sent elapsed 5.065786ms + [INFO blflash::flasher] Entered eflash_loader + [INFO blflash::flasher] Skip segment addr: 0 size: 47504 sha256 matches + [INFO blflash::flasher] Skip segment addr: e000 size: 272 sha256 matches + [INFO blflash::flasher] Skip segment addr: f000 size: 272 sha256 matches + [INFO blflash::flasher] Skip segment addr: 10000 size: 351584 sha256 matches + [INFO blflash::flasher] Skip segment addr: 1f8000 size: 5671 sha256 matches + [INFO blflash] Success -6. Run $ picocom -b 115200 /dev/ttyUSB0 (If you see garbled characters at the begining, it is because - boot2 outputs some log at 2M baud rate), then you will see "nuttx>" prompt. + b Using BL flash_tools + Run flash tools, select the nuttx.bin generated in the previous step in the + Firmware bin field, and refer to the document for the settings of the remaining fields. -How to download to bl602 can refer to the docs in the https://github.com/bouffalolab/bl_iot_sdk repository. +6. Run connect terminal to UART (default baudrate 2000000) + $ screen /dev/ttyUSB0 2000000 +7. Reset Device + bl602evb: Press reset + DT-BL10: Press and release EN +8. NSH should appear on console + + +# Using openocd and gdb: +This guide is focused on the bl602evb board. See the reference manual for +how to connect to the JTAG interface for other boards. + +1. Make sure you are running a recently built version of openocd. The packaged +versions are very old, and will likely not work. https://github.com/ntfreak/openocd + + +2. Create a openocd-bl602.cfg file +############################################################################## +adapter driver ftdi +ftdi_vid_pid 0x0403 0x6010 +ftdi_channel 1 + +transport select jtag +adapter speed 2000 + +ftdi_layout_init 0x00f8 0x00fb +set _CHIPNAME riscv +jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000c05 + +set _TARGETNAME $_CHIPNAME.cpu +target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME +$_TARGETNAME.0 configure -work-area-phys 0x22020000 -work-area-size 0x10000 -work-area-backup 1 + +echo "Ready for Remote Connections" + +$_TARGETNAME.0 configure -event reset-assert-pre { + echo "reset-assert-pre" + adapter speed 100 +} + +$_TARGETNAME.0 configure -event reset-deassert-post { + echo "reset-deassert-post" + adapter speed 4000 + reg mstatus 0x80000000 + reg pc 0x21000000 +} + +$_TARGETNAME.0 configure -event reset-init { + echo "reset-init" + adapter speed 4000 +} + +gdb_memory_map enable +gdb_flash_program disable + +riscv set_prefer_sba on +riscv set_command_timeout_sec 1 + +init +reset init +############################################################################## + +3. Create a openocd.gdb configuration +############################################################################## +target extended-remote :3333 + +set print asm-demangle on +set backtrace limit 32 + +mem 0x22008000 0x22014000 rw +mem 0x42008000 0x42014000 rw +mem 0x22014000 0x22020000 rw +mem 0x42014000 0x42020000 rw +mem 0x22020000 0x22030000 rw +mem 0x42020000 0x42030000 rw +mem 0x22030000 0x2204C000 rw +mem 0x42030000 0x4204C000 rw +mem 0x23000000 0x23400000 ro +mem 0x40000000 0x40010000 rw + +break __start +stepi + +############################################################################## + +3. Connect openocd +$ openocd -f openocd-bl602.cfg +Open On-Chip Debugger 0.10.0+dev-01514-ga8edbd020-dirty (2020-11-19-20:11) +Licensed under GNU GPL v2 +For bug reports, read + http://openocd.org/doc/doxygen/bugs.html +Ready for Remote Connections +Info : clock speed 2000 kHz +Info : JTAG tap: riscv.cpu tap/device found: 0x20000c05 (mfg: 0x602 (), part: 0x0000, ver: 0x2) +Info : datacount=1 progbufsize=2 +Info : Disabling abstract command reads from CSRs. +Info : Examined RISC-V core; found 1 harts +Info : hart 0: XLEN=32, misa=0x40801125 +Info : starting gdb server for riscv.cpu.0 on 3333 +Info : Listening on port 3333 for gdb connections +Info : JTAG tap: riscv.cpu tap/device found: 0x20000c05 (mfg: 0x602 (), part: 0x0000, ver: 0x2) +reset-assert-pre +reset-deassert-post +Info : Disabling abstract command writes to CSRs. +reset-init +Info : Listening on port 6666 for tcl connections +Info : Listening on port 4444 for telnet connections + +4. Connect gdb + This is a short demo placing a breakpoint at the entry to nsh. + NOTE: openocd+gdb cannot be used at this time to flash the device. + + $ riscv64-unknown-elf-gdb nuttx -x openocd-bl602.gdb + Reading symbols from nuttx... + 0x21000000 in ?? () + Breakpoint 1 at 0x2300000a: file chip/bl602_entry.S, line 41. + Note: automatically using hardware breakpoints for read-only addresses. + 0x21000004 in ?? () + (gdb) b nsh_main + Breakpoint 2 at 0x23003f32: file nsh_main.c, line 123. + (gdb) mon reset halt + JTAG tap: riscv.cpu tap/device found: 0x20000c05 (mfg: 0x602 (), part: 0x0000, ver: 0x2) + reset-assert-pre + reset-deassert-post + (gdb) c + Continuing. + + Breakpoint 1, bl602_start () at chip/bl602_entry.S:41 + 41 li t0, MSTATUS_MIE + (gdb) c + Continuing. + + Breakpoint 2, nsh_main (argc=1, argc@entry=, argv=0x420134c0, argv@entry=) + at nsh_main.c:123 + 123 sched_getparam(0, ¶m); + (gdb) bt + #0 nsh_main (argc=1, argc@entry=, argv=0x420134c0, argv@entry=) at nsh_main.c:123 + #1 0x230030f0 in nxtask_startup (entrypt=, argc=, argv=) at sched/task_startup.c:165 + #2 0x23001362 in nxtask_start () at task/task_start.c:144 + #3 0x00000000 in ?? () + Backtrace stopped: frame did not save the PC \ No newline at end of file