| Crates.io | sg200x-bsp |
| lib.rs | sg200x-bsp |
| version | 0.3.0 |
| created_at | 2026-01-19 13:43:36.745123+00 |
| updated_at | 2026-01-23 06:30:30.713748+00 |
| description | Board Support Package (BSP) for SG2002/SG200x series chips, providing hardware abstraction layer drivers for pinmux, GPIO, SD/MMC, and TPU |
| homepage | https://github.com/yfblock/sg200x-bsp |
| repository | https://github.com/yfblock/sg200x-bsp |
| max_upload_size | |
| id | 2054646 |
| size | 312,811 |
SG2002/SG200x 系列芯片的板级支持包 (BSP),提供硬件抽象层驱动程序。
| 模块 | 状态 | 描述 |
|---|---|---|
| pinmux | ✅ 完成 | 引脚复用控制驱动 |
| gpio | ✅ 完成 | GPIO 控制驱动 |
| sdmmc | ✅ 完成 | SD/MMC 控制驱动 |
| i2c | ✅ 完成 | I2C 控制驱动 |
| pwm | ✅ 完成 | PWM 控制驱动 |
| rstc | ✅ 完成 | 复位控制器驱动 |
| mp | ✅ 完成 | 多处理器启动驱动 |
| tpu | 🚧 进行中 | TPU (张量处理单元) 驱动 |
| spi | 📋 计划中 | SPI 控制驱动 |
| mipirx | 📋 计划中 | MIPI RX 控制驱动 |
在 Cargo.toml 中添加依赖:
[dependencies]
sg200x-bsp = "0.3"
#![no_std]
use sg200x_bsp::{gpio, pinmux, sdmmc};
// 使用各模块进行硬件操作
#![no_std]
use sg200x_bsp::i2c::{I2c, I2cInstance, I2cSpeed};
// 创建 I2C0 驱动实例
let mut i2c = unsafe { I2c::new(I2cInstance::I2c0) };
// 初始化 I2C,使用快速模式 (~400 kbit/s)
i2c.init(I2cSpeed::Fast);
// 写入数据到设备
let slave_addr = 0x50;
let data = [0x00, 0x01, 0x02];
i2c.write(slave_addr, &data).unwrap();
// 从设备读取数据
let mut buf = [0u8; 4];
i2c.read(slave_addr, &mut buf).unwrap();
// 写后读操作 (常用于寄存器读取)
let reg_addr = [0x00];
i2c.write_read(slave_addr, ®_addr, &mut buf).unwrap();
#![no_std]
use sg200x_bsp::pwm::{Pwm, PwmInstance, PwmChannel, PwmMode, PwmPolarity};
// 创建 PWM0 控制器驱动实例
let mut pwm = unsafe { Pwm::new(PwmInstance::Pwm0) };
// 配置通道 0: 1KHz, 50% 占空比
pwm.configure_channel(
PwmChannel::Channel0,
1_000, // 1KHz 频率
50, // 50% 占空比
PwmPolarity::ActiveHigh,
).unwrap();
// 使能 IO 输出并启动
pwm.enable_output(PwmChannel::Channel0);
pwm.start(PwmChannel::Channel0);
#![no_std]
use sg200x_bsp::mp::start_secondary_core;
// 启动协处理器 (小核 C906@700MHz)
unsafe {
start_secondary_core(entry_address);
}
SG2002 芯片共有 6 个 I2C 控制器:
| 实例 | 基地址 | 域 |
|---|---|---|
| I2C0 | 0x0400_0000 | Active Domain |
| I2C1 | 0x0401_0000 | Active Domain |
| I2C2 | 0x0402_0000 | Active Domain |
| I2C3 | 0x0403_0000 | Active Domain |
| I2C4 | 0x0404_0000 | Active Domain |
| RTCSYS_I2C | 0x0502_B000 | No-die Domain (RTC) |
SG2002 芯片共有 4 个 PWM 控制器,共 16 路 PWM 输出:
| 实例 | 基地址 | 通道 |
|---|---|---|
| PWM0 | 0x03060000 | PWM[0-3] |
| PWM1 | 0x03061000 | PWM[4-7] |
| PWM2 | 0x03062000 | PWM[8-11] |
| PWM3 | 0x03063000 | PWM[12-15] |
复位控制器基地址: 0x03003000
SG2002 芯片包含以下处理器核心:
| 核心 | 架构 | 频率 | 启动支持 |
|---|---|---|---|
| 大核 | RISC-V C906 / ARM Cortex-A53 | 1GHz | - |
| 小核 (协处理器) | RISC-V C906 | 700MHz | ✅ |
| 8051 | 8051 | 25MHz | ❌ |
本项目采用 MIT 许可证,详见 LICENSE 文件。