加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1I²C讀寫EEPROM基礎原理
    • 2EEPROM底層驅動
    • 3I²C選擇硬件、軟件?
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

嵌入式開發(fā) | EEPROM驅動代碼常見操作

2022/03/02
446
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

相信很多讀者都使用過類似AT24C0x這種使用I²C讀寫的EEPROM,在項目中,使用不當就容易導致數(shù)據(jù)丟失,或者異常的情況。

今天就來講講關于EEPROM的內容。

1I²C讀寫EEPROM基礎原理

市面上大部分使用I2C通信的EEPROM,控制時序和讀寫流程都基本相同。

I²C通信原理,說簡單不簡單,但說難也不難,主要理解基礎原理和時序即可。

可以參看我分享的文章:通信教程 | I²C基礎原理及通信協(xié)議通信教程 | 詳述I²C總線時序通信教程 | I²C幾種速度及區(qū)別

2EEPROM底層驅動

真正實際做過項目的人都知道,好的底層驅動,會給上層應用開發(fā)帶來很大便利,節(jié)省開發(fā)時間,以及減少bug發(fā)生率。

而大部分初學者,或者應屆畢業(yè)生從事相關開發(fā),一般很少考慮代碼的移植性,復用性,或者說容錯處理等問題。

下面,我簡單列兩點我在項目中,對EEPROM常用的幾項操作。

1.寫,再讀,驗證寫入成功

這種方法很好理解:寫入之后,再次讀去這部分數(shù)據(jù),進行一一匹配,驗證是否與寫入數(shù)據(jù)一致。

一般我是會重復操作3次,也就是說:寫入,再讀取,如果超過3次都還失敗,那么我則放棄寫入,認為寫入失敗,或芯片異常。

這個方法可以簡單解決因異常導致寫入失敗的問題。

2.添加校驗信息

在上面一層讀驗證基礎上,對保存一些參數(shù),我一般還會:在參數(shù)末尾添加類似“和校驗”,或“CRC校驗”。

假如你連續(xù)存儲一個有10字節(jié)的參數(shù)(數(shù)據(jù)結構),如果因異常修改了中間某一個字節(jié)參數(shù),你讀出來進行校驗,發(fā)現(xiàn)不對,則認為這個參數(shù)無效。

添加這個校驗的目的相信從上面我舉例已經(jīng)明白,就是解決多字節(jié)參數(shù)中某個字節(jié)被惡意修改,導致這個參數(shù)無效的問題。

3.EEPROM在多任務中添加互斥鎖

使用過操作系統(tǒng)的朋友都知道,多線程訪問一個資源,一般都存在互斥的關系。簡單的說:一個資源,在同一時刻,只能被一個線程操作。

那EEPROM舉例:線程A在網(wǎng)EEPROM寫10字節(jié)數(shù)據(jù),剛6個字節(jié)時,線程B想要搶占,往EEPROM寫入數(shù)據(jù)。你覺得線程A應不應該放棄I2C總線,讓線程B寫入呢?

答案肯定是不允許的,所以,就有了互斥鎖這么一說。也就是等先占用I2C總線的線程操作完,才釋放總線,讓其他線程進行操作。

這三點應該是我比較常用了,網(wǎng)上還有其他一些相關的容錯處理機制,感興趣的不妨搜索一下。

我這里就不貼代碼了,因芯片型號不同,應用不同,代碼就存在差異。但我們目的:在保證滿足應用的同時,需考慮代碼的移植、復用、以及容錯。

3I²C選擇硬件、軟件?

我們代碼應該使用硬件I2C?還是軟件模擬I2C?

這個問題有許多朋友都在問,說句實話,遇到這類有爭議的問題,一般來說,需要結合項目實際情況,比如速度、實時性、移植性等。

我遇到這類問題,一般會根據(jù)實際情況而定。比如:你的I2C產(chǎn)品要提供給一些不同平臺用戶,進行二次開發(fā),我覺得軟件IO模擬比較好,方便用戶嘛。

假如你們公司開發(fā)的產(chǎn)品都使用STM32這家公司芯片開發(fā)I2C產(chǎn)品,我覺得,你代碼可以使用硬件I2C。

作者 | strongerHuang

微信公眾號 | strongerHuang

相關推薦

電子產(chǎn)業(yè)圖譜

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級嵌入式軟件工程師,業(yè)余維護公眾號『strongerHuang』,分享嵌入式軟硬件、單片機、物聯(lián)網(wǎng)等內容。