MDK工具包中自帶的FLASH編程算法的問題

S3C2410 + ULINK2 + MDK

 

MDK環境下有個功能可以支持直接把bin文件下載到nandflash中的制定區域,這對於開發還是很方便的,我在調試2410開發板中已經實現了該功能,但過程中還是出現了一些問題。

 

MDK工具包中自帶有FLASH文件夾,其下是很對不同的flash編程算法,我的板子是S3C2410,經查看,其下沒有針對2410的型號,不管3721,先試一下這個2440的編程算法會出什麼問題,一點擊download,出現Flash Timeout 錯誤提示,詳細很多朋友都對這個錯誤提示不陌生。

後來我再稍微詳細的讀了其編程代碼的實現和參數的配置,發現應該沒有問題了啊(其實還有問題,很隱蔽),點擊download依然Flash Timeout

在繼續之前先說明一下我個人想法。爲什麼會報Flash Timeout提示了,這應該是MDK對nand操作的一種機制。我們看到一個結構如下:

 

struct FlashDevice const FlashDevice  =  {
   FLASH_DRV_VERS,             // Driver Version, do not modify!
   "S3C2440 NAND Flash SP",    // Device Name
   EXT8BIT,                    // Device Type
   0x30000000,                 // Device Start Address
   0x08000000,                 // Device Size in Bytes (128MB)
   512,                        // Programming Page Size
   0,                          // Reserved, must be 0
   0xFF,                       // Initial Content of Erased Memory
   200,                        // Program Page Timeout 200 mSec
   3000,                       // Erase Sector Timeout 3000 mSec

  // Specify Size and Address of Sectors
   0x4000, 0x000000,           // Sector Size 16kB
   SECTOR_END
};

其中有個參數爲3000,正常情況下nand是塊擦出,速度是很快的,如果erase操作在3s內依然沒有響應,那麼MDK就會報錯,Flash timeout。

 

回來原話題。。。查看K9F1208datasheet發現nand的第一個block廠商保證肯定是絕對沒有bad block的,而通過我的LED調試方法,逐步定位錯誤,發現nand程序竟然連 1st block都當做是壞塊,這說明了最大的可能性是它自帶的編程算法的出錯,當然還有可能是nand芯片掛了(我可不期望是這個),再仔細對照其判斷1st block是否爲壞塊的代碼,再和2410的手冊對照,發現其對於NFDATA寄存器的操作都是按照32位來的,spare area 區域的16個字節分了4次讀完,但手冊說看到nand控制器是把NFDATA當做16位來操作的,問題原因就出來了。。。後面的解決方法我不用多說了,重新改過之後,點擊download一步到位。。。

 

關鍵詞:led定位方法、nand的1st肯定不是壞塊

 

 

 

發佈了22 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章