大概印象:430的flash好像有點(diǎn)像arm的flash,只不過是arm的flash要比430的大很多,而且430的flash不同于E2PROOM,這一點(diǎn)需要值得注意
MSP430flash的基本特點(diǎn):
1,擁有內(nèi)置的編程電壓發(fā)生器
2:可以進(jìn)行位,字節(jié),還有字的尋址
3:可以進(jìn)行段擦除,和整體的擦除
注意:對(duì)flash進(jìn)行操作的時(shí)候,flash的操作編程電壓必須要大于2.7V,如果小于2.7v的話,將會(huì)出現(xiàn)不可預(yù)知的錯(cuò)誤
還是先來看看430的整體的基本框圖:這張框圖集合了430flash的所有的操作
標(biāo)號(hào)1,定時(shí)器發(fā)生器:注意這里的定時(shí)器的編程頻率必須處于257KHz到476KHz之間,
標(biāo)號(hào)2:編程電壓發(fā)生器,這里必須產(chǎn)生一個(gè)大于2.7v的電壓
標(biāo)號(hào)3:三個(gè)可以操作的寄存器
標(biāo)號(hào)4:這里就是flash區(qū)域,430的flash大小為4KB+256byte
其中4KB是主記憶區(qū),256byte是信息記憶區(qū)
這里需要注意的是flash的擦除是以段為最小單位進(jìn)行擦除,在主存儲(chǔ)區(qū)4KB中,flash是以512個(gè)字節(jié)為一段,在信息存儲(chǔ)區(qū),256byte是以128個(gè)字節(jié)為一個(gè)段
430flash支持比特,字節(jié)還有塊數(shù)據(jù)的寫入,同時(shí)也支持三種擦除方式:1擦除一個(gè)段,2,擦除所有的主存儲(chǔ)區(qū),3擦除所有flash區(qū)域
擦除
方式1:代碼是從flash中取出
注意擦除flash的流程圖,這里也是看懂這一個(gè)流程圖就可以了
標(biāo)號(hào)1:步驟一,要關(guān)閉所有的中斷和看門狗,MSP430的低功耗模式設(shè)計(jì),在擦除的時(shí)候,cpu被強(qiáng)制的掛起,這時(shí),外部的所有中斷不能響應(yīng),看門狗如果沒有關(guān)閉,在擦除過程中會(huì)導(dǎo)致程序復(fù)位而產(chǎn)生不可預(yù)知的結(jié)果
標(biāo)號(hào)2:設(shè)置flash的控制位和擦除模式
標(biāo)號(hào)3:偽寫入一個(gè)數(shù)據(jù)
標(biāo)號(hào)4:重新喚醒cpu
方式2:代碼是從RAM中取出的話,cpu可以讓他不休眠,這樣可以繼續(xù)執(zhí)行下面的代碼
這是原先把flash中的程序拷貝到RAM中,之后在將pc程序指針指向RAM中的地址,那樣就可以擦除flash了,這里也只是需要看懂擦鞋的流程圖就可以了
當(dāng)代碼是從RAM中讀出的時(shí)候,這是cpu就可以不必被強(qiáng)制掛起,這時(shí)候需要注意的是,還是要關(guān)閉程序的所有中斷,并且要判斷BUSY這個(gè)標(biāo)志位,因?yàn)锽USY==1,表示flash正在進(jìn)行讀寫操作,所以,要等BUSY==0的時(shí)候才能進(jìn)行讀寫操作
這里看一下流程圖就可以知道了
1:關(guān)閉所有的中斷和看門狗
2:之后判斷flash的操作狀態(tài),當(dāng)flash沒有進(jìn)行操作的時(shí)候,進(jìn)行如下的操作
3:設(shè)置flash的操作,和擦除的模式
4:偽寫入
5:之后判斷flash的操作狀態(tài),當(dāng)flash沒有進(jìn)行操作的時(shí)候,重新開啟中斷還有看門狗
之后就是對(duì)flash的寫操作
寫操作可以有兩種操作方式:1:字節(jié)和比特的寫入,2:塊寫入
寫操作與擦除的流程圖是相似的,也分為從flash中讀出指令,和從RAM中取出指令
這個(gè)時(shí)候的操作和擦除過程神似
還有就是塊寫入,就是在進(jìn)行塊寫入的時(shí)候,寫入的時(shí)間是不能超過累計(jì)編程時(shí)間的,累計(jì)編程時(shí)間是4毫秒,這是因?yàn)樵趯?duì)flash進(jìn)行操作的時(shí)候,要對(duì)flash加一個(gè)比較高的電壓,如果持續(xù)的時(shí)間過長(zhǎng),高電壓會(huì)對(duì)flash有損壞,在進(jìn)行塊寫入的時(shí)候代碼必須是從RAM中取出
這是塊寫入的操作流程