I2C總線與SPI總線技術(shù)_第1頁(yè)
I2C總線與SPI總線技術(shù)_第2頁(yè)
I2C總線與SPI總線技術(shù)_第3頁(yè)
I2C總線與SPI總線技術(shù)_第4頁(yè)
I2C總線與SPI總線技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

總線技術(shù)I2C與SPI接口《小型智能電子產(chǎn)品設(shè)計(jì)與制作》總線總線(Bus)是計(jì)算機(jī)各種功能部件之間傳送信息的公共通信干線,它是由導(dǎo)線組成的傳輸線束在計(jì)算機(jī)系統(tǒng)中,各個(gè)部件之間傳送信息的公共通路叫總線,微型計(jì)算機(jī)是以總線結(jié)構(gòu)來(lái)連接各個(gè)功能部件的??偩€分類

按照傳輸數(shù)據(jù)的方式劃分,可以分為串行總線和并行總線。串行總線中,二進(jìn)制數(shù)據(jù)逐位通過(guò)1根數(shù)據(jù)線發(fā)送到目的器件;并行總線的數(shù)據(jù)線通常超過(guò)2根。常見的串行總線有SPI、I2C、USB及RS232等。按照時(shí)鐘信號(hào)是否獨(dú)立,可以分為同步總線和異步總線。同步總線的時(shí)鐘信號(hào)獨(dú)立于數(shù)據(jù),而異步總線的時(shí)鐘信號(hào)是從數(shù)據(jù)中提取出來(lái)的。SPI、I2C是同步串行總線,RS232采用異步串行總線。SCSI、ATA、PCI、IEEE1394總線技術(shù)指標(biāo)總線的工作頻率:以MHZ為單位,工作頻率越高,總線工作速度越快,總線帶寬越寬。總線的位寬:總線能同時(shí)傳送的二進(jìn)制數(shù)據(jù)的位數(shù)總線的帶寬=總線的工作頻率*總線的位寬/8注意:波特率是指數(shù)據(jù)信號(hào)對(duì)載波的調(diào)制速率,它用單位時(shí)間內(nèi)載波調(diào)制狀態(tài)改變的次數(shù)來(lái)表示,其單位是波特(Baud)。波特率與比特率(數(shù)字信號(hào)的傳輸速率bit/s)的關(guān)系是比特率=波特率X單個(gè)調(diào)制狀態(tài)對(duì)應(yīng)的二進(jìn)制位數(shù)。。異步通信字符格式:規(guī)定有起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位等(RS232\485)數(shù)據(jù)傳送方向概念單工方式:只允許數(shù)據(jù)按照一個(gè)固定的方向傳送半雙工方式:每次只能有一個(gè)站發(fā)送,另一個(gè)站接收全雙工方式:允許通信雙方同時(shí)進(jìn)行發(fā)送和接收串行與并行總線對(duì)比與并行擴(kuò)展總線相比,串行擴(kuò)展總線能夠最大程度發(fā)揮最小系統(tǒng)的資源功能、簡(jiǎn)化連接線路,縮小電路板面積、擴(kuò)展性好,可簡(jiǎn)化系統(tǒng)設(shè)計(jì)。串行總線的缺點(diǎn)是數(shù)據(jù)吞吐容量小,信號(hào)傳輸較慢。但隨著CPU芯片工作頻率的提高,以及串行總線的功能增強(qiáng),這些缺點(diǎn)將逐步淡化。SPI、I2C、1-Wire、RS232是目前單片機(jī)應(yīng)用系統(tǒng)中最常用的幾個(gè)串行總線接口。I2C總線I2C總線I2C(InterIntegratedCircuit)常譯為內(nèi)部集成電路總線,或集成電路間總線,它是由Philips公司推出的芯片間串行傳輸總線。使用2線實(shí)現(xiàn)數(shù)據(jù)通信。

1根串行數(shù)據(jù)線(SDA)

1根串行時(shí)鐘線(SCL)I2C總線的基本特性1硬件結(jié)構(gòu)上具有相同的硬件接口界面R:4.7K-5.1K-20k(DATASHEET)I2C總線的基本特性2在單主系統(tǒng)中,每個(gè)I2C接口芯片具有唯一的器件地址,各從器件之間互不干擾,相互之間不能進(jìn)行通信。MCU與I2C器件之間的通信是通過(guò)獨(dú)一無(wú)二的器件地址來(lái)實(shí)現(xiàn)的。如果兩個(gè)或更多主機(jī)同時(shí)初始化數(shù)據(jù)傳輸,可以通過(guò)沖突檢測(cè)和仲裁防止數(shù)據(jù)被破壞。任何器件通過(guò)I2C總線與MCU進(jìn)行數(shù)據(jù)傳送的方式基本一樣,決定了I2C總線軟件編寫的一致性。數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s。I2C總線信息傳送當(dāng)I2C總線沒(méi)有進(jìn)行信息傳送時(shí),數(shù)據(jù)線(SDA)和時(shí)鐘線(SCL)都為高電平(上拉)開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號(hào):SCL為高電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。開始信號(hào)和結(jié)束信號(hào)之間傳送的是信息,信息的字節(jié)數(shù)沒(méi)有限制,但每個(gè)字節(jié)必須為8位,高位在前,低位在后。數(shù)據(jù)線SDA上每一位信息狀態(tài)的改變只能發(fā)生在時(shí)鐘線SCL為低電平的期間,因?yàn)镾CL高電平的期間SDA狀態(tài)的改變已經(jīng)被用來(lái)表示開始信號(hào)和結(jié)束信號(hào)。每個(gè)字節(jié)后面必須接收一個(gè)應(yīng)答信號(hào)(ACK),ACK是從控制器在接收到8位數(shù)據(jù)后向主控制器發(fā)出的特定的低電平脈沖,用以表示已收到數(shù)據(jù)。主控制器接收到應(yīng)答信號(hào)(ACK)后,可根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到ACK,則判斷為從控制器出現(xiàn)故障。讀寫操作主控制器每次傳送的信息的第一個(gè)字節(jié)必須是器件地址碼,第二個(gè)字節(jié)為器件單元地址,用于實(shí)現(xiàn)選擇所操作的器件的內(nèi)部單元,從第三個(gè)字節(jié)開始為傳送的數(shù)據(jù)。其中器件地址碼格式如下:D7D6D5D4D3D2D1D0器件類型碼片選R/WI2C讀寫操作范例/*電平模擬函數(shù)和基本讀寫函數(shù)voidIIC_Start(void);voidIIC_Stop(void);voidSEND_0(void);voidSEND_1(void);bitCheck_Acknowledge(void);voidWrite_Byte(ucharb);bitWrite_N_Bytes(uchar*buffer,ucharn);bitRead_N_Bytes(ucharSlaveAdr,ucharn,uchar*buffer);ucharRead_Byte(void);*/sbitSCL=P1^6;sbitSDA=P1^7;voidDELAY(uintt){while(t!=0)t--;}voidIIC_Start(void){//啟動(dòng)I2C總線的函數(shù),當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)負(fù)跳變

SDA=1;SCL=1;DELAY(DELAY_TIME);SDA=0;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}voidIIC_Stop(void){//終止I2C總線,當(dāng)SCL為高電平時(shí)使SDA產(chǎn)生一個(gè)正跳變SDA=0;SCL=1;DELAY(DELAY_TIME);SDA=1;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}voidSEND_0(void){//發(fā)送0,在SCL為低電平時(shí)使SDA信號(hào)變?yōu)榈蚐CL=0;SDA=0;SCL=1;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}voidSEND_1(void){//發(fā)送1,在SCL為低電平時(shí)使SDA信號(hào)變?yōu)楦逽CL=0;SDA=1;SCL=1;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}bitCheck_Acknowledge(void){//發(fā)送完一個(gè)字節(jié)后檢驗(yàn)設(shè)備的應(yīng)答信號(hào)SDA=1;SCL=1;DELAY(DELAY_TIME/2);F0=SDA;DELAY(DELAY_TIME/2);SCL=0;DELAY(DELAY_TIME);if(F0==1)returnFALSE;returnTRUE;}voidWrite_Byte(ucharb){//向IIC總線寫一個(gè)字節(jié)uchari;for(i=0;i<8;i++)if((b<<i)&0x80)SEND_1();elseSEND_0();}bitWrite_N_Bytes(uchar*buffer,ucharn){//向I2C總線寫n個(gè)字節(jié)uchari;IIC_Start();for(i=0;i<n;i++) { Write_Byte(buffer[i]); if(!Check_Acknowledge()) { IIC_Stop(); return(i==n); } }IIC_Stop();returnTRUE;}ucharRead_Byte(void)reentrant{//從I2C總線讀一個(gè)字節(jié)ucharb=0,i;for(i=0;i<8;i++) { SDA=1;//釋放總線

SCL=1;//接受數(shù)據(jù)

DELAY(10); F0=SDA; DELAY(10); SCL=0; if(F0==1) { b=b<<1; b=b|0x01; } else b=b<<1; }returnb;}bitRead_N_Bytes(ucharSlaveAdr,ucharn,uchar*buffer){//從I2C總線讀n個(gè)字節(jié)uchari;IIC_Start();Write_Byte(SlaveAdr);//向總線發(fā)送接收器地址if(!Check_Acknowledge())//等待接收器應(yīng)答信號(hào)returnFALSE;for(i=0;i<n;i++) { buffer[i]=Read_Byte(); if(i!=n) SEND_0();//發(fā)送應(yīng)答

else SEND_1();//發(fā)送非應(yīng)答

}IIC_Stop();returnTRUE;}SPI串行總線SPI串行總線SPI總線的特點(diǎn)(串行外圍設(shè)備接口:serialperipheralinterface)一般使用4條線

串行時(shí)鐘線(SCK) 主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO

主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI

低電平有效的從機(jī)選擇線SSSPI總線技術(shù)是Motorola公司推出的一種同步串行接口SPI總線系統(tǒng)的構(gòu)成MCS-51單片機(jī)I/O口模擬SPI總線接口原理圖常用SPI串行總線接口的器件單片機(jī),如Motorola公司的M68HC08系列、Cygnal公司的C8051F0XX系列、Philips公司的P89LPC93X系列。A/D和D/A轉(zhuǎn)換器,如:AD公司的AD7811/12、TI公司的TLC1543、TLC2543、TLC5615等。實(shí)時(shí)時(shí)鐘RTC,如Dallas公司的DS1302/05/06等。溫度傳感器,如AD公司的AD7816/17/18;NS公司的LM74等。其他設(shè)備,如LED控制驅(qū)動(dòng)器MAX7219、HD7279等,集成看門狗、電壓監(jiān)控、E2PROM等功能的X5045等。SPI時(shí)序SPI接口的一個(gè)缺點(diǎn):沒(méi)有指定的流控制,沒(méi)有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。

Dallas公司的DS1302為例DS1302的引腳如圖:其中:X1、X2:32.768KHz晶振接入引腳。GND:地。/RST:復(fù)位引腳,低電平有效。I/O:數(shù)據(jù)輸入/輸出引腳,具有三態(tài)功能。SCLK:串行時(shí)鐘輸入引腳。VCC1:工作電源引腳。VCC2:備用電源引腳。DS1302與單片機(jī)的連接DS1302與單片機(jī)的連接僅需要3條線:時(shí)鐘線SCLK、數(shù)據(jù)線I/O和復(fù)位線RST。時(shí)鐘線SCLK與P1.0相連,數(shù)據(jù)線I/O與P1.1相連,復(fù)位線RST與P1.2相連(片選)。VCC2X1X2GNDVCC1SCLKI/ORST+5V8051P1.0P1.2P1.3+5VDS1302DS1302控制字控制寄存器用于存放DS1302的控制命令字,DS1302的RST引腳回到高電平后寫入的第一個(gè)字就為控制命令。它用于對(duì)DS1302讀寫過(guò)程進(jìn)行控制,它的格式如下:D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/W寄存器名稱D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0R/W秒寄存器10000000或1分寄存器10000010或1小時(shí)寄存器10000100或1日寄存器10000110或1月寄存器10001000或1星期寄存器10001010或1年寄存器10001100或1寫保護(hù)寄存器10001110或1慢充電寄存器10010000或1時(shí)鐘突發(fā)模式10111110或1RAM011000000或1110或1RAM3011111100或1RAM突發(fā)模式11111110或1DS1302的輸入輸出過(guò)程DS1302通過(guò)RST引腳驅(qū)動(dòng)輸入輸出過(guò)程,當(dāng)置RST高電平啟動(dòng)輸入輸出過(guò)程,在SCLK時(shí)鐘的控制下,首先把控制命令字寫入DS1302的控制寄存器,其次根據(jù)寫入的控制命令字,依次讀寫內(nèi)部寄存器或片內(nèi)RAM單元的數(shù)據(jù),對(duì)于日歷、時(shí)鐘寄存器,根據(jù)控制命令字,一次可以讀寫一個(gè)日歷、時(shí)鐘寄存器,也可以一次讀寫8個(gè)字節(jié),對(duì)所有的日歷、時(shí)鐘寄存器;對(duì)于片內(nèi)RAM單元,根據(jù)控制命令字,一次可讀寫一個(gè)字節(jié),一次也可讀寫31個(gè)字節(jié)。當(dāng)數(shù)據(jù)讀寫完后,RST變?yōu)榈碗娖浇Y(jié)束輸入輸出過(guò)程。無(wú)論是命令字還是數(shù)據(jù),一個(gè)字節(jié)傳送時(shí)都是低位在前,高位在后,每一位的讀寫發(fā)生在時(shí)鐘的上升沿。程序模擬#define……..。。。。。。SbitAcc_7=Acc^7;SbitSCLK=P1^0;SbitDIO=P1^1;SbitRST=P1^2;//地址、數(shù)據(jù)發(fā)送子程序voidWrite1302(unsignedcharaddr,dat){unsignedchari,temp;RST=0;//數(shù)據(jù)傳送終止

SCLK=0;//清零時(shí)鐘線

RST=1;//引腳為高,啟動(dòng)讀寫//發(fā)送寫地址控制字

for(i=8;i>0;i--)//循環(huán)8次

{SCLK=0;temp=addr;DIO=(bit)(temp&0x01);//從低位到高位

addr>>=1;SCLK=1;//上升沿寫入

}(續(xù))//發(fā)送數(shù)據(jù)

for(i=8;i>0;i-

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論