《接口技術(shù)》:第五章《 I2C串行總線及單總線技術(shù)》 課件_第1頁
《接口技術(shù)》:第五章《 I2C串行總線及單總線技術(shù)》 課件_第2頁
《接口技術(shù)》:第五章《 I2C串行總線及單總線技術(shù)》 課件_第3頁
《接口技術(shù)》:第五章《 I2C串行總線及單總線技術(shù)》 課件_第4頁
《接口技術(shù)》:第五章《 I2C串行總線及單總線技術(shù)》 課件_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第五章I2C串行總線及單總線技術(shù)

串行總線廣泛用于芯片間的串行數(shù)據(jù)傳輸技術(shù)。由于串行總線結(jié)構(gòu)簡單,連接線少,因此,采用串行總線可以使系統(tǒng)的硬件設(shè)計(jì)簡化、體積小、可靠性高。同時(shí),系統(tǒng)的更改和擴(kuò)充極為容易。目前,單片機(jī)應(yīng)用系統(tǒng)中使用的串行總線主要有

I2C總線、SPI總線、1-Wire總線。對(duì)于無這種接口的89C52等單片機(jī)可以用軟件模擬串行通信時(shí)序?!?.1I2C串行總線擴(kuò)展技術(shù)(軟件模擬)

I2C總線是Philips公司推出的一種高性能芯片間的串行傳輸總線,它僅以兩根連線就可實(shí)現(xiàn)完善的全雙工同步數(shù)據(jù)傳送。I2C總線采用了器件地址的硬件設(shè)置方法,通過軟件尋址,使硬件系統(tǒng)具有跟簡單、靈活的擴(kuò)展方法。

I2C總線進(jìn)行數(shù)據(jù)傳輸時(shí)只需兩根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有連接到I2C總線上的設(shè)備,其串行數(shù)據(jù)都連接到總線的SDA線上,而各設(shè)備的時(shí)鐘均接到總線的SCL上。I2C總線是一個(gè)多主機(jī)總線,即一個(gè)I2C總線可以有一個(gè)或多個(gè)主機(jī),總線運(yùn)行由主機(jī)控制。這里所說的主機(jī)是指啟動(dòng)數(shù)據(jù)發(fā)送(發(fā)起始信號(hào)),發(fā)終止信號(hào)、傳送結(jié)束時(shí)發(fā)終止信號(hào)的設(shè)備。通常,主機(jī)由各種單片機(jī)擔(dān)當(dāng)。被主機(jī)尋址的設(shè)備叫從機(jī),它可以是各種單片機(jī)也可以是其他器件,如IC卡存儲(chǔ)器、LED或LCD的驅(qū)動(dòng)器、A/D、D/A轉(zhuǎn)換器、時(shí)鐘日歷器件等。

為了進(jìn)行通信,每個(gè)接到I2C總線上的設(shè)備都有一個(gè)唯一的地址。主機(jī)與從機(jī)的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)據(jù)到總線上其他設(shè)備,這時(shí)的主機(jī)稱為發(fā)送器。從總線上接收數(shù)據(jù)的設(shè)備稱為接收器。單片機(jī)ASCLSDA單片機(jī)BSCLSDASRAM或E2PROMSCLSDAA/D或D/ASCLSDA日歷時(shí)鐘SCLSDA其他I2C外圍設(shè)備SCLSDA§5.1.1I2C串行總線的數(shù)據(jù)傳送

I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),在時(shí)鐘高電平期間,數(shù)據(jù)線上必須保持穩(wěn)定的邏輯電平狀態(tài),高電平為“1”,低電平為“0”。只有在時(shí)鐘線為低電平期間,才允許數(shù)據(jù)線上的電平狀態(tài)變化。如下圖所示。一、總線上數(shù)據(jù)的有效性二、數(shù)據(jù)傳送的起始信號(hào)和終止信號(hào)

根據(jù)I2C總線協(xié)議的規(guī)定,SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號(hào);SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)。起始和終止信號(hào)圖如下圖所示。1、字節(jié)傳送與應(yīng)答每一個(gè)字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位),與應(yīng)答信號(hào)相對(duì)應(yīng)的時(shí)鐘由主機(jī)產(chǎn)生,主機(jī)必須在這一時(shí)鐘位上釋放數(shù)據(jù)線,使其處于高電平狀態(tài)。應(yīng)答信號(hào)為低電平表示繼續(xù)接收,高電平為非應(yīng)答表示結(jié)束接收。三、數(shù)據(jù)傳送格式四、單主機(jī)I2C總線數(shù)據(jù)傳送時(shí)序

START:CLRCLK;起始位

NOP NOPSETB IO;IO=SDA,CLK=SCL NOP NOP SETB CLK NOP NOP CLR IO NOP NOP CLR CLK NOP RET

STOP:CLRCLK;停止位

NOP NOP CLR IO NOP NOP SETB CLK NOP NOP SETB IO NOP NOP CLR CLK NOP NOP CLR IO RETWR_BYTE:MOVR5,#08 ;一字節(jié)8位數(shù)據(jù)

CLR CLK NOP NOPWR_BYTE1:RLC A ;帶進(jìn)位位左移,A.8->C MOV IO,C ;SCL低電平時(shí)改變SDA上的數(shù)據(jù)

NOP SETB CLK ;拉高SCL把數(shù)據(jù)發(fā)送出去

NOP NOP CLR CLKNOP NOP DJNZ R5,WR_BYTE1 ;依次發(fā)送A中的8位數(shù)據(jù)

SETB IO SETB CLK JB IO,$ ;等待IC卡ACK信號(hào)

CLR CLK NOP RETB;***************A==讀出的數(shù)據(jù)*********************************RD_BYTE:MOVR5,#08 SETB IO ;設(shè)備IO為輸入狀態(tài)

CLR A ;清空A寄存器RD_BYTE1:MOVC,IO ;讀一位數(shù)據(jù)到進(jìn)位位,直到第九個(gè)時(shí)鐘的下降沿泵出

RLC A ;左移數(shù)據(jù)到A.0 SETB CLK NOP NOP CLR CLK ;泵出下一位數(shù)據(jù)

NOP NOP DJNZ R5,RD_BYTE1 ;依次讀出8位數(shù)據(jù)到A中

RET ;無應(yīng)答信號(hào)詳見IC卡實(shí)驗(yàn)§5.2單總線(1-Wire)擴(kuò)展技術(shù)

單總線(1-Wire)是美國Dallas公司推出的外圍串行擴(kuò)展總線。單總線只有一根數(shù)據(jù)輸入/輸出線,所有單總線的器件都掛在這根線上,即僅通過1條連接線,便可完成全部的控制、通信和供電。本節(jié)以單總線溫度傳感器DS18B20構(gòu)成的溫度測(cè)控系統(tǒng)為例詳細(xì)介紹單總線的接口方法及應(yīng)用?!?.2.1單總線(1-Wire)簡介

1硬件配置單總線的連接方式如圖1-1(a)所示,一個(gè)簡潔的單總線網(wǎng)絡(luò)包括三個(gè)主要部分:帶有控制軟件的主控器(由單片機(jī)或PC相當(dāng)),連接上拉電阻和穩(wěn)壓二極管的連接線及各種功能的單總線從器件。每一位讀/寫時(shí)序開始時(shí),主控器把總線拉低,結(jié)束時(shí),釋放總線為高電平。單總線的內(nèi)部結(jié)構(gòu)如圖1-1(b)所示,單總線接口是用來實(shí)現(xiàn)供電和同步的;64位ROM用于存儲(chǔ)由生產(chǎn)廠家光刻的、全球唯一的、且不可更改的64位序列號(hào),其中最低8位是器件的類型號(hào),功能相同的一類器件具有相同的類型號(hào),然后是48位的器件序列號(hào),最后8位是CRC校驗(yàn)位,用于驗(yàn)證數(shù)據(jù)傳輸?shù)恼_性;外圍功能部件用來完成某一特定的功能;主控器通過對(duì)RAM的讀/寫操作實(shí)現(xiàn)對(duì)器件的控制。2通信規(guī)程單總線通過主從式、位同步、半雙工串行方式通信,規(guī)程如下:l總線初始化,主控制器先發(fā)復(fù)位脈沖,然后從控制器發(fā)應(yīng)答脈沖。lROM指令,主控制器通過ROM指令讀取各從器件的ROM識(shí)別碼(即64位序列號(hào))以選擇單總線上的某一從器件。lRAM指令,通過對(duì)從器件RAM的讀/寫操作,讓外圍器件實(shí)現(xiàn)某一功能。1、DS18B20的特性及引腳l

采用單總線技術(shù),與單片機(jī)只需要一根I/O線。在一根I/O線上可掛接多個(gè)DS18B20.l每個(gè)DS18B20具有一個(gè)獨(dú)立的、不可修改的64位序列號(hào),根據(jù)序列號(hào)可以訪問對(duì)應(yīng)器件。l低電壓供電,電源范圍3-5V。l測(cè)溫范圍-55℃-+125℃,在-10℃-+85℃范圍內(nèi)誤差為±0.5℃.l可編程數(shù)據(jù)為9-12位。l用戶可自行設(shè)定報(bào)警的上、下限溫度值。lDS18B20的分辨率可由用戶通過EEPROM設(shè)置為9-12位。lDS18B20可將檢測(cè)到的溫度值直接轉(zhuǎn)換為數(shù)字量,并通過串行通信方式與主控制器進(jìn)行數(shù)據(jù)通信。lDQ為數(shù)據(jù)輸入/輸出線?!?.2.2DS18B20內(nèi)部結(jié)構(gòu)2、內(nèi)部結(jié)構(gòu)

DS18B20的內(nèi)部結(jié)構(gòu)如圖1-2所示。主要包括:寄生電源、溫度傳感器、64位激光ROM和單總線接口、存放中間數(shù)據(jù)的高速暫存器RAM、用于存儲(chǔ)用戶設(shè)定溫度上下限值的TH和TL觸發(fā)器、存儲(chǔ)與控制邏輯、8位循環(huán)冗余校驗(yàn)碼(CRC)發(fā)生器等8部分。圖1-2DS18B20內(nèi)部結(jié)構(gòu)DS18B20內(nèi)部存儲(chǔ)器由ROM、RAM、EEPROM組成,如圖1-3所示字節(jié)ROMRAMEEPROM0產(chǎn)品代號(hào)(28H)溫度低8位148位溫度高8位

2器件序列號(hào)THTH3

TLTL4

配置寄存器配置寄存器5

保留6

保留7CRC保留8

CRC圖1-3DS18B20內(nèi)部存儲(chǔ)器結(jié)構(gòu)

ROM由64位二進(jìn)制數(shù)字組成,共分為8個(gè)字節(jié),字節(jié)0的內(nèi)容是該產(chǎn)品的廠家代號(hào)28H,字節(jié)1~6的內(nèi)容是48位器件序列號(hào),字節(jié)7是ROM前56位的CRC校驗(yàn)碼。由于64位ROM碼具有唯一性,在使用時(shí)作為該器件校對(duì)的地址,通過讀ROM命令可以將它讀出來。64位只讀存儲(chǔ)器ROMRAM是由9個(gè)字節(jié)的高速暫存器和非易失性電擦寫EEPROM組成。其中字節(jié)0/1存儲(chǔ)當(dāng)前溫度,字節(jié)2、3存儲(chǔ)上、下限報(bào)警溫度TH和TL,字節(jié)4是配置寄存器,字節(jié)8是RAM前64位的CRC校驗(yàn)碼。RAM中EEPROM用于存儲(chǔ)TH、TL和配置存儲(chǔ)器的值。數(shù)據(jù)先寫入RAM,經(jīng)校驗(yàn)后再傳給EEPROM。通過DS18B20功能命令對(duì)RAM進(jìn)行操作。高速暫存器RAMDS18B20的溫度測(cè)量范圍是-55°c~+125°C,分辨率的默認(rèn)值12位。表1-4是溫度存儲(chǔ)格式與配置寄存器控制字的格式。由表1-4可知,檢測(cè)溫度由兩個(gè)字節(jié)組成,字節(jié)1的高5位S代表符號(hào)位,字節(jié)0的低4位是小數(shù)部分,中間7位是整數(shù)部分,字節(jié)4是配置寄存器控制字的格式,當(dāng)R1R0的值為00B、01B、10B、11B時(shí),對(duì)應(yīng)的分辨率為9、10、11、12。溫度存儲(chǔ)格式表1-4溫度存儲(chǔ)格式與配置寄存器控制字的格式

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0字節(jié)0232221202-12-22-32-4字節(jié)1SSSSS262524字節(jié)40R1R011111(1)ROM操作指令

表1-5ROM操作指令命令說明讀ROM命令(33H)讀總線上18B20的序列號(hào)(包括產(chǎn)品編號(hào)、序列號(hào)和校驗(yàn)碼)搜索ROM命令(F0H)對(duì)總線上的多個(gè)DS18B20進(jìn)行ROM編碼的搜索匹配ROM命令(55H)后繼64位序列號(hào)對(duì)總線上DS18B20尋址,用于多個(gè)DS18B20的定位跳過ROM命令(CCH)在單位檢測(cè)時(shí),跳過ROM編碼的搜索報(bào)警搜索ROM命令(ECH)搜索有報(bào)警的DS18B20的測(cè)溫點(diǎn)3、DS18B20的命令集

表1-6RAM操作指令命令說明溫度轉(zhuǎn)換(44H)啟動(dòng)溫度轉(zhuǎn)換讀暫存器(BEH)讀全部暫存器內(nèi)容,包括CRC字節(jié)寫暫存器(4EH)寫暫存器第2、3、4字節(jié)的數(shù)據(jù)復(fù)制暫存器(48H)將暫存器中的TH、TL和配置寄存器內(nèi)容復(fù)制到EEPROM讀EEPROM(B8H)將TH、TL和配置寄存器內(nèi)容從EEPROM中讀至?xí)捍嫫髦凶x供電方式命令(B4H)檢測(cè)供電方式

(2)RAM操作指令

當(dāng)主機(jī)發(fā)出溫度轉(zhuǎn)換命令(44H)時(shí),啟動(dòng)溫度轉(zhuǎn)換過程,轉(zhuǎn)換時(shí)間最750ms。主機(jī)通過讀暫存器功能命令(BEH),將溫度值讀出。通過寫暫存器功能命令(4EH),可改變分辨率的設(shè)置。

數(shù)字式溫度傳感器和模擬傳感器最大的區(qū)別,是將溫度信號(hào)直接轉(zhuǎn)化成數(shù)字信號(hào),然后通過串行通信的方式輸出。因此,掌握DS18B20的通信協(xié)議是使用該器件的關(guān)鍵。所有的DS18B20器件要求采用嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。該協(xié)議定義了幾種信號(hào)類型:復(fù)位脈沖、應(yīng)答脈沖時(shí)序;寫“0”、寫“1”時(shí)序;讀“0”、讀“1”時(shí)序。與DS18B20的通信,是通過操作時(shí)序完成單總線上的數(shù)據(jù)傳輸。發(fā)送所有的命令和數(shù)據(jù)時(shí),都是字節(jié)的低位在前,高位在后。4、DS18B20的通信協(xié)議(1)復(fù)位和應(yīng)答脈沖時(shí)序圖1-7復(fù)位和應(yīng)答脈沖時(shí)序每個(gè)通信周期起始于微控制器發(fā)出的復(fù)位脈沖,其后緊跟DS18B20發(fā)出的應(yīng)答脈沖,如圖1-7所示。在寫時(shí)序期間,主機(jī)向DS18B20器件寫入數(shù)據(jù),而在讀時(shí)序期間,主機(jī)讀入來自DS18B20的數(shù)據(jù)。在每寫一個(gè)時(shí)序,總線只能傳輸一位數(shù)據(jù)。1)DS18B20的復(fù)位子程序RST:SETBDAT

NOP

NOP

CLRDAT;復(fù)位DAT=0

MOVR6,#250DJNZR6,$

movr6,#50djnzr6,$;延時(shí)600us

SETBDAT;DAT

=1

MOVR6,#15DJNZR6,$;延時(shí)30us

CALL

CHCK;讀應(yīng)答

MOVR6,#60DJNZR6,$;延時(shí)120us

SETBDAT;

RETCHCK:MOVC,DAT;讀應(yīng)答

JCRST0;有應(yīng)答C=0

SETBF0;則置“1”F0SJMPCHCK0RST0:CLRF0;無應(yīng)答C=0CHCK0:RET;清”0”F0

當(dāng)主機(jī)將單總線DQ從邏輯高(空閑狀態(tài))拉為邏輯低時(shí),即啟動(dòng)一個(gè)寫時(shí)序。所有的寫時(shí)序必須在60-120μs內(nèi)完成,且在每個(gè)時(shí)序之間至少需要1μs的恢復(fù)時(shí)間。寫“0”和寫“1”時(shí)序如圖1-8所示。在寫“0”時(shí)序期間微控制器在整個(gè)時(shí)序中將總線拉低;而寫“1”時(shí)序期間,微控制器將總線拉低,然后在時(shí)序起始后15μs之內(nèi)釋放總線為高。(1)寫時(shí)序圖1-8寫“0”和寫“1”時(shí)序WRITE_0:CLRDAT;寫“0”子程序

MOVR6,#30DJNZR6,$;延時(shí)60us

SETBDAT

RETWRITE_1:CLRDAT;寫“1”子程序

NOP

NOP

NOP

NOP

NOP;延時(shí)12us

SETBDAT

MOVR6,#30DJNZR6,$;延時(shí)60us

RETSEND_BYTE:MOVA,R0;寫一字節(jié)子程序

MOVR5,#8SEN3:CLRCRRCA

JCSEN1LCALLWRITE_0SJMPSEN2SEN1:LCALLWRITE_1SEN2:DJNZR5,SEN3

RETDS18B20器件僅在主機(jī)發(fā)出讀時(shí)序時(shí),才向主機(jī)傳輸數(shù)據(jù),所以在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時(shí)序,以便DS18B20能夠傳輸數(shù)據(jù)。所有讀時(shí)序至少需要60μs,且在兩次獨(dú)立的時(shí)序之間,至少需要1μs的恢復(fù)時(shí)間。每個(gè)讀時(shí)序都由主機(jī)發(fā)起,至少拉低總線1μs,讀時(shí)序如圖1-9所示。在主機(jī)發(fā)起讀時(shí)序之后DS18B20器件才開始在總線上發(fā)送“0”或“1”,若DS18B20發(fā)送“1”,則保持總線為高電平;若發(fā)送“0”,則拉低總線。當(dāng)發(fā)送0時(shí),DS18B20需在該時(shí)序結(jié)束后,釋放總線,由上拉電阻將總線拉回空閑高電平狀態(tài)。DS18B20發(fā)出的數(shù)據(jù),在起始時(shí)序之后保持有效時(shí)間15μs,因而主機(jī)在讀時(shí)序期間,必須釋放總線,并且在起始時(shí)序后的15μs之內(nèi)采樣總線狀態(tài)。(3)讀程序READ:SETBDAT;讀一位子程序

NOP

NOPCLRDAT

NOP

NOP

SETBDAT;發(fā)讀時(shí)序

NOP

NOP

NOP

NOP

NOP

NOP

NOP

MOVC,DAT;15us內(nèi)讀數(shù)據(jù)

MOVR6,#23DJNZR6,$;延時(shí)45usRETREAD_BYTE:

MOVR5,#8;讀一個(gè)字節(jié)子程序READ1:LCALLREADRRCADJNZR5,READ1

MOVR0,A

RETDSWD:LCALLRST

JNBF0,KEND;F0=1有應(yīng)答

MOVR0,#0CCH;忽略64位rom地址,直接向DS18B20發(fā)溫度變換指令

LCALLSEND_BYTE

MOVR0,#44H;啟動(dòng)DS18B20進(jìn)行溫度轉(zhuǎn)換,轉(zhuǎn)換時(shí)間最長500ms(典型為200ms),結(jié)果存入9字節(jié)ram中

LCALLSEND_BYTE

MOV48H,#1SS2:

MOV49H,#255SS1:

MOV4AH,#255

LCALLRST

JNBF0,KEND

MOVR0,#0CCH;忽略64位rom地址,直接向DS18B20發(fā)溫度變換指令

LCALLSEND_BYTE

MOVR0,#0BEH;讀取內(nèi)部9字節(jié)的內(nèi)容

LCALLSEND_BYTELCALLREAD_BYTE

MOVWDLSB,ALCALLREAD_BYTE

MOVWDMSB,ALCALLTRANS12;溫度轉(zhuǎn)換(十進(jìn)制)子程序KEND:

RETSS0:DJNZ4AH,SS0DJNZ49H,SS1DJNZ48H,SS2啟動(dòng)18B20轉(zhuǎn)換讀結(jié)果子程序:DATBITP3.7WDLSBDATA30HWDMSBDATA31H/**********************

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論