MDK工具包中自带的FLASH编程算法的问题

本文探讨了在MDK环境下将bin文件下载到S3C2410 NAND Flash的过程及遇到的问题。主要讨论了FlashTimeout错误的原因及解决办法,并分享了通过修改编程算法解决NAND Flash 1st block误判为坏块的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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肯定不是坏块

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值