MSP430的Flash存儲器是可位、字節、字尋址和編程的存儲器。該模塊由一個集成控制器來控制編程和擦除的操作。控制器包括三個寄存器,一個時序發生器及一個提供編程、擦除電壓的電壓發生器。
Msp430的Flash存儲器的特點有:
1)產生內部編程電壓
2)可位、字節、字編程,可以單個操作,也可以連續多個操作
3)超低功耗操作
4)支持段擦除和多段模塊擦除
2 Flash存儲器的分割
Msp430 Flash存儲器分成多個段。可對其進行單個字節、字的寫入,也可以進行連續多個字、字節的寫入操作,但是最小的擦除單位是段。
Flash 存儲器被分割成兩部分:主存儲器和信息存儲器,兩者在操作上沒有什么區別。兩部分的區別在于段的大小和物理地址的不同。
以Msp430F149為例,信息存儲器有兩個128字節的段,即segmentA和segmentB,主存儲器有多個512字節的段。Msp430F149內部Flash的地址為0x1000H~0xFFFFH,計60K。信息段SegA的起始地址為0x1080H,信息段SegB的起始地址為0x1000H。
3 Flash存儲器的操作
在默認狀態下,處于讀操作模式。在讀操作模式中,Flash存儲器不能被擦除和寫入,時序發生器和電壓發生被關閉,存儲器操作指向ROM區。
Msp430 Flash存儲器在系統編程ISP(in-system programmable)不需要額外的外部電壓。CPU能夠對Flash直接編程。Flash存儲器的寫入/擦除通過BLKWRT、WRT、MERAS、ERASE等位確定。
3.1 擦除
Flash存儲器各位的缺省值為1,每一位都可以單獨編程為0,但只有擦除操作才能將其恢復為1。擦除操作的最小單位是段。通過erase和meras位設置可選擇3種擦除模式。
MERAS | ERASE | 擦除模式 |
0 | 1 | 段擦除 |
1 | 0 | 多段擦除(所有主存儲器的段) |
1 | 1 | 整體擦除(LOCKA=0時,擦除所有主存儲器和信息存儲器的段;主存儲器的段只有當LOCKA=0時可以擦除) |
擦除操作開始于對擦除的地址范圍內的任意位置執行一次空寫入。空寫入的目的是啟動時序發生器和擦除操作。在空寫入操作之后,BUSY位自動置位,并保持到擦除周期結束。BUSY、MERAS、ERASE在擦除周期結束后自動復位。
3.2 寫入
寫入模式由WRT和BLKWRT位進行設置。
BLKWRT(塊寫入模式選擇) | WRT(寫模式選擇位) | 寫入模式 |
0 | 1 | 單字節、單字寫入 |
1 | 1 | 塊寫入 |
所有的寫入模式使用一系列特有的寫入命令,采用塊寫入的速度大約是單個寫入的2倍,因為電壓發生器在塊寫入完成器件均能保持。對于這兩種寫入模式,任何能修改目的操作數的指令均能用于修改地址。一個Flash字不能再擦除器件進行兩次以上的寫入。
當啟動寫入操作時,BUSY置位,寫入結束時復位。
4 操作編程
4.1 Flash擦除
對Flash要寫入數據,必須先擦除相應的段,且對Flash存儲器的擦除必須是整段進行的,可以一段一段擦,也可以多段一起擦除。擦除操作的順序如下:
1)選擇適當的時鐘源和分頻因子;
2)清除LOCK位
3)判斷BUSY位,只有當BUSY=0時才可以執行下一步
4)使能段操作,設置ERASE、MERAS位等(如果是擦除一段,則ERASE=1,如果擦除多段,則MERAS=1,如果擦除整個Flash,則ERASE=1,MERAS=1)
5)對擦除的地址范圍內的任意位置作一次空寫入,以啟動擦除操作
6)在擦除周期內,時鐘源始終有效,不修改分頻因子
7)操作完成后,置位LOCK
根據上述操作順序,編寫程序代碼如下:
void FlashErase(unsigned int adr)
{
uchar *p0;
FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//選擇時鐘源,分頻
FCTL3 = FWKEY;//清除LOCK
while(FCTL3 & BUSY);//如果出于忙,則等待
FCTL1 = FWKEY + ERASE;//使能段操作
p0 = (unsigned char *)adr;//數值強制轉換成指針
*p0 = 0; //向段內任意地址寫0,即空寫入,啟動擦除操作
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while(FCTL3 & BUSY);
}
4.2 寫入
對Flash的寫入數據可以是單字、單字節,也可以是連續多個字或字節(即塊操作)。編程寫入操作的順序如下:
1)選擇適當的時鐘源和分頻因子;
2)清除LOCK位
3)判斷BUSY位,只有當BUSY=0時才可以執行下一步操作
4)使能寫入功能,設置WRT、BLKWRT(如果寫入單字或單字節則WRT=1,如果是塊寫入,或者是多字、多字節連續寫入則WRT=1,BLKWRT=1);
5)判斷BUSY位,只有當BUSY=0時才可以執行下一步操作
6)寫入數據
7)判忙,完了之后清除WRT,置位LOCK
根據上述操作順序,編寫程序代碼如下:
//write single byte
//Adr 為要編程的地址,沒有奇偶地址要求、DataB為要編程的字節數據
void FlashWB(unsigned char Adr,unsigned char DataB)
{
FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK 16*FN4 + 8*FN3
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
while(FCTL3 & BUSY);
*((unsigned int *)Adr)=DataB;//數值強制轉換成指針,指向地址數據Adr所表示的內存單元
//將數據字DataW賦值給內存單元
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while(FCTL3 & BUSY);
}
//write single word
//Adr 為要編程的地址,應該是偶地址、DataW為要編程的字數據
void FlashWW(unsigned int Adr,unsigned int DataW)
{
FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK 16*FN4 + 8*FN3
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
while(FCTL3 & BUSY);
*((unsigned int *)Adr)=DataW;//數值強制轉換成指針,指向地址數據Adr所表示的內存單元
//將數據字DataW賦值給內存單元
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while(FCTL3 & BUSY);
}
/*************************************************
//向FLASH信息區寫入指定數量的字節數據
//unsigned char *pc_byte 信息區數據指針
//unsigned char *Datain :讀出數據存放數據數組,8位長
//unsigned char count :讀操的數量,范圍0-127
**************************************************/
void FlashWrite(uchar *pc_byte,uchar *Datain,uint count)
{
FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK 16*FN4 + 8*FN3
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
while(FCTL3 & BUSY); //如果處于忙狀態,則等待
while(count--)
{
while(FCTL3 & BUSY);
*pc_byte++ = *Datain++;
}
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while(FCTL3 & BUSY);
}
注意:在對字寫入和字節寫入的時候,用于指向信息區數據指針類型的區別,字寫入時候為*((unsigned int *)Adr),字節寫入時候為*((unsigned char *)Adr)。
4.3 讀取
根據查看的書籍資料和網絡資料得出,內部Flash的讀取操作沒有順序的要求,一般Flash默認的操作方式即為讀模式。讀取Flash的程序代碼如下:
/*************************************************
//向FLASH信息區讀出指定數量的字節數據
//unsigned char *pc_byte 信息區數據指針
//unsigned char *Dataout :讀出數據存放數據數組,8位長
//unsigned char count :讀操的數量,范圍0-127
**************************************************/
void FlashRead(uchar *pc_byte,uchar *Dataout,uint count)
{
while(count--)
{
*Dataout = *pc_byte;
Dataout++;
pc_byte++;
}
}
在網上查找資料的時候,好像看到過有位網友的博客說,內部Flash的地址是自動加1的,按照他的理解,函數中pc_byte++語句就沒有用處了,可是事實不然,我在調試過程中,發現并不能自動加1,pc_byte++語句還是有必要的。調用上述函數,可以通過這樣的方式FlashRead((uchar *)0x1000,a,4);即從0x1080地址處開始,連續讀取4個字節的數據,送給數組a。
5 小結
對Msp430 片內Flash的操作是通過對3個控制字中的相應位來完成的,只有控制位的正確組合,才能實現相應的功能。
同時在編程中注意靈活使用數組和指針,以及指向數組的指針等,可以達到靈活編程的目的,不過本文中給出的幾個程序段,基本上能夠實現對Msp430 Flash的擦除、寫入等操作。
上一篇:MSP430的JTAG接口和BSW接口
下一篇:MSP430 FLASH讀寫
推薦閱讀
史海拾趣
在航空航天領域,AirBorn的產品廣泛應用于飛機、導彈系統、通信設備等關鍵領域。為了滿足航空航天領域對連接器的嚴苛要求,AirBorn不斷投入研發力量,推出了一系列具有高性能、高可靠性的連接器產品。這些產品不僅滿足了航空航天領域的需求,還為公司帶來了可觀的收益。
在電子行業的浪潮中,Codeco Corporation Of Vermont(以下簡稱Codeco)由幾位熱衷于科技創新的工程師創立。他們看到了電子產品日益普及的趨勢,決定投身這個充滿機遇的領域。初創時期,資金短缺、市場競爭激烈,Codeco面臨著巨大的挑戰。然而,憑借著對技術的執著追求和對市場的敏銳洞察,他們成功開發出了一款具有創新性的電子產品,迅速在市場上占得一席之地。
在競爭日益激烈的電子行業中,福聲科技始終堅持客戶需求導向,提供定制化服務。公司深入了解客戶的實際需求和應用場景,為客戶提供從產品設計、生產到售后服務的全方位解決方案。這種以客戶為中心的服務理念不僅增強了客戶的滿意度和忠誠度,還為公司贏得了更多的業務機會和市場份額。同時,福聲科技還不斷優化生產流程和服務流程,提高響應速度和交付能力,以滿足客戶日益增長的需求。
以上五個故事展示了福聲科技(FUET)在電子行業中逐漸發展起來的歷程,體現了公司在技術創新、質量管理、市場拓展和客戶服務等方面的努力和成就。
面對日益激烈的市場競爭,APX Technologies積極尋求與其他企業的合作。公司與一家知名的電子設備制造商達成戰略合作協議,共同開發一款具有創新功能的新型智能手機。這款手機的成功上市不僅提升了APX Technologies的品牌知名度,也為其帶來了可觀的利潤。
隨著科技的不斷進步,超音意識到技術創新對于公司發展的重要性。因此,公司加大了研發投入,積極引進高端人才,不斷推出具有創新性和競爭力的產品。其中,超音的一款高端音響產品憑借其卓越的音質和精美的外觀設計,在市場上獲得了廣泛的好評。此外,超音還積極與其他科技公司合作,共同研發新產品,不斷拓寬產品線。
- 創業初期:
- 描述Clulite公司的創始人或核心團隊如何識別電子行業中的某個市場機遇。
- 講述他們是如何籌集初始資金,設立公司,并開發出第一款產品或解決方案的。
- 可以提及公司在初創階段面臨的挑戰,如技術難題、市場競爭等。
- 技術創新:
- 講述Clulite如何通過研發創新,推出了一款顛覆性的產品或技術,從而獲得了市場認可。
- 詳細描述這一創新過程,包括研發團隊的努力、關鍵技術的突破等。
- 提及這一創新如何幫助公司在市場上取得了競爭優勢。
- 市場拓展:
- 描述Clulite如何逐步擴大市場份額,從地區市場走向全國乃至國際市場。
- 可以講述公司如何建立銷售網絡、與合作伙伴建立合作關系,以及參與行業展會等活動來推廣品牌和產品。
- 提及公司在市場拓展過程中遇到的挑戰和應對策略。
- 品質管理:
- 講述Clulite如何注重產品質量和客戶體驗,通過嚴格的質量控制流程來提升產品可靠性。
- 描述公司如何建立完善的售后服務體系,為客戶提供及時、專業的支持。
- 提及這些舉措如何幫助公司贏得了客戶的信任和口碑。
- 可持續發展:
- 講述Clulite如何關注環境保護和社會責任,推動公司的可持續發展。
- 描述公司如何采取環保措施,減少生產過程中的污染排放。
- 提及公司如何參與社會公益事業,回饋社會。
請注意,這些故事需要根據Clulite公司的實際情況進行調整和補充。如果你需要更具體的內容,建議查閱Clulite公司的官方網站、新聞報道或行業分析報告,以獲取更詳細的信息和數據。
1 現以測漂移產生為例說明示波器使用基本操作規范及步驟:... 5 2 抖動產生測試操作步驟:... 7 3 相位瞬變測試操作步驟: 7… 查看全部問答∨ |
|
(一)分析被控對象并提出控制要求 詳細分析被控對象的工藝過程及工作特點,了解被控對象機、電、液之間的配合,提出被控對象對 PLC控制系統的控制要求,確定控制方案,擬定設計任務書。 (二)確定輸入/輸出設備 ...… 查看全部問答∨ |
喜歡看電影和影評的同學,一定聽說過“蒙太奇”這個術語。蒙太奇(montage)來自法文,大致意思就是,把幾件并行發生的事情,剪輯成片段,穿插著表現出來。格里菲斯導演的《黨同伐異》中,導演就巧妙地把時空相距甚遠的不同活動剪輯在一起,開創了 ...… 查看全部問答∨ |
我安裝了Keil c51v8.02,但是英文的,很多地方看不大明白,需要一個漢化補丁將菜單漢化,在網上搜了很久都沒找到,希望大蝦們幫個忙,告訴我一個下載地址或是發到我的箱1060552279@qq.com,謝謝!… 查看全部問答∨ |
平臺:44b0 調試軟件:Codewarrior for ARM 1.2(因為燒寫了U-BOOT,所以初始地址我設置為了0x0c008000) 在線調試器:J-LINK 工程包含文件:Init.s,Main.c Init.s: I ...… 查看全部問答∨ |
進來想在6915上面寫一個用到GPRS的程序 急需6900系列sdk 不知道哪位大俠有,能給我用下么? mail:starmanwt@sina.com 先謝謝了… 查看全部問答∨ |
|
大家好,我遇到了一個從沒有想到的問題: union { ulong N; uchar B[4]; } K; 。。。。 K.N=37534852 //=0x02 3c bc 84 for (i=0;i… 查看全部問答∨ |
功能主要如下: 1.具有中文顯示 2.具有鬧鐘功能,完全用51定時器實現,沒有用到時鐘芯片,經長期的校準,一天只差2分鐘。 3.帶有斷電存儲功能,利用at24c04實現 4.帶有溫度顯示,18b20,呵呵 … 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- can轉Profinet網關轉換:S7-1200PLC與施耐德變頻器間的通信實現
- 變頻器開關電源的維修檢測方法及案例分析
- 電機常見的噪音、振動問題及解決方法
- 萬利達電動機保護器接ModbusRTU轉profibusDP網關與300PLC通訊
- 士林變頻器如何與ModbusRTU轉profibusDP網關通訊
- 什么是邊緣盒子?一文講透邊緣計算設備在不同行業的真實應用
- 步進電機控制指令詳解
- 依利浦實驗室人工智能平臺為Ceva NeuPro-Nano NPU優化 推動實現更智能的邊緣設備
- Bourns 全新推出兩款屏蔽功率電感器系列 專為 DDR5 電源管理電路開發
- Bourns 推出新型電流變壓器產品,采用坡莫合金 T 型磁芯結構,具備高匝數比特性