(1)i2c是兩線式序列匯流排,由資料線sda和時鐘scl構成的序列匯流排,可傳送和接收資料。在cpu與被控ic之間、ic與ic之間進行雙向傳送,高速iic匯流排一般可達400kbps以上。
(2)iic是半雙工通訊方式,也就是說它既可以接收也可以傳送,但是由於它只有一根資料線,所以接收和傳送不能同時進行。
(1)空閒狀態:資料線sda和時鐘scl線都處於高電平。
(2)開始訊號:scl線持續處於高電平,資料線sda由高變為低。
(3)停止訊號:scl線持續處於高電平,資料線sda由低變為低。
(4)應答訊號:位傳送器每傳送乙個位元組,就在時鐘脈衝9期間釋放資料線,由接收器反饋乙個應答訊號。 應答訊號為低電平時,規定為有效應答(ack簡稱應答位)
(5)資料的有效性:資料sda在scl的上公升沿到來之前就需準備好。並在在下降沿到來之前必須穩定。否則,你可以想象,就會被認為是開始訊號或者停止訊號。
(6)資料的傳輸:在scl序列時鐘的配合下,在sda上逐位地序列傳送每一位資料。資料位的傳輸是邊沿觸發。
//產生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)
//iic傳送乙個位元組
//返回從機有無應答
//1,有應答
//0,無應答
void iic_send_byte(u8 txd)
}
//讀1個位元組,ack=1時,傳送ack,ack=0,傳送nack
u8 iic_read_byte(unsigned char ack)
if (!ack)
iic_nack();//傳送nack
else
iic_ack(); //傳送ack
return receive;
}
四、eeprom(24c02) STM32 軟體模擬I2C
i2c的兩個引腳 scl引腳和sda引腳 需要既能輸出又能輸入,為了避免複雜的配置操作需要把該引腳配置為開漏輸出模式,該模式的說明如下圖所示 當微控制器的sda引腳配置為低電平時,sda線被拉低 當微控制器的sda引腳配置為高電平時,引腳埠為高阻態,sda線通過上拉電阻被vcc拉高。因此一定要注意在...
STM32之I2C模組除錯總結
前一段時間對stm32的i2c模組進行了除錯,今天做乙個總結。關於i2c協議的知識,這裡就不再贅述,網上有很多介紹i2c協議的文章。目前實現i2c協議的方式有兩種,一是採用gpio口來模擬i2c協議,另外一種是使用stm32自帶的i2c模組。雖說使用gpio口模擬i2c協議較為複雜,需要詳細了解i2...
STM32的I2C特性及架構
軟體模擬協議 使用cpu直接控制通訊引腳 gpio 的電平,產生出符合通訊協議標準的邏輯。硬體實現協議 由stm32的i2c片上外設專門負責實現i2c通訊協議,只要配置好該外設,它就會自動根據協議要求產生通訊訊號,收發資料並快取起來,cpu只要檢測該外設的狀態和訪問資料暫存器,就能完成資料收發。這種...