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