《嵌入式系統(tǒng)設(shè)計(jì)-基于ARM Cortex-A9 多核處理器Linux編程》第13章 Exynos4412 I2C總線控制_第1頁
《嵌入式系統(tǒng)設(shè)計(jì)-基于ARM Cortex-A9 多核處理器Linux編程》第13章 Exynos4412 I2C總線控制_第2頁
《嵌入式系統(tǒng)設(shè)計(jì)-基于ARM Cortex-A9 多核處理器Linux編程》第13章 Exynos4412 I2C總線控制_第3頁
《嵌入式系統(tǒng)設(shè)計(jì)-基于ARM Cortex-A9 多核處理器Linux編程》第13章 Exynos4412 I2C總線控制_第4頁
《嵌入式系統(tǒng)設(shè)計(jì)-基于ARM Cortex-A9 多核處理器Linux編程》第13章 Exynos4412 I2C總線控制_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第13章Exynos4412I2C總線控制本章介紹I2C總線的工作原理、Exynos4412的I2C接口以及I2C軟件編程,內(nèi)容較多,有一定難度,同學(xué)學(xué)習(xí)時(shí)可根據(jù)需要取舍。主要內(nèi)容§13.1I2C總線的工作原理§13.2Exynos4412I2C接口簡(jiǎn)介§13.3Exynos4412I2C控制寄存器§13.4使用Exynos4412I2C總線讀/寫方法§13.5I2C實(shí)驗(yàn)程序§13.1I2C總線的工作原理1.I2C總線的主要特點(diǎn)2.I2C總線的基本結(jié)構(gòu)3.I2C總線信息傳送4.I2C總線讀/寫操作時(shí)序1.I2C總線的主要特點(diǎn)I2C總線是由Philips公司開發(fā)的一種簡(jiǎn)單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息。這種總線的主要特點(diǎn)如下:(1)總線只有兩根線,即串行時(shí)鐘線(SCL)和串行數(shù)據(jù)線(SDA),這在設(shè)計(jì)中大大減少了硬件接口。(2)每個(gè)連接到總線上的器件都有一個(gè)用于識(shí)別的器件地址,器件地址由芯片內(nèi)部硬件電路和外部地址引腳同時(shí)決定,避免了片選線的連接方法,并建立了簡(jiǎn)單的主從關(guān)系,每個(gè)器件既可作為發(fā)送器,又可作為接收器。(3)同步時(shí)鐘允許器件采用不同的波特率進(jìn)行通信。(4)同步時(shí)鐘可作為停止或重新啟動(dòng)串行口發(fā)送的握手信號(hào)。(5)串行數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbps,在快速模式下可達(dá)400kbps,在高速模式下可達(dá)3.4Mbps。2.I2C總線的基本結(jié)構(gòu)I2C總線是由數(shù)據(jù)線SAD和時(shí)鐘線SCL構(gòu)成的串行總線,可以發(fā)送和接收數(shù)據(jù)。采用I2C總線標(biāo)準(zhǔn)的器件均并聯(lián)在總線上,每個(gè)器件內(nèi)部都有I2C接口電路,用于實(shí)現(xiàn)與I2C總線的連接,其結(jié)構(gòu)形式如圖每個(gè)器件都有唯一的地址,兩兩器件之間都可以進(jìn)行信息傳送。當(dāng)某個(gè)器件向總線上發(fā)送信息時(shí),它就是發(fā)送器(也叫主控制器);而當(dāng)其從總線上接收信息時(shí),它又稱為接收器(又叫從控制器)。在信息的傳送過程中,主控制器發(fā)送的信號(hào)分為器件地址碼、器件單元地址和數(shù)據(jù)3部分,其中,器件地址碼用來選擇從控制器,確定操作的類型(是發(fā)送信息還是接收信息);器件單元地址用于選擇器件內(nèi)部的單元;數(shù)據(jù)是在各器件之間傳遞的信息。處理過程就像打電話一樣,只有撥通號(hào)碼才能進(jìn)行信息交流。各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。3.I2C總線信息傳送I2C總線沒有進(jìn)行信息傳送時(shí),數(shù)據(jù)線SDA和時(shí)鐘線SCL都為高電平。當(dāng)主控制器向某個(gè)器件傳送信息時(shí),首先應(yīng)向總線傳送開始信號(hào),開始信號(hào)和結(jié)束信號(hào)的規(guī)定如下。(1)開始信號(hào)SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。(2)結(jié)束信號(hào)SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。開始信號(hào)和結(jié)束信號(hào)之間傳送的是信息,信息的字節(jié)沒有限制,但是每字節(jié)必須為8位,高位在前,低位在后。數(shù)據(jù)線SDA上每一位信息狀態(tài)的改變只能發(fā)生在時(shí)鐘線SCL為低電平期間,因?yàn)镾CL為高電平期間SDA狀態(tài)的改變已經(jīng)被用來表示開始信號(hào)和結(jié)束信號(hào)。每字節(jié)后面必須接收一個(gè)應(yīng)答信號(hào)ACK,ACK是從控制器在接收到8位數(shù)據(jù)后向主控制器發(fā)出的特定的低電平脈沖,用以表示已收到數(shù)據(jù)。主控制器接收到應(yīng)答信號(hào)ACK后,可以根據(jù)實(shí)際情況判斷是否繼續(xù)傳遞信號(hào)。如果未收到ACK,可判斷是從控制器出現(xiàn)了故障,具體情況如圖采用I2C總線接口的器件連接線和引腳數(shù)目少、成本低。與單片機(jī)連接簡(jiǎn)單,結(jié)構(gòu)緊湊,在總線上增加器件不影響系統(tǒng)的正常工作,系統(tǒng)的可修改性和可擴(kuò)展性好,即使工作時(shí)鐘不同的器件也可以直接連接到總線上,使用起來非常方便。但軟件程序稍復(fù)雜,對(duì)時(shí)序要求嚴(yán)格,編寫應(yīng)用程序時(shí)應(yīng)參照下圖所示的信號(hào)時(shí)序來進(jìn)行。主控制器每次傳送的信息的第一字節(jié)必須是器件地址碼,第二字節(jié)為器件單元地址,用于實(shí)現(xiàn)選擇所操作器件的內(nèi)部單元,從第三字節(jié)(寫數(shù)據(jù))或第四字節(jié)(讀數(shù)據(jù))開始為傳送的數(shù)據(jù)。其中,器件地址碼的格式如表所示。其中AAAA(D7~D4)是器件的類型,有固定的定義,EEPROM為1010;BBB(D3~D1)為片選或片內(nèi)頁面地址;R/W(D0)是讀/寫控制,D0=1表示從總線讀信息,D0=0表示向總線寫信息。D7D6D5D4D3D2D1D0AAAABBBR/W4.I2C總線讀/寫操作時(shí)序(1)指定單元寫下圖所示的是以EEPROM為例,向總線寫一字節(jié)數(shù)據(jù)的過程。

在上圖中,只給出寫一字節(jié)SDA的時(shí)序,當(dāng)SCL為高,SDA從高到低跳變時(shí),啟動(dòng)I2C。I2C向總線寫第一字節(jié)數(shù)據(jù),1010是器件的類型,表示EEPROM,LSB=0是寫命令,接到ACK應(yīng)答后,再發(fā)一字節(jié)數(shù)據(jù),該字節(jié)數(shù)據(jù)是EEPROM內(nèi)的單元地址,然后收到ACK后就可以向SDA線上串行寫入一字節(jié)數(shù)據(jù),再收到ACK,直接發(fā)高電平結(jié)束本次操作。從某地址開始連續(xù)寫多字節(jié)的過程和上圖類似,在上圖中,寫完第一個(gè)數(shù)據(jù)后,等從設(shè)備發(fā)送ACK,主設(shè)備收到后不發(fā)結(jié)束信號(hào),而是接著寫第二個(gè)數(shù)據(jù),收到從設(shè)備發(fā)送ACK后再寫第三個(gè)數(shù)據(jù),以此類推,直到寫完最后一個(gè)數(shù)據(jù),收到從設(shè)備發(fā)送ACK后直接發(fā)結(jié)束信號(hào)。(2)指定單元讀該操作從所選器件的內(nèi)部地址讀一字節(jié)數(shù)據(jù),格式如下圖所示。在上圖中,當(dāng)SCL為高,SDA從高到低跳變時(shí),啟動(dòng)I2C。I2C向總線寫第一字節(jié)數(shù)據(jù),1010是器件的類型,表示EEPROM,LSB=0是寫命令,接到ACK應(yīng)答后,再發(fā)一字節(jié)數(shù)據(jù),該字節(jié)數(shù)據(jù)是EEPROM內(nèi)的單元地址;接到ACK后,因?yàn)橐獜膶懨钷D(zhuǎn)換為讀命令,所以I2C要重新啟動(dòng)一次(控制/狀態(tài)寄存器IICSTAT[5]=1),并發(fā)一個(gè)讀命令,接到ACK后就可以從總線上讀數(shù)據(jù)了。I2C讀數(shù)據(jù)要比I2C寫數(shù)據(jù)多一個(gè)重新啟動(dòng)過程。從某地址開始連續(xù)讀多字節(jié)的過程如上圖所示。在上圖中,讀完第一個(gè)數(shù)據(jù)后,主設(shè)備發(fā)送ACK,從設(shè)備收到后將第二個(gè)數(shù)據(jù)放到總線上,主設(shè)備接著讀第二個(gè)數(shù)據(jù),主設(shè)備讀完第二個(gè)數(shù)據(jù)后再發(fā)送ACK,從設(shè)備收到后將第三個(gè)數(shù)據(jù)放到總線上,依此類推,直到讀完最后一個(gè)數(shù)據(jù),主設(shè)備不發(fā)ACK,而是直接發(fā)結(jié)束信號(hào)。§13.2Exynos4412I2C接口簡(jiǎn)介Exynos4412處理器提供符合I2C協(xié)議的設(shè)備連接雙向數(shù)據(jù)線I2CSDA和I2CSCL。在I2CSCL高電平期間,I2CSDA的下降沿啟動(dòng),上升沿停止。Exynos4412處理器可以支持主發(fā)送、主接收、從發(fā)送和從接收4種工作模式。在主發(fā)送模式下,需要用到表13-2,13-3,13-4,13-5所示的寄存器。Exynos4412處理器提供8個(gè)I2C接口,為簡(jiǎn)便描述只按一個(gè)處理。在I2C總線的讀模式下,為了產(chǎn)生停止條件,在讀取最后一字節(jié)之后不允許產(chǎn)生ACK信號(hào)。這通過設(shè)置I2C控制寄存器I2CCON[7]=0來實(shí)現(xiàn)。如果I2C控制寄存器I2CCON[5]=0,則I2CCON[4]不能正常工作,因此務(wù)必將I2CCON[5]設(shè)置為1,即使不使用I2C中斷。我們下面的實(shí)驗(yàn)是Exynos4412通過I2C與MPU6050通訊來控制三軸陀羅儀,講述如何應(yīng)用I2C。如下圖所示,UPU6050的SDA和SCL引腳與Exynos4412的I2C控制器5的SDA和SCL引腳相接。UPU6050是9軸運(yùn)動(dòng)處理傳感器,我們對(duì)它不做詳細(xì)研究,我們只對(duì)它和Exynos4412的I2C通訊做說明。§13.3Exynos4412I2C控制寄存器Exynos4412I2C控制寄存器用來對(duì)I2C總線使能、時(shí)鐘配置、中斷使能、設(shè)中斷標(biāo)志等,具體如表所示。功

能位描

述初

值A(chǔ)CK使能[7]0=禁止產(chǎn)生ACK信號(hào),1=允許產(chǎn)生ACK信號(hào)0Tx時(shí)鐘選擇[6]=0,I2CCLK=PCLK/16;=1,I2CCLK=PCLK/5120Tx/Rx中斷使能[5]=0,禁止Tx/Rx中斷;=1,允許Tx/Rx中斷0清除中斷標(biāo)記[4]不能對(duì)該位寫1,系統(tǒng)自動(dòng)寫1時(shí),I2CSCL被拉低,I2C傳輸停止。寫0,清除中斷標(biāo)記,重新恢復(fù)中斷響應(yīng);讀出結(jié)果是1,正在執(zhí)行中斷程序,不能進(jìn)行寫操作;讀出結(jié)果是0,沒有中斷發(fā)生0發(fā)送時(shí)鐘[3:0]發(fā)送時(shí)鐘分頻值:Tx_CLOCK=I2CCLK/(I2CCON[3:0]+1)不定表13-2從器件地址位描

述初

值I2CADD[7:0]I2C7位從器件地址0x00我們還要用到I2C發(fā)送和接受數(shù)據(jù)寄存器,該寄存器各位的定義如表移位寄存器位描

述初

值I2CDS[7:0]I2C總線發(fā)送/接收數(shù)據(jù)移位寄存器0x00此外我們還要用到I2C地址寄存器,該寄存器各位的定義如表表13-3

表13-4我們還要用到I2C控制/狀態(tài)寄存器,該寄存器各位的定義如表所示。I2C控制/狀態(tài)寄存器(I2CSTAT)的高4位配合I2C控制寄存器(I2CCON)對(duì)I2C總線的工作過程進(jìn)行控制。I2CSTAT的低4位是I2C的狀態(tài)標(biāo)志,實(shí)際中使用較少。功

能位描

述初

值模式選擇[7:6]00=從接收模式,01=從發(fā)送模式;10=主接收模式,11=主發(fā)送模式00忙信號(hào)狀態(tài)/起始/停止條件[5]讀:0=總線不忙,1=總線忙;寫:0=產(chǎn)生停止條件,1=產(chǎn)生起始條件0串行數(shù)據(jù)輸入使能[4]0=禁止發(fā)送/接收;1=使能發(fā)送/接收0仲裁狀態(tài)位[3]0=總線仲裁成功;1=總線仲裁失敗0從地址狀態(tài)標(biāo)志[2]0=如果檢測(cè)到起始或停止條件,則清0;1=如果接收到的器件地址與保存在I2CADD中的相符,則置10

0地址狀態(tài)標(biāo)志[1]0=如果檢測(cè)到起始或停止條件,則清0;1=如果接收到的從器件地址為0,則置10

應(yīng)答位狀態(tài)標(biāo)志[0]0=最后收到的位是ACK;1=最后收到的位是1(ACK沒收到)0

表13-5§13.4使用Exynos4412I2C總線讀/寫方法1.開始條件(START

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論