关于H-JTAG的NANDFLASH烧写方法以及2416初始化脚本的问题

来源:互联网 发布:ios编程入门 编辑:程序博客网 时间:2024/04/29 15:40

不好意思,最近有朋友给我留言问起配置文件有问题,前些天有写忙就没有去改,这个BLOG不知道怎么回事回复不了,就再写一篇吧,顺便再说说NANDFLASH的烧写问题。

2416的H-JTAG初始化文件如下:

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

FLASH SECTION:
NAND-FLASH
S3C2416+K9GAG08
MEMORY SECTION:
08-BIT X 1-CHIP
0x0
0x30000000
XTAL SECTION:
NULL
TCK SECTION:
9
5
SCRIPT SECTION:
SoftReset+++
Setmem+32-Bit+0x53000000+0x00000000
Setmem+32-Bit+0X4A000008+0xFFFFFFFF
Setmem+32-Bit+0X4A000048+0xFFFFFFFF
Setmem+32-Bit+0X4A00001C+0x1FFFFFFF
Setmem+32-Bit+0x560000e0+0xaaaaaaaa
Setmem+32-Bit+0x4C000024+0x00000001
Setmem+32-Bit+0x4C000000+0x00000e10
Setmem+32-Bit+0x4C000010+0x00060101
Setmem+32-Bit+0x4C000020+0x00000050  
Setmem+32-Bit+0x48000000+0x00069253
Setmem+32-Bit+0x48000004+0x44000040
Setmem+32-Bit+0x48000008+0x00010030
Setmem+32-Bit+0x48000004+0x44000041
Setmem+32-Bit+0x4800000C+0x80000003
Setmem+32-Bit+0x48000004+0x44000043
Setmem+32-Bit+0x4800000C+0xC0000003
Setmem+32-Bit+0x48000004+0x44000043
Setmem+32-Bit+0x4800000C+0x44000003
Setmem+32-Bit+0x48000004+0x44000043
Setmem+32-Bit+0x4800000C+0x44000130
Setmem+32-Bit+0x48000004+0x44000042
Setmem+32-Bit+0x48000004+0x44000041
Setmem+32-Bit+0x48000010+0x00000020
Setmem+32-Bit+0x4800000C+0x44000030
Setmem+32-Bit+0x48000004+0x44000042
Setmem+32-Bit+0x4800000C+0x47800030
Setmem+32-Bit+0x48000004+0x44000043
Setmem+32-Bit+0x4800000C+0x44000030
Setmem+32-Bit+0x48000004+0x44000043
Setmem+32-Bit+0x48000010+0x0000008C
Setmem+32-Bit+0x48000004+0x44000040
PGMOPTION SECTION:
ADDON SECTION:
NULL
----------------------------------------------------------------------------------------------------

 

说明:这个脚本是我实际测试过的,是配合自己的NANDFLASH(K9GAG08--2G--MLC),如果要烧写NORFLASH,请先将CPU设置为NOR启动,然后在HFLASH里选择对应的NORFLASH型号,再配置下位宽什么的,就可以了。

 

值得一提的是,我偶然发现了一个很取巧的方法,就是不需要使用配置文件的烧写方法。就是在H-FLASHER的CONFIGRATION这一步骤中,把RAM START ADDRESS 设置成 2416 的片上 SRAM的地址,注意哦,这个地址并不是一个固定的地址,当CPU设置NANDFLASH启动时,他的地址为:0x0,当设置为NORFLASH启动时,他的地址为0X40000000。至于原因,可以去看看三星的 DATASHEET中关于NAND启动的那一章。这种方式在三星的ARM9系列都是可以用的,我在2410 2440 2416 上都测试过。这个可能算是我的原创了吧,呵呵,这样一来,就不需要什么配置文件了。好了,废话这么多,现在写写烧写NANDFLASH的方法吧。

 

要通过H-JTAG烧写NANDFLASH,首先去H-JTAG网站下载一个新版的软件,新版的提供了对NAND的支持。打开H-FLASHER,在FLASH-SELECTION 的最下面可以看见NAND-FLASH目录项,点开就可以看见一诸如2410+K9F1208之类的东东,没错,如果你的CPU和FLASH的型号列在其中的话,LUCK-BOY,呵呵,你就就不用往下看了,因为你已经可以随便烧写你的NANDFLASH了。但如果你像我一样找不到对应的型号,怎么办呢。还是有办法的。

这里,先要感谢H-JTAG的作者,他开源了一部分接口的代码,归功于这些代码,使得我们可以自己修改支持自己的硬件。对于NANDFLASH,我们找到:H-JTAG安装文件夹/FDevice/NAND-FLASH 目录,在这个目录中,有一些名字如“S3C2410+K9F1G08“这样的文件和两个文件夹,其中一个叫DRIVERS,另外一个叫SourceCodes (ADS1.2)。

在DRIVERS目录中,就是用于烧写NANDFLASH的驱动。这些驱动就是要用我们的JTAG小板写入到前面提到的RAM start address中,然后在RAM中的这个驱动就可以帮助我们完成烧写FLASH的操作。这样说大家应该都明白了吧^^

在另一个文件夹中,就是保存着这些驱动的源代码,是一个个的ADS的工程,drivers目录中的文件其实就是这里的对应ADS工程生成的可执行的二进制文件。说道这里,我想有过NANDFLASH编程的朋友应该知道怎么做了,没错,只要稍微修改下源代码就可以了。

在这里,需要修改的地方就在FLASH.H文件中的这几行:

 

#define NAND_PAGE_SIZE   512              //PAGE SIZE  (BYTES)
#define NAND_BLOCK_SIZE   (16*1024)  //BLOCK SIZE (BYTES)
#define NAND_BLOCK_NUM   4096         //BLOCK NUMBER
#define NAND_BLOCK_PAGE_NUM  32    //BLOCK PAGE NUMBER

将这些参数改成对应你的FLASH的参数即可。比如我的:

#define NAND_PAGE_SIZE  4096                 //PAGE SIZE  (BYTES)
#define NAND_BLOCK_SIZE   (128*4096)  //BLOCK SIZE (BYTES)
#define NAND_BLOCK_NUM   4096              //BLOCK NUMBER
#define NAND_BLOCK_PAGE_NUM  128    //BLOCK PAGE NUMBER

如果你的FLASH是SLC的,就可以修改K9F1208的代码,若是MLC的,则可以去修改K9F8G08的代码。在修改完代码之后,通过ADS编译一次工程。将生成的二进制文件拷贝到DRIVERS目录,如果你不想覆盖原来的,可以另外取名。呵呵,到这里还没完,还有最重要的一个步骤,就是修改一下配置表。

用记事本打开  FDevice/NAND-FLASH  下的任意一个文件如S3C2410+K9F1208,你会看到如下内容:

FLASH_TYPE=3
FLASH_SIZE=64M
FLASH_ID=0x007600EC
FLASH_ID2=0x003600EC
FLASH_ADDRESS=0x0
FLASH_NAND_BLOCK=4096x16K
FLASH_NAND_PAGE=131072x512
FLASH_WIDTH=8/0/0
FLASH_DRIVER=1002/0/0

 

这些数据是在对FLASH编程的用到的,一定要严格按照FLASH的参数来写。这样才能对FLASH进行正确的操作。比如我使用的K9GAG08的参数是 4K PAGE, 128 PAGE / BLOCK , 4k BLOCK,那么应该改为如下:

 

FLASH_TYPE=3
FLASH_SIZE=2000M
FLASH_ID=0x00D500EC
FLASH_ID2=0x003600EC
FLASH_ADDRESS=0x0
FLASH_NAND_BLOCK=4096x512K
FLASH_NAND_PAGE=524288x4096
FLASH_WIDTH=8/0/0
FLASH_DRIVER=1002/0/0

 

看了这篇文章,我成功的用hjtag烧写了s3c2440+s34ml01g1(spansion的一款flash芯片)

0 0
原创粉丝点击