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)。

主站蜘蛛池模板: 久久精品66| 丝袜高跟美脚国产1区| 亚洲成年人网| 中文字幕免费视频| 欧美无专区| 美美女高清毛片视频免费观看| 老司机精品一区在线视频| 国产精品部在线观看| 亚洲妓女综合网995久久 | 秋霞一区二区三区| 免费一极毛片| 成人免费网站在线观看| 999在线免费视频| 久久不卡精品| 97久久人人超碰国产精品| 老司机午夜精品视频你懂的| 玩两个丰满老熟女久久网| 极品尤物av美乳在线观看| 激情六月丁香婷婷四房播| 亚瑟天堂久久一区二区影院| 国产成人综合亚洲网址| 四虎成人在线视频| 香蕉伊思人视频| 日韩色图区| 日本午夜网站| 无码粉嫩虎白一线天在线观看| 午夜免费小视频| 精品视频一区在线观看| 国产精品综合久久久| 强奷白丝美女在线观看| 欧美一级爱操视频| 全午夜免费一级毛片| 国产乱论视频| 女人天堂av免费| 久久久久九九精品影院| 伊人久久婷婷| 亚洲精品黄| 亚洲人成影院午夜网站| 日韩国产亚洲一区二区在线观看| 嫩草在线视频| 亚洲成年人片| 亚洲国产精品日韩av专区| a天堂视频| 久久精品国产亚洲AV忘忧草18| 色婷婷成人网| 萌白酱国产一区二区| 亚洲伊人电影| 毛片基地美国正在播放亚洲 | 国产中文一区a级毛片视频| 思思热在线视频精品| 国产欧美日本在线观看| 日韩精品一区二区深田咏美| 欧美日韩中文国产va另类| 亚洲色图欧美视频| 色天天综合| 久久99热这里只有精品免费看| 午夜福利视频一区| 欧美成在线视频| 国模私拍一区二区| 精品国产自在在线在线观看| 国产亚洲精品自在线| 天堂成人av| 亚洲国产成人综合精品2020 | 五月婷婷综合网| 国产成熟女人性满足视频| 91亚洲视频下载| 国产精品9| 综合久久五月天| 99精品欧美一区| 伊人久久精品无码麻豆精品| 精品无码专区亚洲| 四虎永久在线精品影院| 国产一级视频久久| 四虎亚洲国产成人久久精品| 亚洲欧洲日产国产无码AV| 欧洲熟妇精品视频| 日韩精品免费一线在线观看| 日本人真淫视频一区二区三区| 喷潮白浆直流在线播放| 色屁屁一区二区三区视频国产| 亚洲高清中文字幕| 婷婷五月在线视频|