<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MSP430功能模塊詳解系列之——FLASH存儲器

MSP430功能模塊詳解系列之——FLASH存儲器

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò ) 收藏
一、MSP430單片機FLASH存儲器模塊特點(diǎn)

1.8~3.6V工作電壓,2.7~3.6V編程電壓;
擦除/編程次數可達100000次:
數據保持時(shí)間從10年到100年不等:
60KB空間編程時(shí)間<5秒:
保密熔絲燒斷后不可恢復,不能再對JTAG進(jìn)行任何訪(fǎng)問(wèn);
FLASH編程/擦除時(shí)間由內部硬件控制,無(wú)任何軟件干預;

本文引用地址:http://dyxdggzs.com/article/201611/316544.htm

二、FLASH存儲器的操作

由于FLASH存儲器由很多相對獨立的段組成,因此可在一個(gè)段中運行程序,而對另一個(gè)段進(jìn)行擦除或寫(xiě)入操作。正在執行編程或擦除等操作的FLASH段是不能被訪(fǎng)問(wèn)的,因為這時(shí)該段是與片內地址總線(xiàn)暫時(shí)斷開(kāi)的。

對FLASH模塊的操作可分為3類(lèi):擦除、寫(xiě)入及讀出。而擦除又可分為單段擦除和整個(gè)模塊擦除;寫(xiě)入可分為字寫(xiě)入、字節寫(xiě)入、字連續寫(xiě)入和字節連續寫(xiě)入

1.FLASH擦除操作:對FLASH要寫(xiě)入數據,必須先擦除相應的段,對FLASH存儲器的擦除必須是整段地進(jìn)行,可以一段一段地擦除,也可以多端一起擦除,但不能一個(gè)字節或一個(gè)字地擦除。擦除之后各位為1。擦除操作的順序如下:


選擇適當的時(shí)鐘源和分頻因子,為時(shí)序發(fā)生器提供正確時(shí)鐘輸入
如果Lock=1,則將它復位
****BUSY標志位,只有當BUSY=0時(shí)才可以執行下一步,否則一直****BUSY
如果擦除一段,則設置ERASE=1
如果擦除多段,則設置MERAS=1
如果擦除整個(gè)FLASH,則設置RASE=1,同時(shí)MERAS=1
對擦除的地址范圍內的任意位置作一次空寫(xiě)入,用以啟動(dòng)擦除操作。
在擦除周期選擇的時(shí)鐘源始終有效
在擦除周期不修改分頻因子
在BUSY=1期間不再訪(fǎng)問(wèn)所操作的段
電源電壓應符合芯片的相應要求

對FLASH擦除要做4件事

對FLASH控制寄存器寫(xiě)入適當的控制位
****BUSY位
空寫(xiě)一次
等待


2.FLASH編程操作。對FLASH編程按如下順序進(jìn)行:


選擇適當的時(shí)鐘源和分頻因子
如果Lock=1,則將它復位
****BUSY標志位,只有當BUSY=0時(shí)才可以執行下一步,否則一直****BUSY
如果寫(xiě)入單字或單字節,則將設置WRT=1
如果是塊寫(xiě)或多字、多字節順序寫(xiě)入,則將設置WRT=1,BLKWRT=1
將數據寫(xiě)入選定地址時(shí)啟動(dòng)時(shí)序發(fā)生器,在時(shí)序發(fā)生器的控制下完成整個(gè)過(guò)程

塊寫(xiě)入可用于在FLASH段中的一個(gè)連續的存儲區域寫(xiě)入一系列數據。一個(gè)塊為64字節長(cháng)度。塊開(kāi)始在0XX00H、0XX40H、0XX80H、0XXC0H等地址,塊結束在0XX3FH、0XX7FH、0XXBFH、0XXFFH等地址。塊操作在64字節分界處需要特殊的軟件支持,操作如下:


等待WAIT位,直到WAIT=1,表明最后一個(gè)字或字節寫(xiě)操作結束
將控制位BLKWRT復位
保持BUSY位為1,直到編程電壓撤離FLASH模塊
在新塊被編程前,等待trcv(編程電壓恢復時(shí)間)時(shí)間


在寫(xiě)周期中,必須保證滿(mǎn)足以下條件:

被選擇的時(shí)鐘源在寫(xiě)過(guò)程中保持有效
分頻因子不變
在BUSY=1期間,不訪(fǎng)問(wèn)FLASH存儲器模塊

對FLASH寫(xiě)入要做4件事

對FLASH控制寄存器寫(xiě)入適當的控制位
****BUSY位
寫(xiě)一個(gè)數據
繼續寫(xiě)一直到寫(xiě)完


3.FLASH錯誤操作的處理:在寫(xiě)入FLASH控制寄存器控制參數時(shí),可引發(fā)以下錯誤:


如果寫(xiě)入高字節口令碼錯誤,則引發(fā)PUC信號。小心操作可避免
在對FLASH操作期間讀FLASH內容,會(huì )引發(fā)ACCVFIG狀態(tài)位的設置。小心操作可避免
在對FLASH操作期間看門(mén)狗定時(shí)器溢出。建議用戶(hù)程序在進(jìn)行FLASH操作之前先停止看門(mén)狗定時(shí)器,等操作結束后再打開(kāi)看門(mén)狗
所有的FLASH類(lèi)型的MSP430器件0段都包含有中斷向量等重要的程序代碼,如果對其進(jìn)行擦除操作,將會(huì )引起嚴重的后果
不要在FLASH操作期間允許中斷的發(fā)生


4.FLASH操作小結

對FLASH的操作是通過(guò)對3個(gè)控制字中的相應位來(lái)完成的,只有控制位的唯一組合才能實(shí)現相應的功能。下表給出了正確的控制位組合:

功能

BLKWRTWRTMerasEraseBUSYWAIT

Lock

字或字節寫(xiě)入0100000
塊寫(xiě)入1100010
段擦除并寫(xiě)入0001000
擦除A和B以外段0010000
全部擦除并寫(xiě)入001100

三、FLASH寄存器說(shuō)明

允許編程、擦除等操作首先要對3個(gè)控制寄存器(FCTL1、FCTL2、FCTL3)的各位進(jìn)行定義。它們使用安全鍵值(口令碼)來(lái)防止錯誤的編程和擦除周期,口令出錯將產(chǎn)生非屏蔽中斷請求。安全鍵值位于每個(gè)控制字的高字節,讀時(shí)為96H,寫(xiě)時(shí)為5AH。

1.FCTL1 控制寄存器1(用于控制所有寫(xiě)/編程或者刪除操作的有效位),各位定義如下:

15~87

6

5

4

3

2

1

0

安全鍵值,讀時(shí)為96H,寫(xiě)時(shí)為5AHBLKWRTWRT保留MERASERASE

BLKWRT——段編程位。如果有較多的連續數據要編程到某一段或某幾段,則可選擇這種方式,這樣可縮短編程時(shí)間。在一段程序完畢,再編程其它段,需對該位先復位再置位,在下一條寫(xiě)指令執行前WAIT位應為1。


0:未選用段編程方式
1:選用段編程方式


WRT——編程位


0:不編程,如對FLASH寫(xiě)操作,發(fā)生非法訪(fǎng)問(wèn),使ACCVIFG位置位;
1:編程


MERAS——主存控制擦除位


0:不擦除
1:主存全擦除,對主存空寫(xiě)時(shí)啟動(dòng)擦除操作,完成后MERAS自動(dòng)復位


ERASE——擦除一段控制位


0:不擦除
1:擦除一段。由空寫(xiě)指令帶入段號來(lái)指定擦除哪一段,操作完成后自動(dòng)復位


2.FCTL2 控制寄存器2(對進(jìn)入時(shí)序發(fā)生器的時(shí)鐘進(jìn)行定義),各位定義如下:

15~87

6

5

4

3

2

1

0

安全鍵值,讀時(shí)為96H,寫(xiě)時(shí)為5AHSSEL1SSEL0FN5FN4FN3FN2FN1FN0

SSEL1、SSEL0——選擇時(shí)鐘源


0:ACLK
1:MCLK
2:SMCLK
3:SMCLK


FN5~FN0——分頻系數選擇位


0:直通
1:2分頻
2:3分頻
......
63:64分頻


3.FCTL3 控制寄存器3(用于控制FLASH存儲器操作,保存相應的狀態(tài)標志和錯誤條件),各位定義如下:

15~87

6

5

4

3

2

1

0

安全鍵值,讀時(shí)為96H,寫(xiě)時(shí)為5AHEMEXLockWAITACCVIFGKEYVBUSY

EMEX——緊急退出位。對FLASH的操作失敗時(shí)使用該位作緊急處理


0:無(wú)作用
1:立即停止對FLASH的操作


Lock——鎖定位,給已經(jīng)編程好的FLASH存儲器加鎖


0:不加鎖,FLASH存儲器可讀、可寫(xiě)、可擦除
1:加鎖,加鎖的FLASH存儲器可讀、不可寫(xiě)、不可擦除


WAIT——等待指示信號,該位只讀。


0:段編程操作已經(jīng)開(kāi)始,編程操作進(jìn)行中
1:段編程操作有效,當前數據已經(jīng)正確地寫(xiě)入FLASH存儲器,后續編程數據被列入計劃


ACCVIFG——非法訪(fǎng)問(wèn)中斷標志。當對FLASH陣列進(jìn)行編程或擦除操作時(shí)不能訪(fǎng)問(wèn)FLASH,否則將使得該位置位


0:沒(méi)有對FLASH存儲器的非法訪(fǎng)問(wèn)
1:有對FLASH存儲器的非法訪(fǎng)問(wèn)


KEYV——安全鍵值(口令碼)出錯標志位


0:對3個(gè)控制寄存器的訪(fǎng)問(wèn),寫(xiě)入時(shí)高字節是0A5H
1:對3個(gè)控制寄存器的訪(fǎng)問(wèn),寫(xiě)入時(shí)高字節不是0A5H,同時(shí)引發(fā)PUC信號
KEYV不會(huì )自動(dòng)復位,須用軟件復位


BUSY——忙標志位。該位只讀。每次編程或擦除之前都應該檢查BUSY位。當編程或擦除啟動(dòng)后,時(shí)序發(fā)生器將自動(dòng)設置該位為1,操作完成后BUSY位自動(dòng)復位


0:FLASH存儲器不忙
1:FLASH存儲器忙



關(guān)鍵詞: MSP430FLASH存儲

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>