rwbt
中文 | English
no_std Rust crate for the RivieraWaves Bluetooth IP core,
found in chips from SiFli, Broadcom, Realtek, Beken, and others.
Structure
rwbt/
├── src/
│ ├── common.rs # Reg<T, A> register abstraction (R / W / RW)
│ ├── mac/ # BT MAC register blocks — auto-generated from YODA CSV
│ │ ├── mod.rs
│ │ └── prebuilt.rs # 17k lines, committed for zero-build-dep usage
│ ├── rfc/
│ │ ├── cmd.rs # RFC command ISA (cross-vendor)
│ │ └── sifli/ # SiFli RF front-end
│ │ ├── regs.rs # register offsets & bit constants (auto-generated)
│ │ └── cal_table.rs # calibration table packing
│ └── bin/
│ └── gen_sifli_regs.rs # Tool: PAC YAML → regs.rs codegen
├── build.rs # YODA CSV → Rust codegen
└── data/
├── RW_DM_CORE_REG.csv # Device Management registers
├── RW_BT_CORE_REG.csv # Classic BT registers
└── RW_BLE_CORE_REG.csv # BLE registers
Cross-vendor vs vendor-specific
| Module | Scope | Description |
|---|---|---|
mac::{dm, bt, ble} |
Cross-vendor | BT MAC register blocks shared by all RivieraWaves licensees |
rfc::cmd |
Cross-vendor | RFC command sequencer ISA (rd/wr/or/and/wait) |
rfc::sifli |
SiFli only | RF front-end register layout and calibration table formats |
Usage
use Ble;
use Dm;
use ;
// Access BLE MAC registers
let ble = unsafe ;
let version = ble.version.read;
let upg = version.upg;
// Modify a register
ble.rwblecntl.modify;
// Build an RFC command sequence
let mut seq = new;
seq.push; // read VCO_REG1
seq.push; // set bit 12
seq.push; // write back
seq.push; // wait 10 µs
seq.push;
Features
| Feature | Default | Description |
|---|---|---|
prebuild |
no | Use pre-generated MAC register code (skip build.rs codegen) |
sifli |
no | Enable SiFli RF front-end register constants and calibration tables |
Regenerating MAC registers
# By default, build.rs generates MAC registers from CSV
# The generated file is at $OUT_DIR/mac_generated.rs
# Copy it to src/mac/prebuilt.rs to update the committed version
Regenerating SiFli RFC registers
src/rfc/sifli/regs.rs is auto-generated from the sifli-pac bt_rfc.yaml
(chiptool format). To regenerate after PAC updates:
The _gen feature gates the binary tool so it is never built by library consumers.
Data source
The CSV files in data/ are in RivieraWaves YODA register export format,
sourced from bekmen/github_mcp_experiment:
| File | Link |
|---|---|
RW_DM_CORE_REG.csv |
DM core |
RW_BT_CORE_REG.csv |
BT core |
RW_BLE_CORE_REG.csv |
BLE core |
They define the standard BT MAC register set (DM + BT + BLE blocks) and have been cross-verified against 7 independent vendor PACs to confirm address and field accuracy.
License
Apache-2.0