Sipeed M0S Dock
Model: Sipeed M0S Dock
SoC: Bouffalo Lab BL616
- RISC-V RV32GCP @ 320MHz
- 480 KB SRAM
- 4 MB Flash
- Wireless - Support Wi-Fi6
- Wireless - Support Bluetooth 5.2 Dual-mode(BT+BLE)
- Wireless - Support Zigbee
- USB 2.0 HS OTG
on the M0S dock
- button - 1 "boot"
- LED - 1 power, 2 user
- usb: 1 x TYPE C
- IO header - 10 pins (8 x GPIO)
back to microcontrollers page.
Links
Sipeed wiki M0S module,
Sipeed github M0S_BL616_example,
Bouffalo Lab github bl_docs,
OpenBouffalo BL616, Awesome bouffalo,
CNX Software Bouffalo Lab BL616/BL618 RISC-V MCU,
Exploring embedded programming with Sipeed m0s (BL616), Opensource toolchain for series RISC-V based MCU from Bouffalo Lab, blflashcommand,
Rust BL602 Rust Guide, Sipeed M0 Sense (BL702 chip), oreboot, bl_boot,
local links
c2,
History
2025-04-05: c2 - blflash - try to dump the rom
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/blflash $ target/debug/blflash dump -p /dev/cuaU0 ../bl616.bin [INFO blflash::flasher] Start connection... [TRACE blflash::flasher] 5ms send count 55 [TRACE blflash::flasher] handshake sent elapsed 52.254175ms [INFO blflash::flasher] Connection Succeed [INFO blflash] Bootrom version: 102105089 [TRACE blflash] Boot info: BootInfo { len: 18, bootrom_version: 6160001, otp_info: [0, 0, 1, 0, 27, 92, 80, 1, db, f1, 49, e0, c2, b4, 18, 0] } Error: ROM error Other(513)
2025-04-05: c2 - try blflash
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/blflash $ target/debug/blflash --help blflash 0.3.5 USAGE: blflash <SUBCOMMAND> FLAGS: -h, --help Prints help information -V, --version Prints version information SUBCOMMANDS: check Check if the device's flash matches the image dump Dump the whole flash to a file flash Flash image to serial help Prints this message or the help of the given subcommand(s)
commands - check
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/blflash $ target/debug/blflash check --help blflash-check 0.3.5 Check if the device's flash matches the image USAGE: blflash check [FLAGS] [OPTIONS] <image> --port <port> FLAGS: -h, --help Prints help information -V, --version Prints version information -w, --without-boot2 Without boot2 OPTIONS: -b, --baud-rate <baud-rate> Flash baud rate [default: 1000000] --boot-header-cfg <boot-header-cfg> Path to efuse_bootheader_cfg.conf --dtb <dtb> Path to ro_params.dtb --initial-baud-rate <initial-baud-rate> Initial baud rate [default: 115200] --partition-cfg <partition-cfg> Path to partition_cfg.toml, default to be partition/partition_cfg_2M.toml -p, --port <port> Serial port ARGS: <image> Bin file
commands - dump
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/blflash $ target/debug/blflash dump --help blflash-dump 0.3.5 Dump the whole flash to a file USAGE: blflash dump [OPTIONS] <output> --port <port> [ARGS] FLAGS: -h, --help Prints help information -V, --version Prints version information OPTIONS: -b, --baud-rate <baud-rate> Flash baud rate [default: 1000000] --initial-baud-rate <initial-baud-rate> Initial baud rate [default: 115200] -p, --port <port> Serial port ARGS: <output> Output file <start> start address [default: 0] <end> end address [default: 0x100000]
commands - flash
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/blflash $ target/debug/blflash flash --help blflash-flash 0.3.5 Flash image to serial USAGE: blflash flash [FLAGS] [OPTIONS] <image> --port <port> FLAGS: -f, --force Don't skip if hash matches -h, --help Prints help information -V, --version Prints version information -w, --without-boot2 Without boot2 OPTIONS: -b, --baud-rate <baud-rate> Flash baud rate [default: 1000000] --boot-header-cfg <boot-header-cfg> Path to efuse_bootheader_cfg.conf --dtb <dtb> Path to ro_params.dtb --initial-baud-rate <initial-baud-rate> Initial baud rate [default: 115200] --partition-cfg <partition-cfg> Path to partition_cfg.toml, default to be partition/partition_cfg_2M.toml -p, --port <port> Serial port ARGS: <image> Bin file
2025-04-05: c2 - build blflash
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/blflash $ cargo build Updating crates.io index Downloaded fnv v1.0.7 Downloaded bitflags v1.3.2 Downloaded funty v2.0.0 Downloaded byteorder v1.4.3 Downloaded autocfg v1.1.0 Downloaded termcolor v1.1.3 Downloaded aho-corasick v0.7.20 Downloaded unicode-width v0.1.10 Downloaded radium v0.7.0 Downloaded quote v1.0.23 Downloaded wyz v0.5.1 Downloaded proc-macro-crate v1.2.1 Downloaded thiserror-impl v1.0.38 Downloaded unicode-ident v1.0.6 Downloaded typenum v1.16.0 Downloaded serde_derive v1.0.152 Downloaded syn v1.0.107 Downloaded version_check v0.9.4 Downloaded regex-syntax v0.6.28 Downloaded libc v0.2.139 Downloaded serde v1.0.152 Downloaded memchr v2.5.0 Downloaded bitvec v1.0.1 Downloaded structopt v0.3.26 Downloaded num-traits v0.2.15 Downloaded heck v0.3.3 Downloaded structopt-derive v0.4.18 Downloaded parse_int v0.6.0 Downloaded humantime v2.1.0 Downloaded strsim v0.10.0 Downloaded log v0.4.17 Downloaded ident_case v1.0.1 Downloaded hex v0.4.3 Downloaded crypto-common v0.1.6 Downloaded clap v2.34.0 Downloaded toml v0.5.10 Downloaded thiserror v1.0.38 Downloaded tap v1.0.1 Downloaded number_prefix v0.4.0 Downloaded indicatif v0.16.2 Downloaded errno v0.2.8 Downloaded ansi_term v0.12.1 Downloaded cpufeatures v0.2.5 Downloaded is-terminal v0.4.2 Downloaded sha2 v0.10.6 Downloaded crc v1.8.1 Downloaded termios v0.2.2 Downloaded once_cell v1.17.0 Downloaded serial-unix v0.4.0 Downloaded digest v0.10.6 Downloaded zero v0.1.3 Downloaded io-lifetimes v1.0.4 Downloaded serial-core v0.4.0 Downloaded regex v1.7.1 Downloaded paw-raw v1.0.0 Downloaded paw-attributes v1.0.2 Downloaded paw v1.0.0 Downloaded serial v0.4.0 Downloaded main_error v0.1.2 Downloaded ioctl-rs v0.1.6 Downloaded block-buffer v0.10.3 Downloaded xmas-elf v0.9.0 Downloaded build_const v0.2.2 Downloaded deku_derive v0.15.1 Downloaded generic-array v0.14.6 Downloaded darling_macro v0.14.2 Downloaded deku v0.15.1 Downloaded env_logger v0.10.0 Downloaded proc-macro2 v1.0.49 Downloaded darling v0.14.2 Downloaded console v0.15.4 Downloaded darling_core v0.14.2 Downloaded unicode-segmentation v1.10.0 Downloaded rustix v0.36.6 Downloaded 74 crates (3.7 MB) in 1.29s Compiling proc-macro2 v1.0.49 Compiling quote v1.0.23 Compiling unicode-ident v1.0.6 Compiling syn v1.0.107 Compiling libc v0.2.139 Compiling version_check v0.9.4 Compiling serde_derive v1.0.152 Compiling typenum v1.16.0 Compiling serde v1.0.152 Compiling memchr v2.5.0 Compiling strsim v0.10.0 Compiling io-lifetimes v1.0.4 Compiling thiserror v1.0.38 Compiling fnv v1.0.7 Compiling bitflags v1.3.2 Compiling ident_case v1.0.1 Compiling rustix v0.36.6 Compiling radium v0.7.0 Compiling autocfg v1.1.0 Compiling generic-array v0.14.6 Compiling proc-macro-error-attr v1.0.4 Compiling proc-macro-error v1.0.4 Compiling tap v1.0.1 Compiling unicode-segmentation v1.10.0 Compiling regex-syntax v0.6.28 Compiling cfg-if v1.0.0 Compiling unicode-width v0.1.10 Compiling build_const v0.2.2 Compiling lazy_static v1.4.0 Compiling once_cell v1.17.0 Compiling log v0.4.17 Compiling textwrap v0.11.0 Compiling num-traits v0.2.15 Compiling crc v1.8.1 Compiling aho-corasick v0.7.20 Compiling wyz v0.5.1 Compiling heck v0.3.3 Compiling strsim v0.8.0 Compiling funty v2.0.0 Compiling ansi_term v0.12.1 Compiling paw-raw v1.0.0 Compiling vec_map v0.8.2 Compiling zero v0.1.3 Compiling number_prefix v0.4.0 Compiling cpufeatures v0.2.5 Compiling termcolor v1.1.3 Compiling humantime v2.1.0 Compiling xmas-elf v0.9.0 Compiling byteorder v1.4.3 Compiling hex v0.4.3 Compiling bitvec v1.0.1 Compiling errno v0.2.8 Compiling ioctl-rs v0.1.6 Compiling regex v1.7.1 Compiling termios v0.2.2 Compiling serial-core v0.4.0 Compiling atty v0.2.14 Compiling console v0.15.4 Compiling crypto-common v0.1.6 Compiling block-buffer v0.10.3 Compiling clap v2.34.0 Compiling serial-unix v0.4.0 Compiling main_error v0.1.2 Compiling digest v0.10.6 Compiling serial v0.4.0 Compiling parse_int v0.6.0 Compiling sha2 v0.10.6 Compiling is-terminal v0.4.2 Compiling env_logger v0.10.0 Compiling indicatif v0.16.2 Compiling darling_core v0.14.2 Compiling thiserror-impl v1.0.38 Compiling paw-attributes v1.0.2 Compiling structopt-derive v0.4.18 Compiling paw v1.0.0 Compiling structopt v0.3.26 Compiling darling_macro v0.14.2 Compiling darling v0.14.2 Compiling toml v0.5.10 Compiling proc-macro-crate v1.2.1 Compiling deku_derive v0.15.1 Compiling deku v0.15.1 Compiling blflash v0.3.5 (/zs/tingo/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/blflash/blflash) Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.37s
2025-04-05: c2 - try the bouffalo-cli now
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/bouffalo-cli $ target/debug/bouffalo-cli -b 115200 -p /dev/cuaU0 info Using serial device "/dev/cuaU0" BootROM version: 102105089 OTP flags: 00000000 00000000 00000001 00000000 00100111 10010010 10000000 00000001 11011011 11110001 01001001 11100000 11000010 10110100 00011000 00000000
and
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/bouffalo-cli $ target/debug/bouffalo-cli -p /dev/cuaU0 info Using serial device "/dev/cuaU0" BootROM version: 102105089 OTP flags: 00000000 00000000 00000001 00000000 00100111 10010010 10000000 00000001 11011011 11110001 01001001 11100000 11000010 10110100 00011000 00000000
so that part works.
2025-02-05: c2 - hold the boot button, then plug in the M0S Dock. It now shows up in /var/log/messages as
Apr 5 17:49:49 kg-core2 kernel: ugen1.5: <Bouffalo Bouffalo CDC DEMO> at usbus1 Apr 5 17:49:49 kg-core2 kernel: umodem0 on uhub3 Apr 5 17:49:49 kg-core2 kernel: umodem0: <Bouffalo CDC DEMO> on usbus1 Apr 5 17:49:49 kg-core2 kernel: umodem0: data interface 1, has no CM over data, has no break
usbconfig
root@kg-core2:~ # usbconfig -d ugen1.5 ugen1.5: <Bouffalo Bouffalo CDC DEMO> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (100mA)
still tty U0
root@kg-core2:~ # sysctl dev.umodem.0.ttyname dev.umodem.0.ttyname: U0
2025-04-05: c2 - try the target
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/bouffalo-cli $ target/debug/bouffalo-cli --help bouffalo-cli 0.0.1 USAGE: bouffalo-cli [OPTIONS] <SUBCOMMAND> FLAGS: -h, --help Prints help information -V, --version Prints version information OPTIONS: -b, --baud-rate <baud-rate> The serial baud rate to use when communicating with the Boot ROM [env: BAUD_RATE=] [default: 500000] --programming-baud-rate <programming-baud-rate> [default: 500000] -p, --port <serial-port> The serial device to connect to [env: SERIAL_PORT=] [default: /dev/ttyUSB0] SUBCOMMANDS: elf2image Convert an elf image to a firmware image flash Operate on the external flash help Prints this message or the help of the given subcommand(s) info Get and print the bootrom info
2025-04-05: c2 - build bouffalo-cli
tingo@kg-core2:~/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/bouffalo-cli $ cargo build Updating crates.io index Downloaded lazy_static v1.4.0 Downloaded opaque-debug v0.3.0 Downloaded void v1.0.2 Downloaded proc-macro-error v1.0.4 Downloaded strsim v0.8.0 Downloaded cfg-if v0.1.10 Downloaded memchr v2.3.4 Downloaded vec_map v0.8.2 Downloaded quick-error v1.2.3 Downloaded unicode-xid v0.2.1 Downloaded textwrap v0.11.0 Downloaded serde v1.0.118 Downloaded clap v2.33.3 Downloaded generic-array v0.14.4 Downloaded proc-macro2 v1.0.24 Downloaded proc-macro-error-attr v1.0.4 Downloaded block-buffer v0.9.0 Downloaded cfg-if v1.0.0 Downloaded atty v0.2.14 Downloaded byteorder v1.3.4 Downloaded env_logger v0.7.1 Downloaded digest v0.9.0 Downloaded humantime v1.3.0 Downloaded proc-macro-crate v0.1.5 Downloaded ansi_term v0.11.0 Downloaded bitflags v1.2.1 Downloaded thread_local v1.0.1 Downloaded serialport v3.3.0 Downloaded aho-corasick v0.7.15 Downloaded termcolor v1.1.2 Downloaded num_enum v0.5.1 Downloaded cpuid-bool v0.1.2 Downloaded unicode-width v0.1.8 Downloaded pretty_env_logger v0.4.0 Downloaded version_check v0.9.2 Downloaded thiserror v1.0.22 Downloaded thiserror-impl v1.0.22 Downloaded nix v0.14.1 Downloaded num_enum_derive v0.5.1 Downloaded typenum v1.12.0 Downloaded quote v1.0.7 Downloaded structopt v0.3.21 Downloaded toml v0.5.7 Downloaded structopt-derive v0.4.14 Downloaded heck v0.3.1 Downloaded derivative v2.1.1 Downloaded log v0.4.11 Downloaded anyhow v1.0.35 Downloaded sha2 v0.9.2 Downloaded unicode-segmentation v1.7.1 Downloaded regex v1.4.2 Downloaded syn v1.0.54 Downloaded libc v0.2.81 Downloaded regex-syntax v0.6.21 Downloaded 54 crates (2.8 MB) in 1.46s Compiling version_check v0.9.2 Compiling proc-macro2 v1.0.24 Compiling unicode-xid v0.2.1 Compiling syn v1.0.54 Compiling libc v0.2.81 Compiling serde v1.0.118 Compiling typenum v1.12.0 Compiling memchr v2.3.4 Compiling bitflags v1.2.1 Compiling lazy_static v1.4.0 Compiling cfg-if v0.1.10 Compiling log v0.4.11 Compiling thread_local v1.0.1 Compiling quick-error v1.2.3 Compiling unicode-segmentation v1.7.1 Compiling nix v0.14.1 Compiling generic-array v0.14.4 Compiling proc-macro-error-attr v1.0.4 Compiling proc-macro-error v1.0.4 Compiling unicode-width v0.1.8 Compiling regex-syntax v0.6.21 Compiling heck v0.3.1 Compiling humantime v1.3.0 Compiling textwrap v0.11.0 Compiling strsim v0.8.0 Compiling ansi_term v0.11.0 Compiling vec_map v0.8.2 Compiling aho-corasick v0.7.15 Compiling termcolor v1.1.2 Compiling byteorder v1.3.4 Compiling anyhow v1.0.35 Compiling void v1.0.2 Compiling cfg-if v1.0.0 Compiling cpuid-bool v0.1.2 Compiling opaque-debug v0.3.0 Compiling atty v0.2.14 Compiling clap v2.33.3 Compiling quote v1.0.7 Compiling block-buffer v0.9.0 Compiling digest v0.9.0 Compiling sha2 v0.9.2 Compiling regex v1.4.2 Compiling serialport v3.3.0 Compiling env_logger v0.7.1 Compiling toml v0.5.7 Compiling pretty_env_logger v0.4.0 Compiling proc-macro-crate v0.1.5 Compiling thiserror-impl v1.0.22 Compiling derivative v2.1.1 Compiling structopt-derive v0.4.14 Compiling num_enum_derive v0.5.1 Compiling thiserror v1.0.22 Compiling structopt v0.3.21 Compiling num_enum v0.5.1 Compiling bouffalo-cli v0.0.1 (/zs/tingo/personal/projects/2025/rust/embedded/riscv/bouffalo_lab/bouffalo-cli) warning: unused import: `FirmwareBuilder` --> src/bl.rs:20:37 | 20 | pub use firmware::{crc32, Firmware, FirmwareBuilder, Segment}; | ^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default warning: variant `InvalidMagicHeader` is never constructed --> src/bl/firmware.rs:50:5 | 48 | pub enum ClockConfigError { | ---------------- variant in this enum 49 | #[error("The magic header value is invalid: {:?}", _0)] 50 | InvalidMagicHeader([u8; 4]), | ^^^^^^^^^^^^^^^^^^ | = note: `ClockConfigError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis = note: `#[warn(dead_code)]` on by default warning: fields `reader`, `header`, `program_headers`, and `section_headers` are never read --> src/elf_parser.rs:10:5 | 9 | pub struct ElfParser<R> { | --------- fields in this struct 10 | reader: BufReader<R>, | ^^^^^^ 11 | header: Header, | ^^^^^^ 12 | program_headers: Vec<ProgramHeader>, | ^^^^^^^^^^^^^^^ 13 | section_headers: Vec<SectionHeader>, | ^^^^^^^^^^^^^^^ | = note: `ElfParser` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis warning: multiple fields are never read --> src/elf_parser.rs:135:9 | 133 | pub struct Header { | ------ fields in this struct 134 | /// This byte is set to either 1 or 2 to signify 32- or 64-bit format, respectively 135 | pub class: Class, | ^^^^^ 136 | /// The endianness of the file 137 | pub endianness: Endianness, | ^^^^^^^^^^ 138 | /// The ELF file version 139 | pub version: u8, | ^^^^^^^ 140 | /// The target OS ABI 141 | pub os_abi: u8, | ^^^^^^ 142 | /// The target OS ABI version 143 | pub os_abi_version: u8, | ^^^^^^^^^^^^^^ 144 | /// The object file type 145 | pub file_type: u16, | ^^^^^^^^^ 146 | /// The program entry address 147 | pub entry_addr: u32, | ^^^^^^^^^^ | = note: `Header` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis warning: multiple fields are never read --> src/elf_parser.rs:168:5 | 166 | pub struct ProgramHeader { | ------------- fields in this struct 167 | /// The type of the program header segment 168 | typ: ProgType, | ^^^ 169 | /// The offset to the segment in the image file 170 | offset: u32, | ^^^^^^ 171 | /// The virtual address to map the segment to 172 | virt_addr: u32, | ^^^^^^^^^ 173 | /// The physical address to map the segment to, when relevant 174 | phys_addr: u32, | ^^^^^^^^^ 175 | /// Size of the segment in the file image, in bytes 176 | file_size: u32, | ^^^^^^^^^ 177 | /// Size of the segment in memory, in bytes 178 | mem_size: u32, | ^^^^^^^^ 179 | /// Segment-dependent flags 180 | flags: u32, | ^^^^^ ... 187 | alignment: u32, | ^^^^^^^^^ | = note: `ProgramHeader` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis warning: multiple fields are never read --> src/elf_parser.rs:196:9 | 192 | pub struct SectionHeader { | ------------- fields in this struct ... 196 | pub typ: SectionType, | ^^^ 197 | /// The attributes of this section 198 | pub flags: u32, | ^^^^^ 199 | /// Virtual address for this section, if it's to be loaded into memory 200 | pub virt_addr: u32, | ^^^^^^^^^ ... 204 | pub size: u32, | ^^^^ 205 | /// Contains the index of an associated section, which might be used depending on the type 206 | pub link: u32, | ^^^^ 207 | /// Contains information about the section 208 | pub info: u32, | ^^^^ 209 | /// The required alignment of the section 210 | pub addr_align: u32, | ^^^^^^^^^^ 211 | /// The size of each entry, in bytes, if this is a section with fixed sized data 212 | pub entry_size: u32, | ^^^^^^^^^^ | = note: `SectionHeader` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis warning: `bouffalo-cli` (bin "bouffalo-cli") generated 6 warnings (run `cargo fix --bin "bouffalo-cli"` to apply 1 suggestion) Finished `dev` profile [unoptimized + debuginfo] target(s) in 10.68s
2025-04-05: c2 - tty port
root@kg-core2:~ # sysctl dev.umodem.0.ttyname dev.umodem.0.ttyname: U0
so
root@kg-core2:~ # ll /dev/cuaU0 /dev/ttyU0 crw-rw---- 1 uucp dialer 0x1cd Apr 5 15:17 /dev/cuaU0 crw------- 1 root wheel 0x1b5 Apr 5 15:17 /dev/ttyU0
2025-04-05: c2 - when plugged into a usb port, the M0S Docks shows up as (from /var/log/messages)
Apr 5 15:17:29 kg-core2 kernel: ugen1.5: <Bouffalo C-Sky CKLink-Lite> at usbus1 Apr 5 15:17:29 kg-core2 kernel: umodem0 on uhub3 Apr 5 15:17:29 kg-core2 kernel: umodem0: <C-Sky CKLink-Lite> on usbus1 Apr 5 15:17:29 kg-core2 kernel: umodem0: data interface 2, has no CM over data, has no break
usbconfig says
root@kg-core2:~ # usbconfig -d ugen1.5 ugen1.5: <Bouffalo C-Sky CKLink-Lite> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)
device description
root@kg-core2:~ # usbconfig -d ugen1.5 dump_device_desc ugen1.5: <Bouffalo C-Sky CKLink-Lite> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA) bLength = 0x0012 bDescriptorType = 0x0001 bcdUSB = 0x0200 bDeviceClass = 0x00ef <Miscellaneous device> bDeviceSubClass = 0x0002 bDeviceProtocol = 0x0001 bMaxPacketSize0 = 0x0040 idVendor = 0x42bf idProduct = 0xb210 bcdDevice = 0x0217 iManufacturer = 0x0001 <Bouffalo> iProduct = 0x0002 <C-Sky CKLink-Lite> iSerialNumber = 0x0003 <FactoryAIOT Prog 49E0C2> bNumConfigurations = 0x0001
device config
root@kg-core2:~ # usbconfig -d ugen1.5 dump_curr_config_desc ugen1.5: <Bouffalo C-Sky CKLink-Lite> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA) Configuration index 0 bLength = 0x0009 bDescriptorType = 0x0002 wTotalLength = 0x006a bNumInterfaces = 0x0003 bConfigurationValue = 0x0001 iConfiguration = 0x0000 <no string> bmAttributes = 0x0080 bMaxPower = 0x0032 Additional Descriptor bLength = 0x08 bDescriptorType = 0x0b bDescriptorSubType = 0x00 RAW dump: 0x00 | 0x08, 0x0b, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00 Interface 0 bLength = 0x0009 bDescriptorType = 0x0004 bInterfaceNumber = 0x0000 bAlternateSetting = 0x0000 bNumEndpoints = 0x0002 bInterfaceClass = 0x00ff <Vendor specific> bInterfaceSubClass = 0x0001 bInterfaceProtocol = 0x0000 iInterface = 0x0004 <CKLink-Lite> Endpoint 0 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0002 <OUT> bmAttributes = 0x0002 <BULK> wMaxPacketSize = 0x0040 bInterval = 0x0000 bRefresh = 0x0000 bSynchAddress = 0x0000 Endpoint 1 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0081 <IN> bmAttributes = 0x0002 <BULK> wMaxPacketSize = 0x0040 bInterval = 0x0000 bRefresh = 0x0000 bSynchAddress = 0x0000 Additional Descriptor bLength = 0x08 bDescriptorType = 0x0b bDescriptorSubType = 0x01 RAW dump: 0x00 | 0x08, 0x0b, 0x01, 0x02, 0x02, 0x02, 0x01, 0x00 Interface 1 bLength = 0x0009 bDescriptorType = 0x0004 bInterfaceNumber = 0x0001 bAlternateSetting = 0x0000 bNumEndpoints = 0x0001 bInterfaceClass = 0x0002 <Communication device> bInterfaceSubClass = 0x0002 bInterfaceProtocol = 0x0001 iInterface = 0x0002 <C-Sky CKLink-Lite> Additional Descriptor bLength = 0x05 bDescriptorType = 0x24 bDescriptorSubType = 0x00 RAW dump: 0x00 | 0x05, 0x24, 0x00, 0x10, 0x01 Additional Descriptor bLength = 0x05 bDescriptorType = 0x24 bDescriptorSubType = 0x01 RAW dump: 0x00 | 0x05, 0x24, 0x01, 0x00, 0x02 Additional Descriptor bLength = 0x04 bDescriptorType = 0x24 bDescriptorSubType = 0x02 RAW dump: 0x00 | 0x04, 0x24, 0x02, 0x02 Additional Descriptor bLength = 0x05 bDescriptorType = 0x24 bDescriptorSubType = 0x06 RAW dump: 0x00 | 0x05, 0x24, 0x06, 0x01, 0x02 Endpoint 0 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0085 <IN> bmAttributes = 0x0003 <INTERRUPT> wMaxPacketSize = 0x0040 bInterval = 0x0000 bRefresh = 0x0000 bSynchAddress = 0x0000 Interface 2 bLength = 0x0009 bDescriptorType = 0x0004 bInterfaceNumber = 0x0002 bAlternateSetting = 0x0000 bNumEndpoints = 0x0002 bInterfaceClass = 0x000a <CDC-data> bInterfaceSubClass = 0x0000 bInterfaceProtocol = 0x0000 iInterface = 0x0000 <no string> Endpoint 0 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0004 <OUT> bmAttributes = 0x0002 <BULK> wMaxPacketSize = 0x0040 bInterval = 0x0000 bRefresh = 0x0000 bSynchAddress = 0x0000 Endpoint 1 bLength = 0x0007 bDescriptorType = 0x0005 bEndpointAddress = 0x0083 <IN> bmAttributes = 0x0002 <BULK> wMaxPacketSize = 0x0040 bInterval = 0x0000 bRefresh = 0x0000 bSynchAddress = 0x0000
2025-04-05: I created this page.
2025-04-04: the package arrived, straight into my mailbox.
2025-03-25: the order was shipped.
2025-03-22: from AliExpress, I ordered 4 x Sipeed M0S Dock tinyML RISC-V BL616 wireless Wifi6 Module development board at USD 4.90 each, add USD 4.90 in tax, for a total of USD 24.50.