很奇怪,是不是1g08和8g08存在什么区别,都是大页nand,读写时序都差不多,一直疑惑一个是slc,一个是mlc,不过uboot代码里面好像就没mlc和slc之分?高手看看啊!
19 个解决方案
#1
我记得是你需要在Uboot里面改FLASH大小的,不然Uboot不知道你的Flash有多大,所以又可能你就根本没用到8G,但是你系统启动不起来 我就不太明白了。
#2
我的boot选择项是从nand启动,在start.s中将nand中的内容拷贝到ram中时的代码:
#ifdef CONFIG_BOOT_NAND
mov r0, #0x1000
bl copy_from_nand
。。。。
.globl copy_from_nand
copy_from_nand:
mov r10, lr /* save return address */
mov r9, r0
/* get ready to call C functions */
ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */
sub sp, sp, #12
mov fp, #0 /* no previous frame, so fp=0 */
mov r9, #0x1000
bl copy_uboot_to_ram
3: tst r0, #0x0
bne copy_failed
ldr r0, =0x0c000000
ldr r1, _TEXT_PHY_BASE
1: ldr r3, [r0], #4
ldr r4, [r1], #4
teq r3, r4
bne compare_failed /* not matched */
subs r9, r9, #4
bne 1b
4: mov lr, r10 /* all is OK */
mov pc, lr
在这一句bl copy_uboot_to_ram的后面加打印信息,没反应,它是调用外部定义的copy_uboot_to_ram c函数,没跳回来??
#ifdef CONFIG_BOOT_NAND
mov r0, #0x1000
bl copy_from_nand
。。。。
.globl copy_from_nand
copy_from_nand:
mov r10, lr /* save return address */
mov r9, r0
/* get ready to call C functions */
ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */
sub sp, sp, #12
mov fp, #0 /* no previous frame, so fp=0 */
mov r9, #0x1000
bl copy_uboot_to_ram
3: tst r0, #0x0
bne copy_failed
ldr r0, =0x0c000000
ldr r1, _TEXT_PHY_BASE
1: ldr r3, [r0], #4
ldr r4, [r1], #4
teq r3, r4
bne compare_failed /* not matched */
subs r9, r9, #4
bne 1b
4: mov lr, r10 /* all is OK */
mov pc, lr
在这一句bl copy_uboot_to_ram的后面加打印信息,没反应,它是调用外部定义的copy_uboot_to_ram c函数,没跳回来??
#3
谢谢··
uboot里面改flash大小?可能我还没到那一步,这是我的1208nand起来时的打印信息
OK
U-Boot 1.1.6 (Aug 17 2009 - 15:12:10) for SMDK6410
CPU: S3C6410@532MHz
Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode)
Board: SMDK6410
DRAM: 128 MB
Flash: 0 kB
NAND: 64 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 2
你说的问题应该是在打印 NAND: 64 MB 的时候初始化的时候,我现在郁闷的是换成8g08后为什么只打印“OK”后就什么反应都没有了?
#4
你的flash 没有识别出来啊。
#5
flash.h 在这个文件中 看一下Flash id 。。然后你自己的Flash Id是多少。。 强制修改貌似可以。。。
#6
哦,我的没有NOR flash , 我的直接是从nand flash起来的。上面的那个1208的64M的nand flash是能直接跑起来的,换成128M的1g08 nand flash 也是能跑的,但换成1G的8g08之后连Uboot都跑不起来了,不知有何高见呢?
#7
晕菜了。。。没遇到过。。
#8
SLC和MLC区别非常大,两种的驱动差别非常大;不知道你用的是哪款处理器,你先读读处理器的Datasheet,看看支持不支持MLC,看NAND Flash控制器那章节就可以,MLC需要硬件ECC支持的。如果硬件处理器可以支持,然后检查uboot是否有MLC的驱动,有的话要检查这个驱动是否和你的硬件设备匹配。
#9
不懂uboot
#10
谢谢,我用的是samsung的6410,手册上说是支持mlc的,uboot里面有mlc的驱动,不过是在nand初始化的时候,即打印“NAND : xx M”的时候调用的,我的似乎还没跑到那里去哦。
网上说uboot首先是从start.s开始的,里面有打印“OK”的代码(即我的问题:打印OK后什么反应都没有了),在start.s里面有很简单的nand初始化代码,
nand_asm_init:
ldr r0, =ELFIN_NAND_BASE
ldr r1, [r0, #NFCONF_OFFSET]
orr r1, r1, #0x70
orr r1, r1, #0x7700
str r1, [r0, #NFCONF_OFFSET]
ldr r1, [r0, #NFCONT_OFFSET]
orr r1, r1, #0x03
str r1, [r0, #NFCONT_OFFSET]
应该不涉及MLC的问题,之后跟踪后续代码(即打印“OK”后),知道uboot要将自己copy到RAM,start.s里面是通过 “ bl copy_uboot_to_ram”调用外部copy_uboot_to_ram C函数实现的,奇怪的是没有跳回来(bl指令是要跳回来的吧?)。跟踪了copy_uboot_to_ram函数,加入了打印信息,根据打印信息知道copy_uboot_to_ram函数是执行完了的,为什么确跳不回来呢?? (问题可能就出在这里??)
注:在start.s正常流程的最后有跳到start_armboot的入口,之后就如网上说的进入了uboot启动的第二阶段,在这里就会有一大堆的初始化,就会打印如
U-Boot 1.1.6 (Aug 17 2009 - 15:12:10) for SMDK6410
CPU: S3C6410@532MHz
Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode)
Board: SMDK6410
DRAM: 128 MB
Flash: 0 kB
NAND: 64 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 2 一连串的打印信息。可惜,很想看到的这些内容确始终不出来。。。(哪怕出来了报错也好哈)
希望高手给点建议啊!!
#11
还是没什么进展,自己顶顶!!
#12
起码flash id总要改的吧。。。除非你的驱动里面本来就带这两种flash的支持。
#13
2g08以上的nandflash写地址的时候多了一次喔,所以还是有点不一样
#14
关注这个问题!解决的话分享一下啊!
#15
有代码,能编译,有trace,还有不能解决的问题嘛?一步步来嘛,一段段代码过,加trace,看死在什么地方。。。。
#16
楼主啊,问题解决了吗。。。能不能分享下。。
#17
一般的BSP会有设置整个BSP应用于MLC或者是SLC的全局变量,或者是有些BSP只适合SLC,有些只适合MLC,这点你先要搞清楚。
另外这两款FLASH的每个PAGE大小一样吗?访问周期是否一样?
MLC还涉及ECC的问题,这些都是需要注意的。
另外这两款FLASH的每个PAGE大小一样吗?访问周期是否一样?
MLC还涉及ECC的问题,这些都是需要注意的。
#18
SLC和MLC PAGE大小不一样,很多都不一样,连三星BSP都分两种,SLC和MLC的,就这样简单替换肯定不行
#19
谢谢大家,好久了这贴都忘了,由于我们那时不急着用8G08,所以放了一段时间,最后换了块板子,竟然就跑起来了,晕死!
#20
#1
我记得是你需要在Uboot里面改FLASH大小的,不然Uboot不知道你的Flash有多大,所以又可能你就根本没用到8G,但是你系统启动不起来 我就不太明白了。
#2
我的boot选择项是从nand启动,在start.s中将nand中的内容拷贝到ram中时的代码:
#ifdef CONFIG_BOOT_NAND
mov r0, #0x1000
bl copy_from_nand
。。。。
.globl copy_from_nand
copy_from_nand:
mov r10, lr /* save return address */
mov r9, r0
/* get ready to call C functions */
ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */
sub sp, sp, #12
mov fp, #0 /* no previous frame, so fp=0 */
mov r9, #0x1000
bl copy_uboot_to_ram
3: tst r0, #0x0
bne copy_failed
ldr r0, =0x0c000000
ldr r1, _TEXT_PHY_BASE
1: ldr r3, [r0], #4
ldr r4, [r1], #4
teq r3, r4
bne compare_failed /* not matched */
subs r9, r9, #4
bne 1b
4: mov lr, r10 /* all is OK */
mov pc, lr
在这一句bl copy_uboot_to_ram的后面加打印信息,没反应,它是调用外部定义的copy_uboot_to_ram c函数,没跳回来??
#ifdef CONFIG_BOOT_NAND
mov r0, #0x1000
bl copy_from_nand
。。。。
.globl copy_from_nand
copy_from_nand:
mov r10, lr /* save return address */
mov r9, r0
/* get ready to call C functions */
ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */
sub sp, sp, #12
mov fp, #0 /* no previous frame, so fp=0 */
mov r9, #0x1000
bl copy_uboot_to_ram
3: tst r0, #0x0
bne copy_failed
ldr r0, =0x0c000000
ldr r1, _TEXT_PHY_BASE
1: ldr r3, [r0], #4
ldr r4, [r1], #4
teq r3, r4
bne compare_failed /* not matched */
subs r9, r9, #4
bne 1b
4: mov lr, r10 /* all is OK */
mov pc, lr
在这一句bl copy_uboot_to_ram的后面加打印信息,没反应,它是调用外部定义的copy_uboot_to_ram c函数,没跳回来??
#3
谢谢··
uboot里面改flash大小?可能我还没到那一步,这是我的1208nand起来时的打印信息
OK
U-Boot 1.1.6 (Aug 17 2009 - 15:12:10) for SMDK6410
CPU: S3C6410@532MHz
Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode)
Board: SMDK6410
DRAM: 128 MB
Flash: 0 kB
NAND: 64 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 2
你说的问题应该是在打印 NAND: 64 MB 的时候初始化的时候,我现在郁闷的是换成8g08后为什么只打印“OK”后就什么反应都没有了?
#4
你的flash 没有识别出来啊。
#5
flash.h 在这个文件中 看一下Flash id 。。然后你自己的Flash Id是多少。。 强制修改貌似可以。。。
#6
哦,我的没有NOR flash , 我的直接是从nand flash起来的。上面的那个1208的64M的nand flash是能直接跑起来的,换成128M的1g08 nand flash 也是能跑的,但换成1G的8g08之后连Uboot都跑不起来了,不知有何高见呢?
#7
晕菜了。。。没遇到过。。
#8
SLC和MLC区别非常大,两种的驱动差别非常大;不知道你用的是哪款处理器,你先读读处理器的Datasheet,看看支持不支持MLC,看NAND Flash控制器那章节就可以,MLC需要硬件ECC支持的。如果硬件处理器可以支持,然后检查uboot是否有MLC的驱动,有的话要检查这个驱动是否和你的硬件设备匹配。
#9
不懂uboot
#10
谢谢,我用的是samsung的6410,手册上说是支持mlc的,uboot里面有mlc的驱动,不过是在nand初始化的时候,即打印“NAND : xx M”的时候调用的,我的似乎还没跑到那里去哦。
网上说uboot首先是从start.s开始的,里面有打印“OK”的代码(即我的问题:打印OK后什么反应都没有了),在start.s里面有很简单的nand初始化代码,
nand_asm_init:
ldr r0, =ELFIN_NAND_BASE
ldr r1, [r0, #NFCONF_OFFSET]
orr r1, r1, #0x70
orr r1, r1, #0x7700
str r1, [r0, #NFCONF_OFFSET]
ldr r1, [r0, #NFCONT_OFFSET]
orr r1, r1, #0x03
str r1, [r0, #NFCONT_OFFSET]
应该不涉及MLC的问题,之后跟踪后续代码(即打印“OK”后),知道uboot要将自己copy到RAM,start.s里面是通过 “ bl copy_uboot_to_ram”调用外部copy_uboot_to_ram C函数实现的,奇怪的是没有跳回来(bl指令是要跳回来的吧?)。跟踪了copy_uboot_to_ram函数,加入了打印信息,根据打印信息知道copy_uboot_to_ram函数是执行完了的,为什么确跳不回来呢?? (问题可能就出在这里??)
注:在start.s正常流程的最后有跳到start_armboot的入口,之后就如网上说的进入了uboot启动的第二阶段,在这里就会有一大堆的初始化,就会打印如
U-Boot 1.1.6 (Aug 17 2009 - 15:12:10) for SMDK6410
CPU: S3C6410@532MHz
Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode)
Board: SMDK6410
DRAM: 128 MB
Flash: 0 kB
NAND: 64 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 2 一连串的打印信息。可惜,很想看到的这些内容确始终不出来。。。(哪怕出来了报错也好哈)
希望高手给点建议啊!!
#11
还是没什么进展,自己顶顶!!
#12
起码flash id总要改的吧。。。除非你的驱动里面本来就带这两种flash的支持。
#13
2g08以上的nandflash写地址的时候多了一次喔,所以还是有点不一样
#14
关注这个问题!解决的话分享一下啊!
#15
有代码,能编译,有trace,还有不能解决的问题嘛?一步步来嘛,一段段代码过,加trace,看死在什么地方。。。。
#16
楼主啊,问题解决了吗。。。能不能分享下。。
#17
一般的BSP会有设置整个BSP应用于MLC或者是SLC的全局变量,或者是有些BSP只适合SLC,有些只适合MLC,这点你先要搞清楚。
另外这两款FLASH的每个PAGE大小一样吗?访问周期是否一样?
MLC还涉及ECC的问题,这些都是需要注意的。
另外这两款FLASH的每个PAGE大小一样吗?访问周期是否一样?
MLC还涉及ECC的问题,这些都是需要注意的。
#18
SLC和MLC PAGE大小不一样,很多都不一样,连三星BSP都分两种,SLC和MLC的,就这样简单替换肯定不行
#19
谢谢大家,好久了这贴都忘了,由于我们那时不急着用8G08,所以放了一段时间,最后换了块板子,竟然就跑起来了,晕死!