當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]本文介紹了I2C總線的概念、接口特性和傳輸時(shí)序,提出了一種用51系列單片機(jī)的C語(yǔ)言(C51)模擬I2C總線數(shù)據(jù)傳輸?shù)能浖椒?,并給出了在數(shù)字高清晰度電視地面接收機(jī)中的應(yīng)用。

1 I2C總線概述

I2C(Intel-Integrated Circuit)總線是荷蘭的Philips公司于八十年代初推出的一種芯片間串行總線擴(kuò)展技術(shù)。它用兩根線(數(shù)據(jù)線SDA、時(shí)鐘線SCL)可完成總線上主機(jī)與器件的全雙工同步數(shù)據(jù)傳送,可極方便地構(gòu)成多主機(jī)系統(tǒng)和外圍器件擴(kuò)展系統(tǒng)。I2C總線支持所有NMOS、CMOS、TTL等工藝制造的器件,其上所有的節(jié)點(diǎn)都連到同名的SDA、SCL上。I2C總方法,數(shù)據(jù)傳送都有相同的操作模式,接口電器特性相同且獨(dú)立,可在系統(tǒng)供電情況下從系統(tǒng)中移去或增加IC芯片,有I2C接口的外圍器件都有應(yīng)答能力,讀寫片內(nèi)單元時(shí)有地址自動(dòng)加1功能,易實(shí)現(xiàn)多個(gè)字節(jié)的自動(dòng)操作。近年來,國(guó)際上有關(guān)公司制造了多達(dá)幾百種的I2C總線器件,如8051系列單片機(jī)8XC752、LCD驅(qū)動(dòng)器、RAM、I/O接口等芯片都使用了I2C總線接口。隨著數(shù)字技術(shù)的發(fā)展,I2C總線控制系統(tǒng)已經(jīng)應(yīng)用于越來越多的電子產(chǎn)品。

2 I2C總線的數(shù)據(jù)傳輸

2.1 接口特性

I2C總線接口的數(shù)據(jù)線SDA和時(shí)鐘線SCL必須經(jīng)過上拉電阻接到正電源VDD上,各個(gè)I2C接口電路輸出端必須是漏極開路或集電極開路,以便完成“線與”的功能。I2C的SDA和SCL都是雙向傳輸線,當(dāng)總線空閑時(shí),此兩線都是“1”(高電平)。由于不同的器件都會(huì)接到I2C總線,邏輯的“0”(低)及“1”(高)的信號(hào)電平取決于VDD的電壓。總線上能連接的最大器件數(shù)取決于其電容容限400PF。

2.2 I2C總線上的傳輸時(shí)序

I2C總線上每傳輸一位數(shù)據(jù)都有一個(gè)時(shí)鐘脈沖相對(duì)應(yīng),在標(biāo)準(zhǔn)模式下可達(dá)100 kbit/s,高速模式下可達(dá)400kbit/s,總線上依據(jù)器件功能不同可建立簡(jiǎn)單的主/從關(guān)系(master/slave),只有帶CPU的器件才可成主控器。圖1為I2C總線一次完整的數(shù)據(jù)傳輸。SCL為高期間,SDA狀態(tài)必須穩(wěn)定,SCL為低時(shí)才允許SDA狀態(tài)變化。SCL保持高電平期間,SDA出現(xiàn)由高至低的轉(zhuǎn)換將啟動(dòng)I2C總線,出現(xiàn)由低至高的轉(zhuǎn)換將停止數(shù)據(jù)傳輸。起始和終止信號(hào)通常由主控器產(chǎn)生。I2C總線的信號(hào)時(shí)序有嚴(yán)格規(guī)定,本應(yīng)用采用標(biāo)準(zhǔn)模式,SCL低電平周期≥4.7μs,SCL高電平周期≥4.0μs,START和STOP之間的總線空閑時(shí)間≥4.7μs。

I2C 總線上傳送的每個(gè)字節(jié)必須為8位,啟動(dòng)和停止之間可傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)不受限制。采用串行傳送,首先傳送最高位,每傳送一個(gè)字節(jié)后必須跟一個(gè)應(yīng)答位。主控器產(chǎn)生應(yīng)答所需的時(shí)鐘脈沖期間,發(fā)送器必須釋放數(shù)據(jù)線(SDA為高),以便接收器輸出應(yīng)答位。低電平為應(yīng)答信號(hào),高電平為非應(yīng)答信號(hào)。非應(yīng)答信號(hào)是當(dāng)主控器作為接收器時(shí),收到最后一個(gè)字節(jié)數(shù)據(jù)后,必須發(fā)送一個(gè)非應(yīng)答信號(hào)給被控發(fā)送器,使被控發(fā)送器釋放數(shù)據(jù)線,以便主控器發(fā)停止信號(hào),終止數(shù)據(jù)傳送。當(dāng)從器件不能再接收字節(jié)時(shí)也會(huì)出現(xiàn)非應(yīng)答
信號(hào)這種情況。

I2C總線上的器件一般有兩個(gè)地址:受控地址和通用廣播訪問地址,每個(gè)器件有唯一的受控地址用于定點(diǎn)通信,而相同的通用廣播訪問地址則用于主控方同時(shí)對(duì)所有器件進(jìn)行訪問。如圖1所示,起始信號(hào)后主控器發(fā)送的第一個(gè)字節(jié)就是被讀器件的受控地址,稱作尋址字節(jié)。尋址字節(jié)由高7位地址和最低1位方向位組成,方向位為“0”表明主控器對(duì)被控器的寫操作(W),方向位為 “1”表明對(duì)被控器的讀操作(R)??偩€上每個(gè)器件在起始信號(hào)后都把自己的地址與尋址字節(jié)的前7位相比較,如相同則器件被選中,產(chǎn)生應(yīng)答,并根據(jù)讀寫位決定在數(shù)據(jù)傳送中是接收還是發(fā)送。無論是主發(fā)、主收還是從發(fā)、從收,都是由主器件控制,數(shù)據(jù)傳送完后,主控器都必須發(fā)停止信號(hào)。

3 I2C總線的C51語(yǔ)言實(shí)現(xiàn)

C51語(yǔ)言是針對(duì)Intel的8位單片機(jī)MCS-51系列而開發(fā)的、具有一般C語(yǔ)言特點(diǎn)的高級(jí)編程語(yǔ)言。從1985年至今,有許多公司推出 51系列的C語(yǔ)言編譯器,其中以Franklin C51編譯器在代碼生成方面較為領(lǐng)先,它可生成最少的代碼,支持浮點(diǎn)和長(zhǎng)整數(shù)、重入和遞歸。頭文件reg51.h中包含了51單片機(jī)的特殊功能寄存器(SFR)的字節(jié)定義與位定義。為了與具有I2C總線接口的51單片機(jī)兼容,可在程序開始處定義單片機(jī)的P1.6和P1.7作為I2C總線的SCL和SDA信號(hào),實(shí)際中也可用其它的I/O引腳作為SCL和SDA信號(hào)。C51語(yǔ)言中只要用賦值語(yǔ)句”=”就可實(shí)現(xiàn)I/O口某位的數(shù)據(jù)輸出和讀入?,F(xiàn)將I2C總線底層讀寫函數(shù)接口及功能列舉如下,它可用于沒有內(nèi)部I2C接口的51系列單片機(jī)與I2C總線器件通信。
#include<reg51.h>

/*全局符號(hào)定義*/

#define HIGH1

#define LOW 0

#define FALSE0

#define TRUE1

#define time 1
#define uchar unsigned char

#define uint unsigned int

sbit SCL=P1^6;

sbie SDA=P1^7;

1)函數(shù)原型:void delay(uchar nu m) 
功能:用for()循環(huán)提供延時(shí)。在實(shí)際應(yīng)用中可依具體情況改變傳入?yún)?shù),但必須滿足I2C總線時(shí)序中對(duì)SCL高、低電平周期的要求,本應(yīng)用中取1,調(diào)用形式為delay(time)。

2)函數(shù)原型:void start(void) 
功能:提供I2C總線工作時(shí)序中的起始位,在SCL=HIGH期間,SDA出現(xiàn)由高到底的轉(zhuǎn)變,返回前將SCL拉低,允許數(shù)據(jù)變化,準(zhǔn)備傳輸。其中調(diào)用函數(shù)1。

3)函數(shù)原型:void stop(void) 
功能:函數(shù)提供I2C總線工作時(shí)序中的起始位,在SCL=HIGH期間,SDA出現(xiàn)由低到高的轉(zhuǎn)變。其中調(diào)用函數(shù)1。

4)函數(shù)原型:void sendbyte(uchar b,uchar*error) 
功能:在時(shí)鐘作用下,將入口參數(shù)b中8位數(shù)據(jù)由高至低通過SDA線發(fā)送,并讀回應(yīng)答信號(hào),存于指針變量*error中。其中調(diào)用函數(shù)1、2、3。

5)函數(shù)原型:void readbyte(uchar*b,bit Ack) 
功能:函數(shù)在時(shí)鐘作用下接收8位數(shù)據(jù),存于*b中,先接收的為高位,并發(fā)送應(yīng)答信號(hào)(Ack=0),當(dāng)接收到最后一字節(jié)時(shí)發(fā)送非應(yīng)答(Ack=1)。其中調(diào)用函數(shù)1、2、3。

6)函數(shù)原型:void send-n-byte(uchar*info,uint n,uchar address,uchar*fault)功能:向I2C器件連續(xù)發(fā)送n個(gè)數(shù)據(jù)字節(jié),數(shù)據(jù)存于數(shù)組info[]中,address為器件受控地址,末位為0(寫),n個(gè)數(shù)據(jù)的地址可作為數(shù)據(jù)字節(jié)發(fā)送,或設(shè)置地址自動(dòng)加減功能。*fault存收到的應(yīng)答位。其中調(diào)用函數(shù)1-4。

7)函數(shù)原型:void receive_n_byte(uchar*info,uint n,uchar address,uchar*fault) 
功能:從I2 C器件連續(xù)接收n個(gè)字節(jié)的數(shù)據(jù),存于數(shù)組info[]中,address為器件地址,本函數(shù)保證器件地址末位是1(讀),n個(gè)數(shù)據(jù)的器件內(nèi)地址可作為數(shù)據(jù)字節(jié)發(fā)送,或設(shè)置地址自動(dòng)加減功能。收最后一字節(jié)時(shí)發(fā)非應(yīng)答信號(hào)1。*fault存收到的應(yīng)答位。其中調(diào)用函數(shù)1-5。

以下僅以sendbyte()函數(shù)原型為例說明C51如何具體實(shí)現(xiàn)I2C總線的發(fā)送:
void sendbyte(uchar b,uchar*error)

{int count;
bit data_bit;

*error=0;
for(count=7;count>=0;count--)

{data_bit=(bit)(b&0x80);
b=b<<1;
/*送數(shù)據(jù)位,產(chǎn)生時(shí)鐘脈沖*/

SDA=data_bit;
SCL=LOW;delay(time);

SCL=HIGH;delay(time);

SCL=LOW;delay(time);

/*釋放數(shù)據(jù)線,產(chǎn)生時(shí)鐘脈沖,讀回應(yīng)答*/

SDA=HIGH;

SCL=LOW;delay(time);

SCL=HIGH;delay(time);

*error=(uchar)SDA;
/*釋放數(shù)據(jù)線,時(shí)鐘置低*/

SDA=HIGH;
SCL=LOW;delay(time);}

4 I2C總線用于HDTV數(shù)字地面接收機(jī)

數(shù)字高清晰度電視HDTV(High Definition Televi-sion)是繼黑白電視和彩色電視之后的第三代電視系統(tǒng),與目前市場(chǎng)上的電視相比,其水平和垂直兩個(gè)方向的圖像質(zhì)量(分辨率)提高一倍以上,在使用大屏幕顯示器或近距離觀看時(shí)其圖像細(xì)膩逼真,無閃爍感和粗糙感,質(zhì)量與35mm電影相當(dāng),再配以數(shù)字環(huán)繞音響,使收視效果大幅度提高。HDTV 節(jié)目全部采用數(shù)字方式制作、發(fā)送和接收,使圖像質(zhì)量接近演播室。同時(shí),數(shù)字電視系統(tǒng)還能夠提供多種業(yè)務(wù),實(shí)現(xiàn)交互、數(shù)據(jù)廣播和計(jì)算機(jī)聯(lián)網(wǎng)等功能。美國(guó)于 1998年11月率先正式開播數(shù)字HDTV信號(hào)。我國(guó)從1996年啟動(dòng)國(guó)家重大產(chǎn)業(yè)工程項(xiàng)目HDTV功能樣機(jī)系統(tǒng)研究開發(fā)工程,已成功在50周年國(guó)慶時(shí)進(jìn)行了數(shù)字電視試播。

本HDTV數(shù)字地面接收系統(tǒng)以歐洲的DVB-T (Digital Video Broadcasting Terrestrial)為標(biāo)準(zhǔn),完成信道解調(diào)解碼,輸出標(biāo)準(zhǔn)的MPEG-2碼流,由于采用了COFDM(Coded Orthogonal Frequency Division Multi-plexing)編碼正交頻分復(fù)用技術(shù),能有效對(duì)抗多經(jīng)傳播和同頻干擾。本接收機(jī)的主要特點(diǎn)是采用帶有I2C總線接口的L64系列芯片,AT89C52通過I2C總線完成對(duì)L64芯片內(nèi)寄存器的讀寫操作和監(jiān)控,與PC配合實(shí)現(xiàn)基于參數(shù)配置、模式轉(zhuǎn)換、狀態(tài)讀取的調(diào)試功能。結(jié)構(gòu)簡(jiǎn)單,調(diào)試方便。信道解調(diào)解碼的硬件基本組成如圖2(未畫出上拉電阻)。

美國(guó)LSILogic公司的L64系列是專用的以DVB為標(biāo)準(zhǔn)的解調(diào)解碼芯片,該系列內(nèi)部模塊化,接口標(biāo)準(zhǔn)化,且?guī)в蠭2C 總線接口,連接簡(jiǎn)單。L64系列功能完善,L64780、L64724、L64768單獨(dú)使用即可分別完成DVB標(biāo)準(zhǔn)的地面、衛(wèi)星、有線電視信號(hào)解調(diào)的全部過程。目前,L64系列可配合使用。如圖2,信道出來的信號(hào)先經(jīng)過調(diào)諧器變?yōu)橹蓄l信號(hào),送入L64780完成主要的OFDM解調(diào),其輸出經(jīng) L64724Viterbi譯碼,L64768RS譯碼,完成前向糾錯(cuò),輸出標(biāo)準(zhǔn)的MPEG-2碼流。下面僅以L64768為例介紹讀寫某一寄存器的 C51函數(shù)原型及
主要功能:

定義768的受控地址:#define LSI0xfe函數(shù)原型:uchar general_call(void)
功能:general_call()函數(shù)調(diào)用send_n_byte()函數(shù),發(fā)特殊尋址字節(jié)0x00和0x06,若應(yīng)答為零返回0,否則重復(fù)上一操作,若發(fā)5次后仍無應(yīng)答返回1。在主程序初始化化時(shí)調(diào)此函數(shù),主程序根據(jù)返回。
函數(shù)原型:uchar 768_fec_rd(uint group,uint addr,uint*data)

功能:768_fec_rd()函數(shù)調(diào)用send_n_byte()和receive_n_byte(),從FEC寄存器讀出一字節(jié)數(shù)據(jù)存于指針變量*data中,group為組號(hào),輸入的組號(hào)要翻譯成相應(yīng)的組地址group_addr,addr為FEC寄存器地址,LSI作為每次起始信號(hào)后的尋址字節(jié)。依據(jù)768的傳輸時(shí)序,先發(fā)addr的低字節(jié),再發(fā)送addr的高字節(jié),然后發(fā)group_addr,即可讀出相應(yīng)寄存器中的數(shù)據(jù)。組號(hào)出錯(cuò)返回1;收到非應(yīng)答信號(hào)返回0;讀正確返回2。主程序根據(jù)返回值,做相應(yīng)操作。

5 結(jié)束語(yǔ)

隨著廣播電視技術(shù)迅速走向數(shù)字時(shí)代,HDTV在今后五年逐步在世界范圍走向市場(chǎng)成為可能。I2C總線技術(shù)應(yīng)用于HDTV數(shù)字地面接收機(jī)中,用8位單片機(jī)對(duì)接收機(jī)的狀態(tài)進(jìn)行控制,不僅減少了總線數(shù)量,提高了可靠性,而且還較大降低了成本。在實(shí)際使用時(shí),可加上鍵盤、顯示電路及相應(yīng)程序,或用PC通過RS232口與單片機(jī)通信,進(jìn)行調(diào)試。本應(yīng)用已用于我國(guó)HDTV功能樣機(jī)系統(tǒng)研究開發(fā)工程。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉