A3:INA226 驱动 + 六片地址表
地址表按设计文档 §8.2 钉死(0x40/41/44/45/42 + 输入侧 0x43),只走 ina226_rail_addr(),并有一条测试专门拦「ina_addr = 0x40 + ch」这一手 (CH3/CH4/CH5 三路全错,需求 §10.4)。 驱动只经 hal_i2c_*:认件(MFG/DIE ID)、写 Config 0x4327 + CAL 2048 并 回读校验、读 V/I/分流/功率。电流有符号,反灌为负(SW-8 判据)。 巡检走 read_vi(),每片两次事务,对应 §10.3 的 8% I²C 占用。 两条留给下次的坑:寄存器指针不依赖自增(sim 会自增、真件不会,靠自增 在宿主机上测不出来);CAL 丢了不报错只让 Current/Power 恒读 0,所以 有 ina226_check()。 Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01QYuExfgyYa6DzRRcUso8M8
这个提交包含在:
@@ -403,6 +403,13 @@ typedef struct {
|
||||
> ⚠️ **`ina_addr = 0x40 + ch` 这行代码一定会被写出来,而且只有 CH3/CH4/CH5 是错的。**
|
||||
> 实际地址是 `0x40 / 0x41 / 0x44 / 0x45 / 0x42`。查表,不要算。
|
||||
|
||||
> **A3 已落地**:表在 `firmware/components/drv/include/ina226.h`,取值只走
|
||||
> `ina226_rail_addr(rail)`(rail 是 1~5,越界 abort),
|
||||
> `test_channel_index_is_not_the_address_low_bits` 专门拦「改回算式」这一手。
|
||||
> 同处还记了两条 INA226 的实现约定:**寄存器指针不自增**(每次读前重写指针,
|
||||
> sim 会自增、真件不会,靠自增在宿主机上测不出来);**Calibration 丢了不报错、
|
||||
> 只让 Current/Power 恒读 0**,所以巡检要定期 `ina226_check()`。
|
||||
|
||||
同理,**PCA9555 的方向寄存器只能配成全输入**:备用脚 Port0[7] / Port1[7:5] 在硬件上
|
||||
直接接地,配成输出并写 1 就是对地短路(设计文档 §17.2 已在图纸上注明)。
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户