久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2861|回復: 11
收起左側

請教各位關于單片機內部存儲的平衡寫入

[復制鏈接]
ID:510170 發表于 2021-7-20 18:03 | 顯示全部樓層 |閱讀模式
我們在做項目的時候,難免會遇到掉電的問題,一掉電,ram里面的內容全部都清空了。一般來說都會附加一個eeprom,好的eeprom可以寫入千萬次的數據,但是外帶一個是要成本的,且占用接口io,一般的單片機都帶有eeprom,但很多都是flash改成eeprom的。雖然對外宣傳是eeprom,實際按特性來看就是flash,flash的寫入次數要遠低于eeprom,一般是10w左右,我們能否利用flash量大且足的特性,將其充分利用起來,進行平衡寫法。將其寫入次數最大化。以stc8a8k60s4a12單片機為列,里面有4keeprom,分成8個扇區,每個扇區有512個字節,我們再將扇區分成32份,每份有16個字節的數據,用來存儲一般的變量應該是足夠的,如果不夠,再將其擴大就好了。劃成16份,32個字節每份。這里只是做比方,其中首字節用來做數據引索,填入aa,查找是也只需要按份來讀取aa就可以得出寫入指針在哪里了。下一次寫入的情況下將這次的首位寫為00即可。原理知道了。但是程序應該怎么寫呢?由于不是科班出生,都是自學的。只知道簡單的判斷寫法,有大神能出個方便點的算法嗎?最好能給個程序實列。我目前的寫法是這樣的。
                if(IapRead(0x0000)=0xaa){xrzz=0;}
                if(IapRead(0x0010)=0xaa){xrzz=1;}
                if(IapRead(0x0020)=0xaa){xrzz=2;}
                if(IapRead(0x0030)=0xaa){xrzz=3;}
                ......



回復

使用道具 舉報

ID:123289 發表于 2021-7-22 09:39 | 顯示全部樓層
能力有限,不能理解你所說的【平衡寫入】。
要結合考慮。寫入次數被你平衡了。也未必科學。
1、為了讀寫A,先要索引,如果A放在最末,索引時間就會加長。
2、整個區內,有一個單元不良時(假設其它很好,這個很差寫200次就不行了),你的【平衡寫入】,反而達不成目的。
3、為了【平衡寫入】,而使用程序復雜化,且大量占用CPU的時間,未必合算。
回復

使用道具 舉報

ID:401564 發表于 2021-7-22 19:27 | 顯示全部樓層
平衡寫入是個什么東東?沒有聽說過
十萬次的擦寫我都覺得足夠用了
如果一個數據是經常記錄保存,而且量還很大,那就不是一個單片機能保存的了,一般都是用外部的EEPROM,容量大的有64M的
而所謂的寫入,目前為止還不知道內部是怎么操作的,在沒有驗證之前,不要想當然的覺得:每個地址都有十萬次的寫入壽命,這個地址我用得差不多了,在它沒壞之前,換一個地址,它又有十萬次的擦寫壽命了,感覺是這樣而已,目前我還沒有聽說有人驗證過
與其想著這個,還不如考慮一下算法,看一下能不能少用寫入操作
回復

使用道具 舉報

ID:155507 發表于 2021-7-22 20:43 | 顯示全部樓層
如果一個數據是經常記錄保存,而且量還很大, 你可以用
NVRAM( Non-Volatile Random Access Memory) 是非易失性隨機訪問存儲器,即斷電之后,所存儲的數據不丟失的隨機訪問存儲器。

NVRAM 指斷電后仍能保持數據的一種RAM。一般都是用電池,可以持續10年。

NVRAM 能夠保護數據(即便在掉電情況下),支持高速RAM寫操作,擦寫次數不受限制。
回復

使用道具 舉報

ID:161164 發表于 2021-7-23 00:07 | 顯示全部樓層
  1. 先建立一個EEPROM地址數列
  2. u16 code EEP_Addr[]={
  3. 0x0000, 0x0010, 0x0020, ...};
  4. 如你所說,每次寫入時都在索引字節填入aa
  5. 因為EEPROM原始數值為0xFF
  6. 那么經過幾次寫入后可得出以下列表
  7. (首地址)(字節0)(字節1)(字節2)...
  8. 0x0000   0xaa    0xXX    0xXX
  9. 0x0010   0xaa    0xXX    0xXX
  10. 0x0020   0xff     0xff      0xff
  11. ...
復制代碼


回復

使用道具 舉報

ID:451718 發表于 2021-7-23 09:43 | 顯示全部樓層
這個想法很有建設性,而且很有可行性。最后特別提醒,可不能因為這個原因,就把ROM當RAM用。   
回復

使用道具 舉報

ID:213173 發表于 2021-7-23 10:37 | 顯示全部樓層
樓主這個想法沒有實際意義。還以stc8a8k60s4a12單片機為列,讀flash中數據沒有壽命限制,擦寫flash次數有壽命限制。擦除是以扇區為單位,所以將扇區劃分若干份使用不會延長使用壽命。如果需要保存的數據不太多,可以通過軟件輪流使用8個扇區以延長使用壽命。其實這些方法基本都是多余的。只要增加簡單硬件就可以實現掉電和關機保存eeprom。你這設備總不至于每天掉電無數次吧?
回復

使用道具 舉報

ID:161164 發表于 2021-7-23 14:57 來自手機 | 顯示全部樓層
wulin 發表于 2021-7-23 10:37
樓主這個想法沒有實際意義。還以stc8a8k60s4a12單片機為列,讀flash中數據沒有壽命限制,擦寫flash次數有壽 ...

軟件做到的事,為什要另加硬件?
回復

使用道具 舉報

ID:382454 發表于 2021-7-23 16:28 | 顯示全部樓層
樓主所想說的平衡寫入,我理解應該是這樣的吧,將扇區分成32份,每份有16個字節的數據,寫入和擦除是從1到16輪流寫的,也就是排隊寫入數據,第一次寫1區,第二次寫2區,第三次寫3區,以此類推從頭到尾循環。如果停電了就以最后寫入的那個參數把她讀出來。
我認為這樣利用也是很有創意的,就單單EEPROM使用壽命來說是16倍。其它這個寫數據也很簡單了,按上面的邏輯來,寫一個流水寫循環就可以了,讀的話,可以讀一個最后的標志位即可。
回復

使用道具 舉報

ID:161164 發表于 2021-7-23 17:46 | 顯示全部樓層

太可怕了,竟然吞了半個貼子
續上
每當要再寫入數據時可用For循環找出未被寫入的地址
  1. for(i=0;i<32;i++){
  2. HeadAddr = EEP_Addr[i];
  3. if(IapRead(HeadAddr) == 0xFF){
  4. break;
  5. }
  6. }
  7. if(i<32){
  8. iapProgram(HeadAddr,0xaa);
  9. iapProgram(HeadAddr + 1,Data1);
  10. iapProgram(HeadAddr + 2,Data2);
  11. iapProgram(HeadAddr + 3,Data3);
  12. 下略
  13. }else{
  14. //i >= 32代表所有地址已被寫滿,需先擦除一次再寫入
  15. }
  16. 開機的時候先讀
  17. for(i=0;i<32;i++){
  18. HeadAddr = EEP_Addr[i];
  19. if(IapRead(HeadAddr) != 0xaa){
  20. break;
  21. }
  22. }
  23. if(i>0){
  24. Data1 = IapRead(HeadAddr + 1);
  25. Data2 = IapRead(HeadAddr + 2);
  26. Data3 = IapRead(HeadAddr + 3);
  27. 下略
  28. }else{
  29. //i = 0 代表沒有寫入過
  30. }
復制代碼




回復

使用道具 舉報

ID:283954 發表于 2021-7-23 20:13 | 顯示全部樓層
克服斷電問題還是軟硬兼施來得好,現在的單片機耗電很小了,用個小的鋰電池,邊用邊充電,斷電后還可以運作一兩天,真的沒電了才寫進EEPROM,正如 wulin君所言,是整個扇區刪除重寫,所以扇區分部使用不會延長使用壽命的,依次使用每個扇區是能延長整體壽命。
回復

使用道具 舉報

ID:57657 發表于 2021-7-24 09:18 | 顯示全部樓層
平衡寫入 就是所謂的 磨損均勻算法,EEPROM的寫扇區都是有壽命損耗的,寫入、擦除 都需要做效驗。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久免费精品视频 | 欧美最猛黑人xxxx黑人 | 日韩欧美综合在线视频 | 韩日一区二区 | 欧美一级在线视频 | 久久国产精99精产国高潮 | 精品久久国产老人久久综合 | 久久国产高清视频 | 精品三区 | 91色视频在线观看 | 欧美美女爱爱 | 亚洲成人自拍 | 亚洲综合资源 | 久久久精品 | 国产精品大全 | 午夜在线精品 | 国产精品永久 | 爱爱综合网 | 国产激情视频在线观看 | 国产激情一区二区三区 | 色综合久| 日韩小视频| 欧美一级α片 | 国产一区二区在线免费观看 | 亚洲精品一 | 亚洲精品一区在线观看 | 91九色porny首页最多播放 | 毛片久久久 | 91亚洲国产成人久久精品网站 | 成人午夜av| 国产三级 | 日日操日日干 | 国产精品久久久久久久模特 | 拍戏被cao翻了h承欢 | 欧美精品一区二区三区视频 | 99精品免费视频 | 亚洲欧美日韩精品久久亚洲区 | 成人不卡| 日韩精品成人一区二区三区视频 | 亚洲一区高清 | 综合色播 |