0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

I2C總線學(xué)習(xí)筆記

CHANBAEK ? 來(lái)源:電老鼠的變身記錄 ? 作者:小P ? 2023-10-25 14:35 ? 次閱讀

I2C在小P以前接觸的設(shè)計(jì)中大多只用到400k的速率,EVB的設(shè)計(jì)中更經(jīng)常發(fā)現(xiàn)實(shí)現(xiàn)不了就降速到100k。現(xiàn)在突然再看看I2C,發(fā)現(xiàn)原來(lái)還有更高的速率規(guī)范,最高都已經(jīng)到5M了。

于是乎,小P又要把這兒挖一挖看一看,反正I2C以后也經(jīng)常會(huì)用到,不也得懂個(gè)所以然。

一、整體介紹

I2C最早是由Philips公司,現(xiàn)NXP公司開(kāi)發(fā)的一種雙向兩線總線協(xié)議。其由于僅需要兩個(gè)引腳即可實(shí)現(xiàn)雙向多設(shè)備具有巨大的優(yōu)勢(shì)。截止至小P寫(xiě)這篇推文時(shí)候,規(guī)范的最新版本已經(jīng)是《UM10204 v7》了。

在不同的應(yīng)用架構(gòu)中,I2C可用于SMBus(System Management Bus)、PMBus(Power Management Bus)、IPMI(Intelligent Platform Management Interface)、DDC(Display Data Channel)和ATCA(Advanced Telecom Computing Architecture)。I2C往后的進(jìn)一步演進(jìn)MIPI I3C總線是可以向下兼容I2C(I3C全名叫Improved Inter-Integrated Circuit,強(qiáng)譯那就是改良型I2C),I3C可以提供更高的速率和更低的功耗。MIPI I3C總線在后續(xù)如果有涉及到的時(shí)候,再展開(kāi)進(jìn)一步學(xué)習(xí)了。

下圖是個(gè)典型的I2C總線應(yīng)用場(chǎng)景。

圖片

I2C總線有且僅有兩個(gè)網(wǎng)絡(luò)走線,串行數(shù)據(jù)線SDA和串行時(shí)鐘線SCL。所有的I2C設(shè)備均是通過(guò)這兩根走線進(jìn)行互連通信,每個(gè)設(shè)備均以唯一的地址被識(shí)別。大多數(shù)I2C設(shè)備可以既作為發(fā)送端也可作為接收端,個(gè)別I2C設(shè)備如LCD驅(qū)動(dòng)器等不需要發(fā)送數(shù)據(jù)的設(shè)備,可以只用作接收端。

由于I2C總線需要“線與”邏輯用于判斷總線占用情況,因此SDA和SCL的接口必須使用外接上拉的OD驅(qū)動(dòng)設(shè)計(jì)。

圖片

在只有單個(gè)I2C controller的應(yīng)用場(chǎng)景中,如果SCL時(shí)鐘線上沒(méi)有會(huì)Stretch Clock的設(shè)備,那么controller的SCL輸出可以使用推挽(Push-pull)電路。

PS.在V7的規(guī)范里,I2C原來(lái)master/slave的描述更新為controller/target,和MIPI I3C規(guī)范保持一致。

二、總線速率

I2C總線按速率分為以下的模式:

模式速率方向
Standard-mode(Sm)100kbit/s雙向
Fast-mode(Fm)400kbit/s雙向
Fast-mode Plus(Fm+)1Mbit/s雙向
High-speed mode(Hs-mode)3.4Mbit/s雙向
Ultra Fast-mode(UFm)5Mbit/s單向

可以發(fā)現(xiàn),3.4Mbps以下的速率,I2C總線的傳輸都是雙向的,但是在UFm模式下變成單向傳輸。這種情況可以應(yīng)用在控制器發(fā)送數(shù)據(jù)給LCD屏幕驅(qū)動(dòng),不需要回傳數(shù)據(jù)的場(chǎng)景。

除了UFm模式以外,其他的模式均是和更低速率模式兼容的。

1、Fast-mode/ Standard-mode

(1)SDA和SCL的時(shí)序是適配的;

(2)SDA和SCL的INPUT為了消除毛刺,集成了施密特觸發(fā)器(Schmitt trigger);

(3)SDA和SCL的OUTPUT包含下降沿的斜率控制。(其實(shí)就是OD門(mén)只可通過(guò)配置調(diào)整下管的驅(qū)動(dòng)能力)

2、Fast-mode Plus

(1)總線拓?fù)渑cF/S-mode保持一致,速率向下兼容;

(2)Fm+設(shè)備可提供比F/S-mode更大的驅(qū)動(dòng)電流,從而實(shí)現(xiàn)更長(zhǎng)/更重負(fù)載的鏈路。

(3)當(dāng)總線上僅有Fm+設(shè)備時(shí),更強(qiáng)的驅(qū)動(dòng)能力和更大的上升/下降容忍度,使得可以通過(guò)降速實(shí)現(xiàn)更重負(fù)載電容鏈路應(yīng)用。最小的LOW和HIGH電平時(shí)間需要滿足Fm+要求,上升時(shí)間不超過(guò)1us和下降時(shí)間不超過(guò)300ns。通過(guò)權(quán)衡總線速度和負(fù)載電容,可以提升最大負(fù)載電容的承受能力約10倍。

3、High-speed mode

(1)總線拓?fù)渑cF/S-mode、Fm+保持一致,速率向下兼容;

(2)為了實(shí)現(xiàn)3.4MBbps的通信速率,SCLH的OUTPUT使用了OD下拉+電流源上拉的組合電路,SDAH與其他保持一致;僅在Hs-mode模式下,僅有一個(gè)controller的電流源上拉會(huì)被使用;

(3)在Hs-mode的多控制器系統(tǒng)中,仲裁和時(shí)鐘同步不會(huì)使用,這能加速位處理的能力;

(4)Hs-mode controller發(fā)出的SCL波形高低電平時(shí)間比是1:2,進(jìn)而減輕了建立/保持的要求;

(5)Hs-mode controller可以在內(nèi)部集成一個(gè)bridge。在Hs-mode傳輸時(shí)將F/S-mode設(shè)備的SDA、SCL和Hs-mode設(shè)備的SDAH(high-speed serial data)、SCLH(high-speed serial clock)斷開(kāi)。通過(guò)這種方式可以減小SDAH和SCLH總線上的負(fù)載電容,從而提高上升時(shí)間和下降時(shí)間;這個(gè)在下面的圖示可以非常直觀清晰的看到;

(6)SDAH和SCLH的INPUT集成了施密特觸發(fā)器;

(7)SDAH和SCLH的OUTPUT包含下降沿的斜率控制。

圖片

當(dāng)總線電容>100pF時(shí),Rp可以被替換為外部電流源上拉,從而提高上升時(shí)間滿足要求。

Rs電阻作為可選項(xiàng),用于保護(hù)IO接口不被過(guò)高毛刺打壞,并且可以優(yōu)化過(guò)沖震蕩。

4、Ultra Fast-mode

針對(duì)UFm,不過(guò)多展開(kāi)學(xué)習(xí)了。需要注意的是,UFm模式下的I2C,USDA和USCL均是采用的Push-pull輸出,最高可達(dá)到5Mbps。

圖片

三、BIT/BYTE

接下來(lái)我們著重看下I2C的一些細(xì)節(jié)點(diǎn),

首先就是I2C信號(hào)的采樣方式。I2C的數(shù)據(jù)有效性要求SDA數(shù)據(jù)線在SCL時(shí)鐘線高電平必須是穩(wěn)定的(也就是在SCL高電平采樣,不是邊沿采樣),SDA數(shù)據(jù)線的電平翻轉(zhuǎn)僅允許在SCL時(shí)鐘線低電平時(shí),如下圖。

圖片

然后就是I2C總線的數(shù)據(jù)傳輸?shù)拈_(kāi)始和結(jié)束特征,這個(gè)很簡(jiǎn)單。就是在SCL時(shí)鐘線高電平時(shí),SDA數(shù)據(jù)線下降表示開(kāi)始,SDA數(shù)據(jù)線上升表示結(jié)束,如下圖。S condition和P condition僅由控制器(也就是原master)發(fā)出,當(dāng)S condition發(fā)出后,總線則被占用。在P condition發(fā)出一定時(shí)間間隔后,總線會(huì)被認(rèn)為釋放。

圖片

再接著是I2C的byte格式,這里有很有趣的幾個(gè)點(diǎn),這個(gè)就是OD門(mén)“線與”邏輯的有趣應(yīng)用了。詳細(xì)的圖示可以看底下的圖:

1、SDA數(shù)據(jù)線上的byte必須是8位長(zhǎng),并且開(kāi)頭一定是一個(gè)MSB(Most Significant Bit,這可不是你們以為嗶嗶)。當(dāng)transmitter發(fā)送完一個(gè)8位的byte后,會(huì)將SDA數(shù)據(jù)線釋放到高電平。然后receiver完整接收到這個(gè)8位byte后,將會(huì)在下一個(gè)(第9個(gè))時(shí)鐘周期高電平來(lái)之前,將SDA數(shù)據(jù)線拉低到低電平(ACK信號(hào))。通過(guò)這個(gè)方式告訴transmitter我接收到數(shù)據(jù)了。如果沒(méi)有成功接收到數(shù)據(jù),或是數(shù)據(jù)不識(shí)別,那么在第9個(gè)時(shí)鐘周期高電平時(shí),receiver需要釋放SDA數(shù)據(jù)線為高電平(NACK)。Controller若接收到NACK,則可以發(fā)出STOP condition結(jié)束數(shù)據(jù)傳輸或repeated START condition進(jìn)行新的數(shù)據(jù)傳輸。

2、當(dāng)target設(shè)備正在忙,沒(méi)空接收數(shù)據(jù)時(shí),target可以將SCL時(shí)鐘線拉低,也就是我們說(shuō)的hold住SCL。這種情況下,controller會(huì)進(jìn)入等待模式。當(dāng)target忙完了,就可以釋放SCL時(shí)鐘線,然后才會(huì)進(jìn)行下一個(gè)byte的數(shù)據(jù)發(fā)送和接收。

圖片

I2C的數(shù)據(jù)傳輸是基于地址的,所以完整的一個(gè)I2C數(shù)據(jù)傳輸是包含7個(gè)地址位,1個(gè)讀寫(xiě)位,再接著數(shù)據(jù)位和ACK位,如下圖。在S(START condition)后面緊接著的就是7位Addr和1位RW。

圖片

值得注意的是,由于Hs-mode下的SCLH的高低電平周期是1:2,所以Hs-mode的傳輸和F/S- mode有些許差異,下圖可以體現(xiàn)。

圖片

其實(shí)在學(xué)習(xí)I2C的時(shí)候,會(huì)有一個(gè)很容易迷惑的點(diǎn),就是controller和target的關(guān)系,還有就是transmitter和receiver的關(guān)系。規(guī)范中對(duì)于這些的定義是如下

圖片

如果還是梳理不清楚,那么接下來(lái)的這段講解,應(yīng)該可以進(jìn)一步幫助理解

1、Controller-transmitter發(fā)送數(shù)據(jù)給targer-receiver。數(shù)據(jù)傳輸?shù)姆较虿恍枰兓?,target-receiver在接收到每個(gè)byte時(shí)需要反饋ACK。

圖片

2、Controller讀取target的數(shù)據(jù),先由controller-tranmitter發(fā)送地址和讀位,當(dāng)target-receiver反饋ACK后,隨即調(diào)整方向。controller-tranmitter變?yōu)閏ontroller-receiver,target-receiver變?yōu)閠arget-tranmitter。第一個(gè)ACK信號(hào)由target在接收到地址后產(chǎn)生,后續(xù)的ACK均由controller產(chǎn)生。STOP condition(P)是在controller發(fā)出一個(gè)not-acknowledge(NACK)后,由controller發(fā)出STOP condition(P)。

圖片

3、還有一種混合格式(Combined format),在一次傳輸過(guò)程中,地址沒(méi)有變化,僅是傳輸方向有變化。那么只需要重發(fā)一次repeated START condition(Sr)和同樣的target地址,但是讀寫(xiě)位翻轉(zhuǎn)。在controller-receiver發(fā)送repeated START condition前,會(huì)發(fā)送NACK。

圖片

為了支持更多的設(shè)備可以同時(shí)掛在I2C總線上,7-bit地址擴(kuò)展到了10-bit地址。7-bit/10-bit設(shè)備可以同時(shí)掛在一個(gè)I2C總線上。他們的區(qū)別就是,10-bit地址需要占用兩個(gè)byte才能完成地址的傳輸。

第一個(gè)byte規(guī)定為1111 0XXR/W

第二個(gè)byte則定為XXXX XXXX

這10個(gè)X組成了10-bit地址,R/W決定了讀寫(xiě)方向。

寫(xiě)方向與7-bit地址的模式類似,在完成兩個(gè)地址byte發(fā)送后,發(fā)送8位數(shù)據(jù)。

圖片

讀方向則和7-bit地址的Combined format有點(diǎn)類似,在完成兩個(gè)地址byte發(fā)送后,通過(guò)repeated START condition(Sr),再發(fā)送一次一個(gè)byte地址后(讀寫(xiě)位需要配置為1 Read),開(kāi)始反向讀取數(shù)據(jù)。這個(gè)時(shí)候不需要發(fā)第二個(gè)byte的地址,因?yàn)槠ヅ涞膖arget設(shè)備會(huì)記憶其被定位。若讀寫(xiě)位配置為0 Write,則需要繼續(xù)發(fā)送第二個(gè)byte的地址去進(jìn)行配對(duì)。

圖片

Hs-mode和F/S-mode的傳輸格式也有少許區(qū)別

圖片

四、電氣約束和時(shí)序約束(瘋狂的貼圖時(shí)間)

1、S-/F-/Fm+設(shè)備約束

設(shè)備需要滿足其最高速率,但是通過(guò)時(shí)鐘同步,stretch SCL的低電平的方式,可以實(shí)現(xiàn)降速。

圖片

圖片

圖片

圖片

2、Hs-mode設(shè)備約束

一般意義上的START condition(S)在HS-mode中不存在,而是以repeated START condition(Sr)開(kāi)頭。地址位、讀寫(xiě)位、ACK位及數(shù)據(jù)位的時(shí)序都是一樣的,但是第一個(gè)SCLH的上升時(shí)間很特殊地放寬了。由于ACK后的第一個(gè)SCLH,上升沿是靠外部上拉電阻提供的驅(qū)動(dòng)能力(第一個(gè)SCLH的時(shí)候,內(nèi)部上拉電流源未開(kāi)通工作)。

通過(guò)內(nèi)部依次產(chǎn)生的100ns高電平和200ns低電平,Hs-mode controller滿足外部3.4MHz的時(shí)序要求(包含上升/下降時(shí)間)。因此,Hs-mode controller可以采用10MHz基頻或倍頻來(lái)產(chǎn)生SCLH信號(hào)。

對(duì)于Hs-mode來(lái)說(shuō),時(shí)序要求也與總線上負(fù)載電容相關(guān)。當(dāng)總線負(fù)載電容小于100pF時(shí),總線可能可以運(yùn)行在最高3.4Mbps速率下。當(dāng)負(fù)載電容持續(xù)增大時(shí),比特率會(huì)開(kāi)始逐步降低。當(dāng)總線負(fù)載電容等于400pF時(shí),則能達(dá)到的最高速率應(yīng)該是1.7Mbps??偩€負(fù)載電容在100-400pF之間的,則時(shí)序參數(shù)需要線性的插值。

SDAH和SCLH的上升/下降時(shí)間與其在傳輸線上的最大傳播時(shí)間一致,以防止末端開(kāi)路反射。

圖片

圖片

圖片

圖片

I2C的鏈路時(shí)序計(jì)算一般風(fēng)險(xiǎn)較低。按照3.4MHz計(jì)算,一個(gè)周期大概是300ns。假定PCB的板材是FR4,DK 4.5,這樣換算下來(lái)那么1ns大概是5.57inch走線的時(shí)延。且SDA的電平翻轉(zhuǎn)動(dòng)作是在SCLH低電平期間,也就是200ns這段,可以等效約1000多inch,已經(jīng)遠(yuǎn)遠(yuǎn)超出可能的應(yīng)用場(chǎng)景了。

這般梳理下來(lái),小P覺(jué)得I2C的基本應(yīng)用,配合做SI分析已經(jīng)是足夠了。如果說(shuō)后面遇到需要進(jìn)一步學(xué)習(xí)的時(shí)候,再補(bǔ)充了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8967

    瀏覽量

    153337
  • I2C總線
    +關(guān)注

    關(guān)注

    8

    文章

    408

    瀏覽量

    61979
  • 總線協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    128

    瀏覽量

    15192
  • SDA
    SDA
    +關(guān)注

    關(guān)注

    0

    文章

    125

    瀏覽量

    28733
  • SCL
    SCL
    +關(guān)注

    關(guān)注

    1

    文章

    243

    瀏覽量

    17489
收藏 0人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32學(xué)習(xí)筆記_I2C詳解(可下載)

    I2C 是一種簡(jiǎn)單的雙向二線制同步串行總線。它只需要兩根線即可在連接于總線 上的器件之間傳送信息I2C 總線能夠支持多個(gè)設(shè)備間的通訊。它包含
    發(fā)表于 03-14 17:33 ?3次下載

    I2C總線復(fù)用

    帝晶智慧屏I2C總線復(fù)用
    的頭像 發(fā)表于 03-11 17:20 ?1337次閱讀

    I2C總線通信原理 如何設(shè)計(jì)I2C總線電路

    I2C總線通信原理 I2C(Inter-Integrated Circuit)總線是一種用于集成電路之間進(jìn)行通信的串行通信協(xié)議。它最早由飛利浦公司(現(xiàn)被恩智浦電子收購(gòu))于1982年推出
    的頭像 發(fā)表于 01-31 15:01 ?973次閱讀

    I2C總線的優(yōu)缺點(diǎn)分析

    I2C總線作為一種廣泛使用的串行通信協(xié)議,以其簡(jiǎn)單性和高效性在嵌入式系統(tǒng)中占據(jù)著重要地位。 I2C總線的優(yōu)點(diǎn) 1. 簡(jiǎn)單性和低成本 I2C
    的頭像 發(fā)表于 01-17 15:50 ?1028次閱讀

    I2C總線與Arduino的接口示例

    在現(xiàn)代電子設(shè)計(jì)中,I2C總線因其簡(jiǎn)單性和靈活性而廣受歡迎。它允許多個(gè)設(shè)備共享同一通信線路,從而節(jié)省空間和成本。Arduino,作為一個(gè)多功能的微控制器平臺(tái),自然也支持I2C通信。 I2C
    的頭像 發(fā)表于 01-17 15:34 ?1447次閱讀

    I2C總線的工作模式介紹

    在現(xiàn)代電子系統(tǒng)中,I2C總線作為一種多主機(jī)、多從機(jī)的串行通信協(xié)議,扮演著至關(guān)重要的角色。它允許多個(gè)設(shè)備共享同一總線,進(jìn)行數(shù)據(jù)傳輸,從而簡(jiǎn)化了系統(tǒng)設(shè)計(jì)并降低了成本。 I2C
    的頭像 發(fā)表于 01-17 15:32 ?867次閱讀

    I2C總線協(xié)議詳細(xì)解析

    1. I2C總線簡(jiǎn)介 I2C總線由Philips Semiconductor(現(xiàn)為NXP Semiconductors)在1980年代初期開(kāi)發(fā)。它是一種多主機(jī)
    的頭像 發(fā)表于 01-17 15:22 ?819次閱讀

    I2C總線故障排除技巧

    I2C總線是一種廣泛使用的串行通信協(xié)議,它允許多個(gè)設(shè)備在兩條線上(數(shù)據(jù)線SDA和時(shí)鐘線SCL)進(jìn)行通信。由于其簡(jiǎn)單性和靈活性,I2C總線在嵌入式系統(tǒng)中非常流行。然而,當(dāng)
    的頭像 發(fā)表于 01-17 15:20 ?2034次閱讀

    I2C總線與單片機(jī)的連接

    在現(xiàn)代電子系統(tǒng)中,單片機(jī)(MCU)是核心控制單元,而I2C總線作為一種多主機(jī)、多從機(jī)的串行通信協(xié)議,因其簡(jiǎn)單、高效和節(jié)省引腳的特性而被廣泛應(yīng)用于各種電子設(shè)備中。 I2C總線概述
    的頭像 發(fā)表于 01-17 15:18 ?1079次閱讀

    I2C總線應(yīng)用實(shí)例分析

    在現(xiàn)代電子系統(tǒng)中,I2C總線因其簡(jiǎn)單、靈活和高效的特點(diǎn)而被廣泛應(yīng)用于各種設(shè)備之間的通信。 I2C總線概述 I2C
    的頭像 發(fā)表于 01-17 15:09 ?672次閱讀

    I2C總線與SPI總線的比較

    在現(xiàn)代電子系統(tǒng)中,微控制器與各種外設(shè)之間的通信是必不可少的。I2C和SPI是兩種流行的串行通信協(xié)議,它們各自具有獨(dú)特的特點(diǎn)和應(yīng)用場(chǎng)景。 I2C總線 I2C是一種多主機(jī)、多從機(jī)的同步通信
    的頭像 發(fā)表于 01-17 15:08 ?835次閱讀

    I2C總線上拉電阻阻值如何確定?

    導(dǎo)讀I2C總線在產(chǎn)品設(shè)計(jì)中被廣泛應(yīng)用,盡管其結(jié)構(gòu)簡(jiǎn)單,但經(jīng)常發(fā)生上拉電阻設(shè)計(jì)不合理的問(wèn)題。本文將對(duì)I2C上拉電阻的選擇進(jìn)行簡(jiǎn)要分析。一根信號(hào)線上,通過(guò)電阻連接一個(gè)固定的高電平VCC,信號(hào)線初始、空閑
    的頭像 發(fā)表于 12-27 11:34 ?1720次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>上拉電阻阻值如何確定?

    了解I2C總線

    電子發(fā)燒友網(wǎng)站提供《了解I2C總線.pdf》資料免費(fèi)下載
    發(fā)表于 10-08 11:13 ?2次下載
    了解<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品