版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第七章I2C總線開發(fā)目錄CONTENT7.1.I2C總線標準7.2.GPIO模擬I2C總線協(xié)議的開發(fā)技術(shù)7.3.STC單片機I2C功能模塊開發(fā)技術(shù)7.1.I2C總線標準I2C總線只有兩根雙向信號線:一根是數(shù)據(jù)線SDA,另一根是時鐘線SCL,通常用于芯片和芯片之間的數(shù)據(jù)交換,是串行總線半雙工通信。I2C器件的應(yīng)用優(yōu)點:減少了電路間連線,減小了電路板尺寸,標準化通信過程,降低了硬件成本,并提高了系統(tǒng)可靠性。7.1.1.I2C總線基本概念I(lǐng)2C是一種串行總線,是在微電子通信控制領(lǐng)域廣泛采用的一種總線標準。它是同步通信的一種特殊形式,具有接口線少,控制方式簡化,器件封裝形式小,通信速率較高等優(yōu)點。圖7.1-1展示了I2C總線傳輸過程,Master是主機,Slave是從機,根據(jù)各器件的功能角色可劃分發(fā)送端、接收端,根據(jù)各器件的主從地位又可劃分為主器件、從器件。I2C總線只有兩根雙向信號線:一根是數(shù)據(jù)線SDA,另一根是時鐘線SCL,在主從通信中,可以有多個I2C總線器件同時接到I2C總線上,通過地址來識別通信對象。圖7.1-1I2C總線基本概念7.1.1.I2C總線基本概念發(fā)送端:發(fā)送數(shù)據(jù)到總線上的器件。接收器:從總線上接收數(shù)據(jù)的器件。主機:為啟動數(shù)據(jù)傳送(START指令)、產(chǎn)生時鐘(SCL)信號并中止數(shù)據(jù)傳送(STOP指令)的器件,也稱主控端,SCL信號必須由主控端發(fā)送,主控端是發(fā)送端或接收端。從機:被主器件尋址的器件。從屬端可以扮演接收端或發(fā)送端的角色。當發(fā)送端器件可以主動將數(shù)據(jù)放到總線,稱為主控發(fā)送端;若可以回應(yīng)主控端的要求,稱為從屬發(fā)送端。當接收端器件可以主動接收數(shù)據(jù)時,稱為主控接收端;若依照主控端要求而接收,稱為從屬接收端。7.1.2.I2C總線結(jié)構(gòu)I2C總線上數(shù)據(jù)的傳輸速率在標準模式下可達100kbit/s,在快速模式下可達400kbit/s,在高速模式下可達3.4Mbit/s,典型的I2C總線結(jié)構(gòu)見圖7.1-2,所有I2C設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時鐘線SCL接到總線的SCL上。在總線上至少必須有一個主控端,在圖7.1-2中,主控端可以是單片機A或是單片機B。圖7.1-2I2C總線結(jié)構(gòu)7.1.2.I2C總線結(jié)構(gòu)SDA和SCL都是雙向線路,I2C總線需通過上拉電阻接正電源,當總線空閑時,兩根線均為高電平,總線上任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線與關(guān)系,見圖7.1-3。所謂“線與”是指連接到總線的器件輸出級是漏極開路或集電極開路,此時只要有一個器件輸出低電平,總線就被拉低。圖7.1-3I2C總線電路原理圖7.1.2.I2C總線結(jié)構(gòu)如圖7.1-4所示,在I2C總線系統(tǒng)中,CPU是核心,I2C總線由CPU電路引出,其他被控對象均掛接在I2C總線上。CPU是主機,掛接在總線上的設(shè)備是從機,SCL上的時鐘信號始終由主機產(chǎn)生。圖7.1-4CPU和被控對象的連接方式每個接到I2C總線上的器件都有唯一的地址。主機與其它器件間的數(shù)據(jù)傳送可以是由主機發(fā)送數(shù)據(jù)到其它器件,這時主機即為發(fā)送器。由總線上接收數(shù)據(jù)的器件則為接收器。在單片機應(yīng)用系統(tǒng)的串行總線擴展中,我們經(jīng)常遇到的是以單片機為主機,其它接口器件為從機的單主機情況。7.1.3.I2C總線的通信格式圖7.1-5是I2C總線的時序圖:SCL是節(jié)拍周期Clock;SDA是數(shù)據(jù)位。每個節(jié)拍上都有一個數(shù)據(jù)位在傳輸。發(fā)送器給出起始位,每發(fā)出一個字節(jié),接收器都要應(yīng)答一次,給出ACK信號。發(fā)送器的數(shù)據(jù)發(fā)送完畢后,發(fā)出停止位。圖7.1-5I2C時序圖7.1.3.I2C總線的通信格式I2C總線時序圖關(guān)鍵描述如下:起始START信號:當SCL=1階段中,在SDA上有一個下降沿跳變,標識著數(shù)據(jù)傳輸啟動。停止STOP信號:當SCL=1階段中,在SDA上有一個上升沿跳變,標識著數(shù)據(jù)傳輸停止。應(yīng)答ACK信號:SDA=0,表示接收成功,否則是接收失敗,或者無應(yīng)答。最后一個字節(jié)接收器可以不應(yīng)答。在數(shù)據(jù)傳輸?shù)倪^程中必須通過ACK信號來保證數(shù)據(jù)的有效性。I2C總線進行數(shù)據(jù)傳送時,時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化,見圖7.1-6所示。圖7.1-6數(shù)據(jù)位傳輸?shù)臅r序7.1.3.I2C總線的通信格式從圖7.1-1到圖7.1-6主機和從機都共享一根SDA、SCL,為了說清楚一個字節(jié)中SDA的控制情況,圖7.1-7中用了2根SDA示意了主機SDA和從機SDA的信號情況——主機是發(fā)送端,前8個時鐘都由主機控制SDA的電平狀態(tài),第9個時鐘由從機控制SDA的電平。主機傳送完畢一個字節(jié),從機可以不應(yīng)答,稱為“非應(yīng)答”,SDA保持高電平不變,說明字節(jié)接收不成功;從機“應(yīng)答”,則從機把SDA拉低,表示字節(jié)接收成功。圖7.1-7一個字節(jié)的傳輸演示7.1.3.I2C總線的通信格式圖7.1-8給出了起始、終止、應(yīng)答、非應(yīng)答的時間標準。在程序編寫時,需要注意各個信號的最小持續(xù)時間要求。例如,起始信號S中SDA的高電平保持時間需大于4.7微秒,若此過程中SDA跳變?yōu)榈碗娖胶?,則SCL信號大于4微秒后才能變化為低電平,從另一個角度看,即SDA數(shù)據(jù)建立時間需大于4微秒才能滿足I2C的時間標準。圖7.1-8數(shù)據(jù)傳輸位的時間標準7.2.GPIO模擬I2C總線協(xié)議的開發(fā)技術(shù)I2C總線簡單方便,是芯片間通信經(jīng)常使用的一種總線,很多芯片都具有I2C接口。當MCU沒有I2C功能模塊時,可利用通用輸入輸出管腳模擬I2C總線協(xié)議。7.2.1.GPIO模擬I2C總線的驅(qū)動函數(shù)對照圖7.1-7、圖7.1-8時序圖,書寫I2C總線單字節(jié)讀寫函數(shù),放置在i2c.c文件中,文件中的函數(shù)說明如表7.2-1所示。序號函數(shù)名函數(shù)說明1voidi2c_delay(unsignedchari)I2C總線延時2voidi2c_start(void)I2C總線起始信號S,在SCL是高電平期間,SDA從高電平變低,該下降沿意味著傳輸?shù)钠鹗肌?voidi2c_stop(void)I2C總線終止信號P,在SCL是高電平期間,SDA從低電平變高,該上升沿意味著傳輸?shù)慕Y(jié)束。4voidi2c_sendbyte(unsignedcharbyt)總線發(fā)送函數(shù),函數(shù)輸入?yún)?shù)是發(fā)送內(nèi)容。5unsignedchari2c_waitack(void)總線等待應(yīng)答函數(shù),返回值是從機應(yīng)答位。6unsignedchari2c_receivebyte(void)總線接收函數(shù),返回值是接收內(nèi)容。7voidi2c_sendack(unsignedcharackbit)總線發(fā)送應(yīng)答函數(shù),函數(shù)輸入?yún)?shù)是應(yīng)答位電平。表7.2-1GPIO模擬I2C總線的驅(qū)動函數(shù)7.2.1.GPIO模擬I2C總線的驅(qū)動函數(shù)i2c.c文件見二維碼7.2-1。二維碼7.2-1GPIO模擬I2C總線驅(qū)動程序7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片PCF8591是單片、單電源低功耗8位ADC芯片,具有4個模擬輸入、一個輸出和一個串行I2C總線接口,采用8位逐次逼近式AD轉(zhuǎn)換,主要應(yīng)用于電池供電、汽車、音響等模擬數(shù)據(jù)采集。ADC的最大轉(zhuǎn)換速率取決于I2C總線的最高速率。PCF8591采用I2C總線接口與CPU交換數(shù)據(jù),它將采集到的模擬量轉(zhuǎn)換成二進制數(shù)值,輸出到I2C總線上。圖7.2-1是PCF8591芯片管腳圖,圖7.2-2表明器件的通道3連接電位器,電位器電壓可調(diào),圖7.2-3是PCF8591的工作電路圖,PCF8591通過I2C總線(P20、P21)與上位機MCU通信。圖7.2-1圖PCF8591器件管腳圖
圖7.2-2
通道3電位器電壓采集7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片圖7.2-3圖
PCF8591工作電路圖7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片1.寫時序:寫時序如圖7.2-4所示,這個過程是單片機寫數(shù)據(jù)到ADC器件。由起始信號S、PCF8591器件地址(Address)、控制字節(jié)(ControlByte)、N個數(shù)據(jù)字節(jié)(DataByte),以及停止位組成。每寫完一個字節(jié),單片機都要釋放總線,接收來自PCF8591的應(yīng)答。圖7.2-4PCF8591的寫時序圖7.2-5是ADC器件地址編碼,高四位固定1001,低四位可編程,最后一位表示讀寫方向,“1”表示讀器件,“0”表示寫器件。圖7.2-5ADC器件的地址編碼7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片圖7.2-6是控制字節(jié),規(guī)定了PCF8591的工作方式,控制字節(jié)每個位的定義:D1D0:A/D通道編號。00——通道0;01——通道1;10——通道2;11——通道3。D2:自動增益選擇,當該位是“1”時表示自動增益,否則手動增益。D5D4:模擬量輸入方式,00——四路單端輸入;01——三路差分輸入;10——兩兩單端與一路差分;11——兩路差分。D6:模擬輸出使能。當AD模擬-數(shù)字轉(zhuǎn)換時該位是“0”,當DA數(shù)字-模擬轉(zhuǎn)換時該位“1”。圖7.2-6PCF8591的控制寄存器7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片按照圖7.2-4書寫單片機初始化ADC器件的代碼如下:voidinit_pcf8591(void){ i2c_start(); i2c_sendbyte(0x90);//器件地址 i2c_waitack(); i2c_sendbyte(0x03);//控制字節(jié),ADC通道3模擬量輸入 i2c_waitack(); i2c_stop(); }7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片2.讀時序:圖7.2-7是PCF8591的讀時序,這個過程是單片機獲取ADC數(shù)據(jù)的時序,由起始位(S)、器件地址(Address)、N個轉(zhuǎn)換數(shù)據(jù)及停止位構(gòu)成。首先單片機寫器件地址,然后等待來自PCF8591的應(yīng)答,接著PCF8591發(fā)送內(nèi)容到總線,每發(fā)送一個字節(jié),主機都應(yīng)答一次,如果主機不應(yīng)答(發(fā)送1),主機隨后發(fā)送停止位。圖7.2-7PCF8591的讀時序7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片按照圖7.2-7書寫獲取ADC轉(zhuǎn)換數(shù)值的函數(shù)。unsignedcharadc_pcf8591(void){ unsignedchartemp; i2c_start(); i2c_sendbyte(0x91);//器件地址 i2c_waitack(); temp=i2c_receivebyte();//讀取ADC轉(zhuǎn)換數(shù)值 i2c_sendack(1); i2c_stop(); returntemp;7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片 returntemp;}令模數(shù)轉(zhuǎn)換器PCF8591連接電位器電壓如圖7.2-2所示,GPIO模擬I2C總線讀取電位器電壓,圖7.2-8是電壓顯示界面,二維碼7.2-2展示了開發(fā)示范過程。圖7.2-8電壓顯示界面7.2.2.GPIO模擬I2C總線訪問PCF8591數(shù)模轉(zhuǎn)換ADC芯片二維碼7.2-2GPIO模擬I2C總線電壓采集程序?qū)崿F(xiàn)7.3.STC單片機I2C功能模塊開發(fā)技術(shù)單片機模擬I2C總線需要自己書寫I2C總線驅(qū)動函數(shù),開發(fā)工作量大。STC8x、STC32x系列單片機內(nèi)部集成了一個I2C串行總線控制器,通過配置寄存器就可以實現(xiàn)I2C通信。使用單片機I2C功能模塊的步驟是:首先規(guī)定I2C功能管腳,其次配置I2C功能模塊工作方式,最后讀出I2C模塊的寄存器數(shù)據(jù)。7.3.1.I2C管腳切換STC8x、STC32x系列單片機提供I2C總線管腳切換功能,可將SCL和SDA切換到不同的I/O口上,以方便用戶分時復(fù)用I2C總線。(1)P_SW2:寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0P_SW2BAHEAXFR-I2C_S[1:0]CMPQ_SS4_SS3_SS2_SI2C_S[1:0]:I2C功能腳選擇位I2C_S[1:0]SCLSDA00P1.5P1.401P2.5P2.410P7.7P7.611P3.2P3.37.3.2.I2C控制寄存器STC系列單片機提供的I2C總線提供了兩種操作模式:主機模式(SCL為輸出口,發(fā)送同步時鐘信號),和從機模式(SCL為輸入口,接收同步時鐘信號)1.I2C配置寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CCFG7EFE80HENI2CMSSLMSSPEED[5:0]ENI2C:I2C功能使能控制位。0:禁止I2C功能;1:允許I2C功能。MSSL:I2C功能模式選擇位。0:從機模式;1:主機模式。MSSPEED[5:0]:I2C總線速度(等待時鐘數(shù)),I2C總線速度=SYSCAK/2/(MSSPEED*2+4)。只有當I2C模塊工作在主機模式時,MSSPEED參數(shù)設(shè)置的等待參數(shù)才有效。7.3.2.I2C控制寄存器2.I2C控制寄存器(1)I2C主機控制寄存器EMSI:主機模式中斷使能控制位。0:關(guān)閉主機模式的中斷;1:允許主機模式的中斷。MSCMD[3:0]主機命令。寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CMSCR7EFE8HEMSI---MSCMD[3:0]7.3.2.I2C控制寄存器MSCMD[3:0]命令說明0000待機,無動作0001起始命令,發(fā)送START信號0010發(fā)送數(shù)據(jù)命令,SCL產(chǎn)生8個時鐘,并將I2CTXD內(nèi)容按位送到SDA0011接收ACK信號0100接收數(shù)據(jù)命令,SCL產(chǎn)生8個時鐘,按位讀取SDA數(shù)據(jù)0101發(fā)送ACK命令0110停止命令,發(fā)送STOP信號0111保留1000保留1001起始命令+發(fā)送數(shù)據(jù)命令+接收ACK命令,0001+0010+0011組合。1010發(fā)送數(shù)據(jù)命令+接收ACK命令,0010+0011組合1011接收數(shù)據(jù)命令+發(fā)送ACK(0)命令1100接收數(shù)據(jù)命令+發(fā)送NAK(1)命令7.3.2.I2C控制寄存器(2)I2C從機控制寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CSLCRFE83H-ESTAIERXIETXIESTOI--SLRSTESTAI:從機模式時接收到START信號中斷允許位。0:禁止中斷;1:使能中斷。ERXI:從機模式時接收到1字節(jié)數(shù)據(jù)后中斷允許位。0:禁止中斷;1:使能中斷。ETXI:從機模式時發(fā)送完成1字節(jié)數(shù)據(jù)后中斷允許位。0:禁止中斷;1:使能中斷。ESTOI:從機模式時接收到STOP信號中斷允許位。0:禁止中斷;1:使能中斷。SLRST:復(fù)位從機模式。7.3.2.I2C控制寄存器3.I2C狀態(tài)寄存器(1)I2C主機狀態(tài)寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CMSSTFE82HMSBUSYMSIF----MSACKIMSACKOMSBUSY:主機模式時I2C控制器狀態(tài)位(只讀)。0:控制器處于空閑狀態(tài);1:控制器處于忙碌狀態(tài)。MSIF:主機模式的中斷請求位(中斷標志位)。當處于主機模式的I2C控制器執(zhí)行完成寄存器I2CMSCR中MSCMD命令后產(chǎn)生中斷信號,硬件自動將此位置1,向CPU發(fā)出中斷請求,響應(yīng)中斷后MSIF位必須用軟件清零。MSACKI:主機模式時,發(fā)送“0011”命令到I2CMSCR的MSCMD位后所接收到的ACK數(shù)據(jù)。MSACKO:主機模式時,準備將要發(fā)送出去的ACK信號。當發(fā)送“0101”命令到I2CMSCR的MSCMD位后,控制器會自動讀取此位的數(shù)據(jù)當做ACK發(fā)送到SDA。7.3.2.I2C控制寄存器(2)I2C從機狀態(tài)寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CSLSTFE84HSLBUSYSTAIFRXIFTXIFSTOIF-SLACKISLACKOSLBUSY:從機模式時I2C控制器狀態(tài)位(只讀)。0:控制器處于空閑狀態(tài);1:控制器處于忙碌狀態(tài)。STAIF:從機模式時接收到START信號后的中斷請求位。從機模式的I2C控制器接收到START信號后,硬件會自動將此位置1,并向CPU發(fā)中斷請求,響應(yīng)中斷后STAIF位必須用軟件清零。RXIF:從機模式時接收到1字節(jié)的數(shù)據(jù)后的中斷請求位。RXIF必須由軟件清零。TXIF:從機模式時發(fā)送完成1字節(jié)數(shù)據(jù)后的中斷請求位。TXIF也必須由軟件清零。STOIF:從機模式時接收到STOP信號后的中斷請求位。STOIF也必須由軟件清零。SLACKI:從機模式時,接收到到的ACK數(shù)據(jù)。SLACKO:從機模式時,準備將要發(fā)送出去的ACK信號7.3.2.I2C控制寄存器4.I2C數(shù)據(jù)寄存器寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0I2CTXDFE86HI2CRXDFE87HI2CTXD:I2C發(fā)送數(shù)據(jù)寄存器,存放將要發(fā)送的I2C數(shù)據(jù);I2CRXD:I2C接收數(shù)據(jù)寄存器,存放接收完成的I2C數(shù)據(jù)。7.3.3.I2C主機模式訪問AT24C02AT24C系列是電可擦寫存儲器EEPROM,數(shù)據(jù)的存儲和取出采用I2C總線實現(xiàn),AT24C系列產(chǎn)品有以下幾種:AT24C01:128字節(jié)(128×8位);AT24C02:256字節(jié)(256×8位);AT24C04:512字節(jié)(512×8位)AT24C08:1K字節(jié)(1K×8位);AT24C16:2K字節(jié)(2K×8位);以AT24C02為例它的讀取時序有如下規(guī)定。7.3.3.I2C主機模式訪問AT24C021.單字節(jié)的寫——寫數(shù)據(jù)到存儲單元圖7.3-1是單字節(jié)的讀時序,此處省略了SCL時鐘線,SDALine的每個小方塊都和SCL時鐘周期節(jié)拍對應(yīng),一個小方塊就是一個時鐘周期。小方塊對應(yīng)一個二進制數(shù)值0或1。整個過程的時序由五部分組成,這五部分分別是:起始START位、器件地址(DeviceAddress)、存儲單元地址(WordAddress)、要存儲的數(shù)據(jù)(Data)、結(jié)束STOP位。在兩個地址、一個數(shù)據(jù)之后都有ACK應(yīng)答,ACK來自從機。圖7.3-1單字節(jié)的寫時序7.3.3.I2C主機模式訪問AT24C022.單字節(jié)的讀——從存儲單元讀數(shù)據(jù)圖7.3-2是EEPROM單字節(jié)讀時序,時序中有2個START,第一個是假寫,說明I2C總線要訪問的器件和存儲單元地址,第二個是真的讀,給出器件地址,然后把數(shù)據(jù)讀出來,圖中打箭頭指示的地方都是來自從機的應(yīng)答信號。圖7.3-2單字節(jié)的隨機讀時序7.3.3.I2C主機模式訪問AT24C023.連續(xù)字節(jié)的寫——CPU將多個字節(jié)寫入存儲塊圖7.3-3是連續(xù)字節(jié)寫時序,在單片機在總線上發(fā)出器件地址和存儲地址后,連續(xù)寫入數(shù)據(jù),在連續(xù)寫的過程中從機自動將存儲地址指向下一個單元。對于AT24C01和AT24C02一次裝載的字節(jié)數(shù)是8,AT24C04、AT24C08、AT24C16芯片一次裝載的字節(jié)數(shù)是16。圖7.3-3連續(xù)字節(jié)的寫時序7.3.3.I2C主機模式訪問AT24C02按照圖7.3-3的時序,對應(yīng)程序如下:voidWriteNbyte(u8addr,u8*p,u8number)/*WordAddress,FirstDataAddress,Bytelenth*/{Start();//發(fā)送起始命令SendData(SLAW);//發(fā)送設(shè)備地址+寫命令RecvACK();SendData(addr);//發(fā)送存儲地址RecvACK();do7.3.3.I2C主機模式訪問AT24C02{SendData(*p++);RecvACK();}while(--number);Stop();//發(fā)送停止命令}7.3.3.I2C主機模式訪問AT24C024.連續(xù)字節(jié)的讀——CPU將存儲塊的數(shù)據(jù)讀出來圖7.3-4是連續(xù)字節(jié)讀時序,和單字節(jié)的讀一樣,也有一個“假寫”過程,然后是真的讀。圖中箭頭的地方都是主機發(fā)出的應(yīng)答信號。圖7.3-4連續(xù)字節(jié)的讀時序在讀的過程中,主機應(yīng)答(0),存儲器持續(xù)將下一個地址里的數(shù)據(jù)送到SDA上,當最后一個字節(jié)數(shù)據(jù)讀完后,單片機應(yīng)返回“非應(yīng)答”(電平1),并發(fā)出終止信號以結(jié)束讀出操作。主機回復(fù)應(yīng)答信號后,要令SDA為1,釋放總線,以便開展下一次通信。7.3.3.I2C主機模式訪問AT24C02按照圖7.3-4時序圖,對應(yīng)程序如下:voidReadNbyte(u8addr,u8*p,u8number)/*WordAddress,FirstDataAddress,Bytelenth*/{Start();//發(fā)送起始命令SendData(SLAW);//發(fā)送設(shè)備地址+寫命令RecvACK();SendData(addr);//發(fā)送存儲地址RecvACK();Start();//發(fā)送起始命令SendData(SLAR);//發(fā)送設(shè)備地址+讀命令7.3.3.I2C主機模式訪問AT24C02RecvACK();do{*p=RecvData();p++;if(number!=1)SendACK();//sendACK}while(--number);SendNAK();//sendnoACK Stop();//發(fā)送停止命令}任務(wù)1.I2C功能模塊應(yīng)用開發(fā)任務(wù)要求:在第七屆藍橋杯單片機決賽試題中要求選手將測量到的電壓波動事件記錄到EEPROM中,當設(shè)備重新上電后,能夠從EEPROM里獲取事件發(fā)生時間、事件類型、電壓上限、電壓下限等參數(shù)和數(shù)據(jù)。為了簡化,本任務(wù)對EEPROM里任意4個存儲單元讀寫,內(nèi)容顯示在數(shù)碼管。具體要求如下:1.初始化AT24C02第1~4單元的內(nèi)容。2.當按鍵P34按下后,記錄按鍵次數(shù)。3.為了對比和調(diào)試,將讀取到的數(shù)據(jù)同時發(fā)送到單片機USB虛擬串口。任務(wù)資訊:AT24CX(X=02,04,08,16,等)是串行E2PROM芯片,圖7.3-5是AT24C02連接電路圖。圖7.3-5AT24C02的連接電路圖圖7.3-6按鍵電路任務(wù)1.I2C功能模塊應(yīng)用開發(fā)采用單片機自身I2C總線模塊進行程序開發(fā),其開發(fā)步驟是:1.設(shè)置P2.4、P2.5是I2C總線;2.設(shè)置I2C功能模塊是主機模式;3.按照AT24C02的寫時序,依次發(fā)送起始信號、寫器件地址、寫單元地址、寫數(shù)據(jù)命令。4.按照AT24C02的讀時序,依次發(fā)送起始信號、寫器件地址、寫單元地址、發(fā)送起始信號、發(fā)送讀信號、讀取數(shù)據(jù)。任務(wù)1.I2C功能模塊應(yīng)用開發(fā)任務(wù)參考主要代碼:/*************本地函數(shù)聲明**************/voidWriteNbyte(u8addr,u8*p,u8number);voidReadNbyte(u8addr,u8*p,u8number);voidDelay1ms(u8ms);voidDisplayScan(void);voidmain(void){P_SW2=0x90;//使能XFR訪問,I2C選擇P2.4,P2.5I2CCFG=0xe0;//使能I2C主機模式I2CMSST=0x00;/*設(shè)置USB虛擬串口*/任務(wù)1.I2C功能模塊應(yīng)用開發(fā)P3M0&=~0X03;//USB數(shù)據(jù)線 P3M1|=0X03; IRC48MCR=0x80; while(!(IRC48MCR&0x01)); USBCLK=0X00; USBCON=0X90; usb_init(); IE2|=0x80; while(DeviceState!=DEVSTATE_CONFIGURED); /*顯示EEPROM初始值*/ for(i=0;i<4;i++)
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年昭通市消防救援支隊招錄第五批政府專職消防員(83人)參考題庫附答案
- 2026廣西南寧市西鄉(xiāng)塘區(qū)那龍衛(wèi)生院招聘編外工作人員2人筆試備考試題及答案解析
- 2025年下半年宜賓市一中翠屏初級中學(xué)校公開考核招聘合同制教師招聘(公共基礎(chǔ)知識)測試題附答案
- 2025年甘肅省中材科技(酒泉)風電葉片有限公司招聘208人公筆試備考試題附答案
- 2025年浙江溫州醫(yī)科大學(xué)附屬第一醫(yī)院招聘生物樣本庫實驗員1人備考題庫附答案
- 2025廣東廣州市花都區(qū)獅嶺鎮(zhèn)聯(lián)合小學(xué)招聘臨聘教師1人備考題庫附答案
- AI賦能基因組醫(yī)學(xué):從技術(shù)突破到臨床實踐
- 2026福建省儲備糧管理有限公司莆田直屬庫招聘1人筆試備考試題及答案解析
- 2026福建漳州市鼓浪嶼故宮文物館招聘6人筆試備考試題及答案解析
- 2026重慶經(jīng)開區(qū)物業(yè)管理有限公司招聘筆試參考題庫及答案解析
- 主管護師聘任述職報告
- AI搜索時代:從GEO到AIBE的品牌新藍圖
- 云南省2025年高二上學(xué)期普通高中學(xué)業(yè)水平合格性考試《信息技術(shù)》試卷(解析版)
- 產(chǎn)品知識培訓(xùn)會議總結(jié)
- 四川省成都市樹德實驗中學(xué)2026屆九年級數(shù)學(xué)第一學(xué)期期末監(jiān)測試題含解析
- 與業(yè)主溝通技巧培訓(xùn)
- 專題11 圓(安徽專用)5年(2021-2025)中考1年模擬《數(shù)學(xué)》真題分類匯編
- 工程春節(jié)停復(fù)工方案(3篇)
- 社區(qū)基金使用管理辦法
- WST856-2025安全注射標準解讀
- 低壓控制基本知識培訓(xùn)課件
評論
0/150
提交評論