Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
喔,懂了,送完wirte command之後
如果要再讀出來,送control byte,沒有回ack 就再送一次control byte,再polling ack........LOOP 謝謝
發表於: 2021/4/9 14:59
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
版主
|
上一篇因是用手機回覆的無法做較詳細的回答。
請參考一下底下的 24LC16B 的 Data Sheet 裡的 Page12 有說明要寫入時須先檢查 Ack 的流程。 https://ww1.microchip.com/downloads/en ... rial-EEPROM-20001703N.pdf
發表於: 2021/4/9 11:34
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
版主
|
EEPROM 寫入的命令完成,但 EEPROM 仍需約 4 ms 的動作時間來完成內部的寫入。所以,可以用 Delay 的方式或再送一次 Control Byte 時檢查 Ack 的回應是否為 Low 後方可做下一個動作。回 High 代表 EEPROM 還在忙碌中。
發表於: 2021/4/8 11:02
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
write需要時間...
發表於: 2021/4/8 2:13
|
|||
程式是
依照寫出來(的code),跑出結果 不是依照你想出來的,得到結果 先有需求規格 後有解決方案 |
||||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
版大可能誤會我的問題了
我的A段程式區塊是在某位置寫入資料 我的B段程式區塊是用random read 讀取我剛剛寫入位置的值 我的A段、B段單獨執行都可以動作 但是如果A段+B段一起全速執行,B段第一個Control Byte 就卡ACK了
發表於: 2021/4/7 16:03
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
版主
|
Random Read 下完要讀取資料的位址後要在下一個 Start Condition 的訊號出去後再下 read 的動作。參考貼圖一下去比對你所送出的訊號是否有差異?
第一個 Control Byte 是下 Write Address 動作,第二個 Control Byte 是下 Read Data from EEPROM 的動作。
發表於: 2021/4/7 14:13
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
是的,我就是用random read
目前卡在read的時後,要送第一個0xA0, ACK沒回
發表於: 2021/4/7 8:33
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
版主
|
I2C EEPROM 寫入資料是一個動作,讀取資料又是一個動作。這兩種動作是各自獨立的無法交互使用。但 I2C EEPROM 是可以連續讀取 (Page Read) 或做連續寫入(Page Write)。
有一個常用的命令是 Random Read,先 Write Address 後再後再下 Repeat Start Command 後再下 Address 後就可以連續讀取資料。參考一下 PAGE 16 的時序圖。 https://ww1.microchip.com/downloads/en ... rial-EEPROM-20001703N.pdf
發表於: 2021/4/6 17:39
|
|||
|
I2C問題
|
||||
---|---|---|---|---|
資深會員
|
我使用EEPROM M24C16用軟體模擬寫了I2C程式出了點問題
請高手指點一下 我在0x01位置寫入0x11,然後要讀出來時卡在第一個ACK 後來我把程式分開 第一次,寫入資料的程式保留,讀出資料註解掉,執行完之後 再把寫入資料的程式註解,留下讀出資料程式,執行完後,讀出資料正確 我猜有可能是送完資料後送STOP和再送START的時後沒送好 請問有哪位知道我在送第二個0xA0的時後,ACK沒有回的原因嗎
發表於: 2021/4/6 16:41
|
|||
|