embedded-hal driver
embedded-hal driver 表示一个 crate 的主 API 明确建立在 embedded-hal trait 生态之上,目标是被其他 firmware 或 board-support 代码组合进系统,而不是自己成为整机应用。这里的核心不是器件名,而是“驱动 crate 的复用边界”。 这个 Topic 关注的是 crate API 形状、trait 依赖、feature flags、测试方式和下游组合方式。
- 硬件
目录
Definition
embedded-hal driver 表示一个 crate 的主 API 明确建立在 embedded-hal trait 生态之上,目标是被其他 firmware 或 board-support 代码组合进系统,而不是自己成为整机应用。这里的核心不是器件名,而是“驱动 crate 的复用边界”。
这个 Topic 关注的是 crate API 形状、trait 依赖、feature flags、测试方式和下游组合方式。它通常会和 Embedded Rust、Async embedded、I2C 一起出现,但不替代这些 Topic:embedded-hal driver 解释驱动层契约,其他 Topic 解释语言生态、并发模型或具体总线/协议(projects/bq25730-rs.md、projects/ina3221-async-rs.md、projects/pca9546a-rs.md)。
When to use
当 Cargo.toml、README、crate 描述或 project snapshot 明确表明仓库的主要交付物是基于 embedded-hal 的 driver crate 时使用。若项目只是消费某个 driver、或只是 firmware repo 内部顺带有一点外设封装,不应直接命中。
如果一个改动会影响 driver API、trait bounds、feature flags、mock-based tests、寄存器访问封装、error type、bus ownership 或 sync/async 集成方式,就应该命中 embedded-hal driver。反过来,若改动主要影响板级任务调度、UI、网络、整机部署或协议编排,则应该回到更相邻的 Topic。
Habits / defaults
- 倾向保持 crate 小而可组合:核心逻辑收敛在
src/lib.rs或少量模块,让下游 firmware 自己决定任务模型、总线共享和重试策略(projects/pca9546a-rs.md)。 - feature flags 常用于 async support、logging、芯片变体或可选功能;这些开关应影响扩展能力,而不是把核心寄存器语义拆散(
projects/tps55288-rs.md、projects/bq25730-rs.md)。 - 测试通常以 embedded-hal mocks、寄存器级单元测试或 trait-level 验证为主,而不是要求每个 crate 自带 HIL;板级真实验证留给下游 firmware 仓库(
projects/ina3221-async-rs.md)。 - API 设计要优先表达器件语义,而不是泄露过多 board-specific 假设。驱动层可以知道寄存器、状态机和总线事务,但不应强行把整机调度、UI 逻辑或业务策略塞进 crate。
- 若同时支持 sync/async,用 trait layering 或 feature gating 维持单一语义源,避免为两套执行模型复制两份互相漂移的驱动实现(
projects/ft6336u-async.md、projects/bq769x0-async-rs.md)。 - 文档里应明确这个 driver 依赖哪类总线/trait、是否需要外部 delay、是否暴露 burst read/write、错误如何包装;这些都直接影响下游 firmware 是否能安全接入。
Reference implementations
projects/bq25730-rs.md:带 sync/async support 的电源管理 driver,适合看 feature-based API layering。projects/bq769x0-async-rs.md:多芯片家族 driver,适合看 crate 如何保持复用而不绑死整机实现。projects/ft6336u-async.md:触摸控制器 driver,适合看外设交互语义与 async 能力如何共存。projects/ina3221-async-rs.md:强调 mock-first 测试路径,适合说明 driver crate 的验证默认值。projects/pca9546a-rs.md:很小的 I2C mux crate,适合说明“驱动层保持薄、把系统策略留给下游”。
Failure modes
- 只因为依赖名或 crate 关键字命中就打
embedded-hal driver,却没有 driver crate 级别证据支撑,最后会让 Topic 失去判别力。 - 把
embedded-hal driver当成整个仓库的总括标签,忽略Embedded Rust、Async embedded、I2C等相邻 Topic,会让后续 Agent 无法判断真正应该验证的是驱动 API、运行时并发还是具体协议。 - API 设计泄露太多 board-specific 假设,会让 crate 难以复用;Topic 回答里应优先审查 trait 边界,而不是默认接受“能在当前板子上跑”。
- 只做 HIL 不做 mock/trait-level tests,会让小改动验证成本过高;反过来只做 mock 不写器件语义和时序假设,也可能让驱动表面通过、上板失败。
Evidence index
projects/bq25730-rs.mdprojects/bq769x0-async-rs.mdprojects/ft6336u-async.mdprojects/gc9307-async-rs.mdprojects/gc9d01-rs.mdprojects/ina3221-async-rs.mdprojects/pca9546a-rs.mdprojects/sc8815-rs.mdprojects/sw2303-rs.mdprojects/tca6424-rs.mdprojects/tps55288-rs.mdprojects/xca9545a-async-rs.mdskills/style-playbook/references/data/topics/embedded-hal-driver.json
相关内容
bq25730-rs
项目实践Rust no_std driver crate for TI BQ25730 (battery/charger management), built on embedded-hal with async/sync support. Evidence: Cargo.toml, src/.
bq769x0-async-rs
项目实践Rust no_std driver crate for TI BQ769x0 battery monitor/management family, based on embedded-hal with async/sync support. Evidence: Cargo.toml, src/.
ft6336u-async
项目实践Rust driver crate for the FT6336U touch controller, supporting both sync and async usage via feature/config gating. Evidence: Cargo.toml, src/.
FUSB302 Rust PHY Driver
项目实践fusb302 是面向 FUSB302B/FUSB302BMPX 的 no_std Rust USB Type-C 和 USB Power Delivery BMC PHY driver。它提供寄存器级控制、Type-C 电气控制、VBUS comparator、interrupt/FIFO 和 PD packet transport;README.
gc9307-async-rs
项目实践Rust no_std driver crate for GC9307 display controller, designed for embedded usage with async support. Evidence: Cargo.toml, src/.
GC9D01 Rust Driver
项目实践GC9D01 Rust Driver 是 no_std Rust LCD display controller driver,面向 GC9D01 面板并提供 embedded-graphics 支持。README.md 和 Cargo.toml 都把 crate 名确认为 gc9d01,仓库 slug gc9d01-rs 只是 GitHub 命名。
ina3221-async-rs
项目实践Rust no_std driver crate for TI INA3221 3-channel voltage/current monitor over I2C. Evidence: Cargo.toml, src/.
pca9546a-rs
项目实践Rust no_std driver crate for PCA9546A 4-channel I2C multiplexer, based on embedded-hal. Evidence: Cargo.toml, src/.
sc8815-rs
项目实践Rust driver crate for SC8815 power management IC, targeting embedded systems with no_std and embedded-hal integration. Evidence: Cargo.toml, src/.
sw2303-rs
项目实践Rust embedded-hal driver for SW2303 USB PD controller, providing async/sync support for embedded firmware usage. Evidence: Cargo.toml, src/.
tca6424-rs
项目实践Rust no_std embedded-hal driver for TI TCA6424 I/O expander, supporting async and sync features. Evidence: Cargo.toml, src/.
tps55288-rs
项目实践Rust driver skeleton for TI TPS55288 buck-boost converter over I2C, intended for no_std embedded environments. Evidence: Cargo.toml, src/.
xca9545a-async-rs
项目实践Rust embedded-hal driver for PCA9545A/TCA9545A I2C switch with optional async support (embedded-hal 1.0). Evidence: Cargo.toml, src/.