IIC/I2C從地址之7位,8位和10位詳解
概述
經(jīng)常有用戶問我,使用USB2XXX的USB2IIC功能的時(shí)候,從機(jī)地址應(yīng)該怎么傳遞的問題,這個(gè)問題的根源在于不同的I2C從機(jī)廠商采用了不同的I2C總線地址約定,導(dǎo)致在說I2C總線的時(shí)候總是容易搞混,本文主要針對(duì)這個(gè)問題對(duì)I2C總線地址進(jìn)行詳細(xì)的說明。
7位尋址
在7位尋址過程中,從機(jī)地址在啟動(dòng)信號(hào)后的第一個(gè)字節(jié)開始傳輸,該字節(jié)的前7位為從機(jī)地址,第8位為讀寫位,其中0表示寫,1表示讀。
圖1:7位尋址。I2C總線規(guī)范規(guī)定,標(biāo)準(zhǔn)模式I2C,從機(jī)地址為7位長,其次是讀/寫位。
任何I2C設(shè)備都必須遵循這個(gè)標(biāo)準(zhǔn),USB2XXX傳輸?shù)膹臋C(jī)地址即為這7bit地址,不包含讀寫位,讀寫位會(huì)根據(jù)不同的函數(shù)自動(dòng)添加進(jìn)去。
保留地址
I2C規(guī)范保留了兩組和8個(gè)地址,1111XXX和0000XXX。這些地址用于特殊用途。下表已被取自 I2C規(guī)范(2000年)。
從機(jī)地址+R/W | 描述 |
0000 0000 | 呼叫地址 |
0000 0001 | 起始字節(jié) |
0000 001X | CBUS地址 |
0000 010X | 保留供不同的總線格式 |
0000 011X | 保留將來用 |
0000 1XXX | HS模式主機(jī)碼 |
1111 0XXX | 10位從機(jī)地址 |
1111 1XXX | 保留將來用 |
8位地址
一些廠商在提供從機(jī)地址的時(shí)候說的是包含了讀寫位的8bit地址,比如他說寫地址為0x92,讀地址為0x93,如下圖所示
圖2: 8位尋址
這種情況下,你只需要將這個(gè)地址的前7bit提取出來,然后傳入U(xiǎn)SB2XXX的接口函數(shù)即可,比如為0x49。
還有一種方式可以判斷廠商提供的地址是7bit模式地址還是8bit地址模式的地址,7bit地址模式下,地址的取值范圍在0x07到0x78之間,若超過了這個(gè)范圍,那么這個(gè)地址可能就是8bit地址。
圖3:有效的7bit地址范圍
10位尋址
I2C總線的10bit尋址和7bit尋址是兼容的,這樣就可以在同一個(gè)總線上同時(shí)使用7bit地址和10bit地址模式的設(shè)備,在進(jìn)行10bit地址傳輸時(shí),第一字節(jié)是一個(gè)特殊的保留地址來指示當(dāng)前傳輸?shù)氖?0bit地址。
圖4:10bit地址尋址
在使用USB2XXX傳輸10bit地址模式的時(shí)候,只需要在初始化的時(shí)候配置為10bit地址模式,然后再調(diào)用讀寫數(shù)據(jù)函數(shù)的時(shí)候傳入正確的10bit地址即可。