I2C总线的地址位分为 7位和 10位两种,实际上能够挂载的器件数量受总线最大电容400pF的限制。为什么地址位会有 7位呢?7位地址+1位读写标识+1位应答构成 9位帧和普通数据帧 9位所兼容。至于 10位地址,则可表达 1024位地址,按 400pF的总线电容限制,每个器件能引入的电容仅 0.4pF,已是极限。所以 10位地址足够。而 7位地址已经可表示128个器件,能满足绝大多数需求。
1) 7位地址模式:如图 3-41所示,起始位后的首帧为 7位地址+1位读写位标识位+1位应答位,后续帧均为数据帧,直到停止位出现(或者是重复起始 repeat start)。
2) 10位地址模式:如图 3-42所示,起始位后的首帧中前 5位固定为 11110(非表示地址),后面仅跟 2位地址,然后是读写标识和应答。第二帧的 8位数据作为地址的后 8位。
3) 这种方式可以做到 7位地址与 10位地址兼容, 10位地址不过是把第 2帧的数据继续当后续地址罢了。
处理器作为从机好说,看上哪个地址用哪个,只要地址不冲突,吱一声的事。外设从机的地址如何设定?
有的 I2C协议的芯片由于引脚匮乏,其 I2C从机地址被固化在了芯片内部,同一型号芯片有若干种 I2C从机地址的子型号出售,以芯片后缀来区分,这类芯片在购买时一定要看清子型号,买了再退货就难了。
有的 I2C协议的芯片则是在外部有数目不等的专用地址引脚,可以依靠对地址引脚上拉、下拉、高阻来设定地址。