天天看點

MSP430F149嵌入式系統中FLASH K9F1G08U0M的應用

原文位址【http://www.elecfans.com/emb/xitong/20111005219775.html】

        NAND Flash是采用NAND結構技術的非易失存儲器,具有ROM存儲器的特點。NAND FLASH 存儲器将資料線與位址線複用為8條線,另外還分别提供了指令控制信号線,是以,NAND FLASH 存儲器不會因為存儲容量的增加而增加引腳數目。進而極大友善了系統設計和産品更新。

  1 元件介紹

  1.1 MSP430晶片

  MSP430系列單片機是TI公司推出的16位RISC系列單片機,該系列是一組超低功耗微控制器,供電電壓範圍為1.8V—3.6V。考慮到本系統有微體積、低功耗的要求,在此選用MSP430F149,它具有60KB Flash Memory、2kb RAM、有8個通道采樣率為200K的12位A/D轉換器、硬體乘法器、2個帶有大量捕獲/比較寄存器的16位定時器、看門狗等,為系統的進一步開發擴充提供了良好的基礎,特别适用于較複雜的系統開發。

  1.2 NAND Flash

  NAND結構Flash是Sumsung公司隆重推出并着力開發的新一代資料存儲器件,在此選用晶片K9F1G08U0M,電源電壓2.7V—3.6V,與MSP430F149一緻,功耗低,容量可達128M×8Bit,按頁進行讀寫,按塊擦除,通過I/O口分時複用作為指令引腳/位址引腳/資料引腳。有很高的可靠性。

  2 硬體設計

  本系統中,K9F1G08U0M的資料輸入輸出口與單片機的P6端口相連。片選信号與單片機的P2.4相連, CLE(指令鎖存控制端)、ALE(位址鎖存控制端)、WE(寫操作控制端)、RE(讀操作控制端)分别通過控制單片機P3.3、P2.3、P2.6、P2.5引腳的電平,決定對FLASH

  進行控制字操作、位址操作、寫操作還是讀操作。在此不使用寫保護功能,是以WP接高電平。FLASH與單片機的部分連接配接組成電路如圖1所示。

  

MSP430F149嵌入式系統中FLASH K9F1G08U0M的應用

                                                                                                             圖1 MSP430F149與K9F1G08U0M的連接配接

  3 軟體設計

  MSP430的開發軟體較多,本文采用IAR公司的內建開發環境—IAR Embedded workbench 嵌入式工作台,利用C430(MSP430系列的C語言)編寫調試。單片機對FLASH的操作主要有寫、讀、擦除。

  3.1 寫操作

  向FLASH内部寫資料是基于頁的,K9F1G08U0M的指令字、位址和資料都是通過并行口線I/O0—I/O7在控制信号的作用下分時操作。位址A0—A10,A11—A26通過I/O0—I/O7分4次送入。同時K9F1G08U0M晶片提供了一根狀态訓示信号線 ,當該信号為低電平時,表示FLASH可能正處于擦除、程式設計或讀操作的忙狀态;而當其為高電平時,則表示為準備好狀态,此時可以對晶片進行各種操作。本系統須寫入126M資料寫操作流程圖如圖2。

        3.2 讀操作

  讀操作有串行頁讀、連續行讀、随機讀3種類型。在此選用串行頁讀取。首先将讀操作控制字00h輸入,再寫入位址,寫入控制字30h,待 信号變高後,将本頁資料依次讀出。随後再改變頁位址讀出其它頁内資料。操作流程圖如圖3。

  

MSP430F149嵌入式系統中FLASH K9F1G08U0M的應用

                                                                                                                              圖2 寫操作流程圖

  

MSP430F149嵌入式系統中FLASH K9F1G08U0M的應用

                                                                                                                     圖3 讀FLASH資料程式流程圖

  3.3 擦除操作

  任何FLASH器件的寫入操作都必須在空的或已擦除的單元内進行,是以在進行下一次存儲資料之前都必須對FLASH進行擦除操作。

  擦除操作基于塊,K9F1G08U0M内有1024塊,塊位址的輸入需要兩個周期,塊操作的位址隻有A18—A27有效,A12—A17備忽略。在位址後被送入的塊擦除指令(D0h)啟動塊擦除操作,待 信号變高後,送入指令字70h,讀出I/O0的值來判斷資料擦除是否成功。圖4為塊擦除流程圖。

  

MSP430F149嵌入式系統中FLASH K9F1G08U0M的應用

                                                                                                                 圖4 擦除FLASH程式流程圖

在此給出寫操作部分程式,讀操作和擦除操作均可參考文中流程圖來程式設計,值得注意的是其它具體寫位址操作應仔細閱讀

  K9F1G08U0M晶片資料。

  #include

  #define CLE BIT3

  #define ALE BIT3

  #define WE BIT6

  #define CE BIT4

  #define RE BIT5

  #define RB BIT7

  void ReadFlash(); //讀FLASH子程式

  void WriteFlash(); //寫FLASH子程式

  void inituart(void); //初始化異步串行通信

  void Write10h(); //寫控制字10h子程式

  void WriteCommand(); //寫指令字寫位址

  void ClrFlash(); //擦除FLASH子程式

  unsigned int k,i,a

  void main ()

  {

  WDTCTL = WDTPW + WDTHOLD;

  BCSCTL1 &= ~XT2OFF;

  do

  {

  IFG1 &= ~OFIFG;

  for (iq0=0x05; iq0>0; iq0--);

  } //檢驗晶振是否起振

  while ((IFG1 & OFIFG)!= 0);

  BCSCTL2 = SELM_2 + SELS + DIVS0;

  //SMCLK選擇2分頻後的4M

  While(k<0xFC00) //頁數<64512時執行

  {

  WriteCommand(); //調用寫控制字寫位址子程式

  While(i<2048) //位元組數<2048時執行循環

  {

  WriteFlash(); //調用寫資料子程式,

  32個位元組

  i=i+32; //位元組數+32

  }

  i=0; //一頁寫完後,位元組數置0

  Write10h(); //調用寫10h子程式

  while(!(P2IN & RB)); //等待RB信号變高

  k++; //頁數+1

  }

  k=0; //頁數置0

  LPM4; //全部寫完後,MSP430進入低功耗模式4

  5 結束語

  實驗表明: 整個系統簡單可靠、功能完善、運作穩定,具有實用價值。本文完成了對FLASH的寫操作、讀操作及擦除操作,達到了系統的微體積和低功耗特性。