I2C 十位地址

I2C 协议支持两种设备地址:常规的 7 位地址和扩展的 10 位地址。这两组地址不相交:7 位地址 0x10 与 10 位地址 0x10 不同(尽管单个设备可以同时响应两者)。为避免歧义,用户会看到 10 位地址映射到不同的地址空间,即 0xa000-0xa3ff。前缀 0xa(= 10)表示 10 位模式。这用于在 sysfs 中创建设备名称。通过 sysfs 中的 new_device 文件实例化 10 位设备时也需要它。

往返于 10 位地址设备的 I2C 消息具有不同的格式。详细信息请参阅 I2C 规范。

当前对 10 位地址的支持是最小化的。它应该能工作,但你可能会遇到一些问题。

  • 并非所有总线驱动程序都支持 10 位地址。有些不支持是因为硬件不支持(例如 SMBus 不要求支持 10 位地址),有些不支持是因为没人费心添加代码(或者代码存在但无法正常工作)。已知软件实现(i2c-algo-bit)是可用的。

  • 某些可选功能不支持 10 位地址。例如,驱动程序对设备的自动检测和实例化就是这种情况。

  • 许多用户空间软件包(例如 i2c-tools)缺少对 10 位地址的支持。

请注意,10 位地址设备仍然相当罕见,因此上述限制可能会长期存在,如果没人需要修复它们,甚至可能永远存在。