IIC通訊協議

2021-10-12 18:55:57 字數 2133 閱讀 6640

i2c是一種同步通訊,以半雙工方式傳送的序列匯流排。由資料線sda和時鐘scl構成的,可傳送和接收資料。在cpu與被控ic之間、ic與ic之間進行雙向傳送,高速iic匯流排一般可達400kbps以上。

1.讀資料:指mcu從器件的資料匯流排上根據一定的時序來讀取器件的資料。一般而言,mcu提供乙個邊沿訊號,告訴器件可以發資料了,器件檢測到邊沿訊號以後,立即在資料匯流排上更新資料,待資料穩定以後,mcu即可讀取資料。

2. 寫資料:是指mcu向器件寫入資料,其操作是:先將資料放置在資料匯流排上,等待其穩定之後,mcu產生乙個邊沿訊號,將資料寫入器件

3.iic匯流排讀寫資料

1.包含空閒狀態、起始訊號、停止訊號、應答訊號、資料的有效性、資料傳輸

簡單來講:(先忽略應答訊號;圖中scl為同乙個脈衝)

參考部落格:

4.1 mcu通過iic寫資料到器件,連續寫入兩個位元組

要點:

4.2 mcu通過iic讀取器件的資料,讀取兩個位元組

要點:

5.正點原子的程式例項:

#define sda_in() 

#define sda_out()

//io操作函式    

#define iic_scl    pbout(6) //scl

#define iic_sda    pbout(7) //sda    

#define read_sda   pbin(7)  //輸入sda

//初始化iic

void iic_init(void)

//產生iic起始訊號

void iic_start(void)

//產生iic停止訊號

void iic_stop(void)

//等待應答訊號到來

//返回值:1,接收應答失敗

//        0,接收應答成功

u8 iic_wait_ack(void)

}iic_scl=0;//時鐘輸出0        

return 0;  

}//產生ack應答

void iic_ack(void)

//不產生ack應答            

void iic_nack(void)

//mcu通過iic往從機寫入乙個位元組

//返回從機有無應答

//1,有應答

//0,無應答              

void iic_send_byte(u8 txd)

}         

//mcu通過iic讀取從機乙個位元組,ack=1時,傳送ack,ack=0,傳送nack   

u8 iic_read_byte(unsigned char ack)

if (!ack)

iic_nack();//傳送nack

else

iic_ack(); //傳送ack   

return receive;

}

IIC 通訊協議

原文 i2c匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定,只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。起始和終止訊號 scl線為高電平期間,sda線由高電平向低電平的變化表示起始訊號 scl線為高電平期間,sda線由低電平向高電平的變化表示終止...

IIC 通訊協議

i2c匯流排進行資料傳送時,時鐘訊號為高電平期間,資料線上的資料必須保持穩定,只有在時鐘線上的訊號為低電平期間,資料線上的高電平或低電平狀態才允許變化。起始和終止訊號 scl線為高電平期間,sda線由高電平向低電平的變化表示起始訊號 scl線為高電平期間,sda線由低電平向高電平的變化表示終止訊號。...

IIC 通訊協議

簡要過程 主機傳送起始位,這會通知匯流排上的所有裝置傳輸開始了,接下來主機傳送裝置位址 讀 寫訊號,與這一位址匹配的從裝置將成為從機並與主機進行傳輸,而其它從裝置將會退出此次通訊。主機匹配到從機後,主機傳送它所要讀取或寫入的從機的內部暫存器位址 然後傳送資料 資料傳送完畢後,傳送停止位。詳細過程 簡...