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 位地址设备仍然非常罕见,因此上面列出的限制可能会持续很长时间,甚至如果没人需要修复它们,可能会永远存在。