From 2642a7b978bf3a3c280f72069336b2d9d63d6dec Mon Sep 17 00:00:00 2001 From: Camille BAUD Date: Thu, 24 Apr 2025 19:21:13 +0200 Subject: [PATCH] boards: bflb: Introduce AI-WB2-12F This introduces the Ai-Thinker BL602 WB2 development board Signed-off-by: Camille BAUD --- .../aithinker/ai_wb2_12f/Kconfig.ai_wb2_12f | 6 + .../ai_wb2_12f/ai_wb2_12f-pinctrl.dtsi | 26 +++++ boards/aithinker/ai_wb2_12f/ai_wb2_12f.dts | 52 +++++++++ boards/aithinker/ai_wb2_12f/ai_wb2_12f.yaml | 19 ++++ .../aithinker/ai_wb2_12f/ai_wb2_12f_defconfig | 8 ++ boards/aithinker/ai_wb2_12f/board.cmake | 20 ++++ boards/aithinker/ai_wb2_12f/board.yml | 6 + .../ai_wb2_12f/doc/img/ai_wb2_12f.webp | Bin 0 -> 55038 bytes boards/aithinker/ai_wb2_12f/doc/index.rst | 105 ++++++++++++++++++ boards/aithinker/ai_wb2_12f/support/bl60x.cfg | 79 +++++++++++++ .../aithinker/ai_wb2_12f/support/openocd.cfg | 5 + boards/aithinker/index.rst | 10 ++ 12 files changed, 336 insertions(+) create mode 100644 boards/aithinker/ai_wb2_12f/Kconfig.ai_wb2_12f create mode 100644 boards/aithinker/ai_wb2_12f/ai_wb2_12f-pinctrl.dtsi create mode 100644 boards/aithinker/ai_wb2_12f/ai_wb2_12f.dts create mode 100644 boards/aithinker/ai_wb2_12f/ai_wb2_12f.yaml create mode 100644 boards/aithinker/ai_wb2_12f/ai_wb2_12f_defconfig create mode 100644 boards/aithinker/ai_wb2_12f/board.cmake create mode 100644 boards/aithinker/ai_wb2_12f/board.yml create mode 100644 boards/aithinker/ai_wb2_12f/doc/img/ai_wb2_12f.webp create mode 100644 boards/aithinker/ai_wb2_12f/doc/index.rst create mode 100644 boards/aithinker/ai_wb2_12f/support/bl60x.cfg create mode 100644 boards/aithinker/ai_wb2_12f/support/openocd.cfg create mode 100644 boards/aithinker/index.rst diff --git a/boards/aithinker/ai_wb2_12f/Kconfig.ai_wb2_12f b/boards/aithinker/ai_wb2_12f/Kconfig.ai_wb2_12f new file mode 100644 index 00000000000..9c4fa2f57d7 --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/Kconfig.ai_wb2_12f @@ -0,0 +1,6 @@ +# Copyright (c) 2024-2025 MASSDRIVER EI (massdriver.space) +# +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_AI_WB2_12F + select SOC_BL602C00Q2I diff --git a/boards/aithinker/ai_wb2_12f/ai_wb2_12f-pinctrl.dtsi b/boards/aithinker/ai_wb2_12f/ai_wb2_12f-pinctrl.dtsi new file mode 100644 index 00000000000..2ca49209287 --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/ai_wb2_12f-pinctrl.dtsi @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2024-2025 MASSDRIVER EI (massdriver.space) + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&pinctrl { + uart0_default: uart0_default { + group1 { + pinmux = , + ; + bias-pull-up; + input-schmitt-enable; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + pinmux = , + ; + bias-high-impedance; + }; + }; +}; diff --git a/boards/aithinker/ai_wb2_12f/ai_wb2_12f.dts b/boards/aithinker/ai_wb2_12f/ai_wb2_12f.dts new file mode 100644 index 00000000000..d3e99d7a45f --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/ai_wb2_12f.dts @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2024-2025 MASSDRIVER EI (massdriver.space) + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "ai_wb2_12f-pinctrl.dtsi" + +/ { + model = "Ai-Thinker WB2-12F development board"; + compatible = "bflb,bl602"; + + chosen { + zephyr,flash = &flash0; + zephyr,itcm = &itcm; + zephyr,dtcm = &dtcm; + zephyr,sram = &sram0; + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + }; +}; + +&cpu0 { + clock-frequency = ; +}; + +&spi1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0x4000b000 0x1000 0x23000000 0x400000>; + + flash0: flash@0 { + compatible = "zb,25vq32", "jedec,spi-nor"; + status = "disabled"; + size = ; + jedec-id = [5e 40 16]; + reg = <0>; + spi-max-frequency = ; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; diff --git a/boards/aithinker/ai_wb2_12f/ai_wb2_12f.yaml b/boards/aithinker/ai_wb2_12f/ai_wb2_12f.yaml new file mode 100644 index 00000000000..e7c5a4dc59e --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/ai_wb2_12f.yaml @@ -0,0 +1,19 @@ +# Copyright (c) 2024-2025 MASSDRIVER EI (massdriver.space) +# +# SPDX-License-Identifier: Apache-2.0 + +identifier: ai_wb2_12f +name: Ai-Thinker WB2-12F development board +type: mcu +arch: riscv +ram: 64 +toolchain: + - zephyr +testing: + ignore_tags: + - net + - bluetooth +supported: + - pinctrl + - uart +vendor: bflb diff --git a/boards/aithinker/ai_wb2_12f/ai_wb2_12f_defconfig b/boards/aithinker/ai_wb2_12f/ai_wb2_12f_defconfig new file mode 100644 index 00000000000..7836442f7c4 --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/ai_wb2_12f_defconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2024-2025 MASSDRIVER EI (massdriver.space) +# +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y + +CONFIG_UART_CONSOLE=y diff --git a/boards/aithinker/ai_wb2_12f/board.cmake b/boards/aithinker/ai_wb2_12f/board.cmake new file mode 100644 index 00000000000..1a2a98c777e --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/board.cmake @@ -0,0 +1,20 @@ +# Copyright (c) 2024-2025 MASSDRIVER EI (massdriver.space) +# +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(openocd --cmd-pre-init "source [find bl60x.cfg]") + +board_runner_args(openocd --use-elf --no-load --no-init) +board_runner_args(openocd --gdb-init "set mem inaccessible-by-default off") +board_runner_args(openocd --gdb-init "set architecture riscv:rv32") +board_runner_args(openocd --gdb-init "set remotetimeout 250") +board_runner_args(openocd --gdb-init "set print asm-demangle on") +board_runner_args(openocd --gdb-init "set backtrace limit 32") +board_runner_args(openocd --gdb-init "mem 0x22008000 0x22014000 rw") +board_runner_args(openocd --gdb-init "mem 0x42008000 0x42014000 rw") +board_runner_args(openocd --gdb-init "mem 0x22014000 0x22020000 rw") +board_runner_args(openocd --gdb-init "mem 0x42014000 0x42020000 rw") +board_runner_args(openocd --gdb-init "mem 0x22020000 0x2203C000 rw") +board_runner_args(openocd --gdb-init "mem 0x42020000 0x4203C000 rw") +board_runner_args(openocd --gdb-init "mem 0x23000000 0x23400000 ro") +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/aithinker/ai_wb2_12f/board.yml b/boards/aithinker/ai_wb2_12f/board.yml new file mode 100644 index 00000000000..071ebf95f87 --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/board.yml @@ -0,0 +1,6 @@ +board: + name: ai_wb2_12f + full_name: Ai-Thinker WB2-12F development board + vendor: bflb + socs: + - name: bl602c00q2i diff --git a/boards/aithinker/ai_wb2_12f/doc/img/ai_wb2_12f.webp b/boards/aithinker/ai_wb2_12f/doc/img/ai_wb2_12f.webp new file mode 100644 index 0000000000000000000000000000000000000000..ae6ef3f02dc16743364bab41b7363b592ec579ac GIT binary patch literal 55038 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
@|lnnmEgW3ABZl}j+sVSl{r`uQI`gg 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 literal 0 HcmV?d00001 diff --git a/boards/aithinker/ai_wb2_12f/doc/index.rst b/boards/aithinker/ai_wb2_12f/doc/index.rst new file mode 100644 index 00000000000..b68fc820bbc --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/doc/index.rst @@ -0,0 +1,105 @@ +.. zephyr:board:: ai_wb2_12f + +Overview +******** + +BL602/BL604 is a Wi-Fi+BLE chipset introduced by Bouffalo Lab, which is used +for low power consumption and high performance application development. The +wireless subsystem includes 2.4G radio, Wi-Fi 802.11b/g/n and BLE 5.0 +baseband/MAC design. The microcontroller subsystem includes a 32-bit RISC CPU +with low power consumption, cache and memory. The power management unit +controls the low power consumption mode. In addition, it also supports +various security features. The external interfaces include SDIO, SPI, UART, +I2C, IR remote, PWM, ADC, DAC, PIR and GPIO. + +This WB2 (BL602) 12F format Module Development Board features a SiFive E24 32 bit +RISC-V CPU with FPU, it supports High Frequency clock up to 192Mhz, have 128k ROM, 276kB RAM, +2.4 GHz WIFI 1T1R mode, support 20 MHz, data rate up to 72.2 Mbps, BLE 5.0 +with 2MB phy. It is a secure MCU which supports Secure boot, ECC-256 signed +image, QSPI/SPI Flash On-The-Fly AES Decryption and PKA (Public Key +Accelerator). + +Hardware +******** + +For more information about the Bouffalo Lab BL-60x MCU: + +- `Bouffalo Lab BL60x MCU Website`_ +- `Bouffalo Lab BL60x MCU Datasheet`_ +- `Bouffalo Lab Development Zone`_ +- `ai_wb2_12f Schematics`_ +- `The RISC-V BL602 Book`_ + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +System Clock +============ + +The WB2 (BL602) Development Board is configured to run at max speed (192MHz). + +Serial Port +=========== + +The ``ai_wb2_12f`` board uses UART0 as default serial port. It is connected +to USB Serial converter and port is used for both program and console. + + +Programming and Debugging +************************* + +Samples +======= + +#. Build the Zephyr kernel and the :zephyr:code-sample:`hello_world` sample +application: + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: ai_wb2_12f + :goals: build flash + +#. Run your favorite terminal program to listen for output. Under Linux the + terminal should be :code:`/dev/ttyUSB0`. For example: + + .. code-block:: console + + $ screen /dev/ttyUSB0 115200 + + The -o option tells minicom not to send the modem initialization + string. Connection should be configured as follows: + + - Speed: 115200 + - Data: 8 bits + - Parity: None + - Stop bits: 1 + + Then, press and release RST button + + .. code-block:: console + + *** Booting Zephyr OS build v4.1.0 *** + Hello World! ai_wb2_12f/bl602c00q2i + +Congratulations, you have ``ai_wb2_12f`` configured and running Zephyr. + + +.. _Bouffalo Lab BL60x MCU Website: + https://en.bouffalolab.com/product/?type=detail&id=6 + +.. _Bouffalo Lab BL60x MCU Datasheet: + https://github.com/bouffalolab/bl_docs/tree/main/BL602_DS/en + +.. _Bouffalo Lab Development Zone: + https://dev.bouffalolab.com/home?id=guest + +.. _ai_wb2_12f Schematics: + https://docs.ai-thinker.com/en/wb2 + +.. _The RISC-V BL602 Book: + https://lupyuen.github.io/articles/book + +.. _Flashing Firmware to BL602: + https://lupyuen.github.io/articles/book#flashing-firmware-to-bl602 diff --git a/boards/aithinker/ai_wb2_12f/support/bl60x.cfg b/boards/aithinker/ai_wb2_12f/support/bl60x.cfg new file mode 100644 index 00000000000..fcabb2c4e7c --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/support/bl60x.cfg @@ -0,0 +1,79 @@ +# Copyright (c) 2022-2025 ATL Electronics +# +# SPDX-License-Identifier: Apache-2.0 + +if { [info exists CHIPNAME] } { + set _CHIPNAME $CHIPNAME +} else { + set _CHIPNAME riscv +} + +if { [info exists WORKAREASIZE] } { + set _WORKAREASIZE $WORKAREASIZE +} else { + set _WORKAREASIZE 0x10000 +} + +if { [info exists WORKAREAADDR] } { + set _WORKAREAADDR $WORKAREAADDR +} else { + set _WORKAREAADDR 0x22020000 +} + +if { [info exists CPUTAPID] } { + set _CPUTAPID $CPUTAPID +} else { + set _CPUTAPID 0x20000c05 +} + +transport select jtag +jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id $_CPUTAPID + +set _TARGETNAME $_CHIPNAME.cpu +target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME + +$_TARGETNAME.0 configure -work-area-phys $_WORKAREAADDR -work-area-size $_WORKAREASIZE -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 100 + + reg mstatus 0x7800 + reg mie 0x0 +# reg pc 0x23000000 +} + +$_TARGETNAME.0 configure -event reset-init { + echo "reset-init" + + adapter speed 3000 +} + +$_TARGETNAME.0 configure -event gdb-attach { + echo "Debugger attaching: halting execution" + reset halt + gdb_breakpoint_override hard +} + +$_TARGETNAME.0 configure -event gdb-detach { + echo "Debugger detaching: resuming execution" + resume +} + +gdb_memory_map enable +gdb_flash_program enable + +# 'progbuf', 'sysbus' or 'abstract' +riscv set_mem_access sysbus +riscv set_command_timeout_sec 1 + +init +reset init diff --git a/boards/aithinker/ai_wb2_12f/support/openocd.cfg b/boards/aithinker/ai_wb2_12f/support/openocd.cfg new file mode 100644 index 00000000000..9a3b1644e96 --- /dev/null +++ b/boards/aithinker/ai_wb2_12f/support/openocd.cfg @@ -0,0 +1,5 @@ +# For WCH linkE in DAP mode + +interface cmsis-dap + +adapter speed 1000 diff --git a/boards/aithinker/index.rst b/boards/aithinker/index.rst new file mode 100644 index 00000000000..cdefd628132 --- /dev/null +++ b/boards/aithinker/index.rst @@ -0,0 +1,10 @@ +.. _boards-aithinker: + +Ai-Thinker Co. +############## + +.. toctree:: + :maxdepth: 1 + :glob: + + **/*