內(nèi)部集成電路(I2C)協(xié)議_第1頁
內(nèi)部集成電路(I2C)協(xié)議_第2頁
內(nèi)部集成電路(I2C)協(xié)議_第3頁
內(nèi)部集成電路(I2C)協(xié)議_第4頁
內(nèi)部集成電路(I2C)協(xié)議_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

4.10通用串行通信接口(USCI)

—I2C模式主要內(nèi)容I2C總線協(xié)議I2C簡介尋址模式總線時序MSP430I2C模塊模塊的特性各類描述符解析模塊的中斷源及相關(guān)的中斷處理函數(shù)應(yīng)用示例I2CBUS接口I2C簡介及應(yīng)用

I2CBUS(InterICBUS)是Philips推出的芯片間串行傳輸總線,它以2根連線實現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送,可以極方便地構(gòu)成多機系統(tǒng)和外圍器件擴展系統(tǒng)。I2C總線采用了器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有最簡單而靈活的擴展方法。I2C接口的標準傳輸速率為100Kbit/s,快速傳輸可達400Kbit/s,目前還增加了高速模式,最高傳輸速率可達3.4Mbit/s。

I2C用于連接集成電路和功能模塊,在它們之間交互數(shù)據(jù)或控制信息。很多設(shè)備如:鍵盤和LED控制器,以及存儲設(shè)備EEPROM和FLASH都配備了I2C

總線接口。I2CBUS接口特性兩條數(shù)據(jù)線,SDA(串行數(shù)據(jù)線)和SCL(串行時鐘線);7位或10位設(shè)備尋址模式;每個連接到總線上的器件地址由芯片內(nèi)部硬件電路和外部地址同時決定,避免了片選線的線連接方法,并建立簡單的主從關(guān)系,主器件提供接收和發(fā)送所必須的時序;真正的多主總線,帶有競爭監(jiān)測和仲裁電路,多個主機任意發(fā)送而不破壞總線上的數(shù)據(jù);同步時鐘允許器件以不同的數(shù)據(jù)傳輸率進行通信;I2CBUS接口常用術(shù)語發(fā)送器:本次傳輸中發(fā)送數(shù)據(jù)到總線的器件;接收器:本次傳輸中從總線接收數(shù)據(jù)的器件;主機:初始化發(fā)送、產(chǎn)生時鐘信號和終止發(fā)送的器件,它可以是發(fā)送器或接收器。主機通常是微控制器;從機:被主機尋址的器件,可以是發(fā)送器或接收器。多主器件:多個主器件可以同時企圖控制總線而不破壞總線信息。I2CBUS接口

I2C總線是個多主機總線,所有主器件都可以發(fā)出同步時鐘,但由于SCL接口的”線與”結(jié)構(gòu),一旦一個主器件時鐘跳變?yōu)榈碗娖?,將使SCL線支持為低電平直至始終到達高電平,因此SCL線上時鐘低電平時間由各器件中時鐘最長的低電平時間決定,而時鐘高電平時間則由高電平時間最短的器件決定??偩€速率越高,總線上拉電阻就越小,100Kbit/s總線速率,通常使用5.1K歐姆的上拉電阻I2CBUS接口數(shù)據(jù)形式S從方地址加讀寫控制數(shù)據(jù)存放地址數(shù)據(jù)P I2C因為有兩種尋址模式,所以它具體的格式有兩種,在下一節(jié)介紹,這里主要按分類部分來描述數(shù)據(jù)格式??偟臄?shù)據(jù)傳送為:主方每發(fā)送8個BIT,必須等待從方的一個反饋ACK。停止信號作為一次傳送的結(jié)束,在該信號之后,總線被認為再次處于空閑狀態(tài)。起始信號通常由主機發(fā)出,它作為一次傳輸?shù)拈_始。在起始信號后總線被認為處于忙的狀態(tài)尋址模式 7位尋址模式最多可以尋址128個設(shè)備, 10位尋址最多可以尋址1024個設(shè)備。

第一個字節(jié)是由7位從地址和R/W(讀寫位)組成,不論總線傳送地址信息還是數(shù)據(jù)信息,每個字節(jié)傳送完畢接收設(shè)備都會發(fā)送一個反饋響應(yīng)位(ACK)。后面都是數(shù)據(jù)信息,直到接收到停止信號。 但目前幾乎所有的I2C應(yīng)用模塊都采用這樣的格式,即第二字節(jié)是給出從方的存放數(shù)據(jù)的地址(RAM或FLASH地址)。而后面才是真正的數(shù)據(jù)(數(shù)量不限),且只需要給出首存放地址,后面的數(shù)據(jù)會依次存放在首地址后。當然,如果第二字節(jié)作為地址不夠,那么第三字節(jié)也可以作為地址部分。7位尋址模式7位尋址模式中,第一個字節(jié)是7位從地址和R/W讀寫控制位。每個字節(jié)后,接收機發(fā)送ACK位。如果8位不夠,可以繼續(xù)往下順延,不過每個字節(jié)后必須等待一個ACK.10位尋址模式10位尋址模式中,11110b加上10位從地址的高兩位及R/W位組成第一個字節(jié)數(shù)據(jù)。每個字節(jié)結(jié)束后,接收器發(fā)送ACK位。下一個為10位從地址的剩余8位,其后是ACK位和8位數(shù)據(jù)。不停止傳輸而改變傳輸?shù)膶傩灾鳈C可以在沒有停止傳輸時,通過產(chǎn)生重復(fù)的START條件,改變SDA上數(shù)據(jù)流的方向,即讀或?qū)?。這稱為RESTART。START后,按照R/W確定的新數(shù)據(jù)方向再次發(fā)出從芯片的地址。I2C總線時序

在數(shù)據(jù)傳送過程中,必須確認數(shù)據(jù)傳送的開始和結(jié)束,這通過起始和結(jié)束信號識別。起始位:SCL=1時,SDA上有下降沿停止位:SCL=1時,SDA上有上升沿所以只有當SCL為低時才允許SDA改變數(shù)據(jù),不然會被誤判為起始位或停止位而造成錯誤,如圖:起始信號結(jié)束信號SDASCLSP

I2C總線數(shù)據(jù)傳送時,每傳送一個字節(jié)數(shù)據(jù)后都必須有應(yīng)答信號(A)。主控器接收數(shù)據(jù)時,如果要結(jié)束通信時,將在停止位之前發(fā)送非應(yīng)答信號()。

A=應(yīng)答(SDA為低) =非應(yīng)答(SDA為高)SDASCL應(yīng)答信號非應(yīng)答信號AAI2C總線時序I2C總線時序S從器件地址WA數(shù)據(jù)A數(shù)據(jù)…A/AP主發(fā)送模式:S從器件地址RA數(shù)據(jù)A數(shù)據(jù)…AP主接收模式:S從器件地址WA數(shù)據(jù)A數(shù)據(jù)…A/AP/RS從發(fā)送模式:S從器件地址RA數(shù)據(jù)A數(shù)據(jù)…AP從接收模式:

一般I2C具有4種操作模式:主發(fā)送模式、主接收模式、從發(fā)送模式和從接收模式。主機到從機主機到從機A=應(yīng)答(SDA為低)A=非應(yīng)答(SDA為高)S=起始信號P=停止信號RS=重復(fù)起始信號I2C時鐘同步

仲裁過程中,實際由于電氣特性,已經(jīng)對各個不同主設(shè)備的時鐘進行同步處理,所以各個設(shè)備使用的時鐘都是一樣的、同步后的SCL。同步規(guī)則就是:SCL線上時鐘低電平時間由各器件中時鐘最長的低電平時間決定,而時鐘高電平時間則由高電平時間最短的器件決定??偟脑瓌t是:低電平否決高電平。設(shè)備1發(fā)出SCL:設(shè)備2發(fā)出SCL:總線SCL:I2C總線仲裁

當兩個設(shè)備同時發(fā)出起始位進行數(shù)據(jù)傳輸時,相互競爭的設(shè)備使它們的時鐘保持同步。沒有檢測到?jīng)_突之前,每個設(shè)備都認為只有自己在使用總線。每個設(shè)備都有仲裁功能,它們都去檢測SDA線,檢測到自己發(fā)送的數(shù)據(jù)和總線上數(shù)據(jù)不匹配的設(shè)備就失去仲裁能力。 如果兩個或更多的設(shè)備發(fā)送的第一個字節(jié)的內(nèi)容相同,那么仲裁就發(fā)生在隨后傳輸中。失去仲裁的主設(shè)備轉(zhuǎn)變成從接收模式。 注意:數(shù)據(jù)沖突是因為邏輯低電平可以把邏輯高電平否決。在同一時刻如果兩設(shè)備一個發(fā)高電平一個發(fā)低電平,那么 總線上是低電平。通用串行通信接口(USCI)模塊通用串行通信接口(USCI)模塊支持多種串行通信模式。不同的USCI模塊支持不同的模式USCI_Ax模塊支持:UART模式IrDA通信的脈沖整形LIN通信的自動波特率檢測SPI模式USCI_Bx模塊支持:I2C模式SPI模式I2C模塊特點MSP430的I2C模塊有如下特點:與Philips半導體I2C規(guī)范v2.1兼容7位和10位芯片尋址方式全呼開始/重新開始/停止多主機發(fā)送/接收模式從接收/發(fā)送模式支持100kbps的標準模式和高達400kbps的快速模式主機模式下UCxCLK頻率可編程為低功耗設(shè)計用于LPMx模式自動喚醒的從接收器開始檢測LPM4模式下的從模式操作初始化或重新配置USCI模塊

推薦使用的USCI模塊初始化或重新配置步驟:1、置位UCSWRST2、通過UCSWRST=1初始化所有USCI寄存器3、端口配置4、軟件清除UCSWRST5、使能中斷(可選)I2C模式下的USCI中斷USCI模塊只有一個中斷向量,該中斷向量由發(fā)送、接收以及狀態(tài)改變復(fù)用。USCI_Ax和USCI_Bx不使用同一個中斷向量。每個中斷標志都有自己的中斷允許位。GIE位置位時,如果使能一個中斷,將會產(chǎn)生中斷請求。在集成有DMA控制器的芯片上,UCTXIFG和UCRXIFG標志將控制DMA傳輸。I2C發(fā)送中斷操作為了表明UCBxTXBUF已準備好接收另一個字符,發(fā)送器將置位UCTXIFG。如果此時UCTXIE和GIE也已經(jīng)置位,則會產(chǎn)生一個中斷請求。當有字符寫入UCBxTXBUF或接收到NACK信號時,UCTXIFG會自動復(fù)位。當選擇I2C模式且UCSWRST=1時,UCTXIFG置位。PUC后或UCSWRST=1時,UCTXIE復(fù)位。I2C接收中斷操作當接收到一個字節(jié)并將其裝載到UCBxRXBUF時,UCRXIFG中斷標志置位。如果此時UCRXIE和GIE都置位,將產(chǎn)生一個中斷請求。PUC后或UCSWRST=1時,UCRXIFG和UCTXIE復(fù)位。對UCxRXBUF進行讀操作之后,UCRXIFG會自動復(fù)位。I2C模式下可用的USCI寄存器名稱描述訪問復(fù)位值寄存器訪問UCBxCTLW0USCI_Bx控制字0讀/寫0101h字UCBxBRWUSCI_Bx波特率控制字讀/寫0000h字UCBxSTATUSCI_Bx狀態(tài)寄存器讀/寫00h字節(jié)UCBxRXBUFUSCI_Bx接收緩存讀/寫00h字節(jié)UCBxTXBUFUSCI_Bx發(fā)送緩存讀/寫00h字節(jié)UCBxI2COAUSCI_BxI2C本機地址

讀/寫0000h字UCBxI2CSAUSCI_BxI2C從機地址讀/寫0000h字UCBxICTLUSCI_Bx中斷控制讀/寫0200h字UCBxIEUSCI_Bx中斷使能讀/寫00h字節(jié)UCBxIFGUSCI_Bx中斷標志讀/寫02h字節(jié)UCBxIVUSCI_Bx中斷向量讀0000h字USCI_Bx控制寄存器0(UCBxCTL0)UCA10Bit7本機地址模式選擇07位本機地址模式10位本機地址模式UCSLA10Bit6從機地址模式選擇7位從機地址模式10位從機地址模式UCMMBit5多主機環(huán)境的選擇0單主機環(huán)境。該系統(tǒng)內(nèi)沒有別的主機。禁止地址比較單元。1多主機環(huán)境。UCMSTBit3主機模式選擇。當主機在多主機環(huán)境下丟失仲裁時(UCMM=1),UCMST自動復(fù)位,模塊作為從機操作。0從機模式1主機模式UCMODExBits2-1USCI模式。當UCSYNC=1時,UCMODEx位選擇同步模式。003線SPI01四線SPI(如果UCxSTE=1,使能主/從機)10四線SPI(如果UCxSTE=0,使能主/從機)11I2C模式UCYNCBit0使能同步模式。0異步模式1同步模式USCI_Bx控制寄存器1(UCBxCTL1)UCSSELxBits7-6USCI時鐘源選擇。這些位選擇BRCLK時鐘源。00UCLKI01ACLK10SMCLK11SMCLKUCTRBit4發(fā)送/接收。0接收1發(fā)送UCTXNACKBit3發(fā)送NACK。當NACK發(fā)送完畢后,UCTXNACK自動清零。0正常應(yīng)答1產(chǎn)生NACK信號UCTXSTPBit2在主模式下發(fā)送STOP條件。在從模式下忽略該位。在主接收模式下,NACK信號在STOP條件前。在產(chǎn)生STOP條件后,UCTXSTP自動清零。

0無STOP條件產(chǎn)生1產(chǎn)生STOP條件UCTXSTTBit1在主模式下發(fā)送START條件。在從模式下忽略該位。在主接收模式下,NACK信號在重復(fù)START條件之前。發(fā)送START條件和地址信息后,UCTXSTT自動清零。0不產(chǎn)生START條件1產(chǎn)生START條件UCSWRSTBit0使能軟件復(fù)位。0禁止。USCI復(fù)位釋放。1使能。USCI保持在復(fù)位狀態(tài)。程序流程圖TXISR判斷是否發(fā)送完數(shù)組中所有數(shù)據(jù)初始化I2C模塊初始化發(fā)送數(shù)組TXData[]進入無限循環(huán),設(shè)置要發(fā)送的數(shù)據(jù),發(fā)送起始條件指針加1,繼續(xù)發(fā)送發(fā)送STOP條件主機ISR初始化I2C模塊判斷發(fā)送緩沖是否為空,為空說明上次發(fā)送完畢本次接收到的數(shù)據(jù)賦值給指針指向的變量從機判斷STOP條件是否發(fā)送,若否,則等待NY主從機接口電路圖主機模式——配置I2C模塊設(shè)置P8.5(SDA)P8.6(SCL)為外設(shè)功能,輸出使能軟件復(fù)位I2C主機,同步模式設(shè)置波特率主模式初始化流程voidmain(void){ WDTCTL=WDTPW+WDTHOLD; P8SEL|=BIT5+BIT6; P8DIR|=BIT5+BIT6; UCB1CTL1|=UCSWRST; UCB1CTL0=UCMST+UCMODE_3+UCSYNC; UCB1CTL1=UCSSEL_2+UCSWRST; UCB1BR0=12; UCB1BR1=0; UCB1I2CSA=0x48; UCB1CTL1&=~UCSWRST; UCB1IE|=UCTXIE;}初始化代碼使用SMCLK,保持軟件復(fù)位設(shè)置從機地址清除軟件復(fù)位,恢復(fù)運行使能發(fā)送中斷主機——循環(huán)while(1){//Delayrequiredbetweentransactionfor(i=0;i<10;i++);//TXarraystartaddressPTxData=(unsignedchar*)TxData;TXByteCtr=sizeofTxData;

//I2CTX,startconditionUCB0CTL1|=UCTR+UCTXSTT;//EnterLPM0,enableinterrupts__bis_SR_register(LPM0_bits+GIE);__no_operation();

//Ensurestopconditiongotsentwhile(UCB0CTL1&UCTXSTP);}主機——發(fā)送中斷#pragmavector=USCI_B0_VECTOR__interruptvoidUSCI_B0_ISR(void){switch(__even_in_range(UCB0IV,12)){…case12://Vector12:TXIFGif(TXByteCtr)//CheckTXbytecounter{UCB0TXBUF=*PTxData++;//LoadTXbufferTXByteCtr--;//DecrementTXbytecounter}else{UCB0CTL1|=UCTXSTP;//I2CstopconditionUCB0IFG&=~UCTXIFG;//ClearUSCI_B0TXintflag__bic_SR_register_on_exit(LPM0_bits);//ExitLPM0}…}}MSP430在該模式下作為主控器,向從機發(fā)送數(shù)據(jù)。數(shù)據(jù)流向如下圖所示:MSP430(主)I2C應(yīng)用示例——主機模式I2C應(yīng)用示例——主機模式主模式數(shù)據(jù)發(fā)送的時序格式S從器件地址WA數(shù)據(jù)A數(shù)據(jù)…A/AP起始位,用于指示傳輸?shù)拈_始。結(jié)束位,用于指示傳輸?shù)慕Y(jié)束。第一字節(jié)的前七位包含接收器件的從地址,第8位表示為寫操作。每發(fā)送完一個字節(jié)數(shù)據(jù),接收數(shù)據(jù)的器件就發(fā)送一個應(yīng)答位每發(fā)送完一個字節(jié)數(shù)據(jù),接收數(shù)據(jù)的器件就發(fā)送一個應(yīng)答位每發(fā)送完一個字節(jié)數(shù)據(jù),接收數(shù)據(jù)的器件就發(fā)送一個應(yīng)答位每發(fā)送完一個字節(jié)數(shù)據(jù),接收數(shù)據(jù)的器件就發(fā)送一個應(yīng)答位I2C應(yīng)用示例——主機模式主模式數(shù)據(jù)發(fā)送的時序格式S從器件地址WA數(shù)據(jù)A數(shù)據(jù)…A/AP

(1)(2)(3)(3)(4)通過軟件置位UCTR和UCTXSTT進入I2C主發(fā)送模式,I2C邏輯在總線空閑后立即發(fā)送一個起始信號;在起始信號發(fā)送結(jié)束后,將從機地址和寫操作位裝入UCB0TXBUF

,UCTXIFG置位,進入中斷;當從機地址和W位發(fā)送結(jié)束并收到應(yīng)答位(A)后,UCTXIFG位再次置位。此時將要發(fā)送的數(shù)據(jù)裝入UCTXIFG,開始發(fā)送數(shù)據(jù);在數(shù)據(jù)正確發(fā)送后,

UCTXIFG置位。此時如果要結(jié)束本次操作,那么置位UCTXSTT位,發(fā)送結(jié)束信號。從機——配置I2C模塊//EnableSWresetUCB0CTL1|=UCSWRST;//I2CSlave,synchronousmodeUCB0CTL0=UCMODE_3+UCSYNC;//OwnAddressis048hUCB0I2COA=0x48;//ClearSWreset,resumeoperationUCB0CTL1&=~UCSWRST;

//EnableSTT,STP&RXinterrupt

UCB0IE|=UCSTPIE+UCSTTIE+UCRXIE;從機循環(huán)while(1){//StartofRXbufferPRxData=(unsignedchar*)RxBuffer;//ClearRXbytecountRXByteCtr=0;//EnterLPM0,enableinterrupts,RemaininLPM0untilmasterfinishesTX__bis_SR_register(LPM0_bits+GIE);//Setbreakpoint>>here<<andread

__no_operation();}從機——中斷#pragmavector=USCI_B0_VECTOR__interruptvoidUSCI_B0_ISR(void){switch(__even_in_range(UCB0IV,12)){…case6://Vector6:STTIFGUCB0IFG&=~UCSTTIFG;break;case8://Vector8:STPIFGUCB0IFG&=~UCSTPIFG;if(RXByteCtr)//CheckRXbytecounter__bic_SR_register_on_exit(LPM0_bits);break;case10://Vector10:RXIFG*PRxData++=UCB0RXBUF;//GetRX'dbyteintobufferRXByteCtr++;break;…}}主機——模塊配置——庫//InitializeMasterI2C_masterInit(__MSP430_BASEADDRESS_USCI_B0__,I2C_CLOCKSOURCE_SMCLK,UCS_getSMCLK(__MSP430_BASEADDRESS_UCS__),I2C_SET_DATA_RATE_400KBPS);//SpecifyslaveaddressI2C_setSlaveAddress(__MSP430_BASEADDRESS_USCI_B0__,SLAVE_ADDRESS);//SetTransmitmodeI2C_setMode(__MSP430_BASEADDRESS_USCI_B0__,I2C_TRANSMIT_MODE);//EnableI2CModuletostartoperationsI2C_enable(__MSP430_BASEADDRESS_USCI_B0__);主機主循環(huán)——庫while(1){//EnabletransmitInterruptI2C_enableInterrupt(__MSP430_BASEADDRESS_USCI_B0__,I2C_TRANSMIT_INTERRUPT);//Delaybetweeneachtransaction__delay_cycles(50);

//LoadTXbytecountertransmitCounter=1;//InitiatestartandsendfirstcharacterI2C_masterMultiByteSendStart(__MSP430_BASEADDRESS_USCI_B0__,transmitData[0]);//EnterLPM0withinterruptsenabled__bis_SR_register(LPM0_bits+GIE);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論