8051單片機(jī)的I2C接口并行擴(kuò)展
出處:平常人 發(fā)布于:2008-09-04 09:04:00
摘 要:為提高8051系列單片機(jī)I2C總線的工作效率,提高整機(jī)工作性能,根據(jù)I2C總線協(xié)議設(shè)計(jì)了8051單片機(jī)的I2C接口電路。用VHDL語言進(jìn)行設(shè)計(jì),并用MAXPLUSⅡ進(jìn)行編譯仿真,芯片為有EPM7128SLC84?。。保?。
?。薄∫⊙?/FONT>
?。桑玻每偩€接口器件在視頻處理、移動(dòng)通信等領(lǐng)域的應(yīng)用已經(jīng)非常普遍。另外,通用的I2C總線接口器件,如帶I2C總線的RAM,ROM,A/D,D/A,LCD驅(qū)動(dòng)器等,也越來越多地應(yīng)用于計(jì)算機(jī)及自動(dòng)控制系統(tǒng)中。隨著I2C接口器件越來越廣泛的應(yīng)用,8051系列單片機(jī)與他之間的通信越來越頻繁。
?。福埃担毕盗袉纹瑱C(jī)與I2C總線接口器件通信時(shí),8051的通用口與I2C總線器件的SCL,SDA連接。根據(jù)I2C總線數(shù)據(jù)傳輸協(xié)議,8051必須對(duì)其兩個(gè)通用口進(jìn)行頻繁的置位、清零。根據(jù)基于51指令系統(tǒng)編制的匯編程序,傳送一位數(shù)據(jù),需要9個(gè)機(jī)器周期,而對(duì)于8051,一個(gè)機(jī)器周期要耗費(fèi)6個(gè)時(shí)鐘周期,即用54個(gè)時(shí)鐘周期才能傳送一位數(shù)據(jù)。如此則極大地占用了CPU的工作時(shí)間,降低了系統(tǒng)的工作效率,導(dǎo)致I2C器件的優(yōu)勢(shì)難以顯現(xiàn)。因此,有必要設(shè)計(jì)8051與I2C總線的專用接口電路。該接口電路能夠?qū)Γ桑玻每偩€上的數(shù)據(jù)進(jìn)行自動(dòng)收發(fā),而CPU只需要通過并口訪問該接口電路中的有關(guān)寄存器就可以實(shí)現(xiàn)與I2C器件的數(shù)據(jù)交換,從而使整個(gè)系統(tǒng)的性能得到提高。本設(shè)計(jì)用VHDL硬件描述語言為工具,用ALTERA公司的 MAXPLUSⅡ軟件進(jìn)行編譯仿真,芯片為EPM7128SLC84-15。
?。病≡O(shè)計(jì)目標(biāo)和要求
為了提高數(shù)據(jù)傳送的速度,設(shè)計(jì)一個(gè)I2C接口電路。8051不直接與I2C器件交換數(shù)據(jù),而是通過并口與該I2C接口電路交換數(shù)據(jù),I2C總線上的數(shù)據(jù)傳送也通過該I2C接口電路來完成。從而通過CPU的外部存儲(chǔ)器讀寫指令就可實(shí)現(xiàn)與I2C器件的數(shù)據(jù)交換,使對(duì)串口的操作用并口的方式來實(shí)現(xiàn)。
在I2C接口電路內(nèi)部有一個(gè)控制寄存器CI0和一個(gè)數(shù)據(jù)寄存器CI1,即I2C接口電路占用兩個(gè)地址。通過寫控制寄存器CI0的內(nèi)容實(shí)現(xiàn)對(duì)I2C接口電路的編程,讀寫數(shù)據(jù)寄存器CI1的內(nèi)容實(shí)現(xiàn)與I2C器件的數(shù)據(jù)交換。在CI0中的內(nèi)容定義了8051對(duì)I2C器件進(jìn)行操作的類型(讀或?qū)懀┖停桑玻闷骷?nèi)地址的字節(jié)數(shù)等信息,使I2C接口電路能夠識(shí)別從8051傳來的數(shù)據(jù)是地址還是數(shù)據(jù)、8051將要發(fā)送數(shù)據(jù)還是接收數(shù)據(jù)以及數(shù)據(jù)的長(zhǎng)度等。
如果8051要發(fā)送數(shù)據(jù)給I2C器件,則根據(jù)I2C總線協(xié)議,在數(shù)據(jù)CI1接收到個(gè)數(shù)據(jù)后啟動(dòng)I2C總線,然后將CI1中的數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換后逐位發(fā)出,發(fā)出完畢后設(shè)置一個(gè)標(biāo)志位,使8051知道可以發(fā)送下一個(gè)總線后首先寫I2C器件內(nèi)地址,然后進(jìn)行數(shù)據(jù)接收,進(jìn)行串并轉(zhuǎn)換后將接收到的數(shù)據(jù)裝入CI1中,再設(shè)置標(biāo)志位,使8051知道可以讀出數(shù)據(jù)。
根據(jù)上述設(shè)計(jì)要求,I2C接口芯片的引腳如圖1所示。其中clk可以使用獨(dú)立的時(shí)鐘,使I2C總線的位傳送速度遠(yuǎn)高于8051的位操作,從而可使I2C總線的數(shù)據(jù)傳送接近并口的數(shù)據(jù)速率;a0是地址信號(hào)輸入,a0=0時(shí)進(jìn)行CI0寫操作,當(dāng)a0=1時(shí)進(jìn)行CI1讀/寫操作;bz為標(biāo)志輸出位,bz=0時(shí),8051需要等待,bz=1時(shí)8051可以對(duì)CI1操作。
點(diǎn)擊此處查看全部新聞圖片
?。桑玻媒涌谛酒谙到y(tǒng)中的情況如圖2所示。這里8051對(duì)I2C接口芯片操作使用了查詢方式,也可以改用中斷方式
點(diǎn)擊此處查看全部新聞圖片
?。场〔⑿薪涌谠O(shè)計(jì)的實(shí)現(xiàn)
?。常薄〗涌谠O(shè)計(jì)的內(nèi)部結(jié)構(gòu)
該芯片的內(nèi)部結(jié)構(gòu)圖如圖3所示。系統(tǒng)由控制寄存器CI0,數(shù)據(jù)寄存器CI1,并串轉(zhuǎn)換,串并轉(zhuǎn)換,移位寄存器以及I2C控制模塊6部分構(gòu)成。


?。常病》绞娇刂谱?/FONT>
?。福埃担毕蚩刂萍拇嫫鳎茫桑皩懣刂谱?,實(shí)現(xiàn)對(duì)I2C接口的編程控制。CI0的控制字格式如下所示:
?。粒?,A1,A0位:對(duì)與8051相連的I2C器件組的片選(器件地址)。對(duì)應(yīng)不同值時(shí)選擇不同的器件通信。
?。遥祝河脕砜刂疲福埃担睂?duì)I2C器件的讀寫操作。1表示8051對(duì)I2C器件讀數(shù)據(jù);0表示8051對(duì)I2C器件寫數(shù)據(jù)。
?。停保停埃寒?dāng)S=1時(shí)的4種工作方式:
?、伲桑玻每偩€未連接,要進(jìn)行寫操作。
?、冢桑玻每偩€未連接,要進(jìn)行讀操作。
?、郏桑玻每偩€已連接,換一個(gè)I2C器件或換新地址,要進(jìn)行寫操作。
?、埽桑玻每偩€已連接,換一個(gè)I2C器件或換新地址,要進(jìn)行讀操作。
?。樱汗ぷ骺刂莆?。當(dāng)S=0時(shí),關(guān)閉I2C總線,其他情況S=1。
?。模冢樱褐该鳎福埃担睂?duì)I2C器件讀寫的地址數(shù)。具體為:
?。埃海福埃担睂?duì)I2C器件內(nèi)單字節(jié)地址讀寫。
?。保海福埃担睂?duì)I2C器件內(nèi)雙字節(jié)地址讀寫。
?。常场。桑玻媚K對(duì)I2C傳輸協(xié)議的實(shí)現(xiàn)
根據(jù)I2C數(shù)據(jù)傳輸協(xié)議,時(shí)鐘為高電平時(shí),數(shù)據(jù)線由高電平向低電平跳變,啟動(dòng)I2C數(shù)據(jù)傳輸。然后每到來一個(gè)時(shí)鐘脈沖,傳送一位串行數(shù)據(jù),第8?jìng)€(gè)脈沖到來后,已完成一個(gè)字節(jié)的傳輸,第9個(gè)脈沖時(shí),發(fā)送應(yīng)答信號(hào)。寫數(shù)據(jù)時(shí),I2C器件收到數(shù)據(jù),發(fā)送應(yīng)答信號(hào);讀數(shù)據(jù)時(shí),8051收到數(shù)據(jù),發(fā)送應(yīng)答信號(hào)。數(shù)據(jù)傳送過程中,時(shí)鐘為高電平期間,數(shù)據(jù)線上的內(nèi)容保持不變。數(shù)據(jù)傳送完畢,應(yīng)答結(jié)束后,需要用停止信號(hào)停止數(shù)據(jù)傳輸,時(shí)鐘高電平時(shí),數(shù)據(jù)線由低電平向高電 55平跳變來實(shí)現(xiàn)此停止信號(hào)。
?。桑玻媚K實(shí)現(xiàn)I2C數(shù)據(jù)傳輸協(xié)議。start信號(hào)為1時(shí),啟動(dòng)數(shù)據(jù)傳輸;write信號(hào)為1時(shí),向I2C器件寫數(shù)據(jù),read信號(hào)為1時(shí),向I2C器件讀數(shù)據(jù)。
讀寫過程中,輸出標(biāo)志位flag、計(jì)數(shù)器dcnt,控制en的兩位矢量,從而控制并串轉(zhuǎn)換寄存器和串并轉(zhuǎn)換寄存器的并入、移位、保持、清零操作。停止信號(hào)為1時(shí),結(jié)束數(shù)據(jù)傳輸。
?。常础〗涌谛酒墓ぷ髟砼c控制過程
8051向控制寄存器CI0寫控制字,實(shí)現(xiàn)對(duì)I2C接口的編程控制;向數(shù)據(jù)寄存器CI1寫數(shù)據(jù),實(shí)現(xiàn)對(duì)I2C接口的數(shù)據(jù)傳輸。
當(dāng)bz=1時(shí),8051才對(duì)數(shù)據(jù)寄存器讀寫,而每次讀寫后接口電路自動(dòng)將bz置0,在接口電路完成有關(guān)操作等待8051的讀寫時(shí)將bz置1。
(1)I2C總線未連接,要進(jìn)行寫操作。8051的操作:
?、賹懣刂谱郑祝?;②當(dāng)bz=1時(shí)寫器件內(nèi)地址第1字節(jié);③當(dāng)bz=1時(shí)寫器件內(nèi)地址第2字節(jié)…;④當(dāng)bz=1時(shí)寫第1字節(jié)…。
?。桑玻玫牟僮鳎?/FONT>
當(dāng)接收到該控制字W1后操作為:①置bz=1,啟動(dòng)I2C總線;②根據(jù)控制字中的器件地址發(fā)出第1個(gè)字節(jié)(器件選擇、寫);③發(fā)送器件內(nèi)地址,置bz=1;④發(fā)送數(shù)據(jù)內(nèi)容,置bz=1…。
(2)I2C總線未連接,要進(jìn)行讀操作。8051的操作:
①電路寫控制字W2;②寫器件內(nèi)地址第1字節(jié);?、郛?dāng)bz=1時(shí)寫器件內(nèi)地址第2字節(jié)…;④當(dāng)bz=1時(shí)讀第1字節(jié)…。
I2C的操作:
當(dāng)接收到該控制字W2后操作為:①置bz=1,啟動(dòng)I2C總線;②根據(jù)控制字中的器件地址以出第1個(gè)字節(jié)(器件選擇、寫);③發(fā)送器件內(nèi)地址;④關(guān)閉I2C總線;⑤啟動(dòng)I2C總線;⑥第2次發(fā)送器件選擇字節(jié)、讀;⑦接收數(shù)據(jù)內(nèi)容,置bz=1…。
?。ǎ常桑玻每偩€已連接,換一個(gè)I2C器件或換新地址,要進(jìn)行寫操作。
?。福埃担钡牟僮鳎?/FONT>
①寫控制字W5;②當(dāng)bz=1時(shí)寫器件內(nèi)地址第1字節(jié);③當(dāng)bz=1時(shí)寫器件內(nèi)地址第2字節(jié)…;④當(dāng)bz=1時(shí)寫第1字節(jié)…。
?。桑玻玫牟僮鳎?/FONT>
當(dāng)接收到該控制字W5后操作為:①置bz=1,關(guān)閉I2C總線;②啟動(dòng)I2C總線;③根據(jù)控制字中的器件地址發(fā)出第1個(gè)字節(jié)(器件選擇、寫);④發(fā)送器件內(nèi)地址,置bz=1。
(4)I2C總線已連接,換一個(gè)I2C器件或換新地址,要進(jìn)行讀操作。
?。福埃担钡牟僮鳎?/FONT>
?、匐娐穼懣刂谱郑祝?;②寫器件內(nèi)地址第1字節(jié); ③當(dāng)bz=1時(shí)寫器件內(nèi)地址第2字節(jié)…;④當(dāng)bz=1時(shí)讀第1字節(jié)…。
?。桑玻玫牟僮鳎?/FONT>
當(dāng)接收到該控制字W6后操作為:①置bz=1,關(guān)閉I2C總線;②啟動(dòng)I2C總線;③根據(jù)控制字中的器件地址發(fā)出第1個(gè)字節(jié)(器件選擇、寫);④發(fā)送器件內(nèi)地址;⑤關(guān)閉I2C總線;⑥啟動(dòng)I2C總線;⑦第2次發(fā)送器件選擇字節(jié)、讀;⑧接收數(shù)據(jù)內(nèi)容,置bz=1…。
?。础〗Y(jié) 語
擴(kuò)展接口芯片設(shè)計(jì)采用VHDL語言實(shí)現(xiàn),芯片設(shè)計(jì)的全部程序均通過ALTERA公司的MAXPLUSⅡ軟件編譯,仿真結(jié)果正確。編譯、仿真后的VHDL程序經(jīng)線至EPM7128SLC84-15芯片,驗(yàn)證正確。設(shè)計(jì)的接口時(shí)鐘要求6?。停龋?,可直接和單片機(jī)接口連接。
擴(kuò)展后的接口,傳送一位數(shù)據(jù)只需要4個(gè)時(shí)鐘周期。擴(kuò)展的接口,訪問I2C器件的時(shí)鐘可以自行設(shè)定,他們之間的通信不需要等待8051。一旦8051的并行數(shù)據(jù)送出,該接口可立即用自己設(shè)定的速度傳送。從而該接口在8051和I2C器件之間通信時(shí),數(shù)據(jù)的傳送可達(dá)到并行的速度,這就是本接口擴(kuò)展設(shè)計(jì)的優(yōu)點(diǎn)。
由于使用的設(shè)計(jì)軟件是ALTERA公司的MAXPLUSⅡ軟件,仿真芯片為EPM7128SLC84該芯片延遲時(shí)間為15 s,延時(shí)時(shí)間過長(zhǎng);接口的設(shè)計(jì)本身對(duì)數(shù)據(jù)傳輸?shù)臅r(shí)鐘也可進(jìn)一步減少,更進(jìn)一步提高數(shù)據(jù)傳輸?shù)乃俣??;谝陨蟽牲c(diǎn),還需要對(duì)本設(shè)計(jì)進(jìn)一步優(yōu)化,以期進(jìn)一步提高性能與速度。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 單片機(jī)技術(shù)特性與嵌入式開發(fā)實(shí)踐指南2026/1/7 10:00:02
- 單片機(jī)(MCU)與數(shù)字信號(hào)處理器(DSP)分類及選型技術(shù)指南2025/12/30 10:02:37
- 工業(yè)級(jí)DSP信號(hào)處理系統(tǒng):硬件適配與抗干擾工程方案2025/12/15 14:41:00
- HOLTEK推出HT32F65533G/733G內(nèi)建N/N預(yù)驅(qū)電機(jī)專用SoC單片機(jī)2025/11/26 14:11:41
- 什么是C51數(shù)據(jù)類型擴(kuò)充定義2025/10/27 13:59:22
- PCB電磁兼容性(EMC)設(shè)計(jì)核心實(shí)操規(guī)范
- 物聯(lián)網(wǎng)節(jié)點(diǎn)低功耗設(shè)計(jì):信號(hào)鏈中的濾波與功耗管理
- 同步整流中MOSFET的應(yīng)用要點(diǎn)
- 輸出短路對(duì)電源芯片的影響
- 連接器壽命評(píng)估與可靠性設(shè)計(jì)
- PCB電源完整性(PI)設(shè)計(jì)核心實(shí)操規(guī)范
- 多層PCB疊層設(shè)計(jì)核心實(shí)操規(guī)范
- 提高M(jìn)OSFET效率的電路優(yōu)化方法
- 電源管理IC在智能家居中的應(yīng)用
- 差分信號(hào)連接器設(shè)計(jì)要點(diǎn)









