I2C裝置地址詳解
轉自:http://blog.csdn.net/zhijianjingling00/article/details/9294785
結論:
I2C裝置的寫地址 = I2C裝置地址 << 1
I2C裝置的讀地址 = (I2C裝置地址 << 1) + 1
例如:
#define MAX_17040_BATTERY_I2C_ADDR (0x36)
#define MAX_17040_BATTERY_WRITE_ADDR (MAX_17040_BATTERY_I2C_ADDR << 1)
#define MAX_17040_BATTERY_READ_ADDR ((MAX_17040_BATTERY_I2C_ADDR << 1) + 1)
AT24C02有三根地址線來進一步確定I2C裝置的地址。說是進一步確定,是因為對於這類的I2C裝置來說
其地址的一部分已經是確定好了的。
例如:資料手冊上寫道:
Device Address
1K/2K 1 0 1 0 A2 A1 A0 R/W
也就是說對於改I2C裝置來說,地址的高8位已經確定了為1010,
而低四位則有A2 ----A0來確定 R/W來確定讀寫方向,讀還是寫。
例如,我們把A0 --A3全部拉低,則該裝置的地址為0xA0.
在ARM中,讀寫方向是用暫存器的單獨一位來確定的,有一個7位的域用來儲存裝置地址。
所以該I2C裝置在ARM I2C總線上的地址為
0xA0 右移一位 0x50.
如果A0--A2 有其他選擇的話,則可以根據上述原則求得裝置地址。
I2C裝置地址
協議格式中第一個位元組(為slave address)由7位地址和一位R/W讀寫位組成的,這位元組是個器件地址。
常用IIC介面通用器件的器件地址是由種類型號,及定址碼組成的,共7位。
如格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
1、器件型別:D7-D4 共4位決定的。這是由半導公司生產時就已固定此型別的了,也就是說這4位已是固定的。
2、使用者自定義地址碼:D3-D1共3位。這是由使用者自己設定的,通常的作法如EEPROM這些器件是由外部IC的3個引腳所組合電平決定的(用常用的名字如A0,A1,A2)。這也就是定址碼。所以為什麼同一IIC總線上同一型號的IC只能最多共掛8片
3、最低一位就是R/W位,,“0”表示寫,“1”表示讀(通常讀寫訊號中寫上面有一橫線,表示低電平)。所以I2C裝置通常有兩個地址,即讀地址和寫地址。
引用<<i2c 原始碼情景分析>>裡的話:“i2c 裝置的7 位地址是就當前i2c 匯流排而言的,是“相對地址”。不同的i2c 總線上的裝置可以使用相同的7 位地址,但是它們所在的i2c 匯流排不同。所以在系統中一個i2c 裝置的“絕對地址”由二元組(i2c 介面卡的ID 和裝置在該總線上的7 位地址)表示。”,所以這個函式的作用主要是排除同一i2c總線上出現多個地址相同的裝置。