




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、i2c總結(jié)1 > i2c串行總線(xiàn)概述i2c總線(xiàn)是phlips公司推岀的一種串行總線(xiàn),是具備多主機(jī)系統(tǒng)所需的包括總線(xiàn)裁決和高低速器件同步功能的高性能串行總線(xiàn)。1光總線(xiàn)只有兩根雙向信號(hào)線(xiàn)。一根是數(shù)據(jù)線(xiàn)sda,另一根是時(shí)鐘線(xiàn)scl。sda1光總線(xiàn)通過(guò)上拉電阻接正電源。當(dāng)總線(xiàn)空閑時(shí),兩根線(xiàn)均為高電平。連到總線(xiàn)上的任一器件輸出的低電平,都將使總線(xiàn)的信號(hào) 變低,即各器件的sda及scl都是線(xiàn)“與”關(guān)系。每個(gè)接到fc總線(xiàn)上的器件都有唯一的地址。主機(jī)與其它器件間的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)據(jù)到其它器件,這時(shí)主機(jī)即為 發(fā)送器。由總線(xiàn)上接收數(shù)據(jù)的器件則為接收器。在多主機(jī)系統(tǒng)中,可能同時(shí)有兒個(gè)主機(jī)企圖啟動(dòng)總線(xiàn)
2、傳送數(shù)據(jù)。為了避免混亂,c總線(xiàn)要通過(guò)總線(xiàn)仲裁,以決定由哪臺(tái)主 機(jī)控制總線(xiàn)。2>c總線(xiàn)的數(shù)據(jù)傳送、數(shù)據(jù)位的有效性規(guī)定c總線(xiàn)進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高屯平期間,數(shù)據(jù)線(xiàn)上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線(xiàn)上的信號(hào)為低屯平期間,數(shù)據(jù)二、起始和終止信號(hào)scl線(xiàn)為高電平期間,sda線(xiàn)由高電平向低電平的變化表示起始信號(hào);scl線(xiàn)為高屯平期間,sda線(xiàn)由低電平向高電平的變化表 示終止信號(hào)。起始和終止信號(hào)都是由主機(jī)發(fā)出的,在起始信號(hào)產(chǎn)生后,總線(xiàn)就處于被占用的狀態(tài);在終止信號(hào)產(chǎn)生后,總線(xiàn)就處于空閑狀態(tài)。 連接到fc總線(xiàn)丄的器件,若具有fc總線(xiàn)的硬件接口,則很容易檢測(cè)到起始和終止信號(hào)。對(duì)于不具備i2c總線(xiàn)硬件
3、接口的有些 單片機(jī)來(lái)說(shuō),為了檢測(cè)起始和終止信號(hào),必須保證在每個(gè)時(shí)鐘周期內(nèi)對(duì)數(shù)據(jù)線(xiàn)sda采樣兩次。接收器件收到一個(gè)完整的數(shù)據(jù)字節(jié)后,有可能需要完成一些其它工作,如處理內(nèi)部中斷服務(wù)等,可能無(wú)法立刻接收下一個(gè)字節(jié), 這時(shí)接收器件可以將scl線(xiàn)拉成低電平,從而使主機(jī)處丁等待狀態(tài)。直到接收器件準(zhǔn)備好接收下一個(gè)字節(jié)時(shí),再釋放scl線(xiàn)使 之為高電平,從而使數(shù)據(jù)傳送可以繼續(xù)進(jìn)行。三、數(shù)據(jù)傳送格式(1)字節(jié)傳送與應(yīng)答每一個(gè)字節(jié)必須保證是8位長(zhǎng)度。數(shù)據(jù)傳送時(shí),先傳送最高位(msb),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一 幀共有9位)。由于某種原因從機(jī)不對(duì)主機(jī)尋址信號(hào)應(yīng)答吋(如從機(jī)正在進(jìn)行實(shí)吋性的處理工
4、作而無(wú)法接收總線(xiàn)丄的數(shù)據(jù)),它必須將數(shù)據(jù)線(xiàn) 置丁高電平,而由主機(jī)產(chǎn)生一個(gè)終止信號(hào)以結(jié)束總線(xiàn)的數(shù)據(jù)傳送。如果從機(jī)對(duì)主機(jī)進(jìn)行了應(yīng)答,但在數(shù)據(jù)傳送段吋間后無(wú)法繼續(xù)接收更多的數(shù)據(jù)時(shí),從機(jī)可以通過(guò)對(duì)無(wú)法接收的第個(gè)數(shù)據(jù)字 節(jié)的“非應(yīng)答”通知主機(jī),主機(jī)則應(yīng)發(fā)出終止信號(hào)以結(jié)束數(shù)據(jù)的繼續(xù)傳送。當(dāng)主機(jī)接收數(shù)據(jù)時(shí),它收到最后一個(gè)數(shù)據(jù)字節(jié)后,必須向從機(jī)發(fā)出一個(gè)結(jié)束傳送的信號(hào)。這個(gè)信號(hào)是由對(duì)從機(jī)的“非應(yīng)答”來(lái) 實(shí)現(xiàn)的。然后,從機(jī)釋放sda線(xiàn),以允許主機(jī)產(chǎn)生終止信號(hào)。(2)數(shù)據(jù)幀格式fc總線(xiàn)上傳送的數(shù)據(jù)信號(hào)是廣義的,既包括地址信號(hào),又包括真正的數(shù)據(jù)信號(hào)。在起始信號(hào)后必須傳送個(gè)從機(jī)的地址(7位),第8位是數(shù)據(jù)的傳送方向位(
5、r/),用“0”表示主機(jī)發(fā)送數(shù)據(jù)(t) ,“1”表示主機(jī)接收數(shù)據(jù)(r)。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號(hào)結(jié)束。但是,若主機(jī)希望繼續(xù)占用總線(xiàn)進(jìn)行新的數(shù)據(jù)傳送, 則可以不產(chǎn)生終止信號(hào),馬上再次發(fā)出起始信號(hào)對(duì)另從機(jī)進(jìn)行尋址。在總線(xiàn)的次數(shù)據(jù)傳送過(guò)程屮,可以有以下幾種組合方式:a、主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過(guò)程中不變:s|從機(jī)地址|o a數(shù)據(jù) a數(shù)據(jù) a/rpj »注:有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無(wú)陰影部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。a表示應(yīng)答,表示非應(yīng)答(高電平)。s表示起始信號(hào),p表示終止信號(hào)。b、主機(jī)在第一個(gè)字節(jié)后,立即由從機(jī)讀數(shù)據(jù)sl從機(jī)地址ba*'
6、數(shù)據(jù)"a數(shù)據(jù),pc、在傳送過(guò)程中,當(dāng)需要改變傳送方向時(shí),起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫(xiě)方向位正好反相。s從機(jī)地址0a.數(shù)諸a/八s從機(jī)地址1a,數(shù)擲lp四、總線(xiàn)的尋址c總線(xiàn)協(xié)議有明確的規(guī)定:采用7位的尋址字節(jié)(尋址字節(jié)是起始信號(hào)后的第-個(gè)字節(jié))°(1)尋址字節(jié)的位定義d7d1位組成從機(jī)的地址。do位是數(shù)據(jù)傳送方向位,為“0”時(shí)表示主機(jī)向從機(jī)寫(xiě)數(shù)據(jù),為“1”時(shí)表示主機(jī)由從機(jī)讀數(shù)據(jù)。n主機(jī)發(fā)送地址吋,總線(xiàn)上的每個(gè)從機(jī)都將這7位地址碼與自己的地址進(jìn)行比較,如果相同,則認(rèn)為自己正被主機(jī)尋址,根據(jù) r/位將自己確定為發(fā)送器或接收器。n從機(jī)的地址由固定部分和可編程部分
7、組成。在一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可接 入總線(xiàn)該類(lèi)器件的最大數(shù)目。如個(gè)從機(jī)的7位尋址位有4位是固定位,3位是可編程位,這吋僅能尋址8個(gè)同樣的器件,即 可以有8個(gè)同樣的器件接入到該i2c總線(xiàn)系統(tǒng)中。n (2)尋址字節(jié)屮的特殊地址 n固定地址編號(hào)0000和1111已被保留作為特殊用途。表91 pc總線(xiàn)特殊地址表地址位r w意義0000.00ao.通用呼叫地址”000000b起始字節(jié).0000.00x。cbus地址卩0000.01sx"為不同總線(xiàn)的保留地址.0000.01hxw000of1xx。保留111b1x1110xx,xp十位從機(jī)地址門(mén)起始信號(hào)后
8、的第一字節(jié)的8位為“0000 0000”時(shí),稱(chēng)為通用呼叫地址。通用呼叫地址的用意在第二字節(jié)中加以說(shuō)明。格式為: 第一字節(jié)(通用呼叫地址)9?第二字節(jié)lsb2 00/000000.axxxxxx :xba第二字節(jié)為06h吋,所有能響應(yīng)通用呼叫地址的從機(jī)器件復(fù)位,并由硬件裝入從機(jī)地址的可編程部分。能響應(yīng)命令的從機(jī)器件 復(fù)位時(shí)不拉低sda和scl線(xiàn),以免堵塞總線(xiàn)。第二字節(jié)為04h吋,所有能響應(yīng)通用呼叫地址并通過(guò)硬件來(lái)定義其可編程地址的從機(jī)器件將鎖定地址屮的可編程位,但不進(jìn)行 復(fù)位。如果第二字節(jié)的方向位b為“1”,則這兩個(gè)字節(jié)命令稱(chēng)為硬件通用呼叫命令。在這第二字節(jié)的高7位說(shuō)明自己的地址。接在總線(xiàn)上的智
9、能器件,如單片機(jī)或其他微處理器能識(shí)別這個(gè)地址,并與之傳送數(shù)據(jù)。 硬件主器件作為從機(jī)使用時(shí),也用這個(gè)地址作為從機(jī)地址。格式為:s0000 0000a,主機(jī)地址1 a-數(shù)據(jù)a-數(shù)據(jù)2p在系統(tǒng)中另一種選擇可能是系統(tǒng)復(fù)位時(shí)硬件主機(jī)器件工作在從機(jī)接收器方式,這時(shí)由系統(tǒng)中的主機(jī)先告訴硬件主機(jī)器件數(shù)據(jù)應(yīng) 送往的從機(jī)器件地址,當(dāng)硬件主機(jī)器件耍發(fā)送數(shù)據(jù)時(shí)就可以直接向指定從機(jī)器件發(fā)送數(shù)據(jù)了。(3)起始字節(jié)起始字節(jié)是提供給沒(méi)有i2c總線(xiàn)接口的單片機(jī)查詢(xún)i2c總線(xiàn)時(shí)使用的特殊字節(jié)。不具備i2c總線(xiàn)接口的單片機(jī),則必須通過(guò)軟件不斷地檢測(cè)總線(xiàn),以便及時(shí)地響應(yīng)總線(xiàn)的請(qǐng)求。單片機(jī)的速度與硬件接口器件 的速度就出現(xiàn)了較大的差別
10、,為此,i2c總線(xiàn)上的數(shù)據(jù)傳送耍由一個(gè)較長(zhǎng)的起始過(guò)程加以引導(dǎo)。起始借號(hào)s廿應(yīng)答(高電半)耋父起始信號(hào)sr引導(dǎo)過(guò)程由起始信號(hào)、起始字節(jié)、應(yīng)答位、重復(fù)起始信號(hào)(sr)組成。n請(qǐng)求訪(fǎng)問(wèn)總線(xiàn)的主機(jī)發(fā)出起始信號(hào)后,發(fā)送起始字節(jié)(0000 0001),另一個(gè)單片機(jī)可以用一個(gè)比較低的速率采樣sda線(xiàn),直 到檢測(cè)到起始字節(jié)中的7個(gè)“0”中的一個(gè)為止。在檢測(cè)到sda線(xiàn)上的高電平后,單片機(jī)就可以用較高的采樣速率,以便尋找作 為同步信號(hào)使用的第二個(gè)起始信號(hào)sron在起始信號(hào)后的應(yīng)答時(shí)鐘脈沖僅僅是為了和總線(xiàn)所使用的格式一致,并不要求器件在這個(gè)脈沖期間作應(yīng)答。3> i2c典型電路4.7uf55555au mclk
11、 au"bclk au"sdoau sync au*sdivccau33o亍c140|c141cu2rr125r126567 s9dgndmclk sclk dsdin dlrck asdoutalrckagnd hpgndlout1rout1lout24.7uf18h.121110ufc/22pf22pfil262827r0ut225r1291kmic pmic ni2c scl1i2c sda1 aui:c147i 0.1ufc149i 0juf/6.3vc150au c22215.9,10592i2c scl1i2csda1r128 $ 2.2k ooopfi2c s
12、cj aui2csda 廠(chǎng) au139r160 人八 330ohm 二匚一 wc0330ohm2c sdcesclsd/unrinlin2rin2nces8328dacvrefadcvrefvmidgnd ther192029上圖是i2c控制的codec ic es8328。從中可以看出,i2c_scl1_au_c 接 es8328,另一端 i2c_scl1 接 cpu。i2c操作筆記1 前言以at24c04為例對(duì)丁大多數(shù)工程師而言,i2c永遠(yuǎn)是一個(gè)頭疼的問(wèn)題。相比uart和spi而言,i2c的時(shí)序耍復(fù)雜一些,i2c組合變化也豐 富一些。在這里以at24c04為例說(shuō)明i2c使用過(guò)程中的一些注意
13、點(diǎn)。2.at24c04操作示意圖寫(xiě)單個(gè)存儲(chǔ)字節(jié)startdevice addresswword addressdin1stop |aaa寫(xiě)多個(gè)存錯(cuò)字節(jié)startdevice addresswword addressdin1din2aaad讀單個(gè)存儲(chǔ)字節(jié)startdevice addresswword addressstartdevice addresslr司aadout1idout2讀多個(gè)存儲(chǔ)字節(jié)|渝|啟動(dòng)i dpvicpaddress答應(yīng)nd寫(xiě)標(biāo)老位| 嘰數(shù)據(jù)寫(xiě)入i2c設(shè)備i word address的蛾址e應(yīng)無(wú)tzljn讀標(biāo)志位doutx數(shù)據(jù)從i2c設(shè)備讀出start idevice ad
14、dresswword addressstart idevice addresslr:|sqpaadout1圖at24c04操作示意圖示意圖說(shuō)明:示意圖分闡述了4種不同的操作方式,例如寫(xiě)單個(gè)存儲(chǔ)單元,寫(xiě)多個(gè)存儲(chǔ)單元,讀單個(gè)存儲(chǔ)單元和寫(xiě)單個(gè)存儲(chǔ)單 元。對(duì)于單個(gè)操作而言,丄部為mcu通過(guò)i2c輸出的相關(guān)指令,下部為i2c設(shè)備的響應(yīng)。例如寫(xiě)單個(gè)存儲(chǔ)單元操作吋,mcu 發(fā)出i2c啟動(dòng),設(shè)備地址,寫(xiě)標(biāo)志位等,而i2c設(shè)備輸出多個(gè)ack。3 若干說(shuō)明3.1基本操作方式i2c設(shè)備的操作可分為寫(xiě)單個(gè)存儲(chǔ)字節(jié),寫(xiě)多個(gè)存儲(chǔ)字節(jié),讀單個(gè)存儲(chǔ)字節(jié)和讀多個(gè)存儲(chǔ)字節(jié)。相對(duì)t at24c04而言,這些讀 寫(xiě)動(dòng)作相對(duì)于內(nèi)部的存
15、儲(chǔ)單元而言,對(duì)于其他的具備i2c接口的ad或傳感器而言,存儲(chǔ)單元變成了寄存器單元。雖然存在概 念上的差別,但是其操作原理確實(shí)一樣的。3.2無(wú)應(yīng)答在以上4種情況中,無(wú)應(yīng)答為mcu發(fā)出,尢應(yīng)答意為mcu不需要從機(jī)輸出數(shù)據(jù),mcu將會(huì)停止本次i2c操作。需要說(shuō)明的是, 無(wú)應(yīng)答并不是一種異常情況。33 i2c設(shè)備并不只有一個(gè)設(shè)備地址這一點(diǎn)往往被忽略,一般情況下認(rèn)為在i2c啟動(dòng)信號(hào)之后的字節(jié)為i2c從機(jī)地址(7位)。對(duì)于at24c04而言,內(nèi)部具有4kb 存儲(chǔ)位,合計(jì)512字節(jié)。若需耍訪(fǎng)問(wèn)512字節(jié)內(nèi)容,總共需耍9根地址線(xiàn)(8位寬度),那么上圖中的存儲(chǔ)地址(8位長(zhǎng)度)顯然還 差了位,那么就需要從設(shè)備地址
16、屮“借”1位,這就使得at24c04具有兩個(gè)i2c地址,例如0x50和0x51。3.4存儲(chǔ)地址相對(duì)t at24c04而言,存儲(chǔ)地址占1個(gè)字節(jié)。若換成其他i2c設(shè)備,例如adxl345,存儲(chǔ)地址被寄存器地址替代即可,其他 操作方式相似。但是像at24c32或at24c64這樣的大容量eeprom,則存儲(chǔ)地址需要2字節(jié)描述,也就意味著需要連續(xù)發(fā)送兩個(gè)字節(jié)地址信息且高字節(jié)在前。其他像bh1750這樣的光照芯片,存儲(chǔ)地址被具體的操作命令替代,使用i2c設(shè)備時(shí)需要因 地制宜,切不可照搬教條。3.5連續(xù)讀和連續(xù)寫(xiě)限制at24c04 +存在頁(yè)的概念,頁(yè)的大小為8字節(jié),若果在單頁(yè)的范圍內(nèi),存儲(chǔ)地址累加,若超過(guò)
17、該頁(yè)的最大地址,存儲(chǔ)地址回 到頁(yè)開(kāi)始處。所以對(duì)于連續(xù)讀和連續(xù)寫(xiě)而言,最人的操作字節(jié)數(shù)為8。若需要操作的字節(jié)內(nèi)容超過(guò)8字節(jié),則需要進(jìn)行翻頁(yè)操 作,即寫(xiě)入下一頁(yè)的起始存儲(chǔ)地址。4總結(jié)i2c設(shè)備有很多種,若掌握基本原理,便可見(jiàn)招拆招,那是i2c總線(xiàn)就不那么難了。5 參考資料【維基百科i2c】1.12c協(xié)議2條雙向串行線(xiàn),一條數(shù)據(jù)線(xiàn)sda, 條時(shí)鐘線(xiàn)scl。sda傳輸數(shù)據(jù)是大端傳輸,每次傳輸8bit,即一字節(jié)。支持多主控(multimastering),任何時(shí)間點(diǎn)只能有一個(gè)主控。 總線(xiàn)上每個(gè)設(shè)備都有自己的一個(gè)addr,共7個(gè)bit,廣播地址全0.系統(tǒng)屮可能有多個(gè)同種芯片,為此acklr分為固定部分和可
18、編程部份,細(xì)節(jié)視芯片而定,看datasheeto1.1 i2c位傳輸數(shù)據(jù)傳輸:scl為高電平吋,sda線(xiàn)若保持穩(wěn)定,那么sda±是在傳輸數(shù)據(jù)bit; 若sda發(fā)生跳變,則用來(lái)表示一個(gè)會(huì)話(huà)的開(kāi)始或結(jié)束(后面講) 數(shù)據(jù)改變:scl為低電平時(shí),sda線(xiàn)才能改變傳輸?shù)腷it.soascl!數(shù)據(jù)有效改變數(shù)據(jù)丨i11. 2 i2c開(kāi)始和結(jié)束信號(hào)開(kāi)始信號(hào):scl為高電平時(shí),sda由高電平向低電平跳變,開(kāi)始傳送數(shù)據(jù)。 結(jié)束信號(hào):scl為高電平吋,sda由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。scasolscascl1. 3 i2c應(yīng)答信號(hào)master每發(fā)送完8bit數(shù)據(jù)后等待slave的ack。 即在第
19、9個(gè)clock,若從ic發(fā)ack, sda會(huì)被拉低。若沒(méi)有ack, sda會(huì)被置高,這會(huì)引起master發(fā)生restart或stop流程,如下所示:scl厲岡咼岡冋何冋鳳風(fēng) 我成冏冋冋岡用鳳何sda 冋 a1 '冋 a3 悶冏 a6卜耐 岡xx 呵 d町d2 何回d5 j d6 八calling addressread/writeackdata bytestartinoack. stop1. 4 i2c寫(xiě)流程寫(xiě)寄存器的標(biāo)準(zhǔn)流程為:1. master 發(fā)起 start2. master 發(fā)送 i2c addr (7bit)和 w 操作 0 (lbit),等待 ack3slave發(fā)送ack
20、4. master 發(fā)送 reg addr(8bit ),等待 ack5. slave 發(fā)送 ack6. master發(fā)送data (8bit),即要寫(xiě)入寄存器屮的數(shù)據(jù),等待ack7. slave 發(fā)送 ack8. 第6步和第7步可以重復(fù)多次,即順序?qū)懚鄠€(gè)寄存器9. master 發(fā)起 stop寫(xiě)個(gè)寄存器startdeviceaddresswriteword addressdatastopsdaline m n rn i p: : i n msblsbr/ackmsbacklsback寫(xiě)多個(gè)寄存器startsda linemsbfigure 2. byte writeword address
21、(n)data (n)deviceaddress*writefigure 3 page write1.5 i2c讀流程讀寄存器的標(biāo)準(zhǔn)流程為:1. master 發(fā)送 i2caddr(7bit)和 w操作1 (lbit),等待 ack2. slave 發(fā)送 ack3. master 發(fā)送 regaddr(8bit),等待 ack4. slave 發(fā)送 ack5. master 發(fā)起 start6. master 發(fā)送 i2caddr(7bit)和r操作1(lbit),等待 ack7. slave 發(fā)送 ack8. slave發(fā)送data(8bit),即寄存器里的值9. master 發(fā)送 ack
22、10. 第8步和第9步可以重復(fù)多次,即順序讀多個(gè)寄存器讀個(gè)寄存器startdeviceaddresswritewordaddress nstartdeviceaddressreadstopsdaw m n m | 卜:| e n rm | : : : : : : : 111msblsbr/ackmsbmsb acik lsbacklsbdata ndummy writefigure 5 random readno ack讀多個(gè)寄存器deviceaddressreadackackackstopsda lineack門(mén)111111data ndata n + 1data n + 2data n +
23、 xfigure 6 sequential readtl no ack2powerpc的i2c實(shí)現(xiàn)mpc8560的ccsr中控制i2c的寄存器共有6個(gè)。table 11-3.12c memory mapaddressl2c registeraccessresetsection/page0x0_3000i2cadr2c address registerrav0x0011.3.1.1/11-50x0_3004i2cfdr一l2c frequency divider registerr/w0x0011.3.1.2/11-50x0_3008i2ccr一l2c control registerr/w0x
24、0011.3.1.3/11-60x0_300ci2csr一l2c status registerr/w0x8111.3.1.4/11-70x0_3010i2cdr一l2c data registerr/w0x0011.3.1.5/11-9oxo_3o14i2cdfsrr一l2c digital filter sampling rate registerr/w0x1011.3.1.6/11-102. 1 i2cadr地址寄存器cpu也可以是i2c的slave, cpu的12c地址有i2cadr指定addr0000_00000x0_300067rwresetoffset0figure 11-2.1
25、2c address register (i2cadr)2. 2 i2cfdr頻率設(shè)置寄存器rwresetoffsetfdr0000_00000x0_30040127figure 11-3.12c frequency divider register (i2cfdr)the serial bit clock frequency of scl is equal to the ccb clock divided by the divider. 用來(lái)設(shè)置i2c總線(xiàn)頻率2. 3 i2ccr控制寄存器25671figure 11-4.12c control register (i2ccr)34men:
26、module enable. 置 1 時(shí),i2c 模塊使能mien: module interrupt enable.置 1 時(shí),i2c 中斷使能。msta: master/slave mode. 1 master mode, 0 slave mode.當(dāng)l->0時(shí),cpu發(fā)起stop信號(hào)當(dāng)0->l時(shí),cpu發(fā)起start信號(hào)mtx: transmit/receive mode select. 0 receive mode, 1 transmit mode txak: transfer acknowledge.置 1 時(shí),cpu 在 9th clock 發(fā)送 ack 拉低 sda
27、rsta: repeat start.置 1 吋,cpu 發(fā)送 repeat startbcst:置,cpu接收廣播信息(信息的slave addr為7個(gè)0)2. 4 i2csr狀態(tài)寄存器mcf: 0 byte transfer is in process1 byte transfer is completedmaas:當(dāng)cpu作為slave時(shí),若i2cdr與會(huì)話(huà)中slaveaddr匹配,此bit被置1mbb: 0 i2c bus idle1 i2c bus busymal:若置1,表示仲裁失敗bcstm:若置1,表示接收到廣播信息srw: when maas is set, srw indi
28、cates the value of the r/w command bit of the calling address, which is sent from the master.0 slave receive, master writing to slave1 slave transmit, master reading from slavemif: module interrupt. the mif bit is set when an interrupt is pending, causing a processor interrupt request (provided i2cc
29、rmien is set)rxak:若置1,表示收到tack07figure 11-6.12c data register i2cdr)2. 5 i2cdr數(shù)據(jù)寄存器rwresetoffset這個(gè)寄存器儲(chǔ)存cpu將要傳輸?shù)臄?shù)據(jù)。51單片機(jī)普通io 口模擬iic總線(xiàn)的程序?qū)崿F(xiàn)1-2.3.4.5.6./*fuction:gpio模擬iic bus,實(shí)現(xiàn)弓at24c02的數(shù)據(jù)通信ps:該源代碼是以stc89c52為平臺(tái)編寫(xiě)的,可通過(guò)修改包含的頭文件以適用于所有51系列單片機(jī)sd:dason7. */8. #include <reg52.h>9. #include string.h>
30、10. sbit sda = p2a0;11. sbit scl = p2a1;12. unsigned char tablelll=0jl>2>3>4>5>6>7>8>9;13. unsigned char table2ll;14. void init();15. void somenop();16. void delay(unsigned char);17. void start();18. void stop();19. void send_ack(unsigned char);20. unsigned char rec_ack();21
31、void write_byte(unsigned char);22. unsigned char readbyte();23. unsigned char write_add(unsigned char,unsigned char *unsigned char);24. unsigned char read_add(unsigned charunsigned char *unsigned char);void main()write_add(0xl0tablel>10);delay(100);read_add(0x10 table210); while(l);/端i i初始化void i
32、nit()memse t (t able2o sizeo f (t able2); sda = 1;scl = 1;somenop();起始信號(hào)void start()sda = 1;somenop();scl = 1;somenop();sda = 0;somenop();終止信號(hào)void stop()sda = 0;somenop();scl = 1;somenop();sda = 1;somenop();/主機(jī)發(fā)送應(yīng)答信號(hào)void send_ack(unsigned char ack)scl = 0;somenop();sda = ack;somenop();scl = 1;someno
33、p();scl = 0;somenop();sda = 1;somenop();主機(jī)接收應(yīng)答信號(hào)unsigned char rec_ack()scl = 1;somenop();if(sda = 1)scl = 0; delay(l);scl = 1;if(sda = 1)return 1;elsereturn 0;寫(xiě)一個(gè)字卩93. void write_byte(unsigned char dat)94. 95 96.97.98.99.100.101.102.103-104.105.106-107.108.109.110.111.112.113.114.115.116.117.119.120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140.141.142.143.144.145.146.147.148.150.151.152.153.154.155.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)內(nèi)部溝通協(xié)作平臺(tái)建設(shè)方案
- 江西省九江市都昌縣2024-2025學(xué)年八年級(jí)上學(xué)期期末生物試題(含答案)
- 北京延慶區(qū)2024-2025學(xué)年高二上學(xué)期期末生物學(xué)試題(含答案)
- 三農(nóng)用物資采購(gòu)管理作業(yè)指導(dǎo)書(shū)
- 從理論到實(shí)踐科學(xué)探究活動(dòng)課
- 青稞種植知識(shí)培訓(xùn)課件
- 電商直播平臺(tái)搭建與運(yùn)營(yíng)服務(wù)協(xié)議
- 數(shù)學(xué)王國(guó)里的智慧讀后感
- 電子支付平臺(tái)推廣專(zhuān)項(xiàng)資金協(xié)議
- 智能供應(yīng)鏈管理服務(wù)合同
- 4《公民的基本權(quán)利和義務(wù)》(第2課時(shí))教學(xué)實(shí)錄-2024-2025學(xué)年道德與法治六年級(jí)上冊(cè)統(tǒng)編版
- 公司前臺(tái)接待禮儀培訓(xùn)
- 人工智能導(dǎo)論知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋天津大學(xué)
- 2024年電力算力協(xié)同:需求、理念與關(guān)鍵技術(shù)報(bào)告-南網(wǎng)數(shù)研院(蔡田田)
- (完整版)施工現(xiàn)場(chǎng)機(jī)械設(shè)備維修保養(yǎng)記錄表
- 2024解析:第四章光現(xiàn)象-基礎(chǔ)練(解析版)
- 【MOOC】物理化學(xué)(上)-武漢大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 開(kāi)原市污水處理廠(chǎng)提標(biāo)改造可研報(bào)告
- 黃連素的合成方法研究
- 餐廳排風(fēng)換氣設(shè)計(jì)方案
- 《南通市介紹》課件
評(píng)論
0/150
提交評(píng)論