MSP430功能模塊詳解系列之——FLASH存儲器
1.8~3.6V工作電壓,2.7~3.6V編程電壓;
擦除/編程次數(shù)可達100000次:
數(shù)據(jù)保持時間從10年到100年不等:
60KB空間編程時間<5秒:
保密熔絲燒斷后不可恢復,不能再對JTAG進行任何訪問;
FLASH編程/擦除時間由內(nèi)部硬件控制,無任何軟件干預;
二、FLASH存儲器的操作
由于FLASH存儲器由很多相對獨立的段組成,因此可在一個段中運行程序,而對另一個段進行擦除或?qū)懭氩僮?。正在?zhí)行編程或擦除等操作的FLASH段是不能被訪問的,因為這時該段是與片內(nèi)地址總線暫時斷開的。
對FLASH模塊的操作可分為3類:擦除、寫入及讀出。而擦除又可分為單段擦除和整個模塊擦除;寫入可分為字寫入、字節(jié)寫入、字連續(xù)寫入和字節(jié)連續(xù)寫入
1.FLASH擦除操作:對FLASH要寫入數(shù)據(jù),必須先擦除相應的段,對FLASH存儲器的擦除必須是整段地進行,可以一段一段地擦除,也可以多端一起擦除,但不能一個字節(jié)或一個字地擦除。擦除之后各位為1。擦除操作的順序如下:
選擇適當?shù)臅r鐘源和分頻因子,為時序發(fā)生器提供正確時鐘輸入
如果Lock=1,則將它復位
****BUSY標志位,只有當BUSY=0時才可以執(zhí)行下一步,否則一直****BUSY
如果擦除一段,則設置ERASE=1
如果擦除多段,則設置MERAS=1
如果擦除整個FLASH,則設置RASE=1,同時MERAS=1
對擦除的地址范圍內(nèi)的任意位置作一次空寫入,用以啟動擦除操作。
在擦除周期選擇的時鐘源始終有效
在擦除周期不修改分頻因子
在BUSY=1期間不再訪問所操作的段
電源電壓應符合芯片的相應要求
對FLASH擦除要做4件事
對FLASH控制寄存器寫入適當?shù)目刂莆?br />****BUSY位
空寫一次
等待
2.FLASH編程操作。對FLASH編程按如下順序進行:
選擇適當?shù)臅r鐘源和分頻因子
如果Lock=1,則將它復位
****BUSY標志位,只有當BUSY=0時才可以執(zhí)行下一步,否則一直****BUSY
如果寫入單字或單字節(jié),則將設置WRT=1
如果是塊寫或多字、多字節(jié)順序?qū)懭?,則將設置WRT=1,BLKWRT=1
將數(shù)據(jù)寫入選定地址時啟動時序發(fā)生器,在時序發(fā)生器的控制下完成整個過程
塊寫入可用于在FLASH段中的一個連續(xù)的存儲區(qū)域?qū)懭胍幌盗袛?shù)據(jù)。一個塊為64字節(jié)長度。塊開始在0XX00H、0XX40H、0XX80H、0XXC0H等地址,塊結束在0XX3FH、0XX7FH、0XXBFH、0XXFFH等地址。塊操作在64字節(jié)分界處需要特殊的軟件支持,操作如下:
等待WAIT位,直到WAIT=1,表明最后一個字或字節(jié)寫操作結束
將控制位BLKWRT復位
保持BUSY位為1,直到編程電壓撤離FLASH模塊
在新塊被編程前,等待trcv(編程電壓恢復時間)時間
在寫周期中,必須保證滿足以下條件:
被選擇的時鐘源在寫過程中保持有效
分頻因子不變
在BUSY=1期間,不訪問FLASH存儲器模塊
對FLASH寫入要做4件事
對FLASH控制寄存器寫入適當?shù)目刂莆?br />****BUSY位
寫一個數(shù)據(jù)
繼續(xù)寫一直到寫完
3.FLASH錯誤操作的處理:在寫入FLASH控制寄存器控制參數(shù)時,可引發(fā)以下錯誤:
如果寫入高字節(jié)口令碼錯誤,則引發(fā)PUC信號。小心操作可避免
在對FLASH操作期間讀FLASH內(nèi)容,會引發(fā)ACCVFIG狀態(tài)位的設置。小心操作可避免
在對FLASH操作期間看門狗定時器溢出。建議用戶程序在進行FLASH操作之前先停止看門狗定時器,等操作結束后再打開看門狗
所有的FLASH類型的MSP430器件0段都包含有中斷向量等重要的程序代碼,如果對其進行擦除操作,將會引起嚴重的后果
不要在FLASH操作期間允許中斷的發(fā)生
4.FLASH操作小結
對FLASH的操作是通過對3個控制字中的相應位來完成的,只有控制位的唯一組合才能實現(xiàn)相應的功能。下表給出了正確的控制位組合:
功能 | BLKWRT | WRT | Meras | Erase | BUSY | WAIT | Lock |
字或字節(jié)寫入 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
塊寫入 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
段擦除并寫入 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
擦除A和B以外段 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
全部擦除并寫入 | 0 | 0 | 1 | 1 | 0 | 0 |
三、FLASH寄存器說明
允許編程、擦除等操作首先要對3個控制寄存器(FCTL1、FCTL2、FCTL3)的各位進行定義。它們使用安全鍵值(口令碼)來防止錯誤的編程和擦除周期,口令出錯將產(chǎn)生非屏蔽中斷請求。安全鍵值位于每個控制字的高字節(jié),讀時為96H,寫時為5AH。
1.FCTL1 控制寄存器1(用于控制所有寫/編程或者刪除操作的有效位),各位定義如下:
15~8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
安全鍵值,讀時為96H,寫時為5AH | BLKWRT | WRT | 保留 | MERAS | ERASE |
BLKWRT——段編程位。如果有較多的連續(xù)數(shù)據(jù)要編程到某一段或某幾段,則可選擇這種方式,這樣可縮短編程時間。在一段程序完畢,再編程其它段,需對該位先復位再置位,在下一條寫指令執(zhí)行前WAIT位應為1。
0:未選用段編程方式
1:選用段編程方式
WRT——編程位
0:不編程,如對FLASH寫操作,發(fā)生非法訪問,使ACCVIFG位置位;
1:編程
MERAS——主存控制擦除位
0:不擦除
1:主存全擦除,對主存空寫時啟動擦除操作,完成后MERAS自動復位
ERASE——擦除一段控制位
0:不擦除
1:擦除一段。由空寫指令帶入段號來指定擦除哪一段,操作完成后自動復位
2.FCTL2 控制寄存器2(對進入時序發(fā)生器的時鐘進行定義),各位定義如下:
15~8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
安全鍵值,讀時為96H,寫時為5AH | SSEL1 | SSEL0 | FN5 | FN4 | FN3 | FN2 | FN1 | FN0 |
SSEL1、SSEL0——選擇時鐘源
0:ACLK
1:MCLK
2:SMCLK
3:SMCLK
FN5~FN0——分頻系數(shù)選擇位
0:直通
1:2分頻
2:3分頻
......
63:64分頻
3.FCTL3 控制寄存器3(用于控制FLASH存儲器操作,保存相應的狀態(tài)標志和錯誤條件),各位定義如下:
15~8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
安全鍵值,讀時為96H,寫時為5AH | EMEX | Lock | WAIT | ACCVIFG | KEYV | BUSY |
EMEX——緊急退出位。對FLASH的操作失敗時使用該位作緊急處理
0:無作用
1:立即停止對FLASH的操作
Lock——鎖定位,給已經(jīng)編程好的FLASH存儲器加鎖
0:不加鎖,F(xiàn)LASH存儲器可讀、可寫、可擦除
1:加鎖,加鎖的FLASH存儲器可讀、不可寫、不可擦除
WAIT——等待指示信號,該位只讀。
0:段編程操作已經(jīng)開始,編程操作進行中
1:段編程操作有效,當前數(shù)據(jù)已經(jīng)正確地寫入FLASH存儲器,后續(xù)編程數(shù)據(jù)被列入計劃
ACCVIFG——非法訪問中斷標志。當對FLASH陣列進行編程或擦除操作時不能訪問FLASH,否則將使得該位置位
0:沒有對FLASH存儲器的非法訪問
1:有對FLASH存儲器的非法訪問
KEYV——安全鍵值(口令碼)出錯標志位
0:對3個控制寄存器的訪問,寫入時高字節(jié)是0A5H
1:對3個控制寄存器的訪問,寫入時高字節(jié)不是0A5H,同時引發(fā)PUC信號
KEYV不會自動復位,須用軟件復位
BUSY——忙標志位。該位只讀。每次編程或擦除之前都應該檢查BUSY位。當編程或擦除啟動后,時序發(fā)生器將自動設置該位為1,操作完成后BUSY位自動復位
0:FLASH存儲器不忙
1:FLASH存儲器忙
評論