版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、模擬i2c總線多主通信研究與軟件設(shè)計(jì)本文介紹模擬i2c的多主節(jié)點(diǎn)通信原理,并提出一種新的實(shí)現(xiàn)辦法。這種采納延時(shí)接收比較來(lái)實(shí)現(xiàn)仲裁的辦法,可使不具有i2c接口的一般微控制器()能夠?qū)崿F(xiàn)模擬i2c總線的多主通信,同時(shí)對(duì)i2c總線的推廣起到了樂觀作用。i2c總線(inter ic bus)是philips公司推出的雙向兩線串行通信標(biāo)準(zhǔn)。因?yàn)樗哂薪涌谏?、通信效率高等?yōu)點(diǎn),現(xiàn)已得到廣泛的應(yīng)用。它除了可以舉行容易的單主節(jié)點(diǎn)通信外,還可以應(yīng)用在多主節(jié)點(diǎn)的通信系統(tǒng)中。在多主節(jié)點(diǎn)通信系統(tǒng)中,假如兩個(gè)或者更多的主節(jié)點(diǎn)同時(shí)啟動(dòng)數(shù)據(jù)傳輸,總線具有矛盾檢測(cè)和仲裁功能,保證通信正常舉行并防止數(shù)據(jù)破壞?,F(xiàn)在許多微控制器(
2、mcu)都具有i2c總線接口,能便利地舉行i2c總線設(shè)計(jì)。對(duì)于沒有i2c總線接口的mcu,可以采納兩條i/o接口線舉行模擬。目前,一些介紹模擬i2c的資料主要講的是在單主節(jié)點(diǎn)系統(tǒng)中舉行的通信,這使得模擬i2c總線的應(yīng)用具有一定的局限性。本文按照總線仲裁的思想,提出一種多主節(jié)點(diǎn)通信的思想及實(shí)現(xiàn)流程。1 i2c總線系統(tǒng)簡(jiǎn)介i2c總線系統(tǒng)是由scl(串行時(shí)鐘)和sda(串行數(shù)據(jù))兩根總線構(gòu)成的。該總線有嚴(yán)格的時(shí)序要求,總線工作時(shí),由串行時(shí)鐘線scl傳送時(shí)鐘脈沖,由串行數(shù)據(jù)線sda傳送數(shù)據(jù)。總線協(xié)議規(guī)定,各主節(jié)點(diǎn)舉行通信時(shí)都要有起始、結(jié)束、發(fā)送數(shù)據(jù)和應(yīng)答信號(hào)。這些信號(hào)都是通信過(guò)程中的基本單元??偩€傳送
3、的每1幀數(shù)據(jù)均是1個(gè)字節(jié),每當(dāng)發(fā)送完1個(gè)字節(jié)后,接收節(jié)點(diǎn)就相應(yīng)給一應(yīng)答信號(hào)。協(xié)議規(guī)定,在啟動(dòng)總線后的第1個(gè)字節(jié)的高7位是對(duì)從節(jié)點(diǎn)的尋址地址,第8位為方向位(“0”表示主節(jié)點(diǎn)對(duì)從節(jié)點(diǎn)的寫操作;“1”表示主節(jié)點(diǎn)對(duì)從節(jié)點(diǎn)的讀操作),其余的字節(jié)為操作數(shù)據(jù)。圖1列出i2c總線上幾個(gè)基本信號(hào)的時(shí)序。圖1中包括起始信號(hào)、停止信號(hào)、應(yīng)答信號(hào)、非應(yīng)答信號(hào)以及傳輸數(shù)據(jù)“0”和數(shù)據(jù)“1”的時(shí)序。起始信號(hào)就是在scl線為高時(shí)sda線從高變幻到低;停止信號(hào)就是在scl線為高時(shí)sda線從低變幻到高;應(yīng)答信號(hào)是在scl為高時(shí)sda為低;非應(yīng)答信號(hào)相反,是在scl為高時(shí)sda為高。傳輸數(shù)據(jù)“0”和數(shù)據(jù)“1”與發(fā)送應(yīng)答位和非應(yīng)
4、答位時(shí)序圖是相同的。圖1 i2c總線上基本信號(hào)的時(shí)序圖2表示了一個(gè)完整的數(shù)據(jù)傳送過(guò)程。在i2c總線發(fā)送起始信號(hào)后,發(fā)送從機(jī)的7位尋址地址和1位表示這次操作性質(zhì)的讀寫位,在有應(yīng)答信號(hào)后開頭傳送數(shù)據(jù),直到發(fā)送停止信號(hào)。數(shù)據(jù)是以字節(jié)為單位的。發(fā)送節(jié)點(diǎn)每發(fā)送1個(gè)字節(jié)就要檢測(cè)sda線上有沒有收到應(yīng)答信號(hào),有則繼續(xù)發(fā)送,否則將停止發(fā)送數(shù)據(jù)。圖2 一次完整的數(shù)據(jù)傳送過(guò)程2 i2c總線的仲裁在多主的通信系統(tǒng)中??偩€上有多個(gè)節(jié)點(diǎn),它們都有自己的尋址地址,可以作為從節(jié)點(diǎn)被別的節(jié)點(diǎn)拜訪,同時(shí)它們都可以作為主節(jié)點(diǎn)向其他的節(jié)點(diǎn)發(fā)送控制字節(jié)和傳送數(shù)據(jù)。但是假如有兩個(gè)或兩個(gè)以上的節(jié)點(diǎn)都向總線上發(fā)送啟動(dòng)信號(hào)并開頭傳送數(shù)據(jù),這
5、樣就形成了矛盾。要解決這種矛盾,就要舉行仲裁的判決,這就是i2c總線上的仲裁。i2c總線上的仲裁分兩部分:scl線的同步和sda線的仲裁。scl同步是因?yàn)榭偩€具有線“與”的規(guī)律功能,即只要有一個(gè)節(jié)點(diǎn)發(fā)送低電平常,總線上就表現(xiàn)為低電平。當(dāng)全部的節(jié)點(diǎn)都發(fā)送高電平常,總線才干表現(xiàn)為高電平。正是因?yàn)榫€“與”規(guī)律功能的原理,當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送時(shí)鐘信號(hào)時(shí),在總線上表現(xiàn)的是統(tǒng)一的時(shí)鐘信號(hào)。這就是scl的同步原理。sda線的仲裁也是建立在總線具有線“與”規(guī)律功能的原理上的。節(jié)點(diǎn)在發(fā)送1位數(shù)據(jù)后,比較總線上所展現(xiàn)的數(shù)據(jù)與自己發(fā)送的是否全都。是,繼續(xù)發(fā)送;否則,退出競(jìng)爭(zhēng)。圖3中給出了兩個(gè)節(jié)點(diǎn)在總線上的仲裁過(guò)程。s
6、da線的仲裁可以保證i2c總線系統(tǒng)在多個(gè)主節(jié)點(diǎn)同時(shí)企圖控制總線時(shí)通信正常舉行并且數(shù)據(jù)不走失。總線系統(tǒng)通過(guò)仲裁只允許一個(gè)主節(jié)點(diǎn)可以繼續(xù)占領(lǐng)總線。圖3是以兩個(gè)節(jié)點(diǎn)為例的仲裁過(guò)程。data1和data2分離是主節(jié)點(diǎn)向總線所發(fā)送的數(shù)據(jù)信號(hào),sda為總線上所展現(xiàn)的數(shù)據(jù)信號(hào),scl是總線上所展現(xiàn)的時(shí)鐘信號(hào)。當(dāng)主節(jié)點(diǎn)1、2同時(shí)發(fā)送起始信號(hào)時(shí),兩個(gè)主節(jié)點(diǎn)都發(fā)送了高電平信號(hào)。這時(shí)總線上展現(xiàn)的信號(hào)為高電平,兩個(gè)主節(jié)點(diǎn)都檢測(cè)到總線上的信號(hào)與自己發(fā)送的信號(hào)相同,繼續(xù)發(fā)送數(shù)據(jù)。第2個(gè)時(shí)鐘周期,2個(gè)主節(jié)點(diǎn)都發(fā)送低電平信號(hào),在總線上展現(xiàn)的信號(hào)為低電平,仍繼續(xù)發(fā)送數(shù)據(jù)。在第3個(gè)時(shí)鐘周期,主節(jié)點(diǎn)1發(fā)送高電平信號(hào),而主節(jié)點(diǎn)2發(fā)送
7、低電平信號(hào)。按照總線的線“與”的規(guī)律功能,總線上的信號(hào)為低電平,這時(shí)主節(jié)點(diǎn)1檢測(cè)到總線上的數(shù)據(jù)和自己所發(fā)送的數(shù)據(jù)不一樣,就斷開數(shù)據(jù)的輸出級(jí),轉(zhuǎn)為從機(jī)接收狀態(tài)。這樣主節(jié)點(diǎn)2就贏得了總線,而且數(shù)據(jù)沒有走失,即總線的數(shù)據(jù)與主節(jié)點(diǎn)2所發(fā)送的數(shù)據(jù)一樣,而主節(jié)點(diǎn)1在轉(zhuǎn)為從節(jié)點(diǎn)后繼續(xù)接收數(shù)據(jù),同樣也沒有丟掉sda線上的數(shù)據(jù)。因此在仲裁過(guò)程中數(shù)據(jù)沒有走失。圖3 兩個(gè)主節(jié)點(diǎn)的仲裁過(guò)程3 多主通信的原理及其實(shí)現(xiàn)流程多主通信就是在總線上有多個(gè)節(jié)點(diǎn)。這些節(jié)點(diǎn)既可以作為主節(jié)點(diǎn)拜訪其他的節(jié)點(diǎn),也可以作為從節(jié)點(diǎn)被其他節(jié)點(diǎn)拜訪。當(dāng)有多個(gè)節(jié)點(diǎn)同時(shí)企圖占用總線時(shí),就需要總線的仲裁。對(duì)于模擬i2c總線系統(tǒng),怎樣實(shí)現(xiàn)總線的仲裁是現(xiàn)在
8、討論模擬i2c總線系統(tǒng)的難點(diǎn)。文獻(xiàn)4提出在系統(tǒng)中增強(qiáng)1根busy線,在占用總線之前先檢測(cè)busy線,看總線是否被占用。若總線空閑,則設(shè)置busy線并向總線上傳送數(shù)據(jù);否則,接收數(shù)據(jù),直到總線空閑時(shí)才占有總線。這種實(shí)現(xiàn)多主通信的辦法有兩個(gè)缺點(diǎn): 由于i2c最大的優(yōu)點(diǎn)就是接口少、效率高,這樣做不僅增強(qiáng)了用法資源而且削減了i2c總線的優(yōu)勢(shì); 當(dāng)主節(jié)點(diǎn)數(shù)比較多時(shí),等待時(shí)光比較長(zhǎng),效率不高。本設(shè)計(jì)按照總線的仲裁原理,提出一種基于延時(shí)比較的仲裁辦法。當(dāng)主節(jié)點(diǎn)想要占用總線時(shí),先檢測(cè)總線上是否空閑,假如總線是空閑的就發(fā)送數(shù)據(jù)。在發(fā)送數(shù)據(jù)的同時(shí),將總線上的數(shù)據(jù)接收并與發(fā)送的數(shù)據(jù)舉行比較。假如不同,解釋總線上同時(shí)
9、還存在其他節(jié)點(diǎn),于是就退出;否則,向來(lái)到發(fā)送完數(shù)據(jù)。這種辦法既體現(xiàn)了i2c總線的高效性,同時(shí)還具有良好的擴(kuò)展性。圖4 多主通信流程圖4給出了基于延時(shí)比較的多主通信流程,其中mcu作為從節(jié)點(diǎn)部分的流程在圖5中給出。在節(jié)點(diǎn)發(fā)送起始信號(hào)之前先要檢測(cè)一下總線上是否為空閑狀態(tài)(busy是否為0)。這里用法的檢測(cè)辦法是,持續(xù)檢測(cè)一段時(shí)光看總線上的電平是否向來(lái)為高,若是解釋總線上為閑狀態(tài),否則解釋有其他的節(jié)點(diǎn)正在用法總線,要等一段時(shí)光再發(fā)送。當(dāng)總線空閑時(shí),發(fā)送起始信號(hào),接著發(fā)送要拜訪的從節(jié)點(diǎn)的地址字節(jié)。每發(fā)送1位數(shù)據(jù)就接收比較1次,看發(fā)送和接收的是否全都,若是則繼續(xù),否則跳出到從節(jié)點(diǎn)的接收狀態(tài)。假如沒有產(chǎn)生
10、矛盾,mcu作為主節(jié)點(diǎn)繼續(xù)發(fā)送數(shù)據(jù),直到任務(wù)結(jié)束,然后發(fā)送停止信號(hào)并返回。假如數(shù)據(jù)不一樣,mcu將跳轉(zhuǎn)到從節(jié)點(diǎn)狀態(tài)。因?yàn)樵谔D(zhuǎn)到從節(jié)點(diǎn)接收狀態(tài)的過(guò)程中累加器(acc)和工作寄存器(ri)的數(shù)據(jù)沒有發(fā)生變幻,所以數(shù)據(jù)沒有走失,作為從節(jié)點(diǎn)可以繼續(xù)接收總線上的數(shù)據(jù)。這樣囫圇通信的過(guò)程沒有中斷,數(shù)據(jù)也沒有走失。圖5 從節(jié)點(diǎn)部分的流程圖5給出了從節(jié)點(diǎn)的流程。進(jìn)入從節(jié)點(diǎn)時(shí),要將busy置為高,解釋mcu現(xiàn)在正在工作,不能完成其他的任務(wù)。在mcu作為從節(jié)點(diǎn)完成接收任務(wù)后,要將busy置為低。mcu在接收到尋址字節(jié)后與自己的地址字節(jié)舉行比較。假如是拜訪自己的就進(jìn)入到下面的接收程序,否則跳出。在拜訪自己的時(shí)候,
11、還要推斷主節(jié)點(diǎn)是讀取數(shù)據(jù)還是寫數(shù)據(jù),以便進(jìn)入相應(yīng)的程序。在寫字節(jié)的子程序中,從節(jié)點(diǎn)每發(fā)送1個(gè)字節(jié)的數(shù)據(jù)后都要察看是否有應(yīng)答信號(hào)(ack),有則解釋數(shù)據(jù)接收到了;否則要跳出等待,重新發(fā)送。在讀字節(jié)的子程序中,每接收1個(gè)字節(jié)的數(shù)據(jù)就要發(fā)送1個(gè)應(yīng)答信號(hào)(ack),以示接收正常,否則主節(jié)點(diǎn)將停止繼續(xù)發(fā)送。在現(xiàn)有的資料中,關(guān)于從節(jié)點(diǎn)的原理和源代碼比較少,這里給出作為從節(jié)點(diǎn)時(shí)寫字節(jié)子程序的源代碼。因?yàn)槠邢奁渌淖映绦驔]有列出。4 部分源代碼本節(jié)是在mcu多主通信中的部分源代碼。多主通信的實(shí)現(xiàn)中有幾個(gè)難點(diǎn)和重點(diǎn)。一是在作為主節(jié)點(diǎn)時(shí)的寫字節(jié)子程序,里面要包括發(fā)送的每位數(shù)據(jù)和總線的數(shù)據(jù)舉行比較并做出推斷。假
12、如數(shù)據(jù)不同,要跳出并進(jìn)入從節(jié)點(diǎn)的狀態(tài)。因?yàn)樽映绦蚍祷刂鞒绦驎r(shí)轉(zhuǎn)變的只是pc的值而累加器(acc)和工作寄存器(ri)里面的值是不變的,因此mcu進(jìn)入從機(jī)狀態(tài)后繼續(xù)接收總線剩下的數(shù)據(jù),這樣總線的數(shù)據(jù)并沒有走失。二是作為從節(jié)點(diǎn)時(shí)的寫字節(jié)的子程序。因?yàn)闀r(shí)鐘線是由主節(jié)點(diǎn)的mcu控制的,所以怎樣按照scl線來(lái)讀取sda線的數(shù)據(jù)是其中的一個(gè)難點(diǎn)。三是在具有子地址的從節(jié)點(diǎn)關(guān)于是寫字節(jié)還是讀字節(jié)時(shí)的推斷。假如是寫字節(jié)時(shí)主節(jié)點(diǎn)會(huì)給出新的起始信號(hào),并再次發(fā)送從節(jié)點(diǎn)的地址數(shù)據(jù)。這時(shí)從節(jié)點(diǎn)需要做出推斷是讀取數(shù)據(jù)還是寫數(shù)據(jù),并進(jìn)入相應(yīng)的子程序。這里給出以上三個(gè)重點(diǎn)和難點(diǎn)的子程序的源代碼,以供讀者參考。這些源代碼經(jīng)實(shí)踐證
13、實(shí)都是正確的。主節(jié)點(diǎn)的寫字節(jié)子程序:;其中的nop可按照時(shí)鐘的快慢自己加減wrbyte:mov r0,08hclr busy;將busy值清零wlp: rlc a;取數(shù)據(jù)位jc wr1sjmp wr0;推斷數(shù)據(jù)位wlp1: djnz r0,wlpnopout1: retwr1: setb sda;發(fā)送1nopsetb sclmovc,sda;推斷是否與發(fā)送的數(shù)據(jù)相同jc goonsetb busyajmp out1goon: nopnopnopclr sclsjmp wlp1wr0: clr sda;發(fā)送0nopsclnopnopnopnopnopclrsclsjmp wlp1從節(jié)點(diǎn)的寫字節(jié)子
14、程序(返回為ack):swrbyte:mov r0,08hwagain: rrc amov b,37hwwait1: jb scl,wwait1;等待scl為低jc wr1;推斷是發(fā)送“1”還是發(fā)送“0”setb sda;發(fā)送“1”ajmp comwr1:clr sda;發(fā)送“0”comjnz r0,wwait2;推斷是否發(fā)送完畢wwait3: jnb scl,wwait3;發(fā)送完畢等待應(yīng)答信號(hào)wwait4: jb scl,wwait4wwait5: jnb scl,wwait5clr ackjb sda,st0setb ackst0:ret;返回wwait2: jnb scl,wwait2;
15、等待scl為高sjmp wagain從節(jié)點(diǎn)的讀字節(jié)同時(shí)推斷是否有起始信號(hào)的子程序。假如有起始信號(hào),則轉(zhuǎn)為寫字節(jié)子程序:srdbyte:mov r0,08hsetb 20h;設(shè)置標(biāo)記位推斷是讀還是寫setb sda;釋放總線rwaitj: jnb scl,rwaitj;等待scl為高mov c,sda;從總線上讀取數(shù)據(jù)rrc a;存入累計(jì)器dec r0mov c,acc.7;推斷是否為起始信號(hào)jnc rwaitj1;為低繼續(xù)讀取數(shù)據(jù)rewait: jnb scl,rwaitj1;開頭推斷是否為起始信號(hào)jb sda,rewaitclr 20h;是,則清標(biāo)記位并返回ajmp sjrdoutrwaitj1:jb scl,rwaitj1;等待scl為低rwaitj3:jnb scl,rwaitj3;等待scl為高mov c,sd
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度有機(jī)肥料生產(chǎn)與銷售風(fēng)險(xiǎn)控制合作協(xié)議2篇
- 2025年度體育場(chǎng)館建設(shè)承包合同范本4篇
- 2025年度新能源汽車充電樁租賃合同書3篇
- 2024綠化項(xiàng)目勞務(wù)施工分包合同書版B版
- 2025年絕緣筒項(xiàng)目可行性研究報(bào)告
- 2025年模特選美賽事形象權(quán)保護(hù)與保密合同范本3篇
- 螺旋式除塵器行業(yè)市場(chǎng)發(fā)展及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025年度個(gè)人留學(xué)貸款擔(dān)保合同范本12篇
- 2025年度室內(nèi)外景觀設(shè)計(jì)及施工合同樣本4篇
- 2025年度藝術(shù)品抵押借款咨詢合同范本3篇
- 2022年湖北省武漢市中考數(shù)學(xué)試卷含解析
- TLFSA 003-2020 危害分析與關(guān)鍵控制點(diǎn)(HACCP)體系調(diào)味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護(hù)區(qū)保護(hù)成效評(píng)估技術(shù)導(dǎo)則第3部分:景觀保護(hù)
- 紀(jì)律教育月批評(píng)與自我批評(píng)五篇
- GB/T 26480-2011閥門的檢驗(yàn)和試驗(yàn)
- GB/T 13342-2007船用往復(fù)式液壓缸通用技術(shù)條件
- 藥店員工教育培訓(xùn)資料
- GB 20371-2016食品安全國(guó)家標(biāo)準(zhǔn)食品加工用植物蛋白
- 【英語(yǔ)手寫體】26英文字母手寫體描紅書寫字帖
- 實(shí)習(xí)護(hù)生壓瘡相關(guān)知識(shí)掌握情況及預(yù)防態(tài)度的調(diào)查問卷
- 《駱駝祥子》第(9、10、11、12)章檢測(cè)題
評(píng)論
0/150
提交評(píng)論