| Spec | Dabao | Raspberry Pi Pico 2 | ESP32-DevKitC | Teensy 4.1 | Adafruit Feather M4 | BBC micro:bit v2 |
|---|---|---|---|---|---|---|
| Manufacturer | Baochip | Raspberry Pi Ltd | Espressif Systems | PJRC | Adafruit | Micro:bit Educational Foundation |
| MCU / SoC | Baochip-1x (single-core Vexriscv) | RP2350 (dual-core Cortex-M33) | ESP32 (dual-core Xtensa LX6) | NXP iMXRT1062 (Cortex-M7) | SAMD51 (Cortex-M4F) | nRF52833 (Cortex-M4F) |
| Clock Speed | 350 MHz | 150 MHz | 240 MHz | 600 MHz | 120 MHz | 64 MHz |
| I/O Coprocessor | BIO (4× PicoRV @ 700 MHz) | 2× PIO blocks (8 state machines) | 2× ULP cores (RISC-V / FSM) | FlexIO | SERCOM | None |
| Hardware Security | Signed boot, TRNG, key store, one-way counters, RSA, ECC, ECDSA, X25519, SHA-256/512, SHA3, Blake2/3, AES; secure mesh, glitch sensors, ECC-protected RAM | TrustZone, signed boot, OTP key store, HW SHA-256, TRNG | eFuse secure boot + AES flash encryption, HW RNG | HAB secure boot, AES-256 encrypted XIP (lockable) | NVM read-back protection only | Read-back protection only; no HW crypto |
| IRIS Inspectable | Yes | No | No | No | No | No |
| Open Bootloader | Yes | Yes | No | No | No | No |
| Open RTL | Mostly open | No | No | No | No | No |
| Memory Protection | MMU | MPU + TrustZone | MPU-like | MPU | MPU | MPU |
| Swap Memory | Yes (Xous + external PSRAM) | No | No | No | No | No |
| Rust-native | Yes | No | No | No | No | No |
| RAM | 2048 KB + 256 KB I/O buffers | 520 KB | 520 KB | 1 MB | 192 KB | 128 KB |
| Flash | 4 MB (internal RRAM) | 4 MB | 4 MB | 8 MB + SD slot | 512 KB internal + 2 MB external | 512 KB internal |
| Flash Interface | Internal XIP (up to 1200 MB/s) | QSPI (~56 MB/s XIP) | QSPI (~40 MB/s) | FlexSPI octal/quad (~100 MB/s XIP) | Internal NVM (XIP est ~400 MB/s) | Internal NVM (est. 20–40 MB/s) |
| GPIO Pins | 20 | 26 | 34 | 55 | 20 | 5 large / 19 total |
| Wireless | None | None (W variant adds Wi-Fi/BT) | Wi-Fi + Bluetooth 4.2 | None (add-on available) | None (Wing ecosystem) | Bluetooth 5.0 + 2.4 GHz |
| USB | USB-C (USB 2.0 HS device) | Micro-USB (native) | Micro-USB (via CP2102) | USB-C (native, device + host) | Micro-USB | Micro-USB |
| Price (approx.) | $12 | $5–$7 | $8–$12 | $30–$35 | $20–$24 | $15–$18 |
| Best For | Security, high-assurance & general-purpose | General-purpose, MicroPython/C++ | IoT projects, wireless connectivity | Audio DSP, high-speed data, USB MIDI/HID | CircuitPython, modular add-on Wings | Education, kids, classroom coding |
#include <stdint.h>
#include "bio.h" // this must always be first
#define GPIO_PIN 21
void main(void) {
uint32_t output_mask = 1 << GPIO_PIN;
set_gpio_mask(output_mask);
set_output_pins(output_mask);
clear_gpio_pins_n(!output_mask); // drives it low
while (1) {
for(int i = 0; i < 10; i++) {
set_gpio_pins(output_mask);
}
for(int i = 0; i < 10; i++) {
clear_gpio_pins_n(!output_mask); // drives the pin low
}
}
}
// Runs on Core 0
void main(void) {
uint32_t tx = 0;
uint32_t rx;
while(1) {
push_fifo1(tx);
rx = pop_fifo0();
tx = rx + 1;
}
}
// Runs on Core 1
void main(void) {
uint32_t rx;
while(1) {
rx = pop_fifo1();
push_fifo0(rx + 1);
}
}
git clone --depth 1 https://github.com/betrusted-io/xous-core/
cd xous-core
git fetch --depth 1 origin tag v0.10.1
rustup update" to ensure it is recent
cargo xtask dabao dabao-console
impl<'a> ShellCmdApi<'a> for Ver {
cmd_api!(ver);
fn process(&mut self, args: String, env: &mut CommonEnv) ->
Result<Option<String>, xous::Error> {
use core::fmt::Write;
let mut ret = String::new();
let helpstring = "ver [xous]";
let mut tokens = args.split(' ');
if let Some(sub_cmd) = tokens.next() {
match sub_cmd {
"xous" => {
write!(ret, "Xous version: {}", env.ticktimer.get_version()).unwrap();
log::info!("VER.XOUS,{}", env.ticktimer.get_version());
}
_ => {
write!(ret, "{}", helpstring).unwrap();
}
}
} else {
write!(ret, "{}", helpstring).unwrap();
}
Ok(Some(ret))
}
}
fn process(&mut self, args: String, _env: &mut CommonEnv) -> Result<Option<String>, xous::Error> {
use core::fmt::Write;
let mut ret = String::new();
#[allow(unused_variables)]
let helpstring = "test [proc] [freemem] [interrupts] [panic] [env]";
let mut tokens = args.split(' ');
if let Some(sub_cmd) = tokens.next() {
match sub_cmd {
"blink" => {
log::info!("Add blinky code here");
}
Using the vscode extension:
[console]
[console] test blink
INFO:dabao_console::cmds::test: Add blinky code here (apps-dabao\dabao-console\src\cmds\test.rs:25)
"blink" => {
use std::time::Duration;
use bao1x_api::{IoGpio, IoxDir, IoxHal, IoxPort, IoxValue};
let iox = IoxHal::new();
iox.set_gpio_pin_dir(IoxPort::PB, 4, IoxDir::Output);
loop {
iox.set_gpio_pin_value(IoxPort::PB, 4, IoxValue::High);
std::thread::sleep(Duration::from_secs(1));
iox.set_gpio_pin_value(IoxPort::PB, 4, IoxValue::Low);
std::thread::sleep(Duration::from_secs(1));
}
}