SPI、IIC、UART、can區(qū)別
作者:
時(shí)間:2016-11-28
來源:網(wǎng)絡(luò)
收藏
void wait_5ms( void ) {
int i ;
for ( i=0 ; i<1000 ; i++ )
{
;
}
}
//向24C04寫入器件地址和一個(gè)指定的字節(jié)地址。
bit E_address(uchar page ,uchar Address )
{
I_start() ;
if ( I_send( WRITE +page) )
return ( I_send( Address ) ) ;
else
return ( FALSE ) ;
}
//參數(shù)的含義:從第幾個(gè)模塊(不超過3),模塊中第幾個(gè)字節(jié)(不超過255)
//寫到RAM映象的第幾個(gè)字節(jié)和讀的長(zhǎng)度
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陳廣強(qiáng) 閱讀(116) |評(píng)論(0)| 編輯
關(guān)于IIC總線
I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設(shè)備開發(fā),如今主要在服務(wù)器管理中使用,其中包括單個(gè)組件狀態(tài)的通信。例如管理員可對(duì)各個(gè)組件進(jìn)行查詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如電源和系統(tǒng)風(fēng)扇。可隨時(shí)監(jiān)控內(nèi)存、硬盤、網(wǎng)絡(luò)、系統(tǒng)溫度等多個(gè)參數(shù),增加了系統(tǒng)的安全性,方便了管理。
1 I2C總線特點(diǎn)
I2C總線最主要的優(yōu)點(diǎn)是其簡(jiǎn)單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。總線的長(zhǎng)度可高達(dá)25英尺,并且能夠以10Kbps的最大傳輸速率支持40個(gè)組件。I2C總線的另一個(gè)優(yōu)點(diǎn)是,它支持多主控(multimastering), 其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主總線。一個(gè)主控能夠控制信號(hào)的傳輸和時(shí)鐘頻率。當(dāng)然,在任何時(shí)間點(diǎn)上只能有一個(gè)主控。
2 I2C總線工作原理
2.1 總線的構(gòu)成及信號(hào)類型
I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送,最高傳送速率100kbps。各種被控制電路均并聯(lián)在這條總線上,但就像電話機(jī)一樣只有撥通各自的號(hào)碼才能工作,所以每個(gè)電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線上并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能。CPU發(fā)出的控制信號(hào)分為地址碼和控制量?jī)刹糠?,地址碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定該調(diào)整的類別(如對(duì)比度、亮度等)及需要調(diào)整的量。這樣,各控制電路雖然掛在同一條總線上,卻彼此獨(dú)立,互不相關(guān)。
I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號(hào), 它們分別是:開始信號(hào)、結(jié)束信號(hào)和應(yīng)答信號(hào)。
開始信號(hào):SCL為高電平時(shí),SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號(hào):SCL為低電平時(shí),SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
應(yīng)答信號(hào):接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。
目前有很多半導(dǎo)體集成電路上都集成了I2C接口。帶有I2C接口的單片機(jī)有:CYGNAL的 C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外圍器件如存儲(chǔ)器、監(jiān)控芯片等也提供I2C接口。
本文引用地址:http://m.butianyuan.cn/article/201611/322756.htmI2C總線的時(shí)鐘信號(hào)
在I2C總線上傳送信息時(shí)的時(shí)鐘同步信號(hào)是由掛接在SCL時(shí)鐘線上的所有器件的邏輯“與”完成的。SCL線上由高電平到低電平的跳變將影響到這些器件,一旦某個(gè)器件的時(shí)鐘信號(hào)變?yōu)榈碗娖剑瑢⑹筍CL線上所有器件開始并保護(hù)低電平期。此時(shí),低電平周期短的器件的時(shí)鐘由低至高的跳變并不影響SCL線的狀態(tài),這些器件將進(jìn)入高電平等待的狀態(tài)。
當(dāng)所有器件的時(shí)鐘信號(hào)都變?yōu)楦唠娖綍r(shí),低電平期結(jié)束,SCL線被釋放返回高電平,即所有的器件都同時(shí)開始它們的高電平期。其后,第一個(gè)結(jié)束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產(chǎn)生一個(gè)同步時(shí)鐘。可見,時(shí)鐘低電平時(shí)間由時(shí)鐘低電平期最長(zhǎng)的器件決定,而時(shí)鐘高電平時(shí)間由時(shí)鐘高電平期最短的器件決定。
I2C總線的傳輸協(xié)議與數(shù)據(jù)傳送
起始和停止條件
在數(shù)據(jù)傳送過程中,必須確認(rèn)數(shù)據(jù)傳送的開始和結(jié)束。在I2C總線技術(shù)規(guī)范中,開始和結(jié)束信號(hào)(也稱啟動(dòng)和停止信號(hào))的定義如圖3所示。
開始信號(hào):當(dāng)時(shí)鐘總線SCL為高電平時(shí),數(shù)據(jù)線SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號(hào):當(dāng)SCL線為高電平時(shí),SDA線從低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
開始和結(jié)束信號(hào)都是由主器件產(chǎn)生。在開始信號(hào)以后,總線即被認(rèn)為處于忙狀態(tài),其它器件不能再產(chǎn)生開始信號(hào)。主器件在結(jié)束信號(hào)以后退出主器件角色,經(jīng)過一段時(shí)間過,總線被認(rèn)為是空閑的。
圖3超始和停止信號(hào)圖
數(shù)據(jù)格式
I2C總線數(shù)據(jù)傳送采用時(shí)鐘脈沖逐位串行傳送方式,在SCL的低電平期間,SDA線上高、低電平能變化,在高電平期間,SDA上數(shù)據(jù)必須保護(hù)穩(wěn)定,以便接收器采樣接收,時(shí)序如圖4所示。
圖4 數(shù)據(jù)傳送時(shí)序圖
I2C總線發(fā)送器送到SDA線上的每個(gè)字節(jié)必須為8位長(zhǎng),傳送時(shí)高位在前,低位在后。與之對(duì)應(yīng),主器件在SCL線上產(chǎn)生8個(gè)脈沖;第9個(gè)脈沖低電平期間,發(fā)送器釋放SDA線,接收器把SDA線拉低,以給出一個(gè)接收確認(rèn)位;第9個(gè)脈沖高電平期間,發(fā)送器收到這個(gè)確認(rèn)位然后開始下一字節(jié)的傳送,下一個(gè)字節(jié)的第一個(gè)脈沖低電平期間接收器釋放SDA。每個(gè)字節(jié)需要9個(gè)脈沖,每次傳送的字節(jié)數(shù)是不受限制的。
I2C總線的數(shù)據(jù)傳送格式是在I2C總線開始信號(hào)后,送出的第一字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中前7位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件中;方向位為“1”表示主器件將從從器件讀信息。格式如下:
注:前四位固定為1010。
開始信號(hào)后,系統(tǒng)中的各個(gè)器件將自己的地址和主器件送到總線上的地址進(jìn)行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)決定。發(fā)送完第一個(gè)字節(jié)后再開始發(fā)數(shù)據(jù)信號(hào)。
技術(shù)專區(qū)
評(píng)論