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