999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

R5F104BC單片機Flash中數據存儲方法研

2016-05-27 08:46:16
單片機與嵌入式系統應用 2016年5期

付 河

(廣州廣日電氣設備有限公司,廣州511447)

?

付河

(廣州廣日電氣設備有限公司,廣州511447)

摘要:為了減少微處理器內部集成的用于模擬非易失性RAM數據區域的Flash擦除次數,提升存儲數據訪問效率和延長器件使用壽命,以R5F104BC單片機為例,提出了三種存儲方法,給出具體的實現算法和軟件實現過程,在訪問速度與實現代碼大小之間實現平衡。在實際應用中,編程人員可以根據具體情況,很方便和快捷地將本方法移植到其他的內部集成了Flash的微處理器上。

關鍵詞:閃存;非易失性存儲器;鏈表;R5F104BC

引言

目前,非易失性存儲器(Non-Volatile Random Access Memory)主要類型有鐵電存儲器(Ferromagnetic Random Access Memory,FRAM)、電可擦可編程只讀存儲器(Electrically Erasable Programmable Read-Only Memory,EEPROM)和閃存 (Flash Memory)等。上述3種存儲器性能比較見表1。

表1 非易失性存儲器比較表

從表 1中可以看出,雖然閃存(Flash)在讀寫速度和擦除次數等方面處于劣勢,但是成本較低。目前MCU的程序存儲器多數是使用Flash存儲器,所以很多MCU就在程序存儲器中劃出一塊空間作為非易失性存儲器,集成電路廠商在增加很小成本(甚至于不增加成本)的情況下,給用戶提供了片上非易失性存儲器,不但簡化了外圍電路,而且降低了成本,提升了MCU的市場競爭能力。本文針對Flash的特點,提出一種基于瑞薩R5F104BC的數據存儲實現方法,其他單片機的應用與此相似。

1硬件結構

R5F104BC是瑞薩公司出品的一款RL78/G14系列的16位單片機,3級流水線CISC體系結構,內置32 KB程序閃存空間和4 KB數據閃存空間,內部的高速時鐘最快可以達到64 MHz。R5F104BC存儲空間的分配如圖1所示。

圖1 R5F104BC存儲空間分配

4 KB的數據閃存由4個1 KB塊構成。R5F104BC的數據閃存可以利用順序控制器實現在BGO(Background Operation)后臺寫入、擦除、校驗數據和檢查Flash是否為空等操作,以提高單片機的工作效率。如圖2所示,發送命令完成后,交由順序控制器完成后續的工作,直到返回完成標志為止[1]。

圖2 BGO(后臺操作)示意圖

R5F104BC還支持數據傳送功能,通過一定的觸發源(比如中斷、定時器等)啟動[1],將閃存中的數據在指定條件下傳送到指定存儲位置(比如某個起始地址RAM空間),這樣可以進一步提升單片機的工作效率和實時性。在R5F104BC內部存儲空間中Flash中data區域位于0xF10 00H開始的4 KB區域。

2存儲算法

與FRAM和EEPROM相比,Flash存儲器不能執行讀—修改—寫操作過程。在寫入數據之前,先進行空檢查,以確保用于存儲數據空間為空;否則必須先執行擦除操作,將對應空間的內容擦除。但是Flash類型存儲器的特點決定了它不能對單個字節/字擦除,必須以BLOCK為單位擦除。對于不同的芯片,一個BLOCK的大小是不同的,R5F104BC的一個BLOCK大小是1024字節,也就是說每次擦除最小空間是1024字節。

對Flash有3種不同存儲操作方式,通過對這3種方式執行效率和效果進行比較,確定不同工作條件下的最佳操作方式。

由于R5F104BC是以1024字節為一個BLOCK,以此為基礎進行計算,對于多個BLOCK或者BLOCK大小不同的情況依此類推。

(1) 方法A

固定地址存儲特定的數據,由于每一個地址空間內容是指定的,當任何一個數據發生變化時,當前BLOCK內的數據全部讀出,然后將新數據與沒有發生變化的數據全部重新寫入Flash。如表2所列,假設當前一個BLOCK只存儲4個字節內容:標識1~4,當標識1~4中的任何一個發生變化時,擦除全部標識1~4,將新的標識1~4重新寫入到0x0001~0x0004地址空間。

表2 方法A地址分配表

(2) 方法B

為了簡化計算,做如下假設:一個BLOCK空間大小為x=1024字節,一次存儲的數據為y字節,且x>y(對于x

(1)

當讀取數據時,每次讀出y字節,直到讀取的數據包全是0xFF時,上一次讀出的y字節的數據包就是最新數據。方法B地址分配表如表3所列。如果表4中數據包3全是0xFF,則數據包2是最新的數據。

表3 方法B地址分配表

(3) 方法C

當一個數據發生變化時,只更新變化的數據,其他數據保存在原來的位置不變。假定第i個參數都占用yi字節,為了區分不同參數的意義,必須給每個參數分配一個參數序號和數據長度,以方便參數的檢索。方法C地址分配表見表4。用2字節的標識參數序號和2個字節標識參數,一個完整的參數數據包由2字節參數序號+2字節參數長度 + yi字節參數組成。這樣一個BLOCK空間可以更新參數的最小次數times(每次寫入一個參數數據包)如下[3]:

(2)

其中,X代表每個BLOCK的字節數,ymax是占用空間最大的參數。

表4 方法C地址分配表

Flash中的數據存儲方式與RAM中鏈表的存儲方式相似,不同的是鏈表中的數據可以對任意一個字節進行修改,但是Flash中數據不能單獨修改1個字節,不過可以將新的參數增加到空閑區域。確定某個參數是有效數據的方法為搜索整個BLOCK,最后一個對應序號的參數就是最新的參數,在此地址之前的該序號參數都是舊參數,不予采用。比如表3中的參數2序號對應的參數有2個,第一個是舊的參數,第二個是新的參數2,第二個序號2的參數有效。

綜上所述,對A、B和C三種存儲方法進行比較,見表5。

表5 三種方法比較表

3軟件實現

為了更好理解上述3種方法,本文給出它們的程序實現。在此之前先介紹一下R5F104BC的Flash Data區域的操作流程[2]。在讀寫Flash Data之前,先打開使能(DFLEN = 1),讀寫完成后關閉使能(DFLEN = 0)。Flash Data訪問過程見圖3。對Flash Data的每一步操作都需要進行狀態檢查,避免由于Flash操作引起的數據讀/寫錯誤。

圖3 Flash Data操作流程

瑞薩公司提供了R5F104BC的Flash Data訪問函數庫,可以通過在編譯環境中添加相關的庫函數pdfl.lib,從而調用PFDL_Open()、PFDL_Close()、PFDL_Execute()、PFDL_Handler()和PFDL_GetVersionString()[2]。

PFDL_Open():初始化和啟動Flash Data訪問,設置工作電壓和頻率。

PFDL_Close():關閉Flash Data訪問,在每次操作結束之前執行關閉操作,以保證Flash Data中的數據不會發生意外變化。

PFDL_Execute():包含空檢查、讀數據、擦除、寫數據和校驗。

PFDL_Handler():讀取狀態。

PFDL_GetVersionString():讀取Data Flash Library版本信息。

3.績效考核體系具有客觀公正性,因此可以很好的區分職工工作狀態是高效還是低效,根據不同職工工作水平決定他們不同的工資和福利待遇,合理的分配獎金和晉升機會,這樣才能可以對員工起到激勵作用。

參數說明如下:

BLOCK_No為BLOCK編號(0~3);*Start_Addr為指向BLOCK中寫入數據起始地址;

WrBuf為寫數據緩沖區;Len為寫入數據長度(假定小于BLOCK大小,Len 0xFF);

RdBuf為讀數據緩沖區。

對于方法A的程序實現,任何數據變化時擦除所在的BLOCK。

Bool FunctionA(){

if(!FDL_Init()){//初始化Flash Data

return PFDL_NG;//Flash 初始化錯誤

}

//擦除Flash Data中對應的Block

returnPFDL_NG;//Flash 擦除錯誤

}

if(!FDL_Write(Start_Addr,Block_No,WrBuf,Len)){

//數據相應的BLOCK,包含檢驗和數據檢查

returnPFDL_NG;//Flash 寫入錯誤

}

if(!FDL_Close()){//關閉Flash

returnPFDL_NG;//關閉Flash錯誤

}

returnPFDL_OK;//Flash 操作正常

}

在方法B中任何數據發生變化時,在寫入數據之前,先判斷當前BLOCK剩余空間是否比數據包字節數多,如果大于所需空間,則在后續空間繼續寫入數據,否則擦除BLOCK數據,從起始地址寫入數據。在主程序初始化時用合適的查表法(比如折半查找等)找到下一個參數數據存儲的起始地址。本文不再贅述,假定已經找到該起始地址,R5F104BC每個BLOCK最大的字節數MAX_LENGTH=1024字節,數據包大小為y字節。方法B的程序實現如下:

Bool FunctionB(){

if(!FDL_Init()){//初始化和使能Flash Data

return PFDL_NG;//Flash 初始化錯誤

}

if(0x0000 == *Start_Addr){

//剩余空間不足存儲下一個數據包

if(!FDL_Erase(Block_No)){

//擦除Flash Data中對應的Block

returnPFDL_NG;//Flash 擦除錯誤

}

}

if(!FDL_Write(Start_Addr,Block_No,WrBuf,Len)){

//數據相應的BLOCK,包含檢驗和數據檢查

returnPFDL_NG;//Flash 寫入錯誤

}

*Start_Addr += Len;//指向下一個數據包起始地址

if(*Start_Addr +Len > MAX_LENGTH){

//剩余空間不足存儲下一個數據包

*Start_Addr= 0x0000

//指向BLOCK起始地址

}

if(!FDL_Close()){//關閉Flash

returnPFDL_NG;//關閉Flash錯誤

}

returnPFDL_OK;//Flash操作正常

}

方法C與方法B相同的部分是任何數據發生變化時,在寫入數據之前,先判斷當前BLOCK剩余空間是否能夠容納即將寫入的數據,如果大于所需空間,在后續空間繼續寫入數據,否則擦除BLOCK數據,從起始地址寫入有參數的最新數據。不同之處在于,方法B在BLOCK沒有寫滿之前,重新寫入所有的參數;而方法C只寫入變化的參數,同時為每個參數增加編號和長度,以方便操作。與方法B類似,在主程序初始化時讀取Flash中的數據,建立每個參數鏈表,同時在參數鏈表前面的2個字節存儲BLOCK中未被使用的空間的起始地址,指針Start_Addr指向鏈表基地址。假定已經找到該起始地址,R5F104BC每個BLOCK最大的字節數MAX_LENGTH=1024字節,第i個參數大小為yi字節。 方法C的程序實現略——編者注。

結語

由于可以帶來降低物料成本和節約PCB空間的好處,在內部集成模擬非易失性存儲器的單片機越來越多,以上3種操作方法各有優劣,在使用時要針對具體應用的特點(比如參數變化的頻率等)選擇適宜的實現方式,另外,文中的執行代碼可以方便地移植到其他的硬件平臺。

編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。

參考文獻

[1] Renesas Electronics.RL78/G14用戶手冊(硬件篇)[EB/OL].[2015-12].http://www.renesas.com.

[2] Renesas Electronics.Data Flash Library Type04 使用手冊[EB/OL].[2015-12].http://www.renesas.com.

[3] Ellis Horowitz, Sartaj Sahni, Susan Anderson-Freed.數據結構(C語言版)[M].李建中,張巖,李治軍,譯.北京:機械工業出版社,2006.

[4] 譚浩強.C程序設計[M].北京:清華大學出版社,2010.

付河(高級工程師),主要研究方向為自動控制和光機電一體化領域。

Fu He

(Electricity Facilities Guangri Guangzhou Co.,Ltd.,Guangzhou 511447,China)

Abstract:In order to reduce the non-volatile RAM data area erase cycles of internal Flash to improve the access efficiency of storage data and extend the life of the device,three methods of storage data using R5F104BC are proposed.The specific algorithm and the software implementation process are given,which achieves the balance between the running speed and the code size.In practical applications,the programmers can easily and quickly port the design to other microprocessor according to their own specific situation.

Key words:Flash memory;non-volatile random access memory;chain table;R5F104BC

收稿日期:(責任編輯:楊迪娜2015-12-03)

中圖分類號:TP331

文獻標識碼:A

* 基金項目:國家高新技術研究發展計劃(863計劃)(2013AA03A106)。

主站蜘蛛池模板: 九九久久99精品| 日本a∨在线观看| 青青草综合网| 午夜福利无码一区二区| 一级全黄毛片| 国产一区三区二区中文在线| 亚洲美女一区二区三区| 国产精品色婷婷在线观看| 又黄又湿又爽的视频| 第一页亚洲| 无码AV日韩一二三区| 日本不卡视频在线| a级毛片一区二区免费视频| 国产凹凸视频在线观看| 熟妇丰满人妻| 国产女人在线视频| 成人小视频在线观看免费| 91视频日本| 欧美日本中文| 亚洲伦理一区二区| 色综合久久久久8天国| 国产网站一区二区三区| 欧美成人综合在线| 干中文字幕| 青青青伊人色综合久久| 中文成人无码国产亚洲| 国产导航在线| 丰满少妇αⅴ无码区| 国产国模一区二区三区四区| 看国产一级毛片| 欧美亚洲激情| 精品国产欧美精品v| 欧美激情,国产精品| 色成人综合| 人妻无码AⅤ中文字| 在线观看免费黄色网址| 日韩在线影院| 欧洲亚洲欧美国产日本高清| 欧美日一级片| 99久久这里只精品麻豆| 国产91特黄特色A级毛片| 久久精品aⅴ无码中文字幕| 强奷白丝美女在线观看| 国产亚洲精品自在线| 国产精品久久久精品三级| 成人无码一区二区三区视频在线观看 | 伊人色综合久久天天| 精品国产aⅴ一区二区三区| 国产免费黄| 福利小视频在线播放| www亚洲天堂| 日韩A∨精品日韩精品无码| 色综合久久88色综合天天提莫| 朝桐光一区二区| 九九线精品视频在线观看| 国产精品亚欧美一区二区三区| 免费又黄又爽又猛大片午夜| 少妇被粗大的猛烈进出免费视频| 国产高清不卡| 亚洲国产av无码综合原创国产| 99精品视频播放| 99热最新在线| 国产欧美日韩18| 国产香蕉一区二区在线网站| 欧美日本二区| 免费毛片在线| 国产人碰人摸人爱免费视频| 无码久看视频| 亚洲欧美日韩天堂| 亚洲国模精品一区| 免费在线色| 日本欧美一二三区色视频| 国产91九色在线播放| 国产综合无码一区二区色蜜蜜| 精品国产乱码久久久久久一区二区| 四虎影视无码永久免费观看| 深夜福利视频一区二区| 中文字幕在线一区二区在线| 精品视频在线观看你懂的一区| 精品福利一区二区免费视频| 亚洲精品国产首次亮相| 欧美不卡二区|