《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 電源技術(shù) > 業(yè)界動態(tài) > CAT1025在I2C總線控制下的應(yīng)用

CAT1025在I2C總線控制下的應(yīng)用

2009-05-21
作者:單承剛

??? 摘 要:一種具有I2C串行總線的微控制器系統(tǒng)存儲器和電源監(jiān)控的完全解決方案。結(jié)合CAT1025芯片給出了LPC2103微控制器系統(tǒng)的電源監(jiān)控復(fù)位電路,介紹了基于I2C總線的2Kb EEPROM存儲器的讀寫過程,給出了相關(guān)應(yīng)用程序流程圖與部分軟件程序。
??? 關(guān)鍵詞:I2C總線;電源監(jiān)控;CAT1025;EEPROM

?

??? I2C BUS(Inter Integrated Circuit BUS)是NXP半導(dǎo)體公司推出的芯片間串行傳輸總線,它以2根連線實現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送,可以極方便地構(gòu)成多機系統(tǒng)和外圍器件擴展系統(tǒng)。I2C總線采用了器件地址的硬件設(shè)置方法,通過軟件尋址完全避免了器件的片選線尋址方法,從而使硬件系統(tǒng)具有最簡單而靈活的擴展方法。該總線由1條串行時鐘線SCL和1條串行數(shù)據(jù)線SDA組成,在同一組I2C總線上,可以掛接多個CPU及被控芯片,CPU 既可以作為主器件, 控制I2C總線的工作模式, 也可以作為從器件, 在其他CPU的控制下發(fā)送或接收數(shù)據(jù)[1]。
1 LPC2103中的I2C總線接口
??? LPC2103是一個基于支持實時仿真的16/32位ARM7 TDMI-S CPU的微控制器,內(nèi)部集成了兩路高速I2C總線,與I2C總線接口有關(guān)的專用寄存器有:(1)I2CONSET控制置位寄存器。當(dāng)向該寄存器寫入1時,I2C控制寄存器中相應(yīng)位置位,寫0到I2C控制寄存器的相應(yīng)位沒有影響;(2)I2STAT狀態(tài)寄存器。在I2C操作中,該寄存器提供詳細(xì)的狀態(tài)碼使軟件確定所需的下一步操作; (3)I2DAT數(shù)據(jù)寄存器。發(fā)送接收的數(shù)據(jù)都可從該寄存器寫入或讀取; (4)I2ADR從地址寄存器。包含從機模式下I2C接口操作的7位從地址; (5)I2SCLH占空比寄存器高半字和I2SCLL占空比寄存器低半字。分別用來確定I2C時鐘的高時間和低時間; (6)I2CONCLR控制清零寄存器。當(dāng)向該寄存器中的位寫1時,I2C控制寄存器中相應(yīng)位被清零。
1.1 I2C電氣連接
??? I2C總線接口均為開漏或開集電極輸出,因此需要為總線增加上拉電阻Rp。總線速率越高,總線上拉電阻就越小,100Kb/s總線速率通常使用5.1 KΩ的上拉電阻[2],如圖1 所示。

?


1.2 I2C總線時序
??? I2C總線上每傳輸1個數(shù)據(jù)位必須產(chǎn)生1個時鐘脈沖。SDA線上的數(shù)據(jù)必須在時鐘線SCL的高電平期間保持穩(wěn)定,數(shù)據(jù)線的電平狀態(tài)只有在SCL線的時鐘信號為低電平時才能改變,如圖2所示。

?

?

??? 其中數(shù)據(jù)發(fā)送起始信號和停止信號較為特殊,在SCL為高電平時,SDA從高電平向低電平切換表示起始信號;在SCL為高電平時,SDA由低電平向高電平切換表示停止信號。起始和停止信號一般由主機產(chǎn)生。起始信號作為一次傳送的開始,在起始信號后總線被認(rèn)為處于忙狀態(tài)。停止信號作為一次傳送的結(jié)束,在停止信號的某段時間后,總線被認(rèn)為再次處于空閑狀態(tài)。重復(fù)起始信號既作為上次傳送的結(jié)束,也作為下次傳送的開始。如圖3 所示[3]。

?

?

??? 發(fā)送起始信號后傳送的第1字節(jié)數(shù)據(jù)具有特別的意義,其中前7位為從機地址,最后1位為讀寫方向位(0表示寫,1表示讀)。結(jié)合本系統(tǒng),為實現(xiàn)I2C總線方式下對CAT1025的讀寫,發(fā)送起始信號第1字節(jié)前7位為從器件CAT1025的地址,如圖4所示。

?

?

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

?

?

??? LPC2103在I2C通信中可以配置為主控器也可以作為被控器,它具有4種操作模式:主發(fā)送模式、主接收模式、從發(fā)送模式和從接收模式。在本系統(tǒng)中為了實現(xiàn)對CAT1025內(nèi)EEPROM存儲器讀寫,采用了主發(fā)送模式和主接收模式。
2 與CAT1025的I2C總線配置
??? CAT1025是基于微控制器系統(tǒng)的存儲器和電源監(jiān)控的完全解決方案。它利用低功耗CMOS技術(shù)將2Kb的串行EEPROM存儲器和帶掉電保護(hù)的系統(tǒng)電源監(jiān)控電路集成在一起。存儲器采用400 kHz的I2C總線接口。由于ARM芯片的高速、低功耗和低工作電壓的工作特性,導(dǎo)致其噪聲容限低,對電源紋波、瞬態(tài)響應(yīng)性能、時鐘源的穩(wěn)定性和電源監(jiān)控的可靠性等諸多方面有很高的要求。采用I2C接口的專用電源監(jiān)控復(fù)位芯片CAT1025設(shè)計復(fù)位和I2C電路,保證了系統(tǒng)可靠性,其電路原理如圖6所示[4-5]:

?

?

??? CAT1025包含1個精確的Vcc監(jiān)控測電路和2個開漏輸出:RESET和。當(dāng)Vcc低于復(fù)位閾值電壓時,RESET引腳將變?yōu)楦唠娖剑?IMG src="http://files.chinaaet.com/old/uploadfiles/jishu/jslw/20090521021845671.gif" border=0>將變?yōu)榈碗娖?。CAT1025還含有1個寫保護(hù)輸入(WP),如果WP連接高電平,則寫操作被禁止。LPC2103的P0.2和P0.3口若工作在第二功能模式下為I2C 0路的時鐘線和數(shù)據(jù)線,分別與CAT1025的SCL與SDA相連。Vcc電壓監(jiān)控電路提供了硬件數(shù)據(jù)保護(hù)功能,防止在Vcc降到低于復(fù)位閾值電壓或上電時Vcc上升到復(fù)位閾值電壓之前對存儲器執(zhí)行寫操作。I2C總線對CAT1025進(jìn)行讀寫操作的過程介紹如下。
2.1 I2C接口的配置
??? 圖7 為I2C總線操作初始化流程圖。

?

?

??? 使用LPC2103的I2C 0路總線實現(xiàn)對CAT1025的讀寫。設(shè)置P0.2和P0.3口工作在第二功能模式下:
??? PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; /* P0.2:IICSCL, P0.3:IICSDA*/
??? 為了控制I2C通信的波特率,需要設(shè)置 I2SCLH、I2SCLL寄存器。其中I2SCLH定義SCL高電平所保持的PCLK周期數(shù),而I2SCLL定義SCL低電平所保持的PCLK周期數(shù)。
??? I2SCLH = (Fpclk / uiFi2c + 1)? / 2; /* 設(shè)定I2C時鐘*/
??? I2SCLL? = (Fpclk / uiFi2c) / 2;
??? 對I2CONCLR、I2CONSET寄存器進(jìn)行設(shè)置,清零I2C通信的相關(guān)標(biāo)志位,使能I2C接口功能。
??? I2CONCLR = 0x2C;
??? I2CONSET = 0x40;????????????????????????????????????? /* 使能主I2C */
??? I2C總線采用中斷方式來檢測每個字節(jié)的傳送是否成功, 因此需要定義中斷處理程序, 并且使能中斷。設(shè)中斷處理程序入口地址為IRQ_I2C, 則程序語句為:
??? /*? 設(shè)置I2C中斷 */
??? VICIntSelect = 0x00000000;? /* 設(shè)置所有通道為IRQ中斷 */
??? VICVectCntl0 = (0x20 | 0x09);? /* I2C通道分配最高優(yōu)先級? */
??? VICVectAddr0 = (int32)IRQ_I2C;/* 設(shè)置I2C中斷向量 */
??? VICIntEnable = 1 <<9;???????/* 使能I2C中斷 */
2.2 軟件設(shè)計[6]
2.2.1 主模式下向CAT1025發(fā)送數(shù)據(jù)程序流程
??? /* 從起始地址0x00寫入10個數(shù)據(jù) */
??? I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x00, uiDataBuf, 10);
??? I2C_WriteNByte實現(xiàn)了向CAT1025器件起始地址0x00處寫入10個數(shù)據(jù)。ONE_BYTE_SUBA表示單字節(jié)地址,0x00表示從器件CAT1025起始地址,uiDataBuf表示寫入數(shù)據(jù)緩沖區(qū)指針,10表示寫入數(shù)據(jù)的個數(shù)。圖8為寫入過程程序流程圖。

?


2.2.2 主模式下從CAT1025讀取數(shù)據(jù)程序流程
??? /* 讀回剛才寫入的數(shù)據(jù) */
??? I2C_ReadNByte(CAT1025, ONE_BYTE_SUBA, 0x00, uiDataBuf, 10);
??? I2C_ReadNByte實現(xiàn)了向CAT1025器件起始地址0x00處依次讀入10個數(shù)據(jù)。ONE_BYTE_SUBA表示單字節(jié)地址,0x00表示從器件CAT1025起始地址,uiDataBuf,表示讀入數(shù)據(jù)緩沖區(qū)指針,10表示要讀入數(shù)據(jù)的個數(shù)。圖9為讀入過程程序流程圖。

?


2.2.3 I2C中斷處理過程
??? 對于硬件I2C接口,通常都使用中斷的方式進(jìn)行操作。當(dāng)I2C的狀態(tài)發(fā)生變化時,就會產(chǎn)生中斷,因此,發(fā)生I2C中斷時,必須要讀取I2C狀態(tài)寄存器,根據(jù)當(dāng)前的狀態(tài)采取相應(yīng)的措施。 主模式下I2C總線讀寫操作步驟:
??? (1)通過軟件置位STA進(jìn)入主發(fā)送、接收模式,I2C邏輯在總線空閑后即發(fā)送一個起始條件。
??? (2)當(dāng)發(fā)送完起始條件后,SI會置位,此時I2STAT中的狀態(tài)代碼為08H,該狀態(tài)代碼用于中斷服務(wù)程序的處理。
??? (3)把從地址和讀寫操作位裝入I2DAT(數(shù)據(jù)寄存器),然后清零SI位,開始發(fā)送從地址和R/W位。
??? (4)當(dāng)從地址和R/W位已發(fā)送且接收到應(yīng)答位之后,SI位再次置位,根據(jù)I2STAT寄存器中的狀態(tài)碼分別執(zhí)行接收、發(fā)送數(shù)據(jù)動作。
??? 基于I2C總線的CAT1025存儲器和電源解決方案已經(jīng)廣泛應(yīng)用在各種微控制器系統(tǒng)中。本文給出的LPC2103微控制器系統(tǒng)的電源監(jiān)控復(fù)位電路,保證了系統(tǒng)的高可靠性。利用I2C總線方式對CAT1025內(nèi)2Kb EEPROM存儲器進(jìn)行讀寫準(zhǔn)確性高、速度快,可以滿足許多具有存儲性能的系統(tǒng)掉電后數(shù)據(jù)不丟失的要求。
參考文獻(xiàn)
[1]?廣州周立功單片機發(fā)展有限公司.EasyARM2103教材.2007:172-190.
[2]?梁建華,肖伸平.基于S3C44B0X 的I2C 總線設(shè)計.微計算機信息,2006(5- 2): 143- 144.
[3]?范應(yīng)輝,張雷,陽富民. 基于Linnx的I2C總線驅(qū)動研究與實現(xiàn)[J].計算機工程與設(shè)計,2007:28-16:3953-3956.
[4]?王立平,王新梅. Linux環(huán)境下基于I2C 總線的EEPROM 驅(qū)動程序.國外電子元器件,2007(1): 4-7.
[5]?姚亞峰, 陳建文, 黃載祿.嵌入式系統(tǒng)中EEPROM 接口及控制電路設(shè)計. 半導(dǎo)體技術(shù),2007,32(4):328-331.
[6]?徐柳茂,黃永強,蔣念東,等.嵌入式Linux中I2C驅(qū)動程序的應(yīng)用設(shè)計[J]. 國外電子元器件,2007(2): 21-25.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。