AT24C512驅動除錯中碰到的坑

2021-10-23 23:18:34 字數 852 閱讀 4663

測試at24c512已經兩周,期間碰到個各種坑進行總結。

1,第五字元不正確問題。後來發現是讀資料錯誤,使用位址偏移後,可以讀出第五個數,但是新的第五個數列印輸出繼續錯誤。而使用陣列直接賦值時,測試發現串列埠列印程式沒有問題。這個坑現在已經丟失,無法重現了。

2,八字元限制問題。昨天又碰到乙個新的問題,寫入16個字元,然後讀出時,前八個和後五個都是正確的,但是第9、10、11這三位輸出結果是0。使用位址偏移,位址增加兩位進行測試,變成了7、8、9位輸出結果為0,證明是寫入錯誤,資料讀取還是正確的。

3,寫週期匯流排占用時間很久,經常是寫入命令執行後,系統宕機,必須重啟才能進行讀取。估計是串列埠傳輸方面不夠完善。

4,在eeprom寫入完成後到底有沒有乙個sda拉低應答訊號,現在還沒有想到比較方便的方法進行監測。

5,總會莫名其妙碰到看門狗重啟的情況,並且是一上電就重啟,看程式裡面有餵狗操作都不行,硬體錯誤?

6,系統延時函式不夠精確,需要示波器進行修正一下。

7,單純增加寫入延遲時間,並不能保證每個資料都寫入,只是寫成功的資料多了一些而已,有點兒像logx曲線,後面斜率逐漸變小,再增加延時時間已經沒有多大意義。

8,讀操作和寫操作的ack函式是不同的。寫操作是接收eeprom傳輸過來的sda低位資料,如果讀到低位,進行下乙個位元組的寫迴圈。讀操作是在讀取完畢乙個位元組後,向匯流排寫入sda=0,然後繼續下乙個讀迴圈。

9, address_h=address<<8;   address_l=address>>8;  這兩句話沒有弄明白是什麼意思,位址高地位可以這樣子設定?

10,當前遇到的問題是,mcu又卡在重啟與復位過程**不來了,把程式初始化全部遮蔽,只留while(1); 進行單迴圈時沒有問題,但是加入系統初始化就會進入重啟怪圈。

AT24C512位址特性

今天總算實現了eeprom的任意位址正確讀寫。驅動還是原來的驅動,只是把一些延遲什麼的改短了一下,避免中斷影響過多。還有就是正確認識了at24c512的位址特性 1,at24c512的一頁為128位元組,在寫資料的時候,如果乙個寫週期內位元組數超過128個,會在當前頁位址內迴圈寫資料,也就是說,超過...

驅動中的除錯方法

模組載入是向核心傳遞引數 如果不傳遞就用預設的引數 使用者向核心傳遞引數的方法 eg insmod param.ko name wenhui age 20 核心除錯資訊的使用 undef pdebug 取消對pdebug的定義 以防重複定義 ifdef debug define pdebug fmt...

C 編譯中碰到的問題

vs2010編譯 編譯器可以連線多種庫,如c執行庫,標準c 庫,和舊iostream 庫 c 包含標頭檔案帶 h,如 include則visual c 在編譯時,自動連線到舊的iostream庫中。如果不帶.h,並使用了命名空間std,如 include using namespace std 則編...