欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6924|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32flash模擬epprom問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:111475 發(fā)表于 2016-3-30 19:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
          從430論壇看到Flash模擬epprom的問(wèn)題。我之前沒有碰到過(guò),存儲(chǔ)數(shù)據(jù)用epprom,也許我的水平太菜了,但無(wú)論如何,我想知道個(gè)深切。
        網(wǎng)上關(guān)于430Flash模擬epprom的帖子很多,我找來(lái)了幾個(gè)      

----------------------------------------------------
//******************************************************************************
// 參數(shù): adr 為地址 , 范圍 0x1000~0xFFFF
void  FlashRead(long adr,uint8 *bBuf,uint8bLen)
{
   while (bLen--)
    *bBuf++=*(uint8 *)adr++;
   return;
}

// 寫入地址 adr 寫入數(shù)據(jù):*pc_byte
void FlashWrite(long adr,uchar*Datain,uint len)
{

//FCTL2 = FWKEY +FSSEL_1 + FN3 + FN4;//MCLK  16*FN4 + 8*FN3
  FCTL3 = FWKEY;
  FCTL1 = FWKEY + WRT;

  while(FCTL3&BUSY);               //如果處于忙狀態(tài),則等待
  while(count--)
  {

   while(FCTL3 & BUSY);
   *(uchar*)adr++ = *Datain++;
  }
  FCTL1 = FWKEY;
  FCTL3 = FWKEY + LOCK;
  while(FCTL3 & BUSY);
}




EraseSectorFlash 過(guò)程




void EraseSectorFlash(unsigned intadr)
{
     
     _DINT();
     uchar *p0;
     //FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//選擇時(shí)鐘源,分頻
     FCTL3 = FWKEY;//清除LOCK
     while(FCTL3 & BUSY);//如果出于忙,則等待
     FCTL1 = FWKEY + ERASE;//使能段操作  每段512字節(jié)
     p0 = (unsigned char *)adr;//數(shù)值強(qiáng)制轉(zhuǎn)換成指針
     *p0 =0;           //向段內(nèi)任意地址寫0,即空寫入,啟動(dòng)擦除操作
     FCTL1 = FWKEY;
     FCTL3 = FWKEY + LOCK;
     while(FCTL3 & BUSY);
     _EINT();                      //開總中斷
}


查看空閑的FLASH 地址,避免擦除代碼所在的地址。每次擦除均是一段一段的擦除,每段512字節(jié)。
找不到datasheet,不知道段的起止地址的,可以打開memory,在內(nèi)存窗口,用代碼嘗試隨便寫入一個(gè)任意地址,看哪些地方被改寫成0xFF 就知道段的起止,如:
我們?cè)?x15000寫入(EraseSectorFlash(0x15000);),那里原本有非0xFF數(shù)據(jù),好辨認(rèn)(是FF的可以先寫再擦)。看到段的起止是15000-151ff剛好是512 。
0x15000+0x200->0x15200 所以下一段的起始地址是 0x15200以此類推。
           
驗(yàn)證代碼:
             EraseSectorFlash(0x2A000);
             EraseSectorFlash(0x2A200);
             EraseSectorFlash(0x2A400);
             EraseSectorFlash(0x2A600);
            
             FlashWrite(0x2A000,origin_protect_data,512);
             memset(origin_protect_data,0xCB,900);
             FlashWrite(0x2A200,origin_protect_data,512);
             memset(origin_protect_data,0xCA,900);
             FlashWrite(0x2A400,origin_protect_data,512);
             memset(origin_protect_data,0xC9,900);
             FlashWrite(0x2A600,origin_protect_data,512);
            




編譯地址分配:

在IAR窗口中,點(diǎn)擊view》memory ,在內(nèi)存窗口,點(diǎn)下拉框選擇 SER可知,SFR地址為  0x0000-0fff
                                                                   RAM地址為:0x1c00-5bff
                                                                  FLASH地址:0x5c00-45bff
結(jié)合看下面的地址分配圖,即可知道各部分代碼和數(shù)據(jù)被分配到什么地方。


               ****************************************
               *                                     *
               *     SEGMENTS IN ADDRESSORDER      *
               *                                     *
               ****************************************

SEGMENT             SPACE    STARTADDRESS   ENDADDRESS    SIZE  TYPE  ALIGN
=======             =====   =============  ===========    ====  ====  =====
DATA16_AN                             0102 -0103              2  rel    0
                                      0120 -0121              2
                                      0140 -0141              2
                                      0144 -0145              2
                                      015C -015D              2
                                      0168 -016F              8
                                      020A -020B              2
                                      0222 -0225              4
                                      0228 -0229              2
                                      0242 -0245              4
                                      024A -024B              2
                                      026A -026B              2
                                      0282 -0285              4
                                      028A -028B              2
                                      02A2 -02A5              4
                                      02A8 -02A9              2
                                      0340 -0341              2
                                      0350 -0351              2
                                      0380 -0387              8
                                      0392 -0397              6
                                      03AE -03AF              2
                                      03C0 -03C3              4
                                      03D2 -03D3              2
                                      0640 -0641              2
                                      0646 -0648              3
                                      064C -064C              1
                                      064E -064E              1
                                      065C -065D              2
DATA20_I                              1C00 -1E26            227  rel    1
DATA20_Z                              1E28 -28B7            A90  rel    1
CSTACK                                5400 -5BFF            800  rel    1
//-------------------------------------以下為編譯到FLASH的代碼---------------------------
CSTART                                5C00 -5C2F             30  rel    1
ISR_CODE                              5C30 -5E63            234  rel    1
<CODE>1                              5E64 -D123           72C0  rel    1
INTVEC                                FF80 -FFF9             7A  com    1
RESET                                 FFFE -FFFF              2  rel    1
DATA20_C                          00010000 -00019486       9487  rel    1
DATA20_ID                         00019488 -000196AE        227  rel    1
               ****************************************
               *                                     *
               *       END OF CROSSREFERENCE       *
               *                                     *
               ****************************************
30 112 bytes of CODE memory
  5 303 bytes of DATA  memory (+81 absolute )
38 574 bytes of CONST memory
Errors: none
Warnings: none
官方資料:http://pan.baidu.com/share/link?shareid=249328&uk=3523275049


1 Msp430Flash型單片機(jī)內(nèi)部Flash存儲(chǔ)器介紹

MSP430的Flash存儲(chǔ)器是可位、字節(jié)、字尋址和編程的存儲(chǔ)器。該模塊由一個(gè)集成控制器來(lái)控制編程和擦除的操作。控制器包括三個(gè)寄存器,一個(gè)時(shí)序發(fā)生器及一個(gè)提供編程、擦除電壓的電壓發(fā)生器。

Msp430的Flash存儲(chǔ)器的特點(diǎn)有:

1)  產(chǎn)生內(nèi)部編程電壓

2)  可位、字節(jié)、字編程,可以單個(gè)操作,也可以連續(xù)多個(gè)操作

3)  超低功耗操作

4)  支持段擦除和多段模塊擦除

2 Flash存儲(chǔ)器的分割

Msp430Flash存儲(chǔ)器分成多個(gè)段。可對(duì)其進(jìn)行單個(gè)字節(jié)、字的寫入,也可以進(jìn)行連續(xù)多個(gè)字、字節(jié)的寫入操作,但是最小的擦除單位是段。

Flash存儲(chǔ)器被分割成兩部分:主存儲(chǔ)器和信息存儲(chǔ)器,兩者在操作上沒有什么區(qū)別。兩部分的區(qū)別在于段的大小和物理地址的不同。

以Msp430F149為例,信息存儲(chǔ)器有兩個(gè)128字節(jié)的段,即segmentA和segmentB,主存儲(chǔ)器有多個(gè)512字節(jié)的段。Msp430F149內(nèi)部Flash的地址為0x1000H~0xFFFFH,計(jì)60K。信息段SegA的起始地址為0x1080H,信息段SegB的起始地址為0x1000H。

3 Flash存儲(chǔ)器的操作

在默認(rèn)狀態(tài)下,處于讀操作模式。在讀操作模式中,F(xiàn)lash存儲(chǔ)器不能被擦除和寫入,時(shí)序發(fā)生器和電壓發(fā)生被關(guān)閉,存儲(chǔ)器操作指向ROM區(qū)。

Msp430 Flash存儲(chǔ)器在系統(tǒng)編程ISP(in-systemprogrammable)不需要額外的外部電壓。CPU能夠?qū)lash直接編程。Flash存儲(chǔ)器的寫入/擦除通過(guò)BLKWRT、WRT、MERAS、ERASE等位確定。

3.1 擦除

Flash存儲(chǔ)器各位的缺省值為1,每一位都可以單獨(dú)編程為0,但只有擦除操作才能將其恢復(fù)為1。擦除操作的最小單位是段。通過(guò)erase和meras位設(shè)置可選擇3種擦除模式。






















MERAS

ERASE

擦除模式

0

1

段擦除

1

0

多段擦除(所有主存儲(chǔ)器的段)

1

1

整體擦除(LOCKA=0時(shí),擦除所有主存儲(chǔ)器和信息存儲(chǔ)器的段;主存儲(chǔ)器的段只有當(dāng)LOCKA=0時(shí)可以擦除)

擦除操作開始于對(duì)擦除的地址范圍內(nèi)的任意位置執(zhí)行一次空寫入。空寫入的目的是啟動(dòng)時(shí)序發(fā)生器和擦除操作。在空寫入操作之后,BUSY位自動(dòng)置位,并保持到擦除周期結(jié)束。BUSY、MERAS、ERASE在擦除周期結(jié)束后自動(dòng)復(fù)位。

3.2 寫入

寫入模式由WRT和BLKWRT位進(jìn)行設(shè)置。
















BLKWRT(塊寫入模式選擇)

WRT(寫模式選擇位)

寫入模式

0

1

單字節(jié)、單字寫入

1

1

塊寫入
所有的寫入模式使用一系列特有的寫入命令,采用塊寫入的速度大約是單個(gè)寫入的2
倍,因?yàn)殡妷喊l(fā)生器在塊寫入完成器件均能保持。對(duì)于這兩種寫入模式,任何能修改目的操作數(shù)的指令均能用于修改地址。一個(gè)Flash字不能再擦除器件進(jìn)行兩次以上的寫入。

當(dāng)啟動(dòng)寫入操作時(shí),BUSY置位,寫入結(jié)束時(shí)復(fù)位。

4 操作編程

4.1 Flash擦除

對(duì)Flash要寫入數(shù)據(jù),必須先擦除相應(yīng)的段,且對(duì)Flash存儲(chǔ)器的擦除必須是整段進(jìn)行的,可以一段一段擦,也可以多段一起擦除。擦除操作的順序如下:

1)  選擇適當(dāng)?shù)臅r(shí)鐘源和分頻因子;

2)  清除LOCK位

3)  判斷BUSY位,只有當(dāng)BUSY=0時(shí)才可以執(zhí)行下一步

4) 使能段操作,設(shè)置ERASE、MERAS位等(如果是擦除一段,則ERASE=1,如果擦除多段,則MERAS=1,如果擦除整個(gè)Flash,則ERASE=1,MERAS=1)

5)  對(duì)擦除的地址范圍內(nèi)的任意位置作一次空寫入,以啟動(dòng)擦除操作

6)  在擦除周期內(nèi),時(shí)鐘源始終有效,不修改分頻因子

7)  操作完成后,置位LOCK

根據(jù)上述操作順序,編寫程序代碼如下:

void FlashErase(unsigned int adr)

{

  uchar *p0;

(關(guān)閉中斷:_DINT();//關(guān)閉總中斷 本人注)

  FCTL2 = FWKEY + FSSEL_1 + FN3 +FN4;//選擇時(shí)鐘源,分頻

  FCTL3 = FWKEY;//清除LOCK

  while(FCTL3 &BUSY);//如果出于忙,則等待

  FCTL1 = FWKEY + ERASE;//使能段操作

  p0 = (unsigned char *)adr;//數(shù)值強(qiáng)制轉(zhuǎn)換成指針

  *p0 =0;           //向段內(nèi)任意地址寫0,即空寫入,啟動(dòng)擦除操作

  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 & BUSY);
(_EINT();   //開總中斷 本人注)
}

4.2 寫入

對(duì)Flash的寫入數(shù)據(jù)可以是單字、單字節(jié),也可以是連續(xù)多個(gè)字或字節(jié)(即塊操作)。編程寫入操作的順序如下:

1)  選擇適當(dāng)?shù)臅r(shí)鐘源和分頻因子;

2)  清除LOCK位

3)  判斷BUSY位,只有當(dāng)BUSY=0時(shí)才可以執(zhí)行下一步操作

4) 使能寫入功能,設(shè)置WRT、BLKWRT(如果寫入單字或單字節(jié)則WRT=1,如果是塊寫入,或者是多字、多字節(jié)連續(xù)寫入則WRT=1,BLKWRT=1);

5)  判斷BUSY位,只有當(dāng)BUSY=0時(shí)才可以執(zhí)行下一步操作

6)  寫入數(shù)據(jù)

7)  判忙,完了之后清除WRT,置位LOCK

根據(jù)上述操作順序,編寫程序代碼如下:

//write single byte

//Adr 為要編程的地址,沒有奇偶地址要求、DataB為要編程的字節(jié)數(shù)據(jù)

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;//數(shù)值強(qiáng)制轉(zhuǎn)換成指針,指向地址數(shù)據(jù)Adr所表示的內(nèi)存單元
(*((unsigned char*)Adr)?本人注)                              //將數(shù)據(jù)字DataW賦值給內(nèi)存單元

  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 &BUSY);

}

//write single word

//Adr 為要編程的地址,應(yīng)該是偶地址、DataW為要編程的字?jǐn)?shù)據(jù)

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;//數(shù)值強(qiáng)制轉(zhuǎn)換成指針,指向地址數(shù)據(jù)Adr所表示的內(nèi)存單元

                              //將數(shù)據(jù)字DataW賦值給內(nèi)存單元

  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 & BUSY);

}

// 寫入地址 *pc_byte 寫入數(shù)據(jù):*pc_byte
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);               //如果處于忙狀態(tài),則等待



  while(count--)

  {

   while(FCTL3 & BUSY);

   *pc_byte++ = *Datain++;

  }



  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 &BUSY);

}

注意:在對(duì)字寫入和字節(jié)寫入的時(shí)候,用于指向信息區(qū)數(shù)據(jù)指針類型的區(qū)別,字寫入時(shí)候?yàn)?((unsigned int*)Adr),字節(jié)寫入時(shí)候?yàn)?((unsigned char *)Adr)。

4.3 讀取

根據(jù)查看的書籍資料和網(wǎng)絡(luò)資料得出,內(nèi)部Flash的讀取操作沒有順序的要求,一般Flash默認(rèn)的操作方式即為讀模式。讀取Flash的程序代碼如下:


void FlashRead(uchar *pc_byte,uchar *Dataout,uint count)

{

  while(count--)

  {

    *Dataout= *pc_byte;

   Dataout++;

   pc_byte++;

  }

}

在網(wǎng)上查找資料的時(shí)候,好像看到過(guò)有位網(wǎng)友的博客說(shuō),內(nèi)部Flash的地址是自動(dòng)加1的,按照他的理解,函數(shù)中pc_byte++語(yǔ)句就沒有用處了,可是事實(shí)不然,我在調(diào)試過(guò)程中,發(fā)現(xiàn)并不能自動(dòng)加1,pc_byte++語(yǔ)句還是有必要的。調(diào)用上述函數(shù),可以通過(guò)這樣的方式FlashRead((uchar*)0x1000,a,4);即從0x1080地址處開始,連續(xù)讀取4個(gè)字節(jié)的數(shù)據(jù),送給數(shù)組a。

5 小結(jié)

對(duì)Msp430 片內(nèi)Flash的操作是通過(guò)對(duì)3個(gè)控制字中的相應(yīng)位來(lái)完成的,只有控制位的正確組合,才能實(shí)現(xiàn)相應(yīng)的功能。

同時(shí)在編程中注意靈活使用數(shù)組和指針,以及指向數(shù)組的指針等,可以達(dá)到靈活編程的目的,不過(guò)本文中給出的幾個(gè)程序段,基本上能夠?qū)崿F(xiàn)對(duì)Msp430Flash的擦除、寫入等操作。這是我最近3天所作的一些努力,整理一下與大家分享。

本文參考了TI的《MSP430x1xx Family UsersGuide》及TI網(wǎng)上提供的關(guān)于Flash操作的實(shí)例代碼,并在網(wǎng)絡(luò)上收集了一些資料,在此不一一列出,不過(guò)本文應(yīng)該算本人原創(chuàng),轉(zhuǎn)載請(qǐng)注明。謝謝


MSP430X14X Flash 讀寫操作總結(jié)開發(fā)平臺(tái):IAR Embedded Workbench、MSP430F149開發(fā)板作者:譚貝貝Flash操作注意事項(xiàng)   在讀寫的過(guò)程中電壓不能小于2.7V否則擦除和讀寫的結(jié)果將不可預(yù)測(cè)。Flash的可操作時(shí)鐘頻率為~257KHZ---~476KHZ。如果頻率不符合要求,則結(jié)果不可預(yù)測(cè)。
在擦除先需要關(guān)閉中斷和看門狗,在擦除的過(guò)程中如果產(chǎn)生了中斷,則會(huì)在重新使能中斷后產(chǎn)生一個(gè)中斷請(qǐng)求。Flash只能從1寫為0,不能從從0寫為1,所以需要擦除。
可以被擦除的最小模塊是片段,tAll Erase = tMass Erase = 5297/fFTG, tSeg Erase =4819/fFTG。
Flash ERASEMSP430X14X的擦除模式可以從Flash或者RAM中進(jìn)行。
從Flash中擦除從Flash中擦除的過(guò)程中所有的定時(shí)都會(huì)被Flash控制,CPU被掛起。擦除完成后需要一個(gè)假寫入CPU才能復(fù)位。從Flash擦除時(shí)有可能把后面CPU需要執(zhí)行的代碼擦除。如果發(fā)生這樣的情況,在擦除后CPU的執(zhí)行狀況將不可預(yù)測(cè)。
Flash中擦除流程圖圖片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.html從RAM中擦除從RAM中擦除時(shí)CPU不會(huì)被掛起,可以繼續(xù)執(zhí)行代碼。必須檢測(cè)BUSY位以判斷擦除是否結(jié)束,如果在擦除的過(guò)程中(即BUSY=1時(shí))訪問(wèn)Flash,這是一個(gè)違規(guī)的訪問(wèn),ACCVIFG會(huì)置位,而擦除的結(jié)果也將不可預(yù)測(cè)。
RAM中擦除流程圖圖片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.htmlFlash WriteMSP430X14X有兩種寫入模式,分為段寫入(byte/word write),和塊寫入(BlockWrite),塊寫入要快得多,但是操作麻煩,在擦除的過(guò)程中不能有一個(gè)Flash word(low + highbyte),則會(huì)發(fā)生損壞。CPU不能在BUSY=1時(shí)訪問(wèn)Flash,否則ACCFIG將置位寫入將不可預(yù)測(cè)。
1.Byte/Word writeByte/Word寫入可以從Flash或者RAM初始化,當(dāng)從Flash中初始化時(shí),所有的定時(shí)都會(huì)被Flash控制,CPU被掛起。寫完后CPU將繼續(xù)執(zhí)行后面的代碼。
當(dāng)從RAM中初始化時(shí),BUSY必須在CPU訪問(wèn)Flash前置0.否則ACCFIG將被置位,寫入的結(jié)果將不可預(yù)測(cè)。
在Byte/Word 寫模式下寫入總時(shí)間不能超過(guò)4ms,如果超過(guò)了,當(dāng)再想這塊任何地址寫入數(shù)據(jù)時(shí)必須先擦除。
Byte/Word 寫入流程圖
從RAM中執(zhí)行Byte/Word 寫入塊寫入塊寫入時(shí)沒一小塊不能超過(guò)t_cpt=4ms,塊寫入只能從RAM中進(jìn)行,在塊寫入的過(guò)程中WAIT位要置0,當(dāng)想Flash中寫入數(shù)據(jù)時(shí),需要先檢查WAIT位是否為1.當(dāng)前塊寫完后BLKWRT要清0.
流程圖圖片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.html在擦除或者寫入的過(guò)程中訪問(wèn)Flash,見下表Flash的寄存器FCTL1,選擇擦除和寫入模式的寄存器FRKEY/FWKEY 高八位為密碼讀的密碼為96h,寫的密碼為A5h。
BLKWRT    塊寫入模式選擇位,可以自動(dòng)被EMEX置位
WRT  字寫入模式選擇位,可任意自動(dòng)被EMEX置位
MERASE和ERASE,擦除模式選擇位
FCTL2時(shí)鐘選擇寄存器
FWKEYx密碼位
FSSELx時(shí)鐘選擇位
FNx分頻比 分頻值等于FN+1
兩個(gè)例子#include <msp430x14x.h>
#include "BoardConfig.h"

void Write_A(uchar value);
void Copy_A2B(void);


void main( void )
{
  // Stop watchdog timer to prevent time outreset
  WDTCTL = WDTPW + WDTHOLD;
  BoardConfig(0xb8);
  FCTL2 = FWKEY + FSSEL0 + FN0; //Selectsource
  uchar value = 0;
  for(;;)
  {
   Write_A(value++);    //Write data to segment A
   Copy_A2B();            //Copy data from segment A to segment B
   _NOP();
  }

}

void Write_A(uchar value)
{
  uchar i;
  uchar *Flash_ptr;
  Flash_ptr = (uchar *)0x1080;
  FCTL1 = FWKEY + ERASE; //Set ERASE mode
  FCTL3 =FWKEY;         //Clear LOCK
  *Flash_ptr =0;         //Dummy write

  FCTL1 = FWKEY + WRT;
  for(i = 0;i < 128;i++)
  {
   *Flash_ptr++ =value;    //Write value
  }

  FCTL1 =FWKEY;           //Clear WRT
  FCTL3 = FWKEY +LOCK;    //Set LOCK
}

//Copy data from B to A
voidCopy_A2B(void)   
{
  uchar *Flash_ptrA;
  uchar *Flash_ptrB;
  uint i;
  Flash_ptrA = (uchar *)0X1080;
  Flash_ptrB = (uchar *)0x1000;
  FCTL1 = FWKEY + ERASE;
  FCTL3 = FWKEY;
  *Flash_ptrB = 0;

  FCTL1 = FWKEY + WRT;
  for(i = 0;i < 128;i++)
  {
   *Flash_ptrB++ = *Flash_ptrA++;
  }
  FCTL1 = FWKEY;
  FCTL3 = FWKEY + LOCK;
}



再來(lái)個(gè)塊寫入的(TI例程)//****************************************************************************
//  MSP430F14x Demo - Flash In-SystemProgramming, BlockWrite
//
//  Description: This program first copies theFlashWrite routine to RAM, then
//  erases flash seg A, then it increments allvalues in seg A using the 64
//  byte block write mode.
//
//  Assumed default MCLK = DCO ~800 kHz.
//  Minimum RAM requirement = 512 bytes
//
//  ** Set Breakpoint on NOP in the Mainloop toavoid Stressing Flash **
//
//              MSP430F149
//           -----------------
//       /|\|             XIN|-
//        ||                |
//        --|RST         XOUT|-
//          |                |
//
//  H. Grewal / L. Westlund
//  Texas Instruments Inc.
//  Jun 2006
//  Built with IAR Embedded Workbench Version:3.30A
//******************************************************************************

#include <msp430x16x.h>

// Global variables
char value =0;                            // 8-bit value to write to segment A
char*Flash_ptr;                           // Flash pointer
char*RAM_ptr;                             // RAM pointer
char*END_ptr;                             // End of FlashWrite routine

// Function prototypes
void FlashWrite();
void CopyRoutine();
void End_of_FlashWrite();

void main(void)
{
  WDTCTL = WDTPW +WDTHOLD;                // Stop watchdog timer

_DINT();                                 // Diable Interrupts
CopyRoutine();                           // Copy FlashWrite routine to RAM
_EINT();                                 // Enable Interrupts

while(1)                                 // Repeat forever
  {
    Flash_ptr= (char *)0x1000;           // Initialize Flash pointer
    FCTL2 =FWKEY + FSSEL1 +FN0;          // MCLK/2 for Flash Timing Generator
    FCTL1 =FWKEY +ERASE;                 // Set Erase bit
    FCTL3 =FWKEY;                         // Clear Lock bit

   *Flash_ptr =0;                        // Dummy write to erase Flash segment
   while(!(FCTL3 &WAIT));                // WAIT until Flash is ready
    asm("CALL#300h");                     // Execute FlashWrite from RAM
                                           // Inline Assembly
   value++;                               // Increment value
   _NOP();                                // SET BREAKPOINT HERE
  }
}

void CopyRoutine()
{
  Flash_ptr =(char*)FlashWrite;           // Set pointer to FlashWrite routine
  RAM_ptr =(char*)0x0300;                 // Set pointer to RAM
  END_ptr =(char*)End_of_FlashWrite;      // Set pointer to End_of_FlashWrite

  while(END_ptr !=Flash_ptr)              // Check for end of FlashWrite
  {
    *RAM_ptr=*Flash_ptr;                 // Copy word to RAM
   Flash_ptr++;                           // Increment Flash pointer
   RAM_ptr++;                             // Increment RAM pointer
  }
}

void FlashWrite()
{
  volatile inti;                          // Use as write counter
  Flash_ptr =(char*)0x1000;               // Initialize Flash pointer
  while(FCTL3 &BUSY);                     // Check Flash BUSY bit
  FCTL1 = FWKEY + BLKWRT +WRT;            // Enable block-write operation
  for(i = 0; i < 64; i++)
  {
   *Flash_ptr =value;                    // Write value to flash
   Flash_ptr++;                           // Double-increment Flash pointer
   while(!(FCTL3 &WAIT));                // WAIT until Flash is ready
  }
  FCTL1 =FWKEY;                           // Clear BLKWRT & WRT bits
  while(FCTL3 &BUSY);                     // Check Flash BUSY bit
  FCTL3 = FWKEY +LOCK;                    // Reset LOCK bit
return;                                  // Exits routine
}

voidEnd_of_FlashWrite(){}                 // Marks end of FlashWrite




內(nèi)容摘要:一、MSP430單片機(jī)FLASH存儲(chǔ)器模塊特點(diǎn)1.8~3.6V工作電壓,2.7~3.6V編程電壓;擦除/編程次數(shù)可達(dá)100000次:數(shù)據(jù)保持時(shí)間從10年到100年不等:60KB空間編程時(shí)間<5秒:保密熔絲燒斷后不可恢復(fù),不能再對(duì)JTAG進(jìn)行任何訪問(wèn);FLASH編...


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

可以在程序中擦寫FLASH這樣就不用判斷Busy的標(biāo)志,因?yàn)橹挥胁翆懲瓿傻臅r(shí)候FLASH才有效!程序才能繼續(xù)走!如果把程序拷到RAM中擦除就要判斷BUSY了!
擦寫完成后可以不用LOCK,用LOCK只是一個(gè)保險(xiǎn)作用!防止你對(duì)FLASH的非法操作
------------------------------------------------------------------------------------------




        我從文庫(kù)里也看到Flash與epprom的區(qū)別,但沒有找到文庫(kù),只好在網(wǎng)上找了篇博客
--------------------------------------------------------------

掉電需保護(hù)且在程序運(yùn)行過(guò)程中需要修改的想少量參數(shù)保存在EEPROM中,其擦除次數(shù)較Flash多,F(xiàn)lash用來(lái)做程序和一些掉電保護(hù)和不需要修改的數(shù)據(jù)。

Flash memory指的是“閃存”,所謂“閃存”,它也是一種非易失性的內(nèi)存,屬于EEPROM的改進(jìn)產(chǎn)品,它的最大特點(diǎn)是必須按塊(Block)擦除(每個(gè)區(qū)塊的大小不定,不同廠家的產(chǎn)品有不同的規(guī)格),而EEPROM則可以一次只擦除一個(gè)字節(jié)(Byte),目前“閃存”被廣泛用在PC機(jī)的主板上,用來(lái)保存BIOS程序,便于進(jìn)行程序的升級(jí)。其另外一大應(yīng)用領(lǐng)域是用來(lái)作為硬盤的替代品,具有抗震、速度快、無(wú)噪聲、耗電低的優(yōu)點(diǎn),但是將其用來(lái)取代RAM就顯的不合適,因?yàn)镽AM需要能夠按字節(jié)改寫,而Flash ROM做不到。

FLASH的全稱是FLASH EEPROM,但跟常規(guī)EEPROM的操作方法不同。FLASH和EEPROM的最大區(qū)別是FLASH按扇區(qū)操作,EEPROM則按字節(jié)操作,二者尋址方法不同,存儲(chǔ)單元的結(jié)構(gòu)也不同,F(xiàn)LASH的電路結(jié)構(gòu)較簡(jiǎn)單,同樣容量占芯片面積較小,成本自然比EEPROM低,因而適合用作程序存儲(chǔ)器,EEPROM麻煩的多,所以更“人性化”的MCU設(shè)計(jì)會(huì)集成FLASH和EEPROM兩種非易失性存儲(chǔ)器,而廉價(jià)型設(shè)計(jì)往往只有FLASH,EEPROM在運(yùn)行中可以被修改,而FLASH在運(yùn)行時(shí)不能修改,EEPROM可以存儲(chǔ)一些修改的參數(shù),F(xiàn)lash中存儲(chǔ)程序代碼和不需要修改的數(shù)據(jù),所謂的Flash是用來(lái)形容整個(gè)存儲(chǔ)單元的內(nèi)容可以一次性擦除。所以,理論上凡是具備這樣特征的存儲(chǔ)器都可以稱為Flash memory。EEPROM里面也分FF-EEPROM和FLASH EEPROM的,現(xiàn)在大家所講的Flash memory實(shí)際上分為兩大類,一類是Floating Gate Debice,一類是Charge Trapping Debice,這里的分類標(biāo)準(zhǔn)主要是program與crase的機(jī)制不同。

一:FLASH和EEPROM的區(qū)別

   1:相同點(diǎn)是兩者都能掉電存儲(chǔ)數(shù)據(jù)

   2:不同點(diǎn)是:

                                     A:FALSH寫入時(shí)間長(zhǎng),EEPROM寫入時(shí)間短。

                B:FLASH擦寫次數(shù)少(10000次),EEPROM次數(shù)多(1000000次)

二:?jiǎn)纹瑱C(jī)的數(shù)據(jù)存儲(chǔ)器不能用FLASH,因?yàn)椋?/font>

    1:FLASH有一定的擦除,寫入次數(shù),一般的單片機(jī)的FLASH擦除寫入次數(shù)的標(biāo)稱值是10000次。

    2:FLASH寫入數(shù)據(jù)需要比較長(zhǎng)的時(shí)間,大約需要4-6ms,而且寫FLASH需要加上9V的高壓,麻煩。

三:至于EEPROM,可以作為數(shù)據(jù)存儲(chǔ)器,但是單片機(jī)如atmegal28,一般用RAM作為數(shù)據(jù)存儲(chǔ)器,因?yàn)镋EPROM工藝復(fù)雜,成本高,適合于存儲(chǔ)掉電保護(hù)的數(shù)據(jù),而這類數(shù)據(jù)往往不需要太多,所以一般的單片機(jī)都沒在內(nèi)部集成EEPROM,需要的時(shí)候可以讓單片機(jī)外掛24C01一類的串行EEPROM。

區(qū)別:

1、  FLASH按扇區(qū)操作,EEPROM則按字節(jié)操作

2、  FLASH寫入時(shí)間長(zhǎng),EEPROM寫入時(shí)間短

3、  FLASH擦寫次數(shù)少(10000次),EEPROM次數(shù)多(1000000次)

4、  FLASH的電路結(jié)構(gòu)簡(jiǎn)單,成本低,EEPROM工藝復(fù)雜,成本高







EEPROM


百科名片


EEPROM (Electrically Erasable Programmable Read-Only Memory),電可擦可編程只讀存儲(chǔ)器--一種掉電后數(shù)據(jù)不丟失的存儲(chǔ)芯片。 EEPROM 可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。一般用在即插即用。


目錄


發(fā)展

背景知識(shí)

基本原理


編輯本段發(fā)展


  EEPROM(電可擦寫可編程只讀存儲(chǔ)器)是可用戶更改的只讀存儲(chǔ)器(ROM),其可通過(guò)高于普通


EEPROM

電壓的作用來(lái)擦除和重編程(重寫)。不像EPROM芯片,EEPROM不需從計(jì)算機(jī)中取出即可修改。在一個(gè)EEPROM中,當(dāng)計(jì)算機(jī)在使用的時(shí)候是可頻繁地重編程的,EEPROM的壽命是一個(gè)很重要的設(shè)計(jì)考慮參數(shù)。EEPROM的一種特殊形式是閃存,其應(yīng)用通常是個(gè)人電腦中的電壓來(lái)擦寫和重編程。

  EEPROM,一般用于即插即用(Plug & Play)。

  常用在接口卡中,用來(lái)存放硬件設(shè)置數(shù)據(jù)。

  也常用在防止軟件非法拷貝的"硬件鎖"上面。


編輯本段背景知識(shí)


  在微機(jī)的發(fā)展初期,BIOS都存放在ROM(Read Only Memory,只讀存儲(chǔ)器)中。ROM內(nèi)部的資料是在ROM的制造工序中,在工廠里用特殊的方法被燒錄進(jìn)去的,其中的內(nèi)容只能讀不能改,一旦燒錄進(jìn)去,用戶只能驗(yàn)證寫入的資料是否正確,不能再作任何修改。如果發(fā)現(xiàn)資料有任何錯(cuò)誤,則只有舍棄不用,


EEPROM

重新訂做一份。ROM是在生產(chǎn)線上生產(chǎn)的,由于成本高,一般只用在大批量應(yīng)用的場(chǎng)合。

  由于ROM制造和升級(jí)的不便,后來(lái)人們發(fā)明了PROM(Programmable ROM,可編程ROM)。最初從工廠中制作完成的PROM內(nèi)部并沒有資料,用戶可以用專用的編程器將自己的資料寫入,但是這種機(jī)會(huì)只有一次,一旦寫入后也無(wú)法修改,若是出了錯(cuò)誤,已寫入的芯片只能報(bào)廢。PROM的特性和ROM相同,但是其成本比ROM高,而且寫入資料的速度比ROM的量產(chǎn)速度要慢,一般只適用于少量需求的場(chǎng)合或是ROM量產(chǎn)前的驗(yàn)證。

  EPROM(Erasable Programmable ROM,可擦除可編程ROM)芯片可重復(fù)擦除和寫入,解決了PROM芯片只能寫入一次的弊端。EPROM芯片有一個(gè)很明顯的特征,在其正面的陶瓷封裝上,開有一個(gè)玻璃窗口,透過(guò)該窗口,可以看到其內(nèi)部的集成電路,紫外線透過(guò)該孔照射內(nèi)部芯片就可以擦除其內(nèi)的數(shù)據(jù),完成芯片擦除的操作要用到EPROM擦除器。EPROM內(nèi)資料的寫入要用專用的編程器,并且往芯片中寫內(nèi)容時(shí)必須要加一定的編程電壓(VPP=12—24V,隨不同的芯片型號(hào)而定)。EPROM的型號(hào)是以27開頭的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。EPROM芯片在寫入資料后,還要以不透光的貼紙或膠布把窗口封住,以免受到周圍的紫外線照射而使資料受損。


編輯本段基本原理


由EPROM操作的不便,后來(lái)出的主板上BIOS ROM芯片大部分都采用EEPROM(Electrically Erasable Programmable ROM,電可擦除可編程ROM)。EEPROM的擦除不需要借助于其它設(shè)備,它是以電子信號(hào)來(lái)修改其內(nèi)容的,而且是以Byte為最小修改單位,不必將資料全部洗掉才能寫入,徹底擺脫了EPROM Eraser和編程器的束縛。EEPROM在寫入數(shù)據(jù)時(shí),仍要利用一定的編程電壓,此時(shí),只需用廠商提供的專用刷新程序就可以輕而易舉地改寫內(nèi)容,所以,它屬于雙電壓芯片。借助于EEPROM芯片的雙電壓特性,可以使BIOS具有良好的防毒功能,在升級(jí)時(shí),把跳線開關(guān)打至“ON”的位置,即給芯片加上相應(yīng)的編程電壓,就可以方便地升級(jí);平時(shí)使用時(shí),則把跳線開關(guān)打至“OFF”的位置,防止CIH類的病毒對(duì)BIOS芯片的非法修改。所以,至今仍有不少主板采用EEPROM作為BIOS芯片并作為自己主板的一大特色。




EEPROM和flash的區(qū)別

之前對(duì)各種存儲(chǔ)器一直不太清楚,今天總結(jié)一下。

存儲(chǔ)器分為兩大類:ram和rom。

ram就不講了,今天主要討論rom。

rom最初不能編程,出廠什么內(nèi)容就永遠(yuǎn)什么內(nèi)容,不靈活。后來(lái)出現(xiàn)了prom,可以自己寫入一次,要是寫錯(cuò)了,只能換一片,自認(rèn)倒霉。人類文明不斷進(jìn)步,終于出現(xiàn)了可多次擦除寫入的EPROM,每次擦除要把芯片拿到紫外線上照一下,想一下你往單片機(jī)上下了一個(gè)程序之后發(fā)現(xiàn)有個(gè)地方需要加一句話,為此你要把單片機(jī)放紫外燈下照半小時(shí),然后才能再下一次,這么折騰一天也改不了幾次。歷史的車輪不斷前進(jìn),偉大的EEPROM出現(xiàn)了,拯救了一大批程序員,終于可以隨意的修改rom中的內(nèi)容了。

EEPROM的全稱是“電可擦除可編程只讀存儲(chǔ)器”,即Electrically Erasable Programmable Read-Only Memory。是相對(duì)于紫外擦除的rom來(lái)講的。但是今天已經(jīng)存在多種EEPROM的變種,變成了一類存儲(chǔ)器的統(tǒng)稱。

狹義的EEPROM:

這種rom的特點(diǎn)是可以隨機(jī)訪問(wèn)和修改任何一個(gè)字節(jié),可以往每個(gè)bit中寫入0或者1。這是最傳統(tǒng)的一種EEPROM,掉電后數(shù)據(jù)不丟失,可以保存100年,可以擦寫100w次。具有較高的可靠性,但是電路復(fù)雜/成本也高。因此目前的EEPROM都是幾十千字節(jié)到幾百千字節(jié)的,絕少有超過(guò)512K的。

flash:

flash屬于廣義的EEPROM,因?yàn)樗彩请姴脸膔om。但是為了區(qū)別于一般的按字節(jié)為單位的擦寫的EEPROM,我們都叫它flash。

flash做的改進(jìn)就是擦除時(shí)不再以字節(jié)為單位,而是以塊為單位,一次簡(jiǎn)化了電路,數(shù)據(jù)密度更高,降低了成本。上M的rom一般都是flash。

flash分為nor flash和nand flash。nor flash數(shù)據(jù)線和地址線分開,可以實(shí)現(xiàn)ram一樣的隨機(jī)尋址功能,可以讀取任何一個(gè)字節(jié)。但是擦除仍要按塊來(lái)擦。

nand flash同樣是按塊擦除,但是數(shù)據(jù)線和地址線復(fù)用,不能利用地址線隨機(jī)尋址。讀取只能按頁(yè)來(lái)讀取。(nandflash按塊來(lái)擦除,按頁(yè)來(lái)讀,norflash沒有頁(yè))

由于nandflash引腳上復(fù)用,因此讀取速度比nor flash慢一點(diǎn),但是擦除和寫入速度比nor flash快很多。nand flash內(nèi)部電路更簡(jiǎn)單,因此數(shù)據(jù)密度大,體積小,成本也低。因此大容量的flash都是nand型的。小容量的2~12M的flash多是nor型的。

使用壽命上,nand flash的擦除次數(shù)是nor的數(shù)倍。而且nand flash可以標(biāo)記壞塊,從而使軟件跳過(guò)壞塊。nor flash 一旦損壞便無(wú)法再用。

因?yàn)閚or flash可以進(jìn)行字節(jié)尋址,所以程序可以在nor flash中運(yùn)行。嵌入式系統(tǒng)多用一個(gè)小容量的nor flash存儲(chǔ)引導(dǎo)代碼,用一個(gè)大容量的nand flash存放文件系統(tǒng)和內(nèi)核。









PROM、ROM、EPROM、EEPROM、Flash ROM的區(qū)別

ROM 指的是“只讀存儲(chǔ)器”,即Read-Only Memory。這是一種線路最簡(jiǎn)單半導(dǎo)體電路,通過(guò)掩模工藝, 一次性制造,其中的代碼與數(shù)據(jù)將永久保存(除非壞掉),不能進(jìn)行修改。這玩意一般在大批量生產(chǎn)時(shí)才會(huì)被用的,優(yōu)點(diǎn)是成本低、非常低,但是其風(fēng)險(xiǎn)比較大,在 產(chǎn)品設(shè)計(jì)時(shí),如果調(diào)試不徹底,很容易造成幾千片的費(fèi)片,行內(nèi)話叫“掩砸了”!
PROM 指的是“可編程只讀存儲(chǔ)器”既Programmable Red-Only Memory。這樣的產(chǎn)品只允許寫入一次,所以也被稱為“一次可編程只讀存儲(chǔ)器”(One Time Progarmming ROM,OTP-ROM)。PROM在出廠時(shí),存儲(chǔ)的內(nèi)容全為1,用戶可以根據(jù)需要將其中的某些單元寫入數(shù)據(jù)0(部分的PROM在出廠時(shí)數(shù)據(jù)全為0,則用 戶可以將其中的部分單元寫入1), 以實(shí)現(xiàn)對(duì)其“編程”的目的。PROM的典型產(chǎn)品是“雙極性熔絲結(jié)構(gòu)”,如果我們想改寫某些單元,則可以給這些單元通以足夠大的電流,并維持一定的時(shí)間,原 先的熔絲即可熔斷,這樣就達(dá)到了改寫某些位的效果。另外一類經(jīng)典的PROM為使用“肖特基二極管”的PROM,出廠時(shí),其中的二極管處于反向截止?fàn)顟B(tài),還 是用大電流的方法將反相電壓加在“肖特基二極管”,造成其永久性擊穿即可。
EPROM 指的是“可擦寫可編程只讀存儲(chǔ)器”,即Erasable Programmable Read-Only Memory。 它的特點(diǎn)是具有可擦除功能,擦除后即可進(jìn)行再編程,但是缺點(diǎn)是擦除需要使用紫外線照射一定的時(shí)間。這一類芯片特別容易識(shí)別,其封裝中包含有“石英玻璃窗 ”,一個(gè)編程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干膠紙蓋住, 以防止遭到 陽(yáng)光直射。
EEPROM 指的是“電可擦除可編程只讀存儲(chǔ)器”,即Electrically Erasable Programmable Read-Only Memory。它的最大優(yōu)點(diǎn)是可直接用電信號(hào)擦除,也可用電信號(hào)寫入。EEPROM不能取代RAM的原應(yīng)是其工藝復(fù)雜, 耗費(fèi)的門電路過(guò)多,且重編程時(shí)間比較長(zhǎng),同時(shí)其有效重編程次數(shù)也比較低。
Flash memory 指的是“閃存”,所謂“閃存”,它也是一種非易失性的內(nèi)存,屬于EEPROM的改進(jìn)產(chǎn)品。它的最大特點(diǎn)是必須按塊(Block)擦除(每個(gè)區(qū)塊的大小不 定,不同廠家的產(chǎn)品有不同的規(guī)格), 而EEPROM則可以一次只擦除一個(gè)字節(jié)(Byte)。目前“閃存”被廣泛用在PC機(jī)的主板上,用來(lái)保存BIOS程序,便于進(jìn)行程序的升級(jí)。其另外一大應(yīng) 用領(lǐng)域是用來(lái)作為硬盤的替代品,具有抗震、速度快、無(wú)噪聲、耗電低的優(yōu)點(diǎn),但是將其用來(lái)取代RAM就顯得不合適,因?yàn)镽AM需要能夠按字節(jié)改寫,而 Flash ROM做不到。













Flash存儲(chǔ)器
百科名片

FLASH閃存 閃存的英文名稱是"Flash Memory",一般簡(jiǎn)稱為"Flash",它屬于內(nèi)存器件的一種。 不過(guò)閃存的物理特性與常見的內(nèi)存有根本性的差異: 目前各類 DDR 、 SDRAM 或者 RDRAM 都屬于揮發(fā)性內(nèi)存,只要停止電流供應(yīng)內(nèi)存中的數(shù)據(jù)便無(wú)法保持,因此每次電腦開機(jī)都需要把數(shù)據(jù)重新載入內(nèi)存;


目錄


flash memory的簡(jiǎn)要介紹?

flash memory的工作原理


展開


編輯本段flash memory的簡(jiǎn)要介紹?

  閃存則是一種不揮發(fā)性( Non-Volatile )內(nèi)存,在沒有電流供應(yīng)的條件下也能夠長(zhǎng)久地保持?jǐn)?shù)據(jù),其存儲(chǔ)特性相當(dāng)于硬盤,這項(xiàng)特性正是閃存得以成為各類便攜型數(shù)字設(shè)備的存儲(chǔ)介質(zhì)的基礎(chǔ)。

  NAND 閃存的存儲(chǔ)單元?jiǎng)t采用串行結(jié)構(gòu),存儲(chǔ)單元的讀寫是以頁(yè)和塊為單位來(lái)進(jìn)行(一頁(yè)包含若干字節(jié),若干頁(yè)則組成儲(chǔ)存塊, NAND 的存儲(chǔ)塊大小為 8 到 32KB ),這種結(jié)構(gòu)最大的優(yōu)點(diǎn)在于容量可以做得很大,超過(guò) 512MB 容量的 NAND 產(chǎn)品相當(dāng)普遍, NAND 閃存的成本較低,有利于大規(guī)模普及。

  NAND 閃存的缺點(diǎn)在于讀速度較慢,它的 I/O 端口只有 8 個(gè),比 NOR 要少多了。這區(qū)區(qū) 8 個(gè) I/O 端口只能以信號(hào)輪流傳送的方式完成數(shù)據(jù)的傳送,速度要比 NOR 閃存的并行傳輸模式慢得多。再加上 NAND 閃存的邏輯為電子盤模塊結(jié)構(gòu),內(nèi)部不存在專門的存儲(chǔ)控制器,一旦出現(xiàn)數(shù)據(jù)壞塊將無(wú)法修,可靠性較 NOR 閃存要差。

  NAND 閃存被廣泛用于移動(dòng)存儲(chǔ)、數(shù)碼相機(jī)、 MP3 播放器、掌上電腦等新興數(shù)字設(shè)備中。由于受到數(shù)碼設(shè)備強(qiáng)勁發(fā)展的帶動(dòng), NAND 閃存一直呈現(xiàn)指數(shù)級(jí)的超高速增長(zhǎng).

  NOR和NAND是現(xiàn)在市場(chǎng)上兩種主要的非易失閃存技術(shù)。Intel于1988年首先開發(fā)出NOR flash技術(shù),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。緊接著,1989年,東芝公司發(fā)表了NAND flash結(jié)構(gòu),強(qiáng)調(diào)降低每比特的成本,更高的性能,并且象磁盤一樣可以通過(guò)接口輕松升級(jí)。但是經(jīng)過(guò)了十多年之后,仍然有相當(dāng)多的硬件工程師分不清NOR和NAND閃存。

  相“flash存儲(chǔ)器”經(jīng)常可以與相“NOR存儲(chǔ)器”互換使用。許多業(yè)內(nèi)人士也搞不清楚NAND閃存技術(shù)相對(duì)于NOR技術(shù)的優(yōu)越之處,因?yàn)榇蠖鄶?shù)情況下閃存只是用來(lái)存儲(chǔ)少量的代碼,這時(shí)NOR閃存更適合一些。而NAND則是高數(shù)據(jù)存儲(chǔ)密度的理想解決方案。

  NOR的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP, eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。NOR的傳輸效率很高,在1~4MB的小容量時(shí)具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。

  NAND結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,并且寫入和擦除的速度也很快。應(yīng)用NAND的困難在于flash的管理和需要特殊的系統(tǒng)接口。


性能比較

  flash閃存是非易失存儲(chǔ)器,可以對(duì)稱為塊的存儲(chǔ)器單元塊進(jìn)行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內(nèi)進(jìn)行,所以大多數(shù)情況下,在進(jìn)行寫入操作之前必須先執(zhí)行擦除。NAND器件執(zhí)行擦除操作是十分簡(jiǎn)單的,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫為0。

  由于擦除NOR器件時(shí)是以64~128KB的塊進(jìn)行的,執(zhí)行一個(gè)寫入/擦除操作的時(shí)間為5s,與此相反,擦除NAND器件是以8~32KB的塊進(jìn)行的,執(zhí)行相同的操作最多只需要4ms。

  執(zhí)行擦除時(shí)塊尺寸的不同進(jìn)一步拉大了NOR和NADN之間的性能差距,統(tǒng)計(jì)表明,對(duì)于給定的一套寫入操作(尤其是更新小文件時(shí)),更多的擦除操作必須在基于NOR的單元中進(jìn)行。這樣,當(dāng)選擇存儲(chǔ)解決方案時(shí),設(shè)計(jì)師必須權(quán)衡以下的各項(xiàng)因素。

  ● NOR的讀速度比NAND稍快一些。

  ● NAND的寫入速度比NOR快很多。

  ● NAND的4ms擦除速度遠(yuǎn)比NOR的5s快。

  ● 大多數(shù)寫入操作需要先進(jìn)行擦除操作。

  ● NAND的擦除單元更小,相應(yīng)的擦除電路更少。


接口差別

  NOR flash帶有SRAM接口,有足夠的地址引腳來(lái)尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié)。

  NAND器件使用復(fù)雜的I/O口來(lái)串行地存取數(shù)據(jù),各個(gè)產(chǎn)品或廠商的方法可能各不相同。8個(gè)引腳用來(lái)傳送控制、地址和數(shù)據(jù)信息。

  NAND讀和寫操作采用512字節(jié)的塊,這一點(diǎn)有點(diǎn)像硬盤管理此類操作,很自然地,基于NAND的存儲(chǔ)器就可以取代硬盤或其他塊設(shè)備。


容量和成本

  NAND flash的單元尺寸幾乎是NOR器件的一半,由于生產(chǎn)過(guò)程更為簡(jiǎn)單,NAND結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,也就相應(yīng)地降低了價(jià)格。

  NOR flash占據(jù)了容量為1~16MB閃存市場(chǎng)的大部分,而NAND flash只是用在8~128MB的產(chǎn)品當(dāng)中,這也說(shuō)明NOR主要應(yīng)用在代碼存儲(chǔ)介質(zhì)中,NAND適合于數(shù)據(jù)存儲(chǔ),NAND在CompactFlash、Secure Digital、PC Cards和MMC存儲(chǔ)卡市場(chǎng)上所占份額最大。


可靠性和耐用性

  采用flahs介質(zhì)時(shí)一個(gè)需要重點(diǎn)考慮的問(wèn)題是可靠性。對(duì)于需要擴(kuò)展MTBF的系統(tǒng)來(lái)說(shuō),Flash是非常合適的存儲(chǔ)方案。可以從壽命(耐用性)、位交換和壞塊處理三個(gè)方面來(lái)比較NOR和NAND的可靠性。


壽命(耐用性)

  在NAND閃存中每個(gè)塊的最大擦寫次數(shù)是一百萬(wàn)次,而NOR的擦寫次數(shù)是十萬(wàn)次。NAND存儲(chǔ)器除了具有10比1的塊擦除周期優(yōu)勢(shì),典型的NAND塊尺寸要比NOR器件小8倍,每個(gè)NAND存儲(chǔ)器塊在給定的時(shí)間內(nèi)的刪除次數(shù)要少一些。


位交換

  所有flash器件都受位交換現(xiàn)象的困擾。在某些情況下(很少見,NAND發(fā)生的次數(shù)要比NOR多),一個(gè)比特位會(huì)發(fā)生反轉(zhuǎn)或被報(bào)告反轉(zhuǎn)了。

  一位的變化可能不很明顯,但是如果發(fā)生在一個(gè)關(guān)鍵文件上,這個(gè)小小的故障可能導(dǎo)致系統(tǒng)停機(jī)。如果只是報(bào)告有問(wèn)題,多讀幾次就可能解決了。

  當(dāng)然,如果這個(gè)位真的改變了,就必須采用錯(cuò)誤探測(cè)/錯(cuò)誤更正(EDC/ECC)算法。位反轉(zhuǎn)的問(wèn)題更多見于NAND閃存,NAND的供應(yīng)商建議使用NAND閃存的時(shí)候,同時(shí)使用EDC/ECC算法。

  這個(gè)問(wèn)題對(duì)于用NAND存儲(chǔ)多媒體信息時(shí)倒不是致命的。當(dāng)然,如果用本地存儲(chǔ)設(shè)備來(lái)存儲(chǔ)操作系統(tǒng)、配置文件或其他敏感信息時(shí),必須使用EDC/ECC系統(tǒng)以確保可靠性。


壞塊處理

  NAND器件中的壞塊是隨機(jī)分布的。以前也曾有過(guò)消除壞塊的努力,但發(fā)現(xiàn)成品率太低,代價(jià)太高,根本不劃算。

  NAND器件需要對(duì)介質(zhì)進(jìn)行初始化掃描以發(fā)現(xiàn)壞塊,并將壞塊標(biāo)記為不可用。在已制成的器件中,如果通過(guò)可靠的方法不能進(jìn)行這項(xiàng)處理,將導(dǎo)致高故障率。


易于使用

  可以非常直接地使用基于NOR的閃存,可以像其他存儲(chǔ)器那樣連接,并可以在上面直接運(yùn)行代碼。

  由于需要I/O接口,NAND要復(fù)雜得多。各種NAND器件的存取方法因廠家而異。

  在使用NAND器件時(shí),必須先寫入驅(qū)動(dòng)程序,才能繼續(xù)執(zhí)行其他操作。向NAND器件寫入信息需要相當(dāng)?shù)募记?因?yàn)樵O(shè)計(jì)師絕不能向壞塊寫入,這就意味著在NAND器件上自始至終都必須進(jìn)行虛擬映射。


軟件支持?

  當(dāng)討論軟件支持的時(shí)候,應(yīng)該區(qū)別基本的讀/寫/擦操作和高一級(jí)的用于磁盤仿真和閃存管理算法的軟件,包括性能優(yōu)化。

  在NOR器件上運(yùn)行代碼不需要任何的軟件支持,在NAND器件上進(jìn)行同樣操作時(shí),通常需要驅(qū)動(dòng)程序,也就是內(nèi)存技術(shù)驅(qū)動(dòng)程序(MTD),NAND和NOR器件在進(jìn)行寫入和擦除操作時(shí)都需要MTD。

  使用NOR器件時(shí)所需要的MTD要相對(duì)少一些,許多廠商都提供用于NOR器件的更高級(jí)軟件,這其中包括M-System的TrueFFS驅(qū)動(dòng),該驅(qū)動(dòng)被Wind River System、Microsoft、QNX Software System、Symbian和Intel等廠商所采用。


編輯本段flash memory的工作原理
[原理]

  經(jīng)典物理學(xué)認(rèn)為,物體越過(guò)勢(shì)壘,有一閾值能量;粒子能量小于此能量則不能越過(guò),大于此能量則可以越過(guò)。例如騎自行車過(guò)小坡,先用力騎,如果坡很低,不蹬自行車也能靠慣性過(guò)去。如果坡很高,不蹬自行車,車到一半就停住,然后退回去。

  量子力學(xué)則認(rèn)為,即使粒子能量小于閾值能量,很多粒子沖向勢(shì)壘,一部分粒子反彈,還會(huì)有一些粒子能過(guò)去,好象有一個(gè)隧道,稱作“量子隧道(quantum tunneling)”。

  可見,宏觀上的確定性在微觀上往往就具有不確定性。雖然在通常的情況下,隧道效應(yīng)并不影響經(jīng)典的宏觀效應(yīng),因?yàn)樗泶⿴茁蕵O小,但在某些特丁的條件下宏觀的隧道效應(yīng)也會(huì)出現(xiàn)。


[發(fā)現(xiàn)者]

  1957年,受雇于索尼公司的江崎玲於奈(Leo Esaki,1940~)在改良高頻晶體管2T7的過(guò)程中發(fā)現(xiàn),當(dāng)增加PN結(jié)兩端的電壓時(shí)電流反而減少,江崎玲於奈將這種反常的負(fù)電阻現(xiàn)象解釋為隧道效應(yīng)。此后,江崎利用這一效應(yīng)制成了隧道二極管(也稱江崎二極管)。

  1960年,美裔挪威籍科學(xué)家加埃沃(Ivan Giaever,1929~)通過(guò)實(shí)驗(yàn)證明了在超導(dǎo)體隧道結(jié)中存在單電子隧道效應(yīng)。在此之前的1956年出現(xiàn)的“庫(kù)珀對(duì)”及BCS理論被公認(rèn)為是對(duì)超導(dǎo)現(xiàn)象的完美解釋,單電子隧道效應(yīng)無(wú)疑是對(duì)超導(dǎo)理論的一個(gè)重要補(bǔ)充。

  1962年,年僅20歲的英國(guó)劍橋大學(xué)實(shí)驗(yàn)物理學(xué)研究生約瑟夫森(Brian David Josephson,1940~)預(yù)言,當(dāng)兩個(gè)超導(dǎo)體之間設(shè)置一個(gè)絕緣薄層構(gòu)成SIS(Superconductor-Insulator-Superconductor)時(shí),電子可以穿過(guò)絕緣體從一個(gè)超導(dǎo)體到達(dá)另一個(gè)超導(dǎo)體。約瑟夫森的這一預(yù)言不久就為P.W.安德森和J.M.羅厄耳的實(shí)驗(yàn)觀測(cè)所證實(shí)——電子對(duì)通過(guò)兩塊超導(dǎo)金屬間的薄絕緣層(厚度約為10埃)時(shí)發(fā)生了隧道效應(yīng),于是稱之為“約瑟夫森效應(yīng)”。 宏觀量子隧道效應(yīng)確立了微電子器件進(jìn)一步微型化的極限,當(dāng)微電子器件進(jìn)一步微型化時(shí)必須要考慮上述的量子效應(yīng)。例如,在制造半導(dǎo)體集成電路時(shí),當(dāng)電路的尺寸接近電子波長(zhǎng)時(shí),電子就通過(guò)隧道效應(yīng)而穿透絕緣層,使器件無(wú)法正常工作。因此,宏觀量子隧道效應(yīng)已成為微電子學(xué)、光電子學(xué)中的重要理論。


[應(yīng)用]?

  閃存

  閃存的存儲(chǔ)單元為三端器件,與場(chǎng)效應(yīng)管有相同的名稱:源極、漏極和柵極。柵極與硅襯底之間有二氧化硅絕緣層,用來(lái)保護(hù)浮置柵極中的電荷不會(huì)泄漏。采用這種結(jié)構(gòu),使得存儲(chǔ)單元具有了電荷保持能力,就像是裝進(jìn)瓶子里的水,當(dāng)你倒入水后,水位就一直保持在那里,直到你再次倒入或倒出,所以閃存具有記憶能力。

  與場(chǎng)效應(yīng)管一樣,閃存也是一種電壓控制型器件。NAND型閃存的擦和寫均是基于隧道效應(yīng),電流穿過(guò)浮置柵極與硅基層之間的絕緣層,對(duì)浮置柵極進(jìn)行充電(寫數(shù)據(jù))或放電(擦除數(shù)據(jù))。而NOR型閃存擦除數(shù)據(jù)仍是基于隧道效應(yīng)(電流從浮置柵極到硅基層),但在寫入數(shù)據(jù)時(shí)則是采用熱電子注入方式(電流從浮置柵極到源極)。


  場(chǎng)效應(yīng)管工作原理場(chǎng)效應(yīng)晶體管(Field Effect Transistor縮寫(FET))簡(jiǎn)稱場(chǎng)效應(yīng)管。一般的晶體管是由兩種極性的載流子,即多數(shù)載流子和反極性的少數(shù)載流子參與導(dǎo)電,因此稱為雙極型晶體管,而FET僅是由多數(shù)載流子參與導(dǎo)電,它與雙極型相反,也稱為單極型晶體管。它屬于電壓控制型半導(dǎo)體器件,具有輸入電阻高(108~109Ω)、噪聲小、功耗低、動(dòng)態(tài)范圍大、易于集成、沒有二次擊穿現(xiàn)象、安全工作區(qū)域?qū)挼葍?yōu)點(diǎn),現(xiàn)已成為雙極型晶體管和功率晶體管的強(qiáng)大競(jìng)爭(zhēng)者。

-------------------------------------------------------------------


                 我想既然msp430有256bit的Flash空間,而stm32本身是用Flash替代ROM的,那使stm32也是可以對(duì)Flash操作的,掉后也是可以保存數(shù)據(jù)的,不知道我想的對(duì)不對(duì),請(qǐng)各位壇友解答?
                在價(jià)格速度方面,F(xiàn)lash相對(duì)于epprom有著很大優(yōu)勢(shì),但Flash操作起來(lái)確實(shí)沒有epprom容易,且壽命是個(gè)問(wèn)題,那么問(wèn)題來(lái)了,在工程項(xiàng)目中,是不是如果能不用epprom就不用epprom,能不用外置Flash就可以用內(nèi)置Flash?
       


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表