I2C與EEPROM通訊 上電時SDA為0

2021-10-10 17:36:15 字數 584 閱讀 7270

在自己寫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以怎麼樣的波形去傳送訊息,以及裝置的應答波紋就不在詳細介紹了,這個對於不是直接寫驅動的開發人員來說沒有必要...