《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > I2C總線多主通信研究與軟件設計
I2C總線多主通信研究與軟件設計
摘要: 目前,一些介紹模擬I2C的資料主要講的是在單主節點系統中進行的通信,這使得模擬I2C總線的應用具有一定的局限性。本文根據總線仲裁的思想,提出一種多主節點通信的思想及實現流程。
Abstract:
Key words :

I2C總線(Inter IC BUS)是PHILIPS公司推出的雙向兩線串行通信標準。由于它具有接口少、通信效率高等優點,現已得到廣泛的應用\[1~3\]。它除了可以進行簡單的單主節點通信外,還可以應用在多主節點的通信系統中。在多主節點通信系統中,如果兩個或者更多的主節點同時啟動數據傳輸,總線具有沖突檢測和仲裁功能,保證通信正常進行并防止數據破壞。現在許多微控制器(MCU)都具有I2C總線接口,能方便地進行I2C總線設計。對于沒有I2C總線接口的MCU,可以采用兩條I/O接口線進行模擬\[2,3\]。目前,一些介紹模擬I2C的資料主要講的是在單主節點系統中進行的通信,這使得模擬I2C總線的應用具有一定的局限性。本文根據總線仲裁的思想,提出一種多主節點通信的思想及實現流程。


1 I2C總線系統簡介

I2C總線系統是由SCL(串行時鐘)和SDA(串行數據)兩根總線構成的。該總線有嚴格的時序要求,總線工作時,由串行時鐘線SCL傳送時鐘脈沖,由串行數據線SDA傳送數據??偩€協議規定,各主節點進行通信時都要有起始、結束、發送數據和應答信號。這些信號都是通信過程中的基本單元??偩€傳送的每1幀數據均是1個字節,每當發送完1個字節后,接收節點就相應給一應答信號。協議規定,在啟動總線后的第1個字節的高7位是對從節點的尋址地址,第8位為方向位(“0”表示主節點對從節點的寫操作;“1”表示主節點對從節點的讀操作),其余的字節為操作數據。圖1列出I2C總線上幾個基本信號的時序。

圖1中包括起始信號、停止信號、應答信號、非應答信號以及傳輸數據“0”和數據“1”的時序。起始信號就是在SCL線為高時SDA線從高變化到低;停止信號就是在SCL線為高時SDA線從低變化到高;應答信號是在SCL為高時SDA為低;非應答信號相反,是在SCL為高時SDA為高。傳輸數據“0”和數據“1”與發送應答位和非應答位時序圖是相同的。


圖1 I2C總線上基本信號的時序

圖2表示了一個完整的數據傳送過程。在I2C總線發送起始信號后,發送從機的7位尋址地址和1位表示這次操作性質的讀寫位,在有應答信號后開始傳送數據,直到發送停止信號。數據是以字節為單位的。發送節點每發送1個字節就要檢測SDA線上有沒有收到應答信號,有則繼續發送,否則將停止發送數據。


圖2 一次完整的數據傳送過程


2 I2C總線的仲裁

在多主的通信系統中??偩€上有多個節點,它們都有自己的尋址地址,可以作為從節點被別的節點訪問,同時它們都可以作為主節點向其他的節點發送控制字節和傳送數據。但是如果有兩個或兩個以上的節點都向總線上發送啟動信號并開始傳送數據,這樣就形成了沖突。要解決這種沖突,就要進行仲裁的判決,這就是I2C總線上的仲裁。

I2C總線上的仲裁分兩部分:SCL線的同步和SDA線的仲裁。SCL同步是由于總線具有線“與”的邏輯功能,即只要有一個節點發送低電平時,總線上就表現為低電平。當所有的節點都發送高電平時,總線才能表現為高電平。正是由于線“與”邏輯功能的原理,當多個節點同時發送時鐘信號時,在總線上表現的是統一的時鐘信號。這就是SCL的同步原理。

SDA線的仲裁也是建立在總線具有線“與”邏輯功能的原理上的。節點在發送1位數據后,比較總線上所呈現的數據與自己發送的是否一致。是,繼續發送;否則,退出競爭。圖3中給出了兩個節點在總線上的仲裁過程。SDA線的仲裁可以保證I2C總線系統在多個主節點同時企圖控制總線時通信正常進行并且數據不丟失。總線系統通過仲裁只允許一個主節點可以繼續占據總線[1]。

圖3是以兩個節點為例的仲裁過程。DATA1和DATA2分別是主節點向總線所發送的數據信號,SDA為總線上所呈現的數據信號,SCL是總線上所呈現的時鐘信號。當主節點1、2同時發送起始信號時,兩個主節點都發送了高電平信號。這時總線上呈現的信號為高電平,兩個主節點都檢測到總線上的信號與自己發送的信號相同,繼續發送數據。第2個時鐘周期,2個主節點都發送低電平信號,在總線上呈現的信號為低電平,仍繼續發送數據。在第3個時鐘周期,主節點1發送高電平信號,而主節點2發送低電平信號。根據總線的線“與”的邏輯功能,總線上的信號為低電平,這時主節點1檢測到總線上的數據和自己所發送的數據不一樣,就斷開數據的輸出級,轉為從機接收狀態。這樣主節點2就贏得了總線,而且數據沒有丟失,即總線的數據與主節點2所發送的數據一樣,而主節點1在轉為從節點后繼續接收數據,同樣也沒有丟掉SDA線上的數據。因此在仲裁過程中數據沒有丟失。

 


圖3 兩個主節點的仲裁過程


3 多主通信的原理及其實現流程

多主通信就是在總線上有多個節點。這些節點既可以作為主節點訪問其他的節點,也可以作為從節點被其他節點訪問。當有多個節點同時企圖占用總線時,就需要總線的仲裁。對于模擬I2C總線系統,怎樣實現總線的仲裁是現在研究模擬I2C總線系統的難點。文獻\[4\]提出在系統中增加1根BUSY線,在占用總線之前先檢測BUSY線,看總線是否被占用。若總線空閑,則設置BUSY線并向總線上傳送數據;否則,接收數據,直到總線空閑時才占有總線。這種實現多主通信的方法有兩個缺點:① 因為I2C最大的優點就是接口少、效率高,這樣做不僅增加了使用資源而且減少了I2C總線的優勢;② 當主節點數比較多時,等待時間比較長,效率不高。本設計根據總線的仲裁原理,提出一種基于延時比較的仲裁方法。當主節點想要占用總線時,先檢測總線上是否空閑,如果總線是空閑的就發送數據。在發送數據的同時,將總線上的數據接收并與發送的數據進行比較。如果不同,說明總線上同時還存在其他節點,于是就退出;否則,一直到發送完數據。這種方法既體現了I2C總線的高效性,同時還具有良好的擴展性。


圖4 多主通信流程

圖4給出了基于延時比較的多主通信流程,其中MCU作為從節點部分的流程在圖5中給出。在節點發送起始信號之前先要檢測一下總線上是否為空閑狀態(BUSY是否為0)。這里使用的檢測方法是,持續檢測一段時間看總線上的電平是否一直為高,若是說明總線上為閑狀態,否則說明有其他的節點正在使用總線,要等一段時間再發送。當總線空閑時,發送起始信號,接著發送要訪問的從節點的地址字節。每發送1位數據就接收比較1次,看發送和接收的是否一致,若是則繼續,否則跳出到從節點的接收狀態。如果沒有產生沖突,MCU作為主節點繼續發送數據,直到任務結束,然后發送停止信號并返回。如果數據不一樣,MCU將跳轉到從節點狀態。由于在跳轉到從節點接收狀態的過程中累加器(ACC)和工作寄存器(Ri)的數據沒有發生變化,所以數據沒有丟失,作為從節點可以繼續接收總線上的數據。這樣整個通信的過程沒有中斷,數據也沒有丟失。

 


圖5 從節點部分的流程

圖5給出了從節點的流程。進入從節點時,要將BUSY置為高,說明MCU現在正在工作,不能完成其他的任務。在MCU作為從節點完成接收任務后,要將BUSY置為低。MCU在接收到尋址字節后與自己的地址字節進行比較。如果是訪問自己的就進入到下面的接收程序,否則跳出。在訪問自己的時候,還要判斷主節點是讀取數據還是寫數據,以便進入相應的程序。在寫字節的子程序中,從節點每發送1個字節的數據后都要察看是否有應答信號(ACK),有則說明數據接收到了;否則要跳出等待,重新發送。在讀字節的子程序中,每接收1個字節的數據就要發送1個應答信號(ACK),以示接收正常,否則主節點將停止繼續發送。在現有的資料中,關于從節點的原理和源代碼比較少,這里給出作為從節點時寫字節子程序的源代碼。由于篇幅有限其他的子程序沒有列出。

 
4 部分源代碼

本節是在MCU多主通信中的部分源代碼。多主通信的實現中有幾個難點和重點。一是在作為主節點時的寫字節子程序,里面要包括發送的每位數據和總線的數據進行比較并做出判斷。如果數據不同,要跳出并進入從節點的狀態。由于子程序返回主程序時改變的只是PC的值而累加器(ACC)和工作寄存器(Ri)里面的值是不變的,因此MCU進入從機狀態后繼續接收總線剩下的數據,這樣總線的數據并沒有丟失。二是作為從節點時的寫字節的子程序。由于時鐘線是由主節點的MCU控制的,所以怎樣根據SCL線來讀取SDA線的數據是其中的一個難點。三是在具有子地址的從節點關于是寫字節還是讀字節時的判斷。如果是寫字節時主節點會給出新的起始信號,并再次發送從節點的地址數據。這時從節點需要做出判斷是讀取數據還是寫數據,并進入相應的子程序。這里給出以上三個重點和難點的子程序的源代碼,以供讀者參考。這些源代碼經實踐證明都是正確的。

主節點的寫字節子程序:

;其中的NOP可根據時鐘的快慢自己加減

WRBYTE:MOV R0,#08H

CLR BUSY;將BUSY值清零

WLP:  RLC A;取數據位

JC   WR1

SJMP WR0;判斷數據位

WLP1: DJNZ R0,WLP

NOP

OUT1: RET

WR1:  SETB SDA;發送1

NOP

SETB  SCL

MOV  C,SDA;判斷是否與發送的數據相同

JC   GOON

SETB  BUSY

AJMP  OUT1

GOON: NOP

NOP

NOP

CLR SCL

SJMP WLP1

WR0:  CLR SDA;發送0

NOP

SCL

NOP

NOP

NOP

NOP

NOP

CLR

SCL

SJMP  WLP1

從節點的寫字節子程序(返回為ACK):

SWRBYTE:MOV R0,#08H

WAGAIN: RRC A

MOV B,#37H

WWAIT1: JB SCL,WWAIT1;等待SCL為低

JC WR1;判斷是發送“1”還是發送“0”

SETB SDA;發送“1”

AJMP COM

WR1:  CLR SDA;發送“0”

COM:  DJNZ R0,WWAIT2;判斷是否發送完畢

WWAIT3: JNB SCL,WWAIT3;發送完畢等待應答信號

WWAIT4: JB SCL,WWAIT4

WWAIT5: JNB SCL,WWAIT5

CLR ACK

JB  SDA,ST0

SETB ACK

ST0:  RET;返回

WWAIT2: JNB SCL,WWAIT2;等待SCL為高

SJMP WAGAIN

從節點的讀字節同時判斷是否有起始信號的子程序。如果有起始信號,則轉為寫字節子程序:

SRDBYTE:MOV R0,#08H

SETB 20H;設置標志位判斷是讀還是寫

SETB SDA;釋放總線

RWAITJ: JNB SCL,RWAITJ;等待SCL為高

MOV C,SDA;從總線上讀取數據

RRC A;存入累計器

DEC R0

MOV C,ACC.7;判斷是否為起始信號

JNC RWAITJ1;為低繼續讀取數據

REWAIT: JNB SCL,RWAITJ1;開始判斷是否為起始信號

JB  SDA,REWAIT

CLR 20H;是,則清標志位并返回

AJMP SjRDOUT

RWAITJ1:JB SCL,RWAITJ1;等待SCL為低

RWAITJ3:JNB SCL,RWAITJ3;等待SCL為高

MOV C,SDA

RRC A

DJNZ R0,RWAITJ2

SjRDOUT:RET

RWAITJ2:JB SCL,RWAITJ2;等待SCL為低繼續讀數據

SJMP RWAITJ3


5 總結

根據總線協議中的仲裁原理,提出的基于延時比較的模擬I2C多主通信的方法,不僅能夠體現了I2C總線的高效性,而且還具有良好的擴展性。它使普通不具有I2C接口的MCU可以應用在多主通信的系統中,既增加了普通MCU的使用范圍,又突破了模擬I2C總線的應用局限性,為I2C總線的推廣起到了積極的作用。

 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品国产三级欧美二区| 亚洲欧美日韩电影| 亚洲福利视频一区| 校园春色综合网| 国产自产v一区二区三区c| 亚洲视频国产视频| 欧美日韩成人| 亚洲精品免费在线播放| 欧美高清视频一区二区三区在线观看| 国产精品呻吟| 国产一区二区丝袜高跟鞋图片| 国产精品久久国产愉拍| 国产一区二区| 亚洲一区中文| 欧美视频在线观看免费| 欧美精品一区二区三区蜜臀| 欧美一级在线视频| 久久精品99国产精品日本| 在线视频中文亚洲| 欧美日韩一区二区在线| 嫩草成人www欧美| 欧美午夜精品电影| 欧美日一区二区在线观看| 国产精品久久久久久久久免费| 亚洲国产精品女人久久久| 亚洲特黄一级片| 一区久久精品| 在线亚洲+欧美+日本专区| 亚洲欧美精品伊人久久| 欧美成人午夜77777| 国产乱人伦精品一区二区| 欧美国产国产综合| 欧美成人自拍| 欧美一区2区三区4区公司二百| 99视频+国产日韩欧美| 最新国产乱人伦偷精品免费网站| 国内精品久久久久影院色| 欧美+亚洲+精品+三区| 久久av一区二区三区| 亚洲欧美成人精品| 亚洲丰满在线| 欧美高清视频一区二区三区在线观看| 亚洲网站在线观看| 亚洲欧美日韩国产成人精品影院| 国产性猛交xxxx免费看久久| 亚洲视频在线观看视频| 国产欧美日韩另类一区| 欧美一区深夜视频| 亚洲午夜久久久久久久久电影院| 亚洲无线一线二线三线区别av| 性做久久久久久免费观看欧美| 久久se精品一区二区| 欧美日韩一区二区在线观看| 国产一区二区日韩精品欧美精品| 香蕉久久a毛片| 亚洲欧美日韩国产综合精品二区| 亚洲天堂男人| 亚洲国产精品电影| 亚洲在线一区二区三区| 欧美美女bb生活片| 国产啪精品视频| 欧美jizzhd精品欧美巨大免费| 亚洲视频专区在线| 91久久精品www人人做人人爽| 羞羞答答国产精品www一本| 夜夜嗨av色一区二区不卡| 欧美永久精品| 亚洲第一狼人社区| 久久精品日韩一区二区三区| 久久一区二区三区av| 亚洲欧洲另类国产综合| 国产在线一区二区三区四区| 99热这里只有成人精品国产| 国产一区二区日韩精品| 亚洲欧美日韩一区二区三区在线| 国产精品s色| 亚洲三级视频| 欧美高清视频在线观看| 欧美日韩美女在线观看| 亚洲激情二区| 欧美日本一区二区视频在线观看| 欧美日韩一区二区免费视频| 亚洲看片一区| 欧美日韩在线亚洲一区蜜芽| 久久免费午夜影院| 欧美精品videossex性护士| 久久夜色精品亚洲噜噜国产mv| 国产欧美三级| 极品少妇一区二区三区精品视频| 国产乱码精品| 午夜亚洲福利在线老司机| 久久精品二区三区| 久久蜜臀精品av| 欧美日韩国产亚洲一区| 国产精品无人区| 亚洲第一在线| 国产精品久久久久影院色老大| 国产欧美日韩三区| 美女国产精品| 玉米视频成人免费看| 欧美少妇一区二区| 欧美激情在线有限公司| 欧美日韩二区三区| 欧美人与性动交α欧美精品济南到| 国产尤物精品| 韩日午夜在线资源一区二区| 国产欧美一区二区精品性| 国产嫩草一区二区三区在线观看| 伊人久久大香线蕉av超碰演员| 日韩视频一区二区三区在线播放免费观看| 国产精品久久久久av免费| 久久免费视频在线观看| 久久久久久亚洲综合影院红桃| 久久精品国产亚洲精品| 欧美一级夜夜爽| 亚洲人屁股眼子交8| 国产精品一国产精品k频道56| 91久久久亚洲精品| 久久综合九色综合网站| 亚洲国产日韩一区| 欧美成人性生活| 欧美中文字幕第一页| 亚洲精品日韩在线观看| 国产一区二区三区成人欧美日韩在线观看| 国产精品99久久久久久有的能看| 国产一区二区观看| 午夜一区二区三区不卡视频| 亚洲第一中文字幕| 亚洲精品综合| 久久国产精品99久久久久久老狼| 一区视频在线看| 免费成人黄色片| 欧美国产极速在线| 国产手机视频一区二区| 老司机午夜免费精品视频| 久久婷婷国产综合国色天香| 欧美精品久久久久a| 亚洲网站在线看| 欧美精品免费在线| 国产精品日韩一区二区| 亚洲老司机av| 黄色日韩精品| 亚洲高清av在线| 海角社区69精品视频| 欧美电影免费观看大全| 久久本道综合色狠狠五月| 一区二区三区在线观看视频| 一区二区三区在线观看视频| 韩国欧美一区| 久久精品免费播放| 久久疯狂做爰流白浆xx| 日韩一区二区久久| 免费欧美高清视频| 欧美一区二区三区四区高清| av成人老司机| 亚洲国产精品va在线看黑人| 久久精品久久99精品久久| 亚洲专区在线视频| 夜夜嗨av一区二区三区四季av| 欧美一区二区在线免费观看| 日韩一级不卡| 国产精品色网| 欧美日韩免费区域视频在线观看| 在线观看日产精品| 一区二区在线观看视频| 欧美中文字幕在线播放| 欧美久久电影| 欧美午夜视频| 久久精品国产综合精品| 国产精品久久久久久久久久妞妞| 99re6热只有精品免费观看| 一区二区三区国产精华| 久久综合狠狠综合久久激情| 怡红院精品视频在线观看极品| 亚洲丝袜av一区| 国产精品99一区二区| 亚洲人www| 亚洲国产婷婷| 亚洲婷婷综合久久一本伊一区| 欧美在线一区二区| 欧美日韩1区2区3区| 欧美一区在线直播| 欧美美女操人视频| 猫咪成人在线观看| 91久久综合亚洲鲁鲁五月天| 国产一级精品aaaaa看| 亚洲在线视频观看| 久久精品亚洲热| 亚洲激情偷拍| 亚洲国产天堂久久综合| 免费成人小视频| 久久久久久尹人网香蕉| 亚洲电影免费观看高清完整版| 欧美日韩在线三区| 欧美日韩视频免费播放| 国产亚洲综合在线| 狂野欧美性猛交xxxx巴西| 亚洲视频专区在线| 日韩一区二区电影网| 久久久久国产精品午夜一区| 欧美日韩国产成人在线观看| 亚洲女性喷水在线观看一区| 国产欧美一区二区精品忘忧草| 国产精品欧美风情| 国产日韩免费| 在线视频亚洲欧美| 美脚丝袜一区二区三区在线观看| 日韩亚洲不卡在线| 免费av成人在线| 国产精品久久综合| 亚洲第一黄网| av成人动漫| 黄色成人av网站| 亚洲国产精品免费| 久久av一区二区三区亚洲| av成人免费观看| 欧美看片网站| 欧美日韩国产精品自在自线| 欧美国产日韩一区二区在线观看| 亚洲理论在线| 午夜视频在线观看一区二区三区| 黑人一区二区| 午夜精品区一区二区三| 亚洲一二三区在线观看| 亚洲精品国产精品国自产观看浪潮| 欧美精彩视频一区二区三区| 国产日韩精品在线| 日韩视频一区二区三区| 欧美激情小视频| 国产视频一区二区三区在线观看| 亚洲一区二区三区乱码aⅴ| 国产精品久久久久一区二区三区| 欧美区高清在线| 亚洲精选一区二区| 欧美搞黄网站| 午夜欧美大尺度福利影院在线看| 欧美激情第六页| 欧美亚洲视频在线看网址| 久久久久国产一区二区三区四区| 亚洲欧洲在线播放| 国产精品都在这里| 久久av一区二区三区| 一区二区高清在线| 久久精品女人天堂| 国产区日韩欧美| 欧美高清视频| 亚洲欧美另类久久久精品2019| 母乳一区在线观看| 老司机67194精品线观看| 国产在线麻豆精品观看| 亚洲自拍偷拍网址| 欧美激情第8页| 国产精品久久看| 欧美在线观看一区二区| 欧美性猛交xxxx乱大交蜜桃| 一区二区三区你懂的| 91久久久久久久久| 国产精品久久久一区二区三区| 欧美精品三级在线观看| 欧美午夜不卡视频| 国产女人水真多18毛片18精品视频| 国产欧美精品久久| 亚洲激情视频在线播放| 亚洲一二三区在线观看| 亚洲国产一区二区三区高清| 美国三级日本三级久久99| 亚洲新中文字幕| 曰韩精品一区二区| 欧美视频二区36p| 久久精品国产第一区二区三区| 亚洲精品乱码久久久久久久久| 久久久999成人| 亚洲精品乱码久久久久久久久| 久久国产精品第一页| 一区二区三区视频免费在线观看| 欧美亚州在线观看| 黄色工厂这里只有精品| 国产一在线精品一区在线观看| 欧美日韩亚洲一区二| 免费欧美视频| 久久久夜精品| 亚洲精品欧美精品| 欧美日本在线观看| 日韩视频永久免费观看| 国产三级欧美三级日产三级99| 亚洲福利视频在线| aa国产精品| 欧美国产视频日韩| 欧美日韩理论| 国产精品自拍网站| 一区二区三区精品| 久久国产精品久久久久久久久久| 欧美成人午夜免费视在线看片| 亚洲三级免费观看| 欧美三级视频在线观看| 亚洲一区在线视频| 欧美专区在线观看| 国产毛片精品视频| 一区三区视频| 亚洲国产一区在线观看| 美日韩精品视频免费看| 免费亚洲视频| 久久综合久久美利坚合众国| 午夜欧美理论片| 性xx色xx综合久久久xx| 欧美少妇一区二区| 欧美激情一区二区三区蜜桃视频| 久久影院亚洲| 国产日韩成人精品| 国产精品免费一区二区三区观看| 亚洲国产一二三| 精品成人在线观看| 亚洲另类黄色| 国产欧美日韩亚洲精品| 亚洲一区黄色| 欧美一区二区视频免费观看| 激情五月婷婷综合| 亚洲人成网站精品片在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文| 久久亚洲精品一区二区| 国产人久久人人人人爽| 激情久久一区| 欧美激情精品久久久久久大尺度| 亚洲人成高清| 美女露胸一区二区三区| 免费成人av在线| 欧美有码在线视频| 亚洲欧洲一区二区在线观看|