
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、模擬i2c總線多主通信研究與軟件設計本文介紹模擬i2c的多主節(jié)點通信原理,并提出一種新的實現(xiàn)辦法。這種采納延時接收比較來實現(xiàn)仲裁的辦法,可使不具有i2c接口的一般微控制器()能夠實現(xiàn)模擬i2c總線的多主通信,同時對i2c總線的推廣起到了樂觀作用。i2c總線(inter ic bus)是philips公司推出的雙向兩線串行通信標準。因為它具有接口少、通信效率高等優(yōu)點,現(xiàn)已得到廣泛的應用。它除了可以舉行容易的單主節(jié)點通信外,還可以應用在多主節(jié)點的通信系統(tǒng)中。在多主節(jié)點通信系統(tǒng)中,假如兩個或者更多的主節(jié)點同時啟動數(shù)據(jù)傳輸,總線具有矛盾檢測和仲裁功能,保證通信正常舉行并防止數(shù)據(jù)破壞。現(xiàn)在許多微控制器(
2、mcu)都具有i2c總線接口,能便利地舉行i2c總線設計。對于沒有i2c總線接口的mcu,可以采納兩條i/o接口線舉行模擬。目前,一些介紹模擬i2c的資料主要講的是在單主節(jié)點系統(tǒng)中舉行的通信,這使得模擬i2c總線的應用具有一定的局限性。本文按照總線仲裁的思想,提出一種多主節(jié)點通信的思想及實現(xiàn)流程。1 i2c總線系統(tǒng)簡介i2c總線系統(tǒng)是由scl(串行時鐘)和sda(串行數(shù)據(jù))兩根總線構成的。該總線有嚴格的時序要求,總線工作時,由串行時鐘線scl傳送時鐘脈沖,由串行數(shù)據(jù)線sda傳送數(shù)據(jù)。總線協(xié)議規(guī)定,各主節(jié)點舉行通信時都要有起始、結束、發(fā)送數(shù)據(jù)和應答信號。這些信號都是通信過程中的基本單元??偩€傳送
3、的每1幀數(shù)據(jù)均是1個字節(jié),每當發(fā)送完1個字節(jié)后,接收節(jié)點就相應給一應答信號。協(xié)議規(guī)定,在啟動總線后的第1個字節(jié)的高7位是對從節(jié)點的尋址地址,第8位為方向位(“0”表示主節(jié)點對從節(jié)點的寫操作;“1”表示主節(jié)點對從節(jié)點的讀操作),其余的字節(jié)為操作數(shù)據(jù)。圖1列出i2c總線上幾個基本信號的時序。圖1中包括起始信號、停止信號、應答信號、非應答信號以及傳輸數(shù)據(jù)“0”和數(shù)據(jù)“1”的時序。起始信號就是在scl線為高時sda線從高變幻到低;停止信號就是在scl線為高時sda線從低變幻到高;應答信號是在scl為高時sda為低;非應答信號相反,是在scl為高時sda為高。傳輸數(shù)據(jù)“0”和數(shù)據(jù)“1”與發(fā)送應答位和非應
4、答位時序圖是相同的。圖1 i2c總線上基本信號的時序圖2表示了一個完整的數(shù)據(jù)傳送過程。在i2c總線發(fā)送起始信號后,發(fā)送從機的7位尋址地址和1位表示這次操作性質(zhì)的讀寫位,在有應答信號后開頭傳送數(shù)據(jù),直到發(fā)送停止信號。數(shù)據(jù)是以字節(jié)為單位的。發(fā)送節(jié)點每發(fā)送1個字節(jié)就要檢測sda線上有沒有收到應答信號,有則繼續(xù)發(fā)送,否則將停止發(fā)送數(shù)據(jù)。圖2 一次完整的數(shù)據(jù)傳送過程2 i2c總線的仲裁在多主的通信系統(tǒng)中??偩€上有多個節(jié)點,它們都有自己的尋址地址,可以作為從節(jié)點被別的節(jié)點拜訪,同時它們都可以作為主節(jié)點向其他的節(jié)點發(fā)送控制字節(jié)和傳送數(shù)據(jù)。但是假如有兩個或兩個以上的節(jié)點都向總線上發(fā)送啟動信號并開頭傳送數(shù)據(jù),這
5、樣就形成了矛盾。要解決這種矛盾,就要舉行仲裁的判決,這就是i2c總線上的仲裁。i2c總線上的仲裁分兩部分:scl線的同步和sda線的仲裁。scl同步是因為總線具有線“與”的規(guī)律功能,即只要有一個節(jié)點發(fā)送低電平常,總線上就表現(xiàn)為低電平。當全部的節(jié)點都發(fā)送高電平常,總線才干表現(xiàn)為高電平。正是因為線“與”規(guī)律功能的原理,當多個節(jié)點同時發(fā)送時鐘信號時,在總線上表現(xiàn)的是統(tǒng)一的時鐘信號。這就是scl的同步原理。sda線的仲裁也是建立在總線具有線“與”規(guī)律功能的原理上的。節(jié)點在發(fā)送1位數(shù)據(jù)后,比較總線上所展現(xiàn)的數(shù)據(jù)與自己發(fā)送的是否全都。是,繼續(xù)發(fā)送;否則,退出競爭。圖3中給出了兩個節(jié)點在總線上的仲裁過程。s
6、da線的仲裁可以保證i2c總線系統(tǒng)在多個主節(jié)點同時企圖控制總線時通信正常舉行并且數(shù)據(jù)不走失??偩€系統(tǒng)通過仲裁只允許一個主節(jié)點可以繼續(xù)占領總線。圖3是以兩個節(jié)點為例的仲裁過程。data1和data2分離是主節(jié)點向總線所發(fā)送的數(shù)據(jù)信號,sda為總線上所展現(xiàn)的數(shù)據(jù)信號,scl是總線上所展現(xiàn)的時鐘信號。當主節(jié)點1、2同時發(fā)送起始信號時,兩個主節(jié)點都發(fā)送了高電平信號。這時總線上展現(xiàn)的信號為高電平,兩個主節(jié)點都檢測到總線上的信號與自己發(fā)送的信號相同,繼續(xù)發(fā)送數(shù)據(jù)。第2個時鐘周期,2個主節(jié)點都發(fā)送低電平信號,在總線上展現(xiàn)的信號為低電平,仍繼續(xù)發(fā)送數(shù)據(jù)。在第3個時鐘周期,主節(jié)點1發(fā)送高電平信號,而主節(jié)點2發(fā)送
7、低電平信號。按照總線的線“與”的規(guī)律功能,總線上的信號為低電平,這時主節(jié)點1檢測到總線上的數(shù)據(jù)和自己所發(fā)送的數(shù)據(jù)不一樣,就斷開數(shù)據(jù)的輸出級,轉為從機接收狀態(tài)。這樣主節(jié)點2就贏得了總線,而且數(shù)據(jù)沒有走失,即總線的數(shù)據(jù)與主節(jié)點2所發(fā)送的數(shù)據(jù)一樣,而主節(jié)點1在轉為從節(jié)點后繼續(xù)接收數(shù)據(jù),同樣也沒有丟掉sda線上的數(shù)據(jù)。因此在仲裁過程中數(shù)據(jù)沒有走失。圖3 兩個主節(jié)點的仲裁過程3 多主通信的原理及其實現(xiàn)流程多主通信就是在總線上有多個節(jié)點。這些節(jié)點既可以作為主節(jié)點拜訪其他的節(jié)點,也可以作為從節(jié)點被其他節(jié)點拜訪。當有多個節(jié)點同時企圖占用總線時,就需要總線的仲裁。對于模擬i2c總線系統(tǒng),怎樣實現(xiàn)總線的仲裁是現(xiàn)在
8、討論模擬i2c總線系統(tǒng)的難點。文獻4提出在系統(tǒng)中增強1根busy線,在占用總線之前先檢測busy線,看總線是否被占用。若總線空閑,則設置busy線并向總線上傳送數(shù)據(jù);否則,接收數(shù)據(jù),直到總線空閑時才占有總線。這種實現(xiàn)多主通信的辦法有兩個缺點: 由于i2c最大的優(yōu)點就是接口少、效率高,這樣做不僅增強了用法資源而且削減了i2c總線的優(yōu)勢; 當主節(jié)點數(shù)比較多時,等待時光比較長,效率不高。本設計按照總線的仲裁原理,提出一種基于延時比較的仲裁辦法。當主節(jié)點想要占用總線時,先檢測總線上是否空閑,假如總線是空閑的就發(fā)送數(shù)據(jù)。在發(fā)送數(shù)據(jù)的同時,將總線上的數(shù)據(jù)接收并與發(fā)送的數(shù)據(jù)舉行比較。假如不同,解釋總線上同時
9、還存在其他節(jié)點,于是就退出;否則,向來到發(fā)送完數(shù)據(jù)。這種辦法既體現(xiàn)了i2c總線的高效性,同時還具有良好的擴展性。圖4 多主通信流程圖4給出了基于延時比較的多主通信流程,其中mcu作為從節(jié)點部分的流程在圖5中給出。在節(jié)點發(fā)送起始信號之前先要檢測一下總線上是否為空閑狀態(tài)(busy是否為0)。這里用法的檢測辦法是,持續(xù)檢測一段時光看總線上的電平是否向來為高,若是解釋總線上為閑狀態(tài),否則解釋有其他的節(jié)點正在用法總線,要等一段時光再發(fā)送。當總線空閑時,發(fā)送起始信號,接著發(fā)送要拜訪的從節(jié)點的地址字節(jié)。每發(fā)送1位數(shù)據(jù)就接收比較1次,看發(fā)送和接收的是否全都,若是則繼續(xù),否則跳出到從節(jié)點的接收狀態(tài)。假如沒有產(chǎn)生
10、矛盾,mcu作為主節(jié)點繼續(xù)發(fā)送數(shù)據(jù),直到任務結束,然后發(fā)送停止信號并返回。假如數(shù)據(jù)不一樣,mcu將跳轉到從節(jié)點狀態(tài)。因為在跳轉到從節(jié)點接收狀態(tài)的過程中累加器(acc)和工作寄存器(ri)的數(shù)據(jù)沒有發(fā)生變幻,所以數(shù)據(jù)沒有走失,作為從節(jié)點可以繼續(xù)接收總線上的數(shù)據(jù)。這樣囫圇通信的過程沒有中斷,數(shù)據(jù)也沒有走失。圖5 從節(jié)點部分的流程圖5給出了從節(jié)點的流程。進入從節(jié)點時,要將busy置為高,解釋mcu現(xiàn)在正在工作,不能完成其他的任務。在mcu作為從節(jié)點完成接收任務后,要將busy置為低。mcu在接收到尋址字節(jié)后與自己的地址字節(jié)舉行比較。假如是拜訪自己的就進入到下面的接收程序,否則跳出。在拜訪自己的時候,
11、還要推斷主節(jié)點是讀取數(shù)據(jù)還是寫數(shù)據(jù),以便進入相應的程序。在寫字節(jié)的子程序中,從節(jié)點每發(fā)送1個字節(jié)的數(shù)據(jù)后都要察看是否有應答信號(ack),有則解釋數(shù)據(jù)接收到了;否則要跳出等待,重新發(fā)送。在讀字節(jié)的子程序中,每接收1個字節(jié)的數(shù)據(jù)就要發(fā)送1個應答信號(ack),以示接收正常,否則主節(jié)點將停止繼續(xù)發(fā)送。在現(xiàn)有的資料中,關于從節(jié)點的原理和源代碼比較少,這里給出作為從節(jié)點時寫字節(jié)子程序的源代碼。因為篇幅有限其他的子程序沒有列出。4 部分源代碼本節(jié)是在mcu多主通信中的部分源代碼。多主通信的實現(xiàn)中有幾個難點和重點。一是在作為主節(jié)點時的寫字節(jié)子程序,里面要包括發(fā)送的每位數(shù)據(jù)和總線的數(shù)據(jù)舉行比較并做出推斷。假
12、如數(shù)據(jù)不同,要跳出并進入從節(jié)點的狀態(tài)。因為子程序返回主程序時轉變的只是pc的值而累加器(acc)和工作寄存器(ri)里面的值是不變的,因此mcu進入從機狀態(tài)后繼續(xù)接收總線剩下的數(shù)據(jù),這樣總線的數(shù)據(jù)并沒有走失。二是作為從節(jié)點時的寫字節(jié)的子程序。因為時鐘線是由主節(jié)點的mcu控制的,所以怎樣按照scl線來讀取sda線的數(shù)據(jù)是其中的一個難點。三是在具有子地址的從節(jié)點關于是寫字節(jié)還是讀字節(jié)時的推斷。假如是寫字節(jié)時主節(jié)點會給出新的起始信號,并再次發(fā)送從節(jié)點的地址數(shù)據(jù)。這時從節(jié)點需要做出推斷是讀取數(shù)據(jù)還是寫數(shù)據(jù),并進入相應的子程序。這里給出以上三個重點和難點的子程序的源代碼,以供讀者參考。這些源代碼經(jīng)實踐證
13、實都是正確的。主節(jié)點的寫字節(jié)子程序:;其中的nop可按照時鐘的快慢自己加減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é)點的寫字節(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ā)送完畢等待應答信號wwait4: jb scl,wwait4wwait5: jnb scl,wwait5clr ackjb sda,st0setb ackst0:ret;返回wwait2: jnb scl,wwait2;
15、等待scl為高sjmp wagain從節(jié)點的讀字節(jié)同時推斷是否有起始信號的子程序。假如有起始信號,則轉為寫字節(jié)子程序:srdbyte:mov r0,08hsetb 20h;設置標記位推斷是讀還是寫setb sda;釋放總線rwaitj: jnb scl,rwaitj;等待scl為高mov c,sda;從總線上讀取數(shù)據(jù)rrc a;存入累計器dec r0mov c,acc.7;推斷是否為起始信號jnc rwaitj1;為低繼續(xù)讀取數(shù)據(jù)rewait: jnb scl,rwaitj1;開頭推斷是否為起始信號jb sda,rewaitclr 20h;是,則清標記位并返回ajmp sjrdoutrwaitj1:jb scl,rwaitj1;等待scl為低rwaitj3:jnb scl,rwaitj3;等待scl為高mov c,sd
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《中醫(yī)藥發(fā)展前景》課件
- 2025年駐馬店道路貨物運輸駕駛員考試
- 2025年山東貨運從業(yè)資格證考試題技巧答案詳解
- 新疆天山職業(yè)技術大學《合同法分論》2023-2024學年第二學期期末試卷
- 同濟大學浙江學院《大型平臺軟件分析與設計》2023-2024學年第二學期期末試卷
- 昆明學院《建筑施工組織課程設計》2023-2024學年第二學期期末試卷
- 蘇州大學《茶藝、茶道》2023-2024學年第二學期期末試卷
- 上海市黃浦區(qū)市級名校2024-2025學年高三英語試題下學期期末考試試題(A卷)含解析
- 銅陵職業(yè)技術學院《國際貿(mào)易與國際物流》2023-2024學年第二學期期末試卷
- 山西省長治市上黨聯(lián)盟2025年高三總復習質(zhì)量測試(一)生物試題含解析
- 鵪鶉蛋脫殼機的設計
- 行為安全觀察behaviorbasedsafety研究復習過程
- 動火作業(yè)風險告知牌
- 鍋爐專業(yè)術語解釋及英文翻譯對照
- 綜采工作面末采安全技術措施
- 《小石潭記》作業(yè)設計
- 密封圈定位套零件的機械加工夾具設計說明書
- 旅行社等級評定申報材料完整版
- 大粒種子精播機的設計【玉米、大豆快速精密雙行播種機含9張CAD圖紙】
- CKE2500 250t履帶式起重機
- 淺談跨文化敏感度及其測量
評論
0/150
提交評論