119、Sensor 驱动的 I2C 读写封装:Burst Read、连续写入与 Page 寄存器的处理

119、Sensor 驱动的 I2C 读写封装:Burst Read、连续写入与 Page 寄存器的处理 119、Sensor 驱动的 I2C 读写封装:Burst Read、连续写入与 Page 寄存器的处理从一次半夜的调试说起凌晨两点,实验室的空调嗡嗡作响,我盯着示波器上的I2C波形,心里骂了句脏话。Sensor输出图像有条纹,不是坏点,不是增益问题,是寄存器没写进去。更诡异的是,同样的代码在另一颗Sensor上跑得好好的,换了一颗型号就翻车。后来发现,问题出在I2C读写封装上——这颗Sensor的寄存器地址是16位的,但驱动里默认用了8位地址的读写函数,导致高8位地址被截断,寄存器写到了错误的位置。这种坑,我相信每个调过Sensor驱动的人都踩过。今天这篇笔记,就把I2C读写封装里那些容易翻车的地方掰开揉碎讲清楚,重点说三个东西:Burst Read(突发读)、连续写入(Sequential Write)和Page寄存器(分页寄存器)的处理。基础读写函数:别以为封装好了就万事大吉很多平台SDK会提供类似sensor_i2c_write(addr, data, len)的接口,看起来挺方便。但你要知道,这些接口的底层实现差异很大。有的平台用i2c_master_send,有的用i2c_transfer,还有的用smbus_write_block_data。不同接口对I2C协议的支持程度不一样。我见过最坑的一种情况:某个平台的I2C驱动,在写多字节