新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > SPI、IIC、UART、can區(qū)別

SPI、IIC、UART、can區(qū)別

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏


void wait_5ms( void ) {
int i ;
for ( i=0 ; i<1000 ; i++ )
{
;
}
}

//向24C04寫入器件地址和一個指定的字節(jié)地址。
bit E_address(uchar page ,uchar Address )
{
I_start() ;
if ( I_send( WRITE +page) )
return ( I_send( Address ) ) ;
else
return ( FALSE ) ;
}


//參數(shù)的含義:從第幾個模塊(不超過3),模塊中第幾個字節(jié)(不超過255)
//寫到RAM映象的第幾個字節(jié)和讀的長度
bit E_read_block(uchar page, uchar addr,uchar arraypoint,uchar longth)
{
uchar i ;

if ( E_address(page, addr ) ) {

I_start() ;
if ( I_send( READ+page ) ) {
for ( i=0; i<=longth ;i++ )
{
EAROMImage[arraypoint+i] =I_receive();
if ( i != longth ) I_Ack() ;
else {
I_clock() ;
I_stop() ;
}
}
return ( TRUE ) ;
}
else {
I_stop() ;
return ( FALSE ) ;
}
}
else
I_stop() ;
return ( FALSE ) ;
}

bit E_write_block(uchar page,uchar addr,uchar arraypoint,uchar longth) {
uchar i ;
for ( i=addr; i<=addr+longth ; i++ ) {
if ( E_address(page,i) && I_send( EAROMImage[arraypoint+i-addr] ) ) {
I_stop() ;
wait_5ms();
}
else
return ( FALSE ) ;
}
return ( TRUE ) ;
}

//test
voidmain() {
EAROMImage[39]=0xfe;
SCON = 0x5a;
TMOD = 0x20;
TCON = 0x69;
TH1 =0xfd;
I_init();//I2C 總線初始化
P1=0xFF;

if (E_write_block(0,8,39,1))
P1=0xFE;//p10
else
{}

if (E_read_block(0,8,55,1))
{}
else
P1=P1&0xFD;

if(EAROMImage[55]==0xfe)
P1=P1&0x0FB;
while(1);

}
posted @2009-02-22 22:41陳廣強 閱讀(116) |評論(0)| 編輯
關(guān)于IIC總線

I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開發(fā),如今主要在服務(wù)器管理中使用,其中包括單個組件狀態(tài)的通信。例如管理員可對各個組件進行查詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風(fēng)扇??呻S時監(jiān)控內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫度等多個參數(shù),增加了系統(tǒng)的安全性,方便了管理。
1 I2C總線特點
I2C總線最主要的優(yōu)點是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本??偩€的長度可高達25英尺,并且能夠以10Kbps的最大傳輸速率支持40個組件。I2C總線的另一個優(yōu)點是,它支持多主控(multimastering), 其中任何能夠進行發(fā)送和接收的設(shè)備都可以成為主總線。一個主控能夠控制信號的傳輸和時鐘頻率。當(dāng)然,在任何時間點上只能有一個主控。
2 I2C總線工作原理
2.1 總線的構(gòu)成及信號類型
I2C總線是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機一樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號分為地址碼和控制量兩部分,地址碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別(如對比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨立,互不相關(guān)。
I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號, 它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。
開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號:SCL為低電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
應(yīng)答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應(yīng)答信號,CPU接收到應(yīng)答信號后,根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應(yīng)答信號,由判斷為受控單元出現(xiàn)故障。
目前有很多半導(dǎo)體集成電路上都集成了I2C接口。帶有I2C接口的單片機有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外圍器件如存儲器、監(jiān)控芯片等也提供I2C接口。

本文引用地址:http://butianyuan.cn/article/201611/322756.htm

I2C總線的時鐘信號

在I2C總線上傳送信息時的時鐘同步信號是由掛接在SCL時鐘線上的所有器件的邏輯“與”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個器件的時鐘信號變?yōu)榈碗娖?,將使SCL線上所有器件開始并保護低電平期。此時,低電平周期短的器件的時鐘由低至高的跳變并不影響SCL線的狀態(tài),這些器件將進入高電平等待的狀態(tài)。

當(dāng)所有器件的時鐘信號都變?yōu)楦唠娖綍r,低電平期結(jié)束,SCL線被釋放返回高電平,即所有的器件都同時開始它們的高電平期。其后,第一個結(jié)束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產(chǎn)生一個同步時鐘??梢?,時鐘低電平時間由時鐘低電平期最長的器件決定,而時鐘高電平時間由時鐘高電平期最短的器件決定。

I2C總線的傳輸協(xié)議與數(shù)據(jù)傳送

起始和停止條件

在數(shù)據(jù)傳送過程中,必須確認數(shù)據(jù)傳送的開始和結(jié)束。在I2C總線技術(shù)規(guī)范中,開始和結(jié)束信號(也稱啟動和停止信號)的定義如圖3所示。

開始信號:當(dāng)時鐘總線SCL為高電平時,數(shù)據(jù)線SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。

結(jié)束信號:當(dāng)SCL線為高電平時,SDA線從低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。

開始和結(jié)束信號都是由主器件產(chǎn)生。在開始信號以后,總線即被認為處于忙狀態(tài),其它器件不能再產(chǎn)生開始信號。主器件在結(jié)束信號以后退出主器件角色,經(jīng)過一段時間過,總線被認為是空閑的。

圖3超始和停止信號圖

數(shù)據(jù)格式

I2C總線數(shù)據(jù)傳送采用時鐘脈沖逐位串行傳送方式,在SCL的低電平期間,SDA線上高、低電平能變化,在高電平期間,SDA上數(shù)據(jù)必須保護穩(wěn)定,以便接收器采樣接收,時序如圖4所示。

圖4 數(shù)據(jù)傳送時序圖

I2C總線發(fā)送器送到SDA線上的每個字節(jié)必須為8位長,傳送時高位在前,低位在后。與之對應(yīng),主器件在SCL線上產(chǎn)生8個脈沖;第9個脈沖低電平期間,發(fā)送器釋放SDA線,接收器把SDA線拉低,以給出一個接收確認位;第9個脈沖高電平期間,發(fā)送器收到這個確認位然后開始下一字節(jié)的傳送,下一個字節(jié)的第一個脈沖低電平期間接收器釋放SDA。每個字節(jié)需要9個脈沖,每次傳送的字節(jié)數(shù)是不受限制的。

I2C總線的數(shù)據(jù)傳送格式是在I2C總線開始信號后,送出的第一字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件中;方向位為“1”表示主器件將從從器件讀信息。格式如下:

1

0

1

0

A2

A1

A0

R/W

注:前四位固定為1010。

開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)決定。發(fā)送完第一個字節(jié)后再開始發(fā)數(shù)據(jù)信號。


上一頁 1 2 3 4 下一頁

關(guān)鍵詞: SPIIICUARTca

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉