| Crates.io | rockchip-soc |
| lib.rs | rockchip-soc |
| version | 0.1.0 |
| created_at | 2026-01-15 04:27:50.485946+00 |
| updated_at | 2026-01-15 04:27:50.485946+00 |
| description | A rockchip soc driver, contains cru, power manager, pinctrl. |
| homepage | |
| repository | https://github.com/drivercraft/rockchip-soc |
| max_upload_size | |
| id | 2044576 |
| size | 373,317 |
Rockchip SoC 的 Rust no_std 驱动实现,提供时钟复位单元 (CRU) 和引脚控制 (PINCTRL) 驱动。
enum_dispatch 实现零成本抽象详细文档: doc/3588/
rust-toolchain.toml)aarch64-unknown-none-softfloatostool (用于裸机测试运行)# 库检查和单元测试
cargo check --test test --target aarch64-unknown-none-softfloat
cargo test --lib
# 集成测试 (需要 ostool 和硬件)
cargo install ostool
cargo test --test test --target aarch64-unknown-none-softfloat -- uboot
# 代码格式化
cargo fmt --all
rockchip-soc/
├── src/
│ ├── clock/ # 时钟通用层
│ │ ├── mod.rs # CruOp trait, ClkId, 错误类型
│ │ ├── pll.rs # 通用 PLL 类型
│ │ └── error.rs # 错误定义
│ ├── pinctrl/ # 引脚控制通用层
│ │ ├── mod.rs # PinCtrl trait
│ │ ├── gpio/ # GPIO 操作
│ │ └── pinconf.rs # 引脚配置
│ ├── rst.rs # 复位控制 (RstId, ResetRockchip)
│ ├── syscon/ # 系统控制
│ └── variants/ # 变体层
│ ├── mod.rs # 变体入口,导出时钟 ID 常量
│ └── rk3588/ # RK3588 特定实现
│ ├── cru/ # CRU 实现
│ │ ├── mod.rs # Cru + CruOp trait 实现
│ │ ├── pll.rs # PLL 配置和计算
│ │ ├── consts.rs # 寄存器偏移
│ │ ├── gate.rs # 时钟门控表
│ │ ├── peripheral.rs # 外设时钟
│ │ └── clock/mod.rs # 时钟 ID 常量
│ └── pinctrl/ # PINCTRL 实现
├── doc/
│ └── 3588/ # RK3588 文档
└── Cargo.toml
1. Trait 抽象层
#[enum_dispatch::enum_dispatch]
pub trait CruOp {
fn clk_enable(&mut self, id: ClkId) -> ClockResult<()>;
fn clk_disable(&mut self, id: ClkId) -> ClockResult<()>;
fn clk_get_rate(&self, id: ClkId) -> ClockResult<u64>;
fn clk_set_rate(&mut self, id: ClkId, rate_hz: u64) -> ClockResult<u64>;
fn reset_assert(&mut self, id: RstId);
fn reset_deassert(&mut self, id: RstId);
}
#[enum_dispatch::enum_dispatch(CruOp)]
pub enum Cru {
Rk3588(crate::variants::rk3588::cru::Cru),
}
2. 通用层 (src/)
clock/: 时钟 ID、错误类型、trait 定义rst/: 复位控制 (RstId, ResetRockchip)pinctrl/: 引脚控制 (PinCtrl, GPIO)3. 变体层 (src/variants/)
rk3588/cru/: CRU 具体实现rk3588/pinctrl/: PINCTRL 具体实现use rockchip_soc::{Cru, CruOp, SocType};
// 创建 CRU 实例 (自动初始化)
let cru = Cru::new(SocType::Rk3588, cru_base_addr, sys_grf_addr);
// 时钟操作
cru.clk_enable(CLK_I2C1)?;
let rate = cru.clk_get_rate(CLK_I2C1)?;
cru.clk_set_rate(CLK_I2C1, 100_000_000)?;
// 复位控制
cru.reset_assert(RstId::new(100));
cru.reset_deassert(RstId::new(100));
variants/ 下创建新目录 (如 rk3568/)Cru 结构体并实现 CruOpconsts.rs)peripheral.rs)src/clock/mod.rs 的 Cru enum 添加变体variants/mod.rs 中导出时钟 ID 常量MIT License
版本: 0.1.0 更新时间: 2025-01-15