數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用課件_第1頁
數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用課件_第2頁
數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用課件_第3頁
數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用課件_第4頁
數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用課件_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用I2C(I2C、IIC)總線概述I2C(Inter-IntegratedCircuit)總線是Philips公司最先推出的一種雙向數(shù)據(jù)傳輸總線,僅使用兩根連線便可以實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳輸。在I2C總線中,一條為串行數(shù)據(jù)線(SDA),另一條為串行時(shí)鐘線(SCL)。I2C總線占用引腳少,接口協(xié)議簡單。目前多數(shù)公司均推出了I2C總線接口的各種器件,如存儲(chǔ)器、A/D、D/A、鍵盤、LCD等,大大方便了用戶的選擇。I2C(I2C、IIC)總線概述I2C(Inter-II2C(I2C、IIC)總線概述I2C總線采用兩線制,由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成。I2C總線對(duì)數(shù)據(jù)通信進(jìn)行了嚴(yán)格的定義。典型的I2C總線系統(tǒng)結(jié)構(gòu)如下圖所示。I2C總線上可以掛接多個(gè)器件,其中每個(gè)器件必須都支持I2C總線通信協(xié)議。I2C(I2C、IIC)總線概述I2C總線采用兩線制,I2C(I2C、IIC)總線概述其中,I2C總線的SCL和SDA端口(開漏極,線與)在使用時(shí)必須連接上拉電阻。I2C總線的傳輸速率可以支持100khz和400khz兩種,對(duì)于100khz的速率一般采用10k歐姆的上拉電阻,對(duì)于400khz的速率一般采用2k歐姆的上拉電阻。I2C(I2C、IIC)總線概述其中,I2C總線的SCI2C(I2C、IIC)總線特點(diǎn)I2C總線最主要的優(yōu)點(diǎn)是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本??偩€的長度可高達(dá)25英尺,并且能夠以10Kbps的最大傳輸速率支持40個(gè)組件。I2C總線的另一個(gè)優(yōu)點(diǎn)是,它支持多主控(multimastering),其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線(I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能)。一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。當(dāng)然,在任何時(shí)間點(diǎn)上只能有一個(gè)主控。

I2C(I2C、IIC)總線特點(diǎn)I2C總線最主要的優(yōu)點(diǎn)I2C(I2C、IIC)總線協(xié)議I2C總線協(xié)議定義如下:

1只有在總線空閑時(shí)才允許啟動(dòng)數(shù)據(jù)傳送;(時(shí)鐘線與數(shù)據(jù)線都為高電平時(shí)為空閑信號(hào))

2在數(shù)據(jù)傳送過程中,當(dāng)時(shí)鐘線為高電平時(shí)數(shù)據(jù)線必須保持穩(wěn)定狀態(tài),不允許有跳變;時(shí)鐘線為高電平時(shí)數(shù)據(jù)線的任何電平變化將被看作總線的起始或停止信號(hào)。起始信號(hào)。時(shí)鐘線保持高電平期間,數(shù)據(jù)線電平從高到低的跳變作為I2C總線的起始信號(hào)。停止信號(hào)時(shí)鐘線保持高電平期間,數(shù)據(jù)線電平從低到高的跳變作為I2C總線的停止信號(hào)I2C(I2C、IIC)總線協(xié)議I2C總線協(xié)議定義如I2C總線的信號(hào)類型I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號(hào),它們分別是:開始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào)。開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。這些信號(hào)中,起始信號(hào)是必需的,結(jié)束信號(hào)和應(yīng)答信號(hào),都可以不要。I2C總線的信號(hào)類型I2C總線在傳送數(shù)據(jù)過程中共有三種類型信I2C總線的信號(hào)類型開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。I2C總線的信號(hào)類型開始信號(hào):SCL為高電平時(shí),SDA由高電I2C總線的信號(hào)類型位的傳輸

SDA線上的數(shù)據(jù)必須在時(shí)鐘的高電平周期保持穩(wěn)定,數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL線的時(shí)鐘信號(hào)是低電平時(shí)才能改變。I2C總線的信號(hào)類型位的傳輸

SDA線上的數(shù)據(jù)必須在時(shí)鐘I2C總線接口EEPROM存儲(chǔ)器目前,市場(chǎng)上I2C總線接口器件有多種,利于A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、時(shí)鐘芯片和存儲(chǔ)器等。這里以典型的I2C總線接口的存儲(chǔ)器為例進(jìn)行介紹。I2C總線接口EEPROM存儲(chǔ)器是一種采用I2C總線接口的串行總線存儲(chǔ)器,這類存儲(chǔ)器具有體積小、引腳少、功耗低、工作電壓范圍寬等特點(diǎn)。目前,Atmel、Microchip、National等公司均提供各種型號(hào)的I2C總線接口的串行EEPROM(電可擦出可編程只讀存儲(chǔ)器,即ElectricallyErasableProgrammableRead-OnlyMemory)存儲(chǔ)器。在單片機(jī)系統(tǒng)中使用較多的EEPROM存儲(chǔ)器是24系列串行EEPROM。它具有型號(hào)多、容量大、支持I2C總線協(xié)議、占用單片機(jī)I/O端口少、芯片擴(kuò)展方便、讀寫簡單等優(yōu)點(diǎn)。I2C總線接口EEPROM存儲(chǔ)器目前,市場(chǎng)上I2C總線接口器AT24CXX這里以Atmel公司的產(chǎn)品為例進(jìn)行介紹,At24Cxx系列是Atmel公司典型的I2C串行總線的EEPROM,工作于從器件模式。AT24Cxx:01~1024容量=xxX1Kbit型號(hào)系列列表AT24C01:1K(128X8) AT24C02:2K(256X8)AT24C04:4K(512X8) AT24C08:8K(1KX8)AT24C16:16K(2KX8) AT24C512:512K(64KX8)AT24C1024:1M(128KX8)例如AT24C08存儲(chǔ)容量為8k位(1024個(gè)字節(jié)*8位容量計(jì)算方法AT24CXX這里以Atmel公司的產(chǎn)品為例進(jìn)行介紹,At2AT24CXXI2C總線接口的EEPROM存儲(chǔ)器工作電壓可選擇低電壓或標(biāo)準(zhǔn)電壓(1.8v、2.7v、5v)100khz(1.8v)或400khz(2.7v、5v)8字節(jié)頁寫操作(1k、2k),16字節(jié)頁寫操作(4k、8k、16k)內(nèi)部數(shù)據(jù)寫周期(最大5ms)重復(fù)擦寫100萬次以上內(nèi)容數(shù)據(jù)可以掉電保存100年AT24CXXI2C總線接口的EEPROM存儲(chǔ)器AT24CXX引腳定義如下:Vcc、GND為芯片的供電引腳A0、A1、A2為芯片的引腳地址和頁面選擇輸入SCL為I2C總線接口的串行時(shí)鐘線SDA為I2C總線接口的串行數(shù)據(jù)線(高位在前,低位在后;上升沿?cái)?shù)據(jù)寫入,下降沿?cái)?shù)據(jù)讀出)WP為寫保護(hù)引腳,當(dāng)WP接高電平時(shí),只能對(duì)該器件進(jìn)行讀操作,不能寫操作,用于硬件數(shù)據(jù)的保護(hù);當(dāng)WP接低電平時(shí),可以對(duì)該器件進(jìn)行讀寫操作。AT24CXX引腳定義如下:AT24Cxx重要參數(shù)AT24Cxx重要參數(shù)AT24CXX芯片地址具有I2C接口的EEPROM存儲(chǔ)器的前面4為全部都是1010頁面地址Px:不用連接芯片地址Ax:需要連接為高電平或低電平R/W:1——讀操作;0——寫操作每片芯片16/32頁,每頁8字節(jié),地址需要7/8位,總線最大可掛8片每片芯片32頁,每頁16字節(jié),地址需要9位,總線最大可掛4片每片芯片64頁,每頁16字節(jié),地址需要10位,總線最大可掛2片每片芯片128頁,每頁16字節(jié),地址需要11位,總線最大可掛1片AT24CXX芯片地址具有I2C接口的EEPROM存儲(chǔ)器的前AT24Cxx單元地址AT24C01:00H-7FH128x8bitAT24C02:00H-FFH256x8bitAT24C04:000H-1FFH512x8bitAT24C08:000H-3FFH1024x8bitAT24C16:000H-7FFH2048x8bitAT24C32:000H-FFFH4096x8bitAT24C64:0000H-1FFFH8192x8bitAT24C128:0000H-3FFFH16384x8bitAT24C256:0000H-7FFFH32768x8bitAT24C512:0000H-FFFFH65536x8bitAT24Cxx單元地址AT24C01:00H-7FH12AT24CXX電氣特性AT24CXX電氣特性AT24CXX電氣特性AT24CXX電氣特性100KHz參數(shù)分析f=100KHz=0.1MHzt=1/0.1us=5us(一個(gè)高電平持續(xù)的時(shí)間+一個(gè)低電平持續(xù)的時(shí)間)scl的高低電平持續(xù)時(shí)間各為3usscl為高電平時(shí),sda數(shù)據(jù)線電平不能變化(否則就是開始信號(hào)或停止信號(hào));scl為低電平時(shí),sda數(shù)據(jù)線電平才能變化(即此時(shí)給sda賦需要發(fā)送的值)。100KHz參數(shù)分析f=100KHz=0.1MHz400KHz參數(shù)分析f=400KHz=0.4MHzt=1/0.4us=2.5us(一個(gè)高電平持續(xù)的時(shí)間+一個(gè)低電平持續(xù)的時(shí)間)scl的高低電平持續(xù)時(shí)間各為2usscl為高電平時(shí),sda數(shù)據(jù)線電平不能變化(否則就是開始信號(hào)或停止信號(hào));scl為低電平時(shí),sda數(shù)據(jù)線電平才能變化(即此時(shí)給sda賦需要發(fā)送的值)。400KHz參數(shù)分析f=400KHz=0.4MHz寫操作寫操作:字節(jié)寫操作頁寫操作在寫操作完成后,需要一定的延時(shí)來完成內(nèi)部寫周期,也可以進(jìn)行忙檢測(cè);否則操作就會(huì)失敗。寫操作寫操作:字節(jié)寫操作在字節(jié)寫模式下:主器件發(fā)送起始命令和從器件地址信息(R/W位置零)給從器件,在從器件產(chǎn)生應(yīng)答信號(hào)后;主器件發(fā)送從器件存儲(chǔ)單元的字節(jié)地址,主器件在收到從器件的另一個(gè)應(yīng)答信號(hào)后;再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元。從器件再次應(yīng)答并在主器件產(chǎn)生停止信號(hào)后開始內(nèi)部數(shù)據(jù)的擦寫,在內(nèi)部擦寫過程中,從器件不再應(yīng)答主器件的任何請(qǐng)求。即stop信號(hào)結(jié)束后,AT24CXX需要一定的時(shí)間完成內(nèi)部數(shù)據(jù)寫入。字節(jié)寫操作在字節(jié)寫模式下:主器件發(fā)送起始命令和從器件地址信息頁寫操作頁寫時(shí)AT24C01/02:8字節(jié);AT24C04/08/16:16字節(jié)地址指針會(huì)自動(dòng)加1(在同一頁面,超出字節(jié)會(huì)自動(dòng)覆蓋)字節(jié)多于8個(gè)或16個(gè)時(shí),會(huì)自動(dòng)覆蓋前面所寫入的單元。接收到8或16字節(jié)數(shù)據(jù)和主器件發(fā)送的停止信號(hào)后,從器件啟動(dòng)內(nèi)部寫周期將數(shù)據(jù)寫到數(shù)據(jù)區(qū)。所有接收的數(shù)據(jù)在一個(gè)寫周期內(nèi)寫入從器件。即stop信號(hào)結(jié)束后,從器件需要一定的時(shí)間完成內(nèi)部數(shù)據(jù)寫入。同一頁最后一個(gè)字節(jié)同一頁第一個(gè)字節(jié)頁寫操作頁寫時(shí)AT24C01/02:8字節(jié);AT24C04/讀操作讀操作立即/當(dāng)前地址讀操作選擇/隨機(jī)地址讀操作順序/連續(xù)地址讀操作 立即/當(dāng)前地址讀多字節(jié)操作 選擇/隨機(jī)地址讀多字節(jié)操作讀操作讀操作立即/當(dāng)前地址讀操作從器件地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址加1,也就是說如果上次讀/寫的操作地址為N,則立即讀的地址從地址N+1開始。接收到從器件地址信號(hào)后(R/W位置1),它首先發(fā)送一個(gè)應(yīng)答信號(hào),然后發(fā)送一個(gè)8位字節(jié)數(shù)據(jù);主器件不需發(fā)送一個(gè)應(yīng)答信號(hào)但要產(chǎn)生一個(gè)停止信號(hào)。本次讀取數(shù)據(jù)的地址是在上次讀取數(shù)據(jù)的地址加1(可以不在同一頁面內(nèi),最后一頁最后一個(gè)字節(jié)第一頁第一個(gè)字節(jié))立即/當(dāng)前地址讀操作從器件地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址選擇/隨機(jī)地址讀操作選擇性讀操作允許主器件對(duì)寄存器的任意字節(jié)進(jìn)行讀操作。主器件首先通過發(fā)送起始信號(hào)、從器件地址(此時(shí)R/W位置1)和它想讀取的字節(jié)數(shù)據(jù)的地址,執(zhí)行一個(gè)偽寫操作;在從器件應(yīng)答之后,主器件重新發(fā)送起始信號(hào)和從器件地址(此時(shí)R/W位置1),從器件響應(yīng)并發(fā)送應(yīng)答信號(hào),然后輸出所要求的一個(gè)8位字節(jié)數(shù)據(jù),主器件不發(fā)送應(yīng)答信號(hào)但產(chǎn)生一個(gè)停止信號(hào)。開始必須有“偽字節(jié)寫入”操作,然后再重新啟動(dòng)star信號(hào)。選擇/隨機(jī)地址讀操作選擇性讀操作允許主器件對(duì)寄存器的任意字節(jié)順序/連續(xù)地址讀操作連續(xù)讀操作可通過立即讀或選擇性讀操作啟動(dòng)。在從器件發(fā)送完一個(gè)8位字節(jié)數(shù)據(jù)后,主器件產(chǎn)生一個(gè)應(yīng)答信號(hào)來響應(yīng)告知從器件,主器件要求更多的數(shù)據(jù)。對(duì)應(yīng)每個(gè)主機(jī)產(chǎn)生的應(yīng)答信號(hào),從器件將發(fā)送一個(gè)8位數(shù)據(jù)字節(jié),當(dāng)主器件不發(fā)送應(yīng)答信號(hào)而發(fā)送停止位時(shí)結(jié)束此操作。(字節(jié)個(gè)數(shù)自己設(shè)定,可以不在同一頁面內(nèi),最后一頁最后一個(gè)字節(jié)第一頁第一個(gè)字節(jié))前面的操作以當(dāng)前地址讀取或隨機(jī)地址讀取的前面操作相同。(紅線框標(biāo)記)順序/連續(xù)地址讀操作連續(xù)讀操作可通過立即讀或選擇性讀操作啟動(dòng)各功能函數(shù)起始信號(hào)函數(shù)停止信號(hào)函數(shù)從機(jī)應(yīng)答信號(hào)函數(shù)主機(jī)應(yīng)答信號(hào)函數(shù)忙信號(hào)檢測(cè)函數(shù)字節(jié)寫入函數(shù)(一字節(jié)8位,上升沿寫入)字節(jié)讀取函數(shù)(一字節(jié)8位,下降沿讀出)主機(jī)控制總線,從總線上給從機(jī)發(fā)送數(shù)據(jù)主機(jī)釋放總線,從總線上采集從機(jī)發(fā)送的數(shù)據(jù)各功能函數(shù)起始信號(hào)函數(shù)各功能函數(shù)字節(jié)寫操作頁寫操作當(dāng)前地址讀操作隨機(jī)地址讀操作當(dāng)前地址連續(xù)讀操作隨機(jī)地址連續(xù)讀操作各功能函數(shù)字節(jié)寫操作開始信號(hào)/******啟動(dòng)總線*****/

/*SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。*/voidi2cstart(void){

scl=0;// _nop_();//delay05us(); sda=1;// _nop_();//delay05us(); scl=1; //_nop_();//delay05us(); sda=0;// _nop_();//delay05us(); scl=0;// _nop_();//delay05us();}開始信號(hào)/******啟動(dòng)總線****停止信號(hào)/******停止總線*****/

/*SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。*/voidi2cstop(void){ scl=0;// _nop_();//delay05us(); sda=0;// _nop_();//delay05us(); scl=1;// _nop_();//delay05us(); sda=1;// _nop_();//delay05us();}停止信號(hào)/******停止總線****上升沿寫入數(shù)據(jù)voidwrite(unsignedcharx)//上升沿寫入數(shù)據(jù){ unsignedchary,i; y=x; CY=0; for(i=0;i<8;i++) { y=y<<1; sda=CY;//準(zhǔn)備數(shù)據(jù) scl=1;//上升沿 // _nop_();//delay05us(); scl=0; // _nop_();//delay05us(); }}//scl低電平時(shí),準(zhǔn)備好要寫入的位數(shù)據(jù);scl上升為高電平時(shí),寫入一位上升沿寫入數(shù)據(jù)voidwrite(unsignedcha下降沿讀取數(shù)據(jù)unsignedcharread(void)//下降沿讀取數(shù)據(jù){ unsignedcharx,i; bitf; x=0; for(i=0;i<8;i++) { sda=1;//主機(jī)釋放總線,準(zhǔn)備接收從機(jī)發(fā)送的位數(shù)據(jù) x=x<<1; scl=1; // _nop_();//delay05us(); f=sda;//讀取數(shù)據(jù) scl=0;//下降沿 // _nop_();//delay05us(); x=x+(unsignedchar)f; } return(x);}下降沿讀取數(shù)據(jù)unsignedcharread(void從機(jī)應(yīng)答(0/1)/*從機(jī)應(yīng)答——主機(jī)發(fā)送一個(gè)數(shù)據(jù)后,從機(jī)在主機(jī)發(fā)送第9個(gè)時(shí)鐘時(shí)應(yīng)答:收到,應(yīng)答0;沒收到,應(yīng)答1*/bitack(void){ bitf; sda=1;//主機(jī)釋放總線,準(zhǔn)備接收從機(jī)的應(yīng)答// _nop_();//delay05us(); scl=1;// _nop_();//delay05us(); f=sda;//讀取數(shù)據(jù)

scl=0;//下降沿// _nop_();//delay05us(); return(f);}從機(jī)應(yīng)答(0/1)/*從機(jī)應(yīng)答——主機(jī)發(fā)送一個(gè)數(shù)據(jù)后,從機(jī)在主機(jī)應(yīng)答(0/1)/*主機(jī)應(yīng)答——從機(jī)發(fā)送一個(gè)數(shù)據(jù)后,主機(jī)在主機(jī)發(fā)送第9個(gè)時(shí)鐘時(shí)應(yīng)答:收到并且需要另外的數(shù)據(jù),應(yīng)答0;收到并且不需要另外的數(shù)據(jù),應(yīng)答1*/voidnoack(bitf){ sda=f;//準(zhǔn)備數(shù)據(jù)

scl=1;//上升沿// _nop_();//delay05us(); scl=0;// _nop_();//delay05us();}主機(jī)應(yīng)答(0/1)/*主機(jī)應(yīng)答——從機(jī)發(fā)送一個(gè)數(shù)據(jù)后,主機(jī)在忙檢測(cè)/*****忙檢測(cè)*****//*寫操作需要一定的時(shí)間,或采用忙檢測(cè):0——完成寫;1——正在進(jìn)行寫*/voidi2cbusy(void){ bitf; i2cstart(); write(0xa0); f=ack(); while(f) { i2cstart(); write(0xa0); f=ack(); }}忙檢測(cè)/*****忙檢測(cè)*****/字節(jié)寫操作/*字節(jié)寫:x--器件地址;y--單元地址;z--數(shù)據(jù)*/voidwritebyte(unsignedcharx,unsignedchary,unsignedcharz){ wp=0;//可讀寫操作

i2cstart(); write(x&0xfe);//最低位必須為0 ack();//從機(jī)應(yīng)答

write(y); ack(); write(z); ack();//從機(jī)應(yīng)答

i2cstop(); wp=1;//關(guān)閉可寫操作,只能讀操作}字節(jié)寫操作/*字節(jié)寫:x--器件地址;y--單元地址;z--隨機(jī)讀操作/*隨機(jī)讀操作:x--器件地址;y--單元地址;返回讀取的數(shù)據(jù)*/unsignedcharrandomread(unsignedcharx,unsignedchary){ unsignedcharz; wp=0; i2cstart(); write(x&0xfe);//最低位必須為0 ack();//從機(jī)應(yīng)答

write(y); ack();//從機(jī)應(yīng)答

//偽寫操作

wp=1; i2cstart(); write(x|0x01);//最低位必須為1 ack();//從機(jī)應(yīng)答

z=read(); noack(1);//主機(jī)應(yīng)答

i2cstop(); return(z);}隨機(jī)讀操作/*隨機(jī)讀操作:x--器件地址;y--單元地址;返總結(jié)在I2C總線的應(yīng)用中應(yīng)注意的事項(xiàng)總結(jié)為以下幾點(diǎn):

1)嚴(yán)格按照時(shí)序圖的要求進(jìn)行操作

2)若與口線上帶內(nèi)部上拉電阻的單片機(jī)接口連接,可以不外加上拉電阻。

3)程序中為配合相應(yīng)的傳輸速率,在對(duì)口線操作的指令后可用NOP(_nop_())指令加一定的延時(shí)。AT24Cxx系列的模型在MemoryIcs里的24Cxx(注意要有仿真模型,時(shí)鐘頻率,寫時(shí)間周期的參數(shù))總結(jié)在I2C總線的應(yīng)用中應(yīng)注意的事項(xiàng)總結(jié)為以下幾點(diǎn):

1)人不僅要做好事,更要以準(zhǔn)確的方式做好事。有人將你從高處推下的時(shí)候恰恰是你展翅高飛的最佳時(shí)機(jī)。上天不會(huì)虧待努力的人,也不會(huì)同情假勤奮的人,你有多努力時(shí)光它知道。螢火蟲的光點(diǎn)雖然微弱,但亮著便是向黑暗挑戰(zhàn)。這個(gè)世間只有圓滑,沒有圓滿的。你不能左右天氣,但你能轉(zhuǎn)變你的心情。君子看人背后,小人背后看人。遠(yuǎn)離那些背后說別人壞話的人,請(qǐng)記住,他(她)能說別人壞話,就能在暗地說你壞話!這就是俗話說的,不怕真小人,就怕偽君子!因果不曾虧欠過我們什么,所以請(qǐng)不要抱怨。人若軟弱就是自己最大的敵人。不能強(qiáng)迫別人來愛自己,只能努力讓自己成為值得愛的人。友情在我過去的生活里就象一盞明燈,照徹了我的靈魂,使我的生存有了一點(diǎn)點(diǎn)光彩。感情久了,就不是愛了而是依賴;失去那陣,那不是痛而是不舍。身體健康,學(xué)習(xí)進(jìn)步!人不僅要做好事,更要以準(zhǔn)確的方式做好事。身體健康,學(xué)習(xí)進(jìn)步!數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用數(shù)據(jù)存儲(chǔ)ATCxx及其應(yīng)用I2C(I2C、IIC)總線概述I2C(Inter-IntegratedCircuit)總線是Philips公司最先推出的一種雙向數(shù)據(jù)傳輸總線,僅使用兩根連線便可以實(shí)現(xiàn)全雙工同步數(shù)據(jù)傳輸。在I2C總線中,一條為串行數(shù)據(jù)線(SDA),另一條為串行時(shí)鐘線(SCL)。I2C總線占用引腳少,接口協(xié)議簡單。目前多數(shù)公司均推出了I2C總線接口的各種器件,如存儲(chǔ)器、A/D、D/A、鍵盤、LCD等,大大方便了用戶的選擇。I2C(I2C、IIC)總線概述I2C(Inter-II2C(I2C、IIC)總線概述I2C總線采用兩線制,由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成。I2C總線對(duì)數(shù)據(jù)通信進(jìn)行了嚴(yán)格的定義。典型的I2C總線系統(tǒng)結(jié)構(gòu)如下圖所示。I2C總線上可以掛接多個(gè)器件,其中每個(gè)器件必須都支持I2C總線通信協(xié)議。I2C(I2C、IIC)總線概述I2C總線采用兩線制,I2C(I2C、IIC)總線概述其中,I2C總線的SCL和SDA端口(開漏極,線與)在使用時(shí)必須連接上拉電阻。I2C總線的傳輸速率可以支持100khz和400khz兩種,對(duì)于100khz的速率一般采用10k歐姆的上拉電阻,對(duì)于400khz的速率一般采用2k歐姆的上拉電阻。I2C(I2C、IIC)總線概述其中,I2C總線的SCI2C(I2C、IIC)總線特點(diǎn)I2C總線最主要的優(yōu)點(diǎn)是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本??偩€的長度可高達(dá)25英尺,并且能夠以10Kbps的最大傳輸速率支持40個(gè)組件。I2C總線的另一個(gè)優(yōu)點(diǎn)是,它支持多主控(multimastering),其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線(I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能)。一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。當(dāng)然,在任何時(shí)間點(diǎn)上只能有一個(gè)主控。

I2C(I2C、IIC)總線特點(diǎn)I2C總線最主要的優(yōu)點(diǎn)I2C(I2C、IIC)總線協(xié)議I2C總線協(xié)議定義如下:

1只有在總線空閑時(shí)才允許啟動(dòng)數(shù)據(jù)傳送;(時(shí)鐘線與數(shù)據(jù)線都為高電平時(shí)為空閑信號(hào))

2在數(shù)據(jù)傳送過程中,當(dāng)時(shí)鐘線為高電平時(shí)數(shù)據(jù)線必須保持穩(wěn)定狀態(tài),不允許有跳變;時(shí)鐘線為高電平時(shí)數(shù)據(jù)線的任何電平變化將被看作總線的起始或停止信號(hào)。起始信號(hào)。時(shí)鐘線保持高電平期間,數(shù)據(jù)線電平從高到低的跳變作為I2C總線的起始信號(hào)。停止信號(hào)時(shí)鐘線保持高電平期間,數(shù)據(jù)線電平從低到高的跳變作為I2C總線的停止信號(hào)I2C(I2C、IIC)總線協(xié)議I2C總線協(xié)議定義如I2C總線的信號(hào)類型I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號(hào),它們分別是:開始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào)。開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。這些信號(hào)中,起始信號(hào)是必需的,結(jié)束信號(hào)和應(yīng)答信號(hào),都可以不要。I2C總線的信號(hào)類型I2C總線在傳送數(shù)據(jù)過程中共有三種類型信I2C總線的信號(hào)類型開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。I2C總線的信號(hào)類型開始信號(hào):SCL為高電平時(shí),SDA由高電I2C總線的信號(hào)類型位的傳輸

SDA線上的數(shù)據(jù)必須在時(shí)鐘的高電平周期保持穩(wěn)定,數(shù)據(jù)線的高或低電平狀態(tài)只有在SCL線的時(shí)鐘信號(hào)是低電平時(shí)才能改變。I2C總線的信號(hào)類型位的傳輸

SDA線上的數(shù)據(jù)必須在時(shí)鐘I2C總線接口EEPROM存儲(chǔ)器目前,市場(chǎng)上I2C總線接口器件有多種,利于A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、時(shí)鐘芯片和存儲(chǔ)器等。這里以典型的I2C總線接口的存儲(chǔ)器為例進(jìn)行介紹。I2C總線接口EEPROM存儲(chǔ)器是一種采用I2C總線接口的串行總線存儲(chǔ)器,這類存儲(chǔ)器具有體積小、引腳少、功耗低、工作電壓范圍寬等特點(diǎn)。目前,Atmel、Microchip、National等公司均提供各種型號(hào)的I2C總線接口的串行EEPROM(電可擦出可編程只讀存儲(chǔ)器,即ElectricallyErasableProgrammableRead-OnlyMemory)存儲(chǔ)器。在單片機(jī)系統(tǒng)中使用較多的EEPROM存儲(chǔ)器是24系列串行EEPROM。它具有型號(hào)多、容量大、支持I2C總線協(xié)議、占用單片機(jī)I/O端口少、芯片擴(kuò)展方便、讀寫簡單等優(yōu)點(diǎn)。I2C總線接口EEPROM存儲(chǔ)器目前,市場(chǎng)上I2C總線接口器AT24CXX這里以Atmel公司的產(chǎn)品為例進(jìn)行介紹,At24Cxx系列是Atmel公司典型的I2C串行總線的EEPROM,工作于從器件模式。AT24Cxx:01~1024容量=xxX1Kbit型號(hào)系列列表AT24C01:1K(128X8) AT24C02:2K(256X8)AT24C04:4K(512X8) AT24C08:8K(1KX8)AT24C16:16K(2KX8) AT24C512:512K(64KX8)AT24C1024:1M(128KX8)例如AT24C08存儲(chǔ)容量為8k位(1024個(gè)字節(jié)*8位容量計(jì)算方法AT24CXX這里以Atmel公司的產(chǎn)品為例進(jìn)行介紹,At2AT24CXXI2C總線接口的EEPROM存儲(chǔ)器工作電壓可選擇低電壓或標(biāo)準(zhǔn)電壓(1.8v、2.7v、5v)100khz(1.8v)或400khz(2.7v、5v)8字節(jié)頁寫操作(1k、2k),16字節(jié)頁寫操作(4k、8k、16k)內(nèi)部數(shù)據(jù)寫周期(最大5ms)重復(fù)擦寫100萬次以上內(nèi)容數(shù)據(jù)可以掉電保存100年AT24CXXI2C總線接口的EEPROM存儲(chǔ)器AT24CXX引腳定義如下:Vcc、GND為芯片的供電引腳A0、A1、A2為芯片的引腳地址和頁面選擇輸入SCL為I2C總線接口的串行時(shí)鐘線SDA為I2C總線接口的串行數(shù)據(jù)線(高位在前,低位在后;上升沿?cái)?shù)據(jù)寫入,下降沿?cái)?shù)據(jù)讀出)WP為寫保護(hù)引腳,當(dāng)WP接高電平時(shí),只能對(duì)該器件進(jìn)行讀操作,不能寫操作,用于硬件數(shù)據(jù)的保護(hù);當(dāng)WP接低電平時(shí),可以對(duì)該器件進(jìn)行讀寫操作。AT24CXX引腳定義如下:AT24Cxx重要參數(shù)AT24Cxx重要參數(shù)AT24CXX芯片地址具有I2C接口的EEPROM存儲(chǔ)器的前面4為全部都是1010頁面地址Px:不用連接芯片地址Ax:需要連接為高電平或低電平R/W:1——讀操作;0——寫操作每片芯片16/32頁,每頁8字節(jié),地址需要7/8位,總線最大可掛8片每片芯片32頁,每頁16字節(jié),地址需要9位,總線最大可掛4片每片芯片64頁,每頁16字節(jié),地址需要10位,總線最大可掛2片每片芯片128頁,每頁16字節(jié),地址需要11位,總線最大可掛1片AT24CXX芯片地址具有I2C接口的EEPROM存儲(chǔ)器的前AT24Cxx單元地址AT24C01:00H-7FH128x8bitAT24C02:00H-FFH256x8bitAT24C04:000H-1FFH512x8bitAT24C08:000H-3FFH1024x8bitAT24C16:000H-7FFH2048x8bitAT24C32:000H-FFFH4096x8bitAT24C64:0000H-1FFFH8192x8bitAT24C128:0000H-3FFFH16384x8bitAT24C256:0000H-7FFFH32768x8bitAT24C512:0000H-FFFFH65536x8bitAT24Cxx單元地址AT24C01:00H-7FH12AT24CXX電氣特性AT24CXX電氣特性AT24CXX電氣特性AT24CXX電氣特性100KHz參數(shù)分析f=100KHz=0.1MHzt=1/0.1us=5us(一個(gè)高電平持續(xù)的時(shí)間+一個(gè)低電平持續(xù)的時(shí)間)scl的高低電平持續(xù)時(shí)間各為3usscl為高電平時(shí),sda數(shù)據(jù)線電平不能變化(否則就是開始信號(hào)或停止信號(hào));scl為低電平時(shí),sda數(shù)據(jù)線電平才能變化(即此時(shí)給sda賦需要發(fā)送的值)。100KHz參數(shù)分析f=100KHz=0.1MHz400KHz參數(shù)分析f=400KHz=0.4MHzt=1/0.4us=2.5us(一個(gè)高電平持續(xù)的時(shí)間+一個(gè)低電平持續(xù)的時(shí)間)scl的高低電平持續(xù)時(shí)間各為2usscl為高電平時(shí),sda數(shù)據(jù)線電平不能變化(否則就是開始信號(hào)或停止信號(hào));scl為低電平時(shí),sda數(shù)據(jù)線電平才能變化(即此時(shí)給sda賦需要發(fā)送的值)。400KHz參數(shù)分析f=400KHz=0.4MHz寫操作寫操作:字節(jié)寫操作頁寫操作在寫操作完成后,需要一定的延時(shí)來完成內(nèi)部寫周期,也可以進(jìn)行忙檢測(cè);否則操作就會(huì)失敗。寫操作寫操作:字節(jié)寫操作在字節(jié)寫模式下:主器件發(fā)送起始命令和從器件地址信息(R/W位置零)給從器件,在從器件產(chǎn)生應(yīng)答信號(hào)后;主器件發(fā)送從器件存儲(chǔ)單元的字節(jié)地址,主器件在收到從器件的另一個(gè)應(yīng)答信號(hào)后;再發(fā)送數(shù)據(jù)到被尋址的存儲(chǔ)單元。從器件再次應(yīng)答并在主器件產(chǎn)生停止信號(hào)后開始內(nèi)部數(shù)據(jù)的擦寫,在內(nèi)部擦寫過程中,從器件不再應(yīng)答主器件的任何請(qǐng)求。即stop信號(hào)結(jié)束后,AT24CXX需要一定的時(shí)間完成內(nèi)部數(shù)據(jù)寫入。字節(jié)寫操作在字節(jié)寫模式下:主器件發(fā)送起始命令和從器件地址信息頁寫操作頁寫時(shí)AT24C01/02:8字節(jié);AT24C04/08/16:16字節(jié)地址指針會(huì)自動(dòng)加1(在同一頁面,超出字節(jié)會(huì)自動(dòng)覆蓋)字節(jié)多于8個(gè)或16個(gè)時(shí),會(huì)自動(dòng)覆蓋前面所寫入的單元。接收到8或16字節(jié)數(shù)據(jù)和主器件發(fā)送的停止信號(hào)后,從器件啟動(dòng)內(nèi)部寫周期將數(shù)據(jù)寫到數(shù)據(jù)區(qū)。所有接收的數(shù)據(jù)在一個(gè)寫周期內(nèi)寫入從器件。即stop信號(hào)結(jié)束后,從器件需要一定的時(shí)間完成內(nèi)部數(shù)據(jù)寫入。同一頁最后一個(gè)字節(jié)同一頁第一個(gè)字節(jié)頁寫操作頁寫時(shí)AT24C01/02:8字節(jié);AT24C04/讀操作讀操作立即/當(dāng)前地址讀操作選擇/隨機(jī)地址讀操作順序/連續(xù)地址讀操作 立即/當(dāng)前地址讀多字節(jié)操作 選擇/隨機(jī)地址讀多字節(jié)操作讀操作讀操作立即/當(dāng)前地址讀操作從器件地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址加1,也就是說如果上次讀/寫的操作地址為N,則立即讀的地址從地址N+1開始。接收到從器件地址信號(hào)后(R/W位置1),它首先發(fā)送一個(gè)應(yīng)答信號(hào),然后發(fā)送一個(gè)8位字節(jié)數(shù)據(jù);主器件不需發(fā)送一個(gè)應(yīng)答信號(hào)但要產(chǎn)生一個(gè)停止信號(hào)。本次讀取數(shù)據(jù)的地址是在上次讀取數(shù)據(jù)的地址加1(可以不在同一頁面內(nèi),最后一頁最后一個(gè)字節(jié)第一頁第一個(gè)字節(jié))立即/當(dāng)前地址讀操作從器件地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址選擇/隨機(jī)地址讀操作選擇性讀操作允許主器件對(duì)寄存器的任意字節(jié)進(jìn)行讀操作。主器件首先通過發(fā)送起始信號(hào)、從器件地址(此時(shí)R/W位置1)和它想讀取的字節(jié)數(shù)據(jù)的地址,執(zhí)行一個(gè)偽寫操作;在從器件應(yīng)答之后,主器件重新發(fā)送起始信號(hào)和從器件地址(此時(shí)R/W位置1),從器件響應(yīng)并發(fā)送應(yīng)答信號(hào),然后輸出所要求的一個(gè)8位字節(jié)數(shù)據(jù),主器件不發(fā)送應(yīng)答信號(hào)但產(chǎn)生一個(gè)停止信號(hào)。開始必須有“偽字節(jié)寫入”操作,然后再重新啟動(dòng)star信號(hào)。選擇/隨機(jī)地址讀操作選擇性讀操作允許主器件對(duì)寄存器的任意字節(jié)順序/連續(xù)地址讀操作連續(xù)讀操作可通過立即讀或選擇性讀操作啟動(dòng)。在從器件發(fā)送完一個(gè)8位字節(jié)數(shù)據(jù)后,主器件產(chǎn)生一個(gè)應(yīng)答信號(hào)來響應(yīng)告知從器件,主器件要求更多的數(shù)據(jù)。對(duì)應(yīng)每個(gè)主機(jī)產(chǎn)生的應(yīng)答信號(hào),從器件將發(fā)送一個(gè)8位數(shù)據(jù)字節(jié),當(dāng)主器件不發(fā)送應(yīng)答信號(hào)而發(fā)送停止位時(shí)結(jié)束此操作。(字節(jié)個(gè)數(shù)自己設(shè)定,可以不在同一頁面內(nèi),最后一頁最后一個(gè)字節(jié)第一頁第一個(gè)字節(jié))前面的操作以當(dāng)前地址讀取或隨機(jī)地址讀取的前面操作相同。(紅線框標(biāo)記)順序/連續(xù)地址讀操作連續(xù)讀操作可通過立即讀或選擇性讀操作啟動(dòng)各功能函數(shù)起始信號(hào)函數(shù)停止信號(hào)函數(shù)從機(jī)應(yīng)答信號(hào)函數(shù)主機(jī)應(yīng)答信號(hào)函數(shù)忙信號(hào)檢測(cè)函數(shù)字節(jié)寫入函數(shù)(一字節(jié)8位,上升沿寫入)字節(jié)讀取函數(shù)(一字節(jié)8位,下降沿讀出)主機(jī)控制總線,從總線上給從機(jī)發(fā)送數(shù)據(jù)主機(jī)釋放總線,從總線上采集從機(jī)發(fā)送的數(shù)據(jù)各功能函數(shù)起始信號(hào)函數(shù)各功能函數(shù)字節(jié)寫操作頁寫操作當(dāng)前地址讀操作隨機(jī)地址讀操作當(dāng)前地址連續(xù)讀操作隨機(jī)地址連續(xù)讀操作各功能函數(shù)字節(jié)寫操作開始信號(hào)/******啟動(dòng)總線*****/

/*SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。*/voidi2cstart(void){

scl=0;// _nop_();//delay05us(); sda=1;// _nop_();//delay05us(); scl=1; //_nop_();//delay05us(); sda=0;// _nop_();//delay05us(); scl=0;// _nop_();//delay05us();}開始信號(hào)/******啟動(dòng)總線****停止信號(hào)/******停止總線*****/

/*SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。*/voidi2cstop(void){ scl=0;// _nop_();//delay05us(); sda=0;// _nop_();//delay05us(); scl=1;// _nop_();//delay05us(); sda=1;// _nop_();//delay05us();}停止信號(hào)/******停止總線****上升沿寫入數(shù)據(jù)voidwrite(unsignedcharx)//上升沿寫入數(shù)據(jù){ unsignedchary,i; y=x; CY=0; for(i=0;i<8;i++) { y=y<<1; sda=CY;//準(zhǔn)備數(shù)據(jù) scl=1;//上升沿 // _nop_();//delay05us(); scl=0; // _nop_();//delay05us(); }}//scl低電平時(shí),準(zhǔn)備好要寫入的位數(shù)據(jù);scl上升為高電平時(shí),寫入一位上升沿寫入數(shù)據(jù)voidwrite(unsignedcha下降沿讀取數(shù)據(jù)unsignedcharread(void)//下降沿讀取數(shù)據(jù){ unsignedcharx,i; bitf; x=0; for(i=0;i<8;i++) { sda=1;//主機(jī)釋放總線,準(zhǔn)備接收從機(jī)發(fā)送的位數(shù)據(jù) x=x<<1; scl=1; // _nop_();//delay05us(); f=sda;//讀取數(shù)據(jù) scl=0;//下降沿 // _nop_();//delay05us(); x=x+(unsignedchar)f; } return(x);}下降沿讀取數(shù)據(jù)unsignedcharread(void從機(jī)應(yīng)答(0/1)/*從機(jī)應(yīng)答——主機(jī)發(fā)送一個(gè)數(shù)據(jù)后,從機(jī)在主機(jī)發(fā)送第9個(gè)時(shí)鐘時(shí)應(yīng)答:收到,應(yīng)答0;沒收到,應(yīng)答1*/bitack(void){ bitf; sda=1;//主機(jī)釋放總線,準(zhǔn)備接收從機(jī)的應(yīng)答// _nop_();//delay05us(); scl=1;// _nop_();//delay05us(); f=sda;//讀取數(shù)據(jù)

scl=0;//下降沿// _n

溫馨提示

  • 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)論