环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產品分類

當前位置: 首頁 > 新聞熱點

利用基于閃存的MCU實現用戶數據存儲

發布日期:2022-07-14 點擊率:31

的大多數設備還需要某種機制來存儲在斷電時仍要被記住的那些設置數據。例如,在更換電池后記不住預設電臺的收音機肯定不會在市場上取得很大的成功。用戶希望喜愛的電臺、預設溫度、參數選擇和其他永久性信息能長久保存下來供每次開機時直接取用。


為了滿足這種用戶需求,設計師一般使用串行EEPROM。這些器件又小又便宜,具有很長的歷史,設計工程師用起來得心應手。但在今天對成本極其敏感的市場下,即使這樣一個廉價的器件也可能突破成本預算。因此許多設計師試圖尋求并利用已經包含在微控制器芯片中的資源:程序閃存中剩余的空間。


過去,許多微控制器使用ROM或可紫外線擦除的EPROM來存儲程序指令。但現在越來越多的微控制器轉用閃存技術存儲代碼。選擇閃存的主要理由是,如果在程序代碼中發現錯誤,閃存數據很容易被擦除和更新。


大多數微控制器具有讀取程序空間中存儲數據的機制。基于馮·諾伊曼架構的處理器,如TI MSP430,可以使用任何尋址模式讀取程序閃存。哈佛架構處理器一般利用特殊的機制將數據從程序空間傳送到數據空間。具有閃存管理功能的其他MCU包括:


1. 包含MOVEC(移動常數)指令的非常流行的8051處理器系列;

2. 包含TBLRD和TBLWR(表讀和表寫)指令的Microchip PIC18系列;

3. 具有偽馮·諾伊曼架構的美信MAXQ微控制器系列,它們允許通過簡單的MOVE指令訪問閃存程序存儲空間(見圖1)。


圖1:在像美信MAXQ2000這樣的偽馮·諾伊曼MCU中采用的數據交換允許任何存儲器塊被用作代碼或數據存儲器。
圖1:在像美信MAXQ2000這樣的偽馮·諾伊曼MCU中采用的數據交換允許任何存儲器塊被用作代碼或數據存儲器。


但即使能夠從隨機閃存位置讀取數據,完整的非易失性存儲器子系統也必須能夠隨機修改閃存中的數據。這意味著需要解決兩個問題:首先,一旦某個閃存位置被寫入,那個位置的數據只能通過擦除整個閃存塊(通常128字節或以上)進行修改;其次,閃存的讀寫次數非常有限。


本文將介紹如何構建一個能夠解決這些問題、并使用閃存塊模擬隨機寫入的機制。雖然本文的用例是MAX2000,但原理適用于支持讀寫和擦除閃存的用戶代碼的任何處理器。本文討論的方案已經被用于采用MAXQ3180三相模擬前端和MAXQ2000的三相電表參考設計。


閃存管理的基本知識


閃存是一種電可擦除的存儲器,通常主要用于讀操作,也就是說,雖然是可寫的,但它不希望很頻繁地更新數據,因此對這種存儲器的操作大部分是讀操作。大多數閃存器件是以字(word)為單位寫入數據的,但一次只能擦除整個塊。這使得它們不適用于頻繁變化的存儲應用,只適合存儲那些永遠不變的常數表。


一共有兩種閃存:NAND閃存和NOR閃存。NAND閃存經常用于存儲卡和閃盤。一般來說,從NAND器件讀取數據需要幾個周期,并且大部分是用串行方式完成的。


因此NAND閃存不適于存儲程序代碼,因為存取時間太長。而NOR閃存更像是傳統的字節或字寬的存儲器。可以像讀ROM器件那樣讀NOR閃存中的數據:使片選和地址線有效,然后等待一段訪問時間后從總線上讀取數據。


閃存塊通常被擦除到“1”狀態,因此經過擦除后,塊中的每個位置都是0xFFFF。“編程”一個閃存位置是把某些位從“1”狀態改變為“0”狀態。為了使編程過的位返回到“1”狀態,整個塊必須被擦除。


任何電可擦除的存儲器件都面臨壽命的問題。根據所用技術的不同,一個閃存單元在永久失效以前可以承受的擦除-編程次數少則1000次,多則100萬次。使用閃存存儲數據的任何方案都必須確保寫入次數在整個單元陣列上獲得均勻分布,沒有一個位置會出現太多的擦除和編程次數。


大多數閃存器件都允許將前次編程中那些未被編程的位從“1”改為“0”狀態。例如,大多數器件允許用0xFFFE編程過的那個位置再用0x7FFE進行編程,因為這種操作不會將任何位從“0”改變到“1”。然而如圖1所示的處理器架構中使用的閃存不允許這樣做。這種寫入操作的結果是失敗,內存中的數據仍然是0xFFFE。


理由很簡單:因為要被編程的存儲塊主要用作代碼空間,通常禁止對前面寫過的位置作任何寫操作。因為指令0xFFFF代表的是無效的源子譯碼(source sub-decode),不可能出現在有效的代碼塊中。這樣,阻止向以前編過程的位置寫入數據有助于保持代碼塊的完整性。


提供非易失性存儲器服務


以下是提供非易失性存儲器服務的兩種方案。第一種方案側重于簡單性,第二種方案比較靈活,但代價是較復雜。


方案1


問題:校準信息、MAC地址或制造數據等配置數據必須要存儲在產品中。雖然這些通常是固定不變的信息,但在整個產品生命周期內配置數據需要多次更新的可能性還是存在的。


解決方案:下面是實際中最容易想到的例子。有兩個塊,一個塊在字地址0x7E00處,另一個在0x7F00處,都用于數據存儲。在第一次收到保存配置數據的命令時,處理器會檢查這兩個塊,在發現它們都是空塊后,配置數據被就存入第一個塊。


保存配置數據的第二條命令同樣會使處理器再一次檢查這兩個塊。當發現塊0已經有數據后,它就將配置數據拷貝到塊1,然后擦除塊0中的數據。


當收到恢復配置的請求時(比如在上電時),處理器會同時讀取兩個塊的數據并確定哪個塊在用。只要是沒被擦除的塊就是在用塊。


這種方案的主要優點是簡單:如果設備在上電(或其他配置恢復事件)時需要塊中的配置數據,這是很好的一種方案。讀數程序會接受一個字長的指針,返回該地址的數值,寫入程序則接受一個字長的指針,然后嘗試向該地址進行寫入操作。擦除程序只是同時擦除兩個塊。


這種方案的主要缺點就是主要優點的反面:程序的思路太過簡單。沒有操作去判斷寫入數據是否成功—在發出寫入命令后,如果寫入失敗,處理器不會做任何事去解決問題。這也是為什么這個方案只是用來寫入已知是空的閃存塊的原因。


方案2


問題:要求用非易失性存儲技術來跟蹤用電量和其他經常變化的數據。更新經常是一周數次或一天數次發生。


解決方案:這是即使傳統EEPROM也需要尋求幫助的場合。問題是:更新的頻率和所有非易失性存儲器有限的寫入壽命這樣的事實不允許反復寫入和擦除單個EEPROM單元。考慮一個小時更新一次的情況,具有1萬次寫入-擦除次數限制的EEPROM只需一年時間就會失效,這個時間比電表所需的十年設計目標少得太多了。


解決這個問題的方法之一是實現某種形式的“損耗均衡”。這意味著不會有單個位置被反復寫數據。相反,寫入操作將呈類似合理指數分布的方式分散到整個存儲器陣列。


損耗均衡是一種很好理解的技術,在閃存器件中使用就是出于這個目的。但它的算法非常復雜和難以理解,不過對我們來說,一個更簡單的原理介紹就足夠了。


存儲陣列中的數據項是由數據單元(data element)號引用的,而不是地址。


數據單元號是一個唯一識別數據單元的任意8位數,因此在這種方案中,最多有255個數據單元(數據單元0是保留單元)。


每個數據單元有一個雙字節的頭部(見圖2),包含了數據單元號和數據單元長度以及留給差錯管理使用的足夠空間,其中長度是一個兩位代碼,可表示1個、2個、3個或4個16位的字。



圖2:數據單元的頭部結構。
圖2:數據單元的頭部結構。


寫一個數據單元需要知道寫入數據的地址、寫入數據的單元號和長度。寫函數先尋找陣列結尾,然后緊跟最后一個記錄之后寫入新的數據單元。


如果閃存頁中沒有足夠的空間容納指定長度的記錄,一個表示結尾的頁標記將被寫入,并會打開一個新的頁。有關典型數據頁的結構請見圖3。



圖3:典型的數據頁。
圖3:典型的數據頁。


在展開的數據頁中,先寫入經常要更新的數據單元1,再寫入從不更新的數據單元4,然后寫入需要多次更新的數據單元3。最后,寫入從不更新的數據單元2。


出現頁的結尾標記表明過進行過一次數據寫入嘗試,但由于數據單元太長而無法將數據單元裝進該頁,因此打開了一個新頁來容納該數據單元。整個數據結構的結尾設定為空白單元,這個位置有望成為單元頭部。


值得注意的是,我還沒有說明重復記錄的問題。這是因為在這種方案中重復記錄不是問題。事實上,讀寫程序是完全忽略重復記錄的。


在寫數據時,新的記錄會寫在陣列的最后,而不管是否有相同號碼的記錄存在。在讀數據時,只有匹配請求記錄號的最后,也就是最近的記錄被讀出來。


從陣列中讀出一個數據單元要比寫入稍微復雜一些。讀函數首先接受應被寫入數據單元內容的單元號碼和地址。當被調用時,讀函數從頭開始搜索陣列。


當它找到與請求數據單元相匹配的記錄時,它將對應的地址先存起來,然后繼續搜索。如果它找到另外一條匹配的記錄,它就用新的地址代替剛才存儲的地址。


當到達陣列結尾時,最終存儲的地址將指向最近寫入拷貝的請求記錄。讀函數隨即在被調用時將這個數據拷貝到緩存。


復用存儲器空間


現在,我們已經有了一種以讀取為主的可行機制用于從存儲陣列中存取記錄。剩下只有一個問題:我們還沒有建立起復用被廢棄的記錄拷貝占用的空間。(我們也還沒有建立刪除記錄的機制,但由于是用在嵌入式應用中,這可能不是一個很重要的特性)


如果不恢復空間,分配的空間將很快用完。恢復空間意味著擦除整個頁,因為閃存只能一次擦除一整頁。但閃存頁被隨意擦除時將會出現刪除有用信息的風險。唯一的方法是在擦除舊頁時將有效信息拷貝到新的頁。


從廢棄記錄恢復空間要分三步走:首先,打開新的閃存頁,將每個數據單元的最新版拷貝到新的頁;然后,刪除舊頁;最后,在新頁上放置頁標記以便讀程序能找到它們。


第一步有些技巧,因此我們稍詳細地進行介紹。執行這一步的簡單方法是將它分成兩小步:第一步,使用RAM陣列存儲記錄號和陣列中最新記錄的地址;第二步,穿過RAM陣列將最新的記錄拷貝到新的閃存頁。這個過程很快,相對也比較順利。


這種方案的問題是所用處理器(見圖1)的RAM為1K字。這種方案將限制可存儲進RAM中的單一數據數量,因為這個RAM還要節省下來用作緩存。這是明顯不能接受的。


這種解決方案非常耗時,但不管存儲陣列多大(在合理范圍內)都能正常工作。該方案不會在RAM中創建一份指針列表,而是針對每個單一條目(entry)在源陣列中作多次穿越。因此壓縮算法變為:


1. 從源陣列中讀一個單元;

2. 在目標陣列中尋找該單元。如果找到了,表示這個單元已經被寫入。增加源指針值,回到第(1)步;

3. 掃描源陣列尋找單元的最新拷貝;

4. 將數據單元的最新拷貝寫入目標陣列;

5. 增加源指針,并回到第(1)步。


最終,在目標陣列中每個數據單元都有一個唯一的條目。圖4描述了一個已填滿的頁。源頁現在可以被安全地刪除,頁的頭部被寫入到目標陣列。


圖4:在空間恢復之后的圖2所示數據頁內容
圖4:在空間恢復之后的圖2所示數據頁內容


這個過程的構建使得存儲的數據非常安全。在使用閃存器件時必須面對的危險是寫入或擦除操作期間發生電源故障。


如果發生電源故障,則有可能一個或多個頁被破壞(在寫入時),或未被完全刪除(在刪除操作時)。但上述壓縮操作本身是安全的。因為:


1. 如果在寫入操作期間發生電源故障,源頁是完全不受影響的。在電源恢復后,新寫的頁很容易被識別(它們沒有頁頭),將其擦除后重新開始寫入操作。


2. 如果在舊頁被擦除期間發生電源故障,它們可能包含無效的頭部。這些頁可以被刪除,然后將頭部增加到新的頁中。


3. 如果在頁頭部被寫入新頁時發生電源故障,數據是不受影響的。頁頭部的更新操作可以重新開始。


總之,應該沒有什么情況能讓意外事件造成無可挽救地破壞陣列數據。


性能增強


目前的存儲子系統沒有差錯檢測機制。在數據單元識別符中目前有6個比特是保留未用的。


設計師可以使用CRC6算法(x6+x+1)計算整個數據單元的CRC以確保不會產生任何讀或寫錯誤。雖然這不是一個特別可靠的算法(它會從64個多位差錯中漏掉一個),但它能檢測實際中可能發生的大多數差錯。


上述系統的另外一個限制是讀取訪問時間必需很長。為了尋找最新的記錄,每一次讀取都必須讀遍陣列中的每個記錄。有三種方法可以用來改善訪問時間:


1. 在數據單元中留一個空的字用于前向指針。當數值更新時,在前向指針中填入指向新條目的內容。這樣這個表可以當作一個鏈接列表。


2. 向后穿越表格。現在你可以簡單停留在第一次出現的請求單元上。


3. 如果只有少量的單一單元,可以在上電時就創建一個包含單元ID和指針的RAM陣列。隨后的訪問將非常迅速—只要讀取RAM陣列就可以發現到哪里去獲得數據單元。



作者:Ben Smith

 工程經理

 Maxim公司



下一篇: OmniVision開發CMOS傳

上一篇: 硅谷部分半導體公司熱

主站蜘蛛池模板: 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 湖南长沙商标注册专利申请,长沙公司注册代理记账首选美创! | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 上海办公室设计_办公楼,写字楼装修_办公室装修公司-匠御设计 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 熔体泵_熔体出料泵_高温熔体泵-郑州海科熔体泵有限公司 | 深圳诚暄fpc首页-柔性线路板,fpc柔性线路板打样生产厂家 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 上海诺狮景观规划设计有限公司 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 展厅设计-展馆设计-专业企业展厅展馆设计公司-昆明华文创意 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 塑料托盘厂家直销-吹塑托盘生产厂家-力库塑业【官网】 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 |