Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
版主
|
參照:
I2C 有一個很重要的訊號叫 ACK/NACK,I2C 程式要寫的好這個訊號依定咬檢查。很多人寫 I2C 程式時,每寫入一筆資料到 EEPROM 時下一筆的資料寫入 Command 時就必須檢查 ACK 訊號已判定EEPROM 是否還在 Busy 的寫入狀態中,因為 I2C EEPROM 寫入資料需數個 mS 的時間,若程式用 Delay 的方式設計要是 Delay 的時間沒控制好有時候就會寫不進去。
發表於: 2009/1/7 15:05
|
|||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
資深會員
|
目前出問題的是 4M Hz 的振盪器
使用HS模式 也有使用內部振盪器4M的 還有使用5.5296MHz的 只不過我是偵測EEIF旗標 所以應該跟振盪器無關
發表於: 2009/1/7 14:46
|
|||
木亟缶夬金戔
彳艮缶夬金戔 走召缶夬金戔 |
||||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
資深會員
|
jubel大
可以請教你MCU使用的工作頻率是多少嗎? 只是好奇問問.
發表於: 2009/1/7 14:37
|
|||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
高級會員
|
我讀/寫內部eeprom沒遇到這問題,都是一次就ok!
倒是用外部eeprom會遇到跟jubel一樣的問題(i2c/smbus)! 我也是用連寫兩次解決這問題! 不知其他人是否有好的解決方式?
發表於: 2009/1/7 14:04
|
|||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
資深會員
|
都有關掉
程式碼及順序都跟規格書一樣 也就是我第一篇寫的 剛剛說我打算寫入後再確認 結果同事問 為何還要寫入第二次 為何程序對但第一次寫不去 要我把原因找出來... 真是麻煩... 我沒開啟看門狗 我也試過BSF EECON1,WR後加上NOP 及CLRWDT 但還是一樣有時會有寫入失敗的狀況 剛剛用SIM模擬都正常 但實際用ICD2除錯模式就會偶而發生寫入錯誤 要再寫入一次才正常 雖然說應該要找出正確原因 但總覺得為了這問題浪費好幾天時間實在不值得 因為這不是每個位址每次都會發生 加個讀取判斷就可以確認寫入正確數值 何必這麼鑽牛角尖...
發表於: 2009/1/7 13:43
Edited by jubel on 2009年01月07日 14:05:32
|
|||
木亟缶夬金戔
彳艮缶夬金戔 走召缶夬金戔 |
||||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
版主
|
檢查一下在做寫入動作時是否有將中斷關掉,寫入 EEPROM 的動作最耗不要被中斷干擾,尤其是在解鎖動作時。
可以的話,要不要先用範例程式先做一下測試 (先用 MPALB SIM) 看看每次所寫的資料都正確,如沒問題再用 ICD2 來連續測試看看範例程式有沒有會寫錯的問題。我之前得測試依職都很正常,附上C 的程式參考。 Attach file: Link only for registered users
發表於: 2009/1/7 13:30
|
|||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
資深會員
|
先前我也有遇過類似的問題,連續寫入一串資料會出現0xFF,但是在加入CLRWDT後就正常了,其實就是寫入EEPROM一半時被Reset了。
Jubel,有試過嗎?確定一下不是WDT溢位的問題。
發表於: 2009/1/7 13:27
|
|||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
資深會員
|
嗯
花那麼久就因為明明程式碼沒問題但資料卻寫不進去 一直反覆測試及換IC找原因 也到處找範例程式看我是否有漏掉什麼 我剛剛去看板主提供的那個程式碼 跟我上面寫的都一樣 有時可以寫入有時無法寫入 當寫入錯誤時EEPROM裡的值都會變成 FF 目前決定寫入後立刻讀取測試數值是否正確 反正讀取內部記憶體只有幾個指令就好 不會佔用太多時間 如果數值錯誤就再寫入一次 若連續錯誤則發出錯誤警告給使用者 早上試了幾個位址 大多是錯誤一次,再寫一次就好了 如果連續10次寫入錯誤,那應該可確定記憶體損壞吧 目前也只能這樣了 不然我也不知道怎樣分析為何會寫入錯誤...
發表於: 2009/1/7 13:12
|
|||
木亟缶夬金戔
彳艮缶夬金戔 走召缶夬金戔 |
||||
|
Re: 寫入內建的記憶體需要有時間延遲嗎?
|
||||
---|---|---|---|---|
版主
|
Jubel,
怎麼會花這麼久的時間呢! 網站裡就有 PIC18F452 Internal EEPROM 的範例可以參考,有問題暫討論吧! http://www.microchip.com.tw/modules/w ... lefile.php?cid=17&lid=265 還有一點要說明的是 : 使用 ICD2 在操作 EEPROM 時,MPLAB IDE 並不會即時更新 EEPROM Window 的,所以要在寫完EEPROM 後自己手動更新,可以在 EEPROM Window 按老鼠右鍵做 Refresh 的動作。 當然最簡單的方式就是使用 MPLAB SIM 來模擬 EEPROM 的寫入動作最簡單。 Good Luck!
發表於: 2009/1/7 12:05
|
|||
|