硬件: am3358 + MT29F16G08ABABA(SLC)
MT29F16G08ABABA(SLC) (16Gb)规格:
page size x8, 4320bytes(4096+224bytes)
block size 128pages(512K+28Kbytes)
plane size 2planes * 2048blocks per plane
device size 16Gb: 4096 blocks
device ID 0x48
手册: TRM SPRUH73J(October 2011-revised December 2013)
问题1: 关于am335x支持的nand型号
TRM SPRUH73J(October 2011-revised December 2013) 有如下说明
26.1.7.4.1
Support for large page size(2048bytes +64 spare bytes) or very large page size 4096bytes +128/218 spare bytes
26.1.7.4.2 initialization and detection
Table 26-14 supported nand devices device ID
16Gb D5/C5/A5/B5/86/96
我自行设计的板子选型时没有太注意,根据以上2点描述,难道am3358不支持MT29F16G08ABABA(SLC)? 主要有2点原因:1. 我的page size 是4096+224bytes,而不是4096+128/218bytes,2. MT29F16G08ABABA(SLC)的device ID是48,不在Table 26-14所支持的ID中。
问题2:am335x关于nand寄存器的配置
TRM SPRUH73J(October 2011-revised December 2013) 有如下说明
7.1.3.3.8.1 chip-select base address and region size
1 GB 512MB 256MB 128MB 64MB 32MB 16MB
A29 A28 A27 A26 A25 A24 A23 ………A0
Base address A29 A28 A27 A26 A25 A24
Mask field A27 A26 A25 A24
Cs size mask field
256MB 0 0 0 0
128MB 1 0 0 0
64MB 1 1 0 0
32MB 1 1 1 0
16MB 1 1 1 1
对应的需要配置的寄存器为:
GPMC_CONFIG7_0 Register
Bit field description
31-12 reserve
11-8 maskaddress
7 reserve
6 csvalid
5-0 baseaddress
始终对关于以上地方的配置没有完全弄明白,基地址和掩码到底与什么有关系?同样的nand,设置不同的基地址,即对应了不同的掩码,比方说对512MB的nand,可以设置基地址是 0x0800 0000(掩码区域128MB), 也可以设置基地址0x1000 0000(掩码区域256MB),
因此,它表示cpu是以128MB或256MB为最小单位对nand进行访问么??这样解释似乎又不通。
另外我查询了2个板子的Nand配置如下:
Am335xevm配置 256MB nand baseaddress 0x0800 0000 (maskfield=2’b1000 对应128MB)
英蓓特配置 512MB nand baseaddress 0x1000 0000(maskfield=2’b0000 对应256MB)
那我自行设计的板子 2GB nand ,我该怎么设置这个参数呢?
winds2001:
那个ID倒是可以在软件nand_ids.c中去改的,page大小的问题还是有疑问
Gino E:
回复 winds2001:
你的nandflash是要做为启动设备,还只是做为一般的flash?
如果是做为启动设备,会受到TRM手册里Table 26-14的限制。
winds2001:
回复 Gino E:
本方案的nand是需要作为启动设备的,
另外,麻烦解释下基地址与掩码的使用方法,谢谢
winds2001:
回复 winds2001:
改变nand的型号后,uboot就不能保持环境变量了。
uboot启动后,直接saveenv就报failed,保存的地址是坏块,我改变了环境变量保存地址,依旧提示坏块,在uboot下使用nand bad命令发现基本上都是坏块。
以上问题是因为我的nand配置问题还是焊接问题???
我修改了am335x_evm.h文件如下:
#define CONFIG_ENV_SIZE 0x100000 /*default:0x2000*/
#define CONFIG_SYS_NAND_PAGE_SIZE 4096 /*default:2048 */#define CONFIG_SYS_NAND_OOBSIZE 224 /*default:64 */#define CONFIG_SYS_NAND_BLOCK_SIZE (128*4096) /*default:(128*1024)*/
#define MNAND_ENV_OFFSET 0x280000 /* default: 0x260000 */ #define CONFIG_SYS_ENV_SECT_SIZE (512 << 10) /* default: (128 << 10) */
另外我在nand_base.c里面看到uboot支持oob区域大小为8/16/64/128,并不支持224byte,
因此想咨询下,我目前选择的这个镁光的nand作为启动介质,是335x不支持呢,还是uboot
里面没有配置好,或者是没有焊接好(因为几乎全部是坏块)。
谢谢,盼复
Andy Fan1:
回复 winds2001:
Hi ,winds2001:
我也有类似的问题。我这边用的是海力士的NAND,H27U4G8_6F2D, 512MB的。 移植SDK6.0 ,U-boot和kernel 能运行,但是UBI 会时不时把 NAND 的block标为坏区, 运行一段时间后会标记很多坏区, 用TIEVM的 256MB美光NAND就不会有这样的错误,觉得还是NAND的驱动要改。但是无从下手,目前问题还么解决。
winds2001:
回复 Andy Fan1:
英倍特官方的sbc8600b用的就是你这款hynix的512MB的nand,我调试的时候好像没有遇到你这样的问题呀,hynix的这款nand的规格uboot是完美支持的,并不需要修改什么东西,你在am335x_evm.h中配置好几个参数就可以了。
我使用的这款主要是uboot好像不支持,所以麻烦。可能需要修改mtd的驱动,这下头大了。
另外,留个qq给你20112000,你可以加我,我们一起讨论。
真正做项目的时候可能都会换大容量的nand,因此我们这样的问题可能存在共性,麻烦ti社区管理员关注下我们这个问题………………