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
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
是的,我就是用random read
目前卡在read的時後,要送第一個0xA0, ACK沒回
發表於: 2021/4/7 8:33
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
版主
|
Random Read 下完要讀取資料的位址後要在下一個 Start Condition 的訊號出去後再下 read 的動作。參考貼圖一下去比對你所送出的訊號是否有差異?
第一個 Control Byte 是下 Write Address 動作,第二個 Control Byte 是下 Read Data from EEPROM 的動作。
發表於: 2021/4/7 14:13
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
版大可能誤會我的問題了
我的A段程式區塊是在某位置寫入資料 我的B段程式區塊是用random read 讀取我剛剛寫入位置的值 我的A段、B段單獨執行都可以動作 但是如果A段+B段一起全速執行,B段第一個Control Byte 就卡ACK了
發表於: 2021/4/7 16:03
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
我好像找到問題了
因為單獨寫值和random read都可以動作 我把這兩段程式合在一起後,中間設個斷點 程式執行寫完值之後停下,我再按執行跑random read就可以正常動作了 所以我把程式寫完值會跑stop程序後,延長DELAY時間後接著跑start就沒問題了 比較奇怪的是,我翻了版大上上篇提供的ds stop之後要等待多久才能接start訊號 Bus Free Time: The time the bus must be free before a new transmission can start ds寫的是最少需要4.7us 我實測的結果要延長到3.2ms以上 雖然我手上的這一顆eeprom是電子材料行買的,應該不會microchip系列 這兩個的數值也差了太多了,真奇怪
發表於: 2021/4/7 16:33
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
write需要時間...
發表於: 2021/4/8 2:13
|
|||
程式是
依照寫出來(的code),跑出結果 不是依照你想出來的,得到結果 先有需求規格 後有解決方案 |
||||
|
Re: I2C問題
|
||||
---|---|---|---|---|
版主
|
EEPROM 寫入的命令完成,但 EEPROM 仍需約 4 ms 的動作時間來完成內部的寫入。所以,可以用 Delay 的方式或再送一次 Control Byte 時檢查 Ack 的回應是否為 Low 後方可做下一個動作。回 High 代表 EEPROM 還在忙碌中。
發表於: 2021/4/8 11:02
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
版主
|
上一篇因是用手機回覆的無法做較詳細的回答。
請參考一下底下的 24LC16B 的 Data Sheet 裡的 Page12 有說明要寫入時須先檢查 Ack 的流程。 https://ww1.microchip.com/downloads/en ... rial-EEPROM-20001703N.pdf
發表於: 2021/4/9 11:34
|
|||
|
Re: I2C問題
|
||||
---|---|---|---|---|
資深會員
|
喔,懂了,送完wirte command之後
如果要再讀出來,送control byte,沒有回ack 就再送一次control byte,再polling ack........LOOP 謝謝
發表於: 2021/4/9 14:59
|
|||
|