As some of you know I work for Espressif porting NuttX to ESP32 family. We just started porting NuttX to ESP32-C3 (the RISC-V ESP32 chip) and then I decided to take a look at our competitor: the Bouffalo Labs BL602 RISC-V chip. Bouffalo Labs ported NuttX to their BL602 then I got a DT-BL10 DevKit from Aliexpress and tested it.
The compilation was straight forward, I just read the file nuttx/boards/risc-v/bl602/bl602evb/README.txt and followed the instructions.
First I installed the RISC-V toolchain:
$ cd /tmp
$ wget https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
$ tar xvf riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
$ cd riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14
$ sudo cp -a * /usr/local/
Then I cloned NuttX:
$ cd ~/nuttxspace/nuttx
$ ./tools/configure.sh bl602evb:nsh
$ make menuconfig
Device Drivers --->
[*] Serial Driver Support --->
UART0 Configuration --->
(115200) BAUD rate // I changed from 2000000 to 115200
Note: I already had the kconfig tool needed by the menuconfig interface. Case you don’t have it yet, please install: $ sudo apt-get install kconfig-frontends
You can compile executing the usual command:
$ make
If everything worked as expected you will get the file nuttx.bin:
$ ls -l nuttx.bin
-rwxrwxr-x 1 alan alan 71296 Jan 24 13:39 nuttx.bin
We just need to flash it in the board!
Install the blflash tool (note: you need the rust tools installed on your system, it uses the cargo building system)
$ git clone https://github.com/spacemeowx2/blflash $ cd blflash/blflash $ cargo install --path .
Before flashing the firmware you need to put your board in bootloader mode: press and hold the D8 button and then press and release the EN button, now you can release the D8 button.
Now just execute:
$ 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 196.675µ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, 9e, 9b, 2, 42, e8, b4, 1b, 0] }
[INFO blflash::flasher] Sending eflash_loader…
[INFO blflash::flasher] Finished 2.552386428s 11.20KB/s
[TRACE blflash::flasher] 5ms send count 500
[TRACE blflash::flasher] handshake sent elapsed 5.261016ms
[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] Erase flash addr: 10000 size: 351584
[INFO blflash::flasher] Program flash… f96f580021f71996b6fb88554c666aca1d1126a4ab0de0acfeef578caa26bd94
[INFO blflash::flasher] Program done 4.186647898s 82.02KB/s
[INFO blflash::flasher] Skip segment addr: 1f8000 size: 5671 sha256 matches
[INFO blflash] Success
Run your preferred serial console software (minicom, picocom, screen, etc), configure to use the port /dev/ttyUSB0 with baudrate 115220.
Press and release the EN button, you should see the NuttX terminal:
NuttShell (NSH) NuttX-10.0.1 nsh> ? help usage: help [-v] [] ? echo help ls mh mv ps uname cat free kill mb mount mw sleep usleep Builtin Apps: timer sh getprime hello nsh nsh>
PS.: If you don’t want to install Rust on your system, you can try the blflash equivalent implemented on Python:
$ pip install bl60x-flash $ export PATH=$PATH:$HOME/.local/bin $ bl60x-flash /dev/ttyUSB0 ./nuttx.bin Loading helper binary 21872 bytes @ 0x22010000 100%|█████████████████████████████████████████████| 21.9k/21.9k [00:00<00:00, 47.7kbyte/s] Erased 351572 bytes @ 0x10000 Programming 351572 bytes @ 0x10000 100%|████████████████████████████████████████████████| 352k/352k [00:02<00:00, 128kbyte/s] Verified by XIP SHA256 hash
PS2: Thanks Brennan for helping to figure out the baudrate issue.