色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>存儲設(shè)備>閃存卡>

雙組Flash實施方案 - 帶有雙組閃存的MCU優(yōu)點

2011年05月05日 10:48 本站整理 作者:Spring 用戶評論(0
 雙組Flash實施方案

  雙組Flash意味著同一器件中有兩個不同的Flash塊。本文從這里開始以飛思卡爾MC9S08MM128 MCU為例進行闡述。該器件擁有128kB的Flash存儲器,分成兩個64kB的陣列。上一章解釋過在寫入或擦除Flash的這段時間,整個Flash塊都不能讀取。提到有兩種替代方法來執(zhí)行Flash操作:CPU拖延或從RAM運行。同一邏輯適用于一個雙組Flash,但是由于現(xiàn)在有兩個不同的組,因此代碼可以在Flash A中運行以寫入或擦除Flash B,反之亦然。

?? ? ? ?當(dāng)使用非易失性存儲器來存儲變量時,雙組Flash可以設(shè)計為將所有非易失性變量都存儲在一個Flash組中,即:一個塊用作偽EEPROM,代碼在另一個組中。 例如,所有數(shù)據(jù)都將存儲在Flash B中,寫入和擦除存儲器的代碼將在Flash A中,以便更加高效地使用RAM和堆棧。在雙組Flash MCU中也不需要CPU 拖延。系統(tǒng)可以保持運行,因為只有一半的存儲器需要高電壓,另一半可以繼續(xù)正常的代碼執(zhí)行。當(dāng)構(gòu)建應(yīng)用來避免阻塞代碼時,這尤為重要(代碼的各部分,要么停止CPU,或在環(huán)路等待事件發(fā)生以繼續(xù)代碼執(zhí)行,在這種情況下等待Flash命令完成)。

  將數(shù)據(jù)保存在Flash B中的另一個好處是不需要禁用中斷功能,因為中斷矢量表是Flash A的一部分。這意味著所有串行通信、模數(shù)轉(zhuǎn)換、定時器等都可以保持運行,啟用中斷功能,代碼可以在命令執(zhí)行的過程中進行跳轉(zhuǎn),提取中斷矢量,執(zhí)行中斷服務(wù)例程,并返回,以驗證Flash操作是否完成,以及是否需要啟動新操作。

  另外一個特點是向執(zhí)行整個設(shè)計遠程升級的應(yīng)用添加故障容忍功能。可以將新項目版本保存在一個Flash組中,在另一個組中作為備份進行保存。一旦上傳了新版本并通過了驗證,那么以前的版本便可以擦除。在系統(tǒng)設(shè)計級,可以總是使用Flash A在Flash B中寫入新版本,反之亦然。這樣,即使在更新過程中發(fā)生了故障,也不會丟失工作版本。

  EEPROM仿真

  使用Flash存儲非易失性信息的一個限制是字節(jié)必須處于已擦除狀態(tài)(所有位都設(shè)為邏輯“1”)才能夠?qū)懭?。這意味著擦除操作將所有位都從扇區(qū)轉(zhuǎn)換為“1”,而寫入操作將某些或全部位都改為“0”。這樣產(chǎn)生的問題是,如果一個變量發(fā)生了改變,需要進行非易失性備份,那么首先需要擦除字節(jié),但是由于Flash不能逐個字節(jié)擦除,因此需要擦除整個扇區(qū)。

  執(zhí)行EEPROM仿真的例程旨在使用Flash而不是單字節(jié)寫入和擦除功能來提供EEPROM功能。一般做法是使用需要存儲在Flash中的所有變量創(chuàng)建一個結(jié)構(gòu);該結(jié)構(gòu)添加一個字段,指示該扇區(qū)是否活動(這應(yīng)該是寫入的最后一個字節(jié),以驗證所有數(shù)據(jù)是否已經(jīng)正確寫入)。當(dāng)需要在Flash中更新某些信息時,復(fù)制整個結(jié)構(gòu)。每當(dāng)字節(jié)改變時都進行非易失性更新,或根據(jù)定時器持續(xù)進行備份作為應(yīng)用執(zhí)行的一部分。

  根據(jù)應(yīng)用類型,可能進行某些改變,以減少執(zhí)行EEPROM仿真或增加系統(tǒng)強勁性所需的Flash容量。例如,如果使用一個Flash扇區(qū),非易失性結(jié)構(gòu)將寫入同一扇區(qū),只要適合扇區(qū)大小,能寫入多少次就寫多少次(因此,建議結(jié)構(gòu)大小適合扇區(qū)內(nèi)的準(zhǔn)確次數(shù),通常是兩種大小的功率)。在Flash扇區(qū)填滿后,代碼需要擦除扇區(qū)并重新開始。這種方法的好處是只使用一個Flash扇區(qū),限制是如果在扇區(qū)擦除步驟發(fā)生斷電,那么所有信息都會丟失。 另外,F(xiàn)lash耐用性也將加倍。

  另一種方法是使用兩個扇區(qū)進行EEPROM仿真。只有在把信息寫入新扇區(qū)后才擦除一個扇區(qū),因此在Flash中總是有信息的有效副本,從而更加強韌,能夠確保即使在擦除或?qū)懭脒^程中發(fā)生掉電,信息也不會丟失,還增加了存儲非易失性信息所需的Flash容量。 根據(jù)應(yīng)用要求來確定應(yīng)該使用哪種方法。

  案例研究: 如何在飛思卡爾S08系列中寫入/擦除Flash

  在S08系列中執(zhí)行寫入或擦除操作的步驟與此類似。如果要獨立進行寫入、突發(fā)寫入、擦除或整體擦除,第一步是用一些數(shù)據(jù)寫入Flash位置(區(qū)別在于如果命令是擦除或整體擦除,那么所寫入的數(shù)據(jù)是沒有影響的)。之后,寄存器FCMD(Flash命令)需要寫入要執(zhí)行的操作,然后在Flash狀態(tài)寄存器中寫入一個位來下發(fā)命令,代碼需要檢查下發(fā)的Flash命令是否會產(chǎn)生錯誤。在單組Flash部署中,代碼需要等待設(shè)置Flash命令完成標(biāo)志,以便它可以返回正常的代碼執(zhí)行,對于雙組Flash,在檢查了下發(fā)Flash命令沒有導(dǎo)致錯誤產(chǎn)生后將立即返回執(zhí)行其它代碼部分。建議在下發(fā)新命令前,代碼總是檢查以前的命令是否已經(jīng)完成,以避免潛在的問題。

  下面的文本框是關(guān)于如何為MCU部署Flash命令的代碼示例。

  #define Flash_Busy() FSTAT_FCCF

  #define EraseSectorFlashB(Addr) FlashB_Command(Addr, 0xff, FLASH_ERASE_CMD)

  #define WriteByteFlashB(Addr, Data) FlashB_Command(Addr, Data, FLASH_PROGRAM_CMD)

  void main(void)

  {

  unsigned char FlashErasedAddress = 0x4000;

  unsigned char FlashWrittenAddress = 0x4000;

  unsigned char FlashWrittenData = 'A';

  if (!Flash_Busy())

  {

  EraseSectorFlashB(FlashErasedAddress);

  }

  if (!Flash_Busy())

  {

  WriteByteFlashB(FlashWrittenAddress, FlashWrittenData);

  }

  對于雙組Flash:

  本節(jié)顯示了Flash B部分主要文件調(diào)用擦除和單字節(jié)寫入例程的典型實施方案。宏定義允許為兩種目的使用相同的例程,因為這兩種操作非常相似。下面是一種推薦的寫入/擦除Flash例程的部署方法。

  #pragma CODE_SEG FLASH_A

  unsigned char FlashB_Command(unsigned int FlashAddress, unsigned char FlashData, unsigned char Command)

  {

  /* Write Data into Flash*/

  (*(volatile unsigned char *)(FlashAddress)) = FlashData;

  /* Write Command */

  FCMD = Command;

  /* Launch command by setting FSTAT.FCBEF to 1 */

  FSTAT = 0x80;

  /* Wait at least 4 cycles to read the Error Flags */

  _asm NOP;

  _asm NOP;

  _asm NOP;

  _asm NOP;

  /* Check if Flash Access Error or Protection Violation Error are Set */

  if (FSTAT & (FSTAT_FACCERR_MASK|FSTAT_FPVIOL_MASK))

  {

  /* If so, finish the function returning FLASH_ERROR to indicate error */

  FlashClearErrorFlags();

  return (FLASH_ERROR);

  }

  /* Return FLASH_OK to indicate that the function executed Ok */

  return (FLASH_OK);

  }

  #pragma CODE_SEG DEFAULT

  所有寄存器和位名稱對應(yīng)于飛思卡爾S08系列MCU中現(xiàn)有的名稱。

  結(jié)論

  飛思卡爾雙組Flash是一個簡單的想法,通過增強性能、避免CPU拖延情況、在代碼執(zhí)行過程中保持中斷服務(wù)例程、不需要把例程復(fù)制到RAM,簡化了應(yīng)用設(shè)計。有了這些功能,可以更容易地設(shè)計和部署在代碼執(zhí)行過程中需要寫入或擦除Flash存儲器的最終應(yīng)用。

  引導(dǎo)程序或EEPROM仿真等應(yīng)用通過考慮正確的存儲器分配并消除一些限制(如在Flash例程執(zhí)行過程中停止通信外設(shè)),利用該功能,從而提高效率。

非常好我支持^.^

(4) 100%

不好我反對

(0) 0%

( 發(fā)表人:Spring )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: se01短视频在线观看| 夫妻主vk| 国内精品视频一区二区在线观看| 色哒哒影院| 高清AV熟女一区| 亚洲 综合 欧美在线 热| 国产自产视频在线观看香蕉| 亚洲人成7777| 男女边吃奶边做边爱视频| www.免费视频| 视频成人永久免费视频| 国产亚洲欧美日韩综合综合二区| 亚洲深夜在线| 女人被弄到高潮叫床免| 给个男人都懂的网址2019| 性生片30分钟| 久久久中日AB精品综合| qvod伦理片| 性欧美sexovideotv| 久久精品亚洲牛牛影视| 9LPORM原创自拍达人| 玩弄放荡人妻一区二区三区| 激情内射亚洲一区二区三区爱妻| 3D漫画H精品啪啪无码| 日韩av国产av欧美天堂社区| 国产午夜精AV在线麻豆| 2021国产精品视频一区| 日日夜夜影院在线播放| 国内精品久久久久久西瓜色吧| 7723手机游戏破解版下载 | 影视先锋男人无码在线| 欧美乱码伦视频免费66网| 国产精品久久久久久久久久免费| 伊人久久电影院| 日韩 国产 欧美视频二区| 禁漫H天堂免费A漫| 仓井空torrent| 一个人在线观看免费高清视频在线观看| 男人插曲女人下生免费大全| 国产精品一区二区AV交换| 中文在线无码高潮潮喷在线|