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肯定不是壞塊