<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 模擬I2C總線(xiàn)多主通信的通用軟件包

模擬I2C總線(xiàn)多主通信的通用軟件包

作者: 時(shí)間:2004-12-07 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:本文給出軟件應用在多主機系統中的解決方案。分析多主競爭出現原因及其時(shí)段,結合時(shí)序圖和流程圖闡述競爭仲裁的原理及實(shí)現方案,并提供,用戶(hù)可將其應用在實(shí)際的系統中。

關(guān)鍵詞: 多主機系統

引言

是由Philips公司推出的芯片間串行傳輸。它以規范嚴謹、使用簡(jiǎn)單靈活、支持的外圍器件繁多等特點(diǎn)而被廣泛應用。對于不具備I2C接口的主器件(通常指MCU),可利用普通的I/O口來(lái)I2C總線(xiàn),但由于無(wú)法解決多主競爭問(wèn)題而只能應用在單主機系統中。本文提供了一種解決方案,可將模擬I2C總線(xiàn)應用在多主機系統中,實(shí)現模擬I2C的多主。

1 模擬I2C多主的設計原理

在I2C總線(xiàn)系統中,可以有多個(gè)主器件節點(diǎn)。當多個(gè)主器件節點(diǎn)都企圖控制總線(xiàn)時(shí),就會(huì )出現多主競爭。這時(shí)就需要進(jìn)行仲裁,裁決的結果只允許其中一個(gè)主器件節點(diǎn)成為主控器。而硬件I2C系統之所以支持多主系統,是因為其具有的三個(gè)特性:①接口的線(xiàn)“與”邏輯功能;②內部沖突檢測電路;③I2C中斷和狀態(tài)處理程序。這使其能夠自動(dòng)完成多主競爭時(shí)的時(shí)鐘同步與總線(xiàn)仲裁,無(wú)須用戶(hù)介入。而在模擬I2C系統中,如果能通過(guò)軟硬件設計模擬出上述的三個(gè)特性,就等于解決了競爭仲裁與同步問(wèn)題,那么模擬I2C總線(xiàn)就完全可以應用于多主機系統中。

首先,經(jīng)過(guò)理論分析與實(shí)驗驗證,得知并聯(lián)在一起的MCU的普通I/O口線(xiàn)本身就具有線(xiàn)“與”特性。其次,為了避免主節點(diǎn)在總線(xiàn)繁忙時(shí)啟動(dòng)總線(xiàn)而引起的沖突,需要增加一條握手線(xiàn),即BUSY線(xiàn)來(lái)代表總線(xiàn)的忙/閑狀態(tài)。因為數據線(xiàn)(SDA)和時(shí)鐘線(xiàn)(SCL)上的信號是變化的,所以不能用它們充當BUSY線(xiàn)。另外,當多個(gè)MCU都檢測到總線(xiàn)空閑,同時(shí)企圖控制總線(xiàn)時(shí),將形成多主競爭狀態(tài),同樣會(huì )引起沖突。這時(shí)就需要引入時(shí)間片,用劃分的時(shí)間片來(lái)決定競爭時(shí)各MCU占用I2C總線(xiàn)的優(yōu)先次序。結合SDA的線(xiàn)“與”特性,檢測SDA上是否已經(jīng)存在啟動(dòng)信號(即SDA是否為0),如果直到相應的時(shí)間片結束都沒(méi)有檢測到SDA上的啟動(dòng)信號,自己就可以控制總線(xiàn)。最后,由于模擬系統中沒(méi)有硬件I2C中斷,MCU作為從器件時(shí)不知何時(shí)開(kāi)始接收總線(xiàn)上的數據,所以,需要提供一根I2C中斷信號線(xiàn),使MCU在中斷程序中處于從接收狀態(tài),中斷線(xiàn)可以與BUSY線(xiàn)合用。

通過(guò)上述分析,利用三根信號線(xiàn)就能模擬出硬件I2C的競爭仲裁過(guò)程,實(shí)現模擬I2C的多主。

2 系統連接示意圖

三線(xiàn)模擬I2C總線(xiàn)系統的連接框圖如圖1所示。

模擬I2C多主系統中,要參與競爭的主器件節點(diǎn)采用三級連接方式,如MCU(A)、MCU(B)、MCU(C);對于外圍器件節點(diǎn)如24C64等,因不具備主動(dòng)控制I2C總線(xiàn)的能力,不會(huì )參與總線(xiàn)的競爭,所以仍可采用的兩線(xiàn)連接方式。三線(xiàn)模擬I2C總線(xiàn)中的時(shí)鐘線(xiàn)SCL和數據線(xiàn)SDA可由MCU的任意兩個(gè)I/O口線(xiàn)模擬;BUSY線(xiàn)因還要充當中斷信號線(xiàn),則必須與MCU的外部中斷引腳INT0或INT1連接。

3 時(shí)序分析及流程設計

在檢測到BUSY=0(忙)時(shí),不會(huì )出現競爭;但當檢測到BUSY=1(閑)到將BUSY設為0,需要的典型時(shí)間為3個(gè)機器周期。在這段時(shí)間內,別的MCU仍會(huì )檢測到BUSY=1,也認為總線(xiàn)空閑到企圖占用,這時(shí)就出現了競爭與沖突。競爭的時(shí)間范圍為23個(gè)機器周期。仲裁的方法是為每一個(gè)MCU分配一個(gè)仲裁時(shí)間片,在規定的時(shí)間片內MCU反復檢測總線(xiàn)中的數據線(xiàn)SDA是否有信號,直到時(shí)間片結束。如果沒(méi)有信號就可馬上占用I2C總線(xiàn),發(fā)送起始信號;如果有信號則表示有別的高優(yōu)先級的MCU要占用,該MCU退出競爭。仲裁時(shí)序圖如圖2所示。

將BUSY設為0后的一段時(shí)間規定為仲裁時(shí)間。仲裁時(shí)間長(cháng)度為(N-1)Δt。N為I2C總線(xiàn)上參與競爭的MCU個(gè)數;Δt為一個(gè)時(shí)間片的長(cháng)度,典型值為4個(gè)機器周期。按優(yōu)先級順序給MCU分配不同個(gè)數的時(shí)間片。仲裁時(shí)序如圖2所示:假設MCU(A)優(yōu)先級最高,它不必進(jìn)行時(shí)間片測試,在檢測到總線(xiàn)空閑時(shí)直接發(fā)送起始位;MCU(B)優(yōu)先級為次高,在檢測到總線(xiàn)空閑后,它需要等待檢測一個(gè)時(shí)間片周期Δt,在Δt期間內SDA線(xiàn)上沒(méi)有變化,即等待確認比它高優(yōu)先級的MCU(A)不使用總線(xiàn)后,MCU(B)才能占用總線(xiàn),發(fā)送起始信號;MCU(C)優(yōu)先級最低,它需要測試等待周期2Δt,只有當MCU(A)、MCU(B)都不占用總線(xiàn)時(shí)(SDA一直保持為1),MCU(C)才能占用總線(xiàn)發(fā)送起始信號。

在實(shí)際應用中,還要注意BUSY線(xiàn)所用的中斷腳INT0/INT1需初始化為開(kāi)中斷,并設定為下跳沿觸發(fā)。當各MCU需控制總線(xiàn)進(jìn)行主發(fā)送或主接收時(shí),需先關(guān)掉INT0/INT1需初始化為開(kāi)中斷,并設定為下跳沿觸發(fā)。當各MCU要控制總線(xiàn)進(jìn)行主發(fā)送或主接收時(shí),需先關(guān)掉INT0/INT1中斷,再檢測BUSY線(xiàn)是否為空閑(=1)。若是空閑就將BUSY設為0,進(jìn)行競爭仲裁,流程圖如圖3所示。如果在仲裁時(shí)間片內SDA始終為1,說(shuō)明沒(méi)有高優(yōu)先級的MCU要占據總線(xiàn),自己可以發(fā)動(dòng)起始信號控制總線(xiàn),直到通信結束后,再釋放BUSY線(xiàn)將其置為1。此時(shí)其它的MCU就只能作為從器件。如果在仲裁時(shí)間片內檢測到SDA=0,則表明I2C總線(xiàn)已被占用,立刻將自己的BUSY設為1,并打開(kāi)中斷轉為從接收,其流程圖如圖4所示。在中斷程序中接收尋址字節,以判明是否呼叫自己。若是,就進(jìn)行相應的讀寫(xiě)操作;若不是,就放棄退出中斷程序。注意:為了使總線(xiàn)上的MCU都能檢測到I2C上的起始信號,并使從器件能夠同步接收,SDA=0的時(shí)間要維持一定的寬度,至少應大于9個(gè)機器周期。

結語(yǔ)

經(jīng)實(shí)驗證明:三線(xiàn)模擬I2C總線(xiàn)解決了多主競爭問(wèn)題,可方便的應用于多主機系統中,提高了系統的靈活性,也進(jìn)一步擴大了軟件模擬I2C的應用范圍,在實(shí)際應用中具有一定的使用價(jià)值。通用及測試程序請看網(wǎng)站(http://www.dpj.com.cn)網(wǎng)絡(luò )補充版。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>