I2C
I2C 表示总线本身就是项目的主要维护边界之一,仓库需要持续处理地址、寄存器读写模式、mux/switch/expander、shared bus ownership 或 async/sync 访问策略。这里的重点是 I2C 作为协议/总线契约,而不是“芯片刚好挂在 I2C 上”。
- 硬件
目录
Definition
I2C 表示总线本身就是项目的主要维护边界之一,仓库需要持续处理地址、寄存器读写模式、mux/switch/expander、shared bus ownership 或 async/sync 访问策略。这里的重点是 I2C 作为协议/总线契约,而不是“芯片刚好挂在 I2C 上”。
它通常会和 Embedded Rust、embedded-hal driver、Async embedded 一起出现,但不替代这些 Topic:I2C 解释的是 bus-level 约束,其他 Topic 解释驱动类型、运行时模型或器件语义(projects/pca9546a-rs.md、projects/xca9545a-async-rs.md、projects/bq25730-rs.md)。
When to use
当 README、crate 描述、project snapshot 或代码结构明确表明仓库主要维护 I2C 总线上的 driver、mux/switch/expander、bus sharing 或寄存器事务语义时使用。若 I2C 只是被某个更高层协议透明封装、维护者平时无需直接面对它,则不一定要命中。
如果一个改动会影响地址处理、读写事务、寄存器布局、bus arbitration、mux channel selection、sync/async I2C 访问、或 I2C mock/test 方式,就应该命中 I2C。若改动主要影响 charger/PD/touch 等器件语义,则应同时借助相邻 Topic 收边界。
Habits / defaults
- Many crates are “driver skeletons” that prioritize correctness and composability over performance tricks (
projects/tps55288-rs.md) - I2C bus infrastructure drivers (mux/switch/expander) are kept especially small (
projects/pca9546a-rs.md,projects/tca6424-rs.md) - Async support is often introduced without changing the core protocol logic (
projects/xca9545a-async-rs.md) - 倾向保持 driver skeleton 正确且可组合,而不是在总线层过早做复杂抽象。I2C 代码最重要的是事务语义清晰、可验证,而不是微优化。
- bus infrastructure 驱动要尤其小而明确。mux/switch/expander 这类仓库的价值在于把 channel/address 选择做对,而不是承载上层业务。
- async support 适合通过 trait/feature 叠加,而不改变核心协议语义。I2C 总线规则不应因执行模型变化而分叉。
- 回答此 Topic 时,应明确总线层负责到哪、器件语义由谁负责。这样才能防止
I2C和Battery management、USB PD、Touch controller互相抢定义。 - 对共享总线场景,Topic 里应保留 bus ownership、仲裁和 mock/test 策略;这些往往比单个寄存器定义更决定后续维护难度。
Reference implementations
projects/pca9546a-rs.md:最适合说明 I2C 总线基础设施驱动应当保持多薄、多专注。projects/xca9545a-async-rs.md:适合说明 mux/switch 类 driver 如何在不破坏核心协议语义的前提下增加 async support。projects/ft6336u-async.md:适合说明 I2C 只是总线层,真正的触摸事件语义要留给相邻 Topic。projects/bq25730-rs.md和projects/bq769x0-async-rs.md:适合说明同一 I2C 总线层可以承载完全不同的器件语义,因此 Topic 里必须把 bus-level 与 device-level 分开。
Failure modes
- 只因为芯片挂在 I2C 上就打
I2C,会把 bus-level 主题和器件语义主题混为一谈。 - 把
I2C当成整个仓库的总括标签,忽略Embedded Rust、embedded-hal driver、Async embedded等相邻 Topic,会让后续 Agent 无法判断真正该看的是总线事务、驱动 API 还是执行模型。 - 不写 bus ownership、mux/channel 语义和 mock 策略,会让最常见的维护风险完全丢失。
- 让 async support 改写核心协议逻辑,也会让总线层出现不必要的双真相。
Evidence index
projects/bq25730-rs.mdprojects/bq769x0-async-rs.mdprojects/ft6336u-async.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/i2c.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.
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/.