單片機(jī)之間數(shù)據(jù)傳輸?shù)能浻布O(shè)計(jì)
陸軍航空兵學(xué)院 信息技術(shù)教研室 徐剛 魏琴 2014/4/1 10:19:53
【摘要】 在單片機(jī)應(yīng)用中,I2C總線是一種簡(jiǎn)單、雙向的二線制同步串行總線,它只需要兩根線——串行數(shù)據(jù)線和串行時(shí)鐘線就可以在總線與連接器件之間進(jìn)行數(shù)據(jù)傳送。本文介紹了它的工作原理和特點(diǎn),闡述了軟件模擬I2C總線的程序設(shè)計(jì)方法,并以AT24C64為例介紹了它與非I2C總線單片機(jī)之間接口的軟硬件設(shè)計(jì)。
【關(guān)鍵詞】 雙向二線制 同步串行總線 I2C總線 AT24C64
The hardware and software design of data transmission between MCU
XuGang WeiQin
(Army Aviation Institute Infirmation Technology ,Beijing 101123, China)
Abstract I2C bus is a simple bi-directional two-line synchronization serial bus.The paper introduces the principle and peculiarity of I2C bus, give out a method about how to simulate I2C bus using C language . The example is based on AT24C64 and AT89C2051.
Keywords bi-directional two-line synchronization serial bus I2C bus AT24C64
1 引言
與并行擴(kuò)展總線相比,串行擴(kuò)展總線有突出的優(yōu)點(diǎn):電路結(jié)構(gòu)簡(jiǎn)單,程序編寫(xiě)方便,易于實(shí)現(xiàn)用戶系統(tǒng)軟硬件的模塊化、標(biāo)準(zhǔn)化等。 I2C BUS (Inter Integrated Circuit BUS 內(nèi)部集成電路總線)是由Philips公司推出的二線制同步串行擴(kuò)展總線,它是具備總線仲裁和高低速設(shè)備同步等功能的高性能多主機(jī)總線。由于其組成系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,無(wú)需專(zhuān)門(mén)的母板和插座,直接用導(dǎo)線連接設(shè)備,通信時(shí)無(wú)需片選信號(hào),且具有這種總線器件的價(jià)格比較便宜,因此它們擁有廣泛的應(yīng)用前景。然而在諸多工程領(lǐng)域中廣泛應(yīng)用的MCS51系列、68HC05系列、AT89系列的單片機(jī)都不具有這種總線接口,這在很大程度上限制了它們的應(yīng)用范圍。本文在介紹了I2C總線通信標(biāo)準(zhǔn)的基礎(chǔ)上,給出了在AT89C2051上利用P1口實(shí)現(xiàn)I2C總線的方法,及其軟件模擬I2C總線的程序設(shè)計(jì)。
2 I2C總線概述
I2C總線是一種雙線、雙向的串行數(shù)據(jù)總線,具有多端控制能力。雙線是指總線由串行數(shù)據(jù)(SDA)線和串行時(shí)鐘(SCL)線組成,結(jié)構(gòu)雖然簡(jiǎn)單卻可以在CPU與被控IC之間實(shí)現(xiàn)數(shù)據(jù)雙向傳輸,最高傳輸率為100千比特/秒,傳送的數(shù)據(jù)必須是8位的,首先從高位開(kāi)始傳送。雙向是指SDA與SCL均為雙向I/O線,數(shù)據(jù)可讀可寫(xiě),由于雙向I/O線是開(kāi)漏極輸出(輸出“1”時(shí),為高阻抗?fàn)顟B(tài)),因此I2C總線上的所有設(shè)備的SDA、SCL引腳都需要外接上拉電阻。
每次訪問(wèn)I2C器件之前,必須給出開(kāi)始信號(hào)啟動(dòng)I2C數(shù)據(jù)總線操作,總線啟動(dòng)后狀態(tài)由“空閑”變?yōu)椤懊Α薄C看谓Y(jié)束訪問(wèn)時(shí),也必須給出停止信號(hào)來(lái)停止I2C數(shù)據(jù)總線操作,停止一段時(shí)間后,總線狀態(tài)由“忙”變?yōu)椤翱臻e”。在啟動(dòng)和停止信號(hào)之間可以進(jìn)行數(shù)據(jù)傳送,傳送的數(shù)據(jù)必須是8位的,首先從高位開(kāi)始傳送,SDA線上的高低電平狀態(tài)反應(yīng)了傳送的數(shù)據(jù),每傳送1 bit的數(shù)據(jù),要在SCL上產(chǎn)生1個(gè)時(shí)鐘,當(dāng)SCL為低時(shí),可以改變SDA上的數(shù)據(jù),在SCL為高時(shí),SDA上的數(shù)據(jù)必須穩(wěn)定,否則將被認(rèn)為是控制信號(hào)。若啟動(dòng)總線為讀操作,則在SCL脈沖的下降沿讀出1 bit的數(shù)據(jù),若啟動(dòng)寫(xiě)操作,則在SCL脈沖的上升沿寫(xiě)入1 bit 的數(shù)據(jù)。I2C總線的協(xié)議如表1所示:
表1 I2C總線的協(xié)議
3 系統(tǒng)硬件設(shè)計(jì)
3.1 AT24C64芯片簡(jiǎn)介
AT24C64系列芯片是ATMEL公司生產(chǎn)的采用I2C總線標(biāo)準(zhǔn)常用的串行EEPROM存儲(chǔ)芯片。它具有8K×8Bit的存儲(chǔ)容量,每個(gè)字節(jié)可重復(fù)擦/寫(xiě)100萬(wàn)次,數(shù)據(jù)保存期大于100年。AT24C64具有8K的尋址空間,地址范圍為0000H~1FFFH,它工作于從器件方式,頁(yè)寫(xiě)的時(shí)候最多可以寫(xiě)入8字節(jié)(當(dāng)開(kāi)始寫(xiě)入的從器件片內(nèi)地址為頁(yè)首地址時(shí))。也就是說(shuō),AT24C64每頁(yè)有8字節(jié)的容量,每次寫(xiě)入數(shù)據(jù)是從主器件發(fā)送來(lái)的片內(nèi)選擇地址開(kāi)始寫(xiě)入,如果寫(xiě)到頁(yè)末尾,主(未完,下一頁(yè))
附件下載:點(diǎn)擊下載全部文件
|