在自己寫stm32模擬i2c中, 寫到向eeprom進行page write, 然後random read讀出所寫內容.
發現復位6次中, 5次會讀寫失敗, 1次會成功.
失敗的原因是: 傳送起始訊號前檢測到sda被拉低, 認為匯流排被占用.
於是我認為有2種情況:
第一種是eeprom自己將sda拉低;
第二種是電路接線不穩.
但是由於失敗成功例子非常規律, 都是5次失敗, 1次成功, 我初步認為第二種情況是不可能的.
但是我還是驗證了一下, 首先配置了sda埠的gpio埠為輸出, 一直輸出高電平, 然後將這2個口短接, 讓這個gpio口充當電源的功能, 如果是接線不穩的原因, 應該就能正常通訊.
但是實驗結果是雖然上電後檢測到sda為1了, 但是還是不能正常通訊.
由於復位產生的, 埠配置時也不能正常輸出, 所以一直在檢查sck埠配置之前的**
但是最後發現其實是在埠配置後的random read函式中, 讀最後一位位元組資料後, 發了個應答訊號, 再發結束訊號, 導致eeprom接收到應答訊號後, 繼續向stm32傳送資料, 拉低sda, 即使重新上電復位. 也就影響了下一次復位的情況.
I2C通訊 EEPROM之寫與讀
往at24c02裡寫入資料,再讀出來,賦給p1口,點亮led燈 include include define uchar unsigned char define uint unsigned int sbit sda p2 0 sbit scl p2 1 void delay 5us 5us延時 v...
I2C驅動(2) 讀寫eeprom
include include include include include include include include include static unsigned short ignore static unsigned short normal addr 位址值是7位 改為0x60的話...
I2C外掛程式eeprom的讀寫
i2c簡介 i2c匯流排通訊是一種通訊協,用於連線微控制器及其外圍裝置,由兩根線組成,時鐘線sda和資料線scl。如圖所示,外掛程式裝置接到相應的線上就可以被i2c識別到,另外關於scl,sda以怎麼樣的波形去傳送訊息,以及裝置的應答波紋就不在詳細介紹了,這個對於不是直接寫驅動的開發人員來說沒有必要...