主题 : 求助啊,uboot移植的64M和128M的nandfalsh启动问题啊 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 73892
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2012-07-16
最后登录: 2012-08-23
楼主  发表于: 2012-07-19 13:53

 求助啊,uboot移植的64M和128M的nandfalsh启动问题啊

我移植了一个uboot是看网上文章来的,但是他是64M的nand falsh启动,我是128M的nandfalsh启动,我需要怎么修改啊
级别: 新手上路
UID: 73892
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2012-07-16
最后登录: 2012-08-23
1楼  发表于: 2012-07-19 13:59
下载到nandflash后一点反应都没有啊,求高手啊
级别: 新手上路
UID: 73892
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2012-07-16
最后登录: 2012-08-23
2楼  发表于: 2012-07-19 14:04
#include <config.h>

#define NF_BASE   0x4E000000  

#define __REGb(x) (*(volatile unsigned char *)(x))
#define __REGi(x) (*(volatile unsigned int  *)(x))

#define NFCONF __REGi(NF_BASE + 0x0 )  
#define NFCONT __REGi(NF_BASE + 0x4 )  
#define NFCMD  __REGb(NF_BASE + 0x8 )  
#define NFADDR __REGb(NF_BASE + 0xC )
#define NFDATA __REGb(NF_BASE + 0x10)
#define NFSTAT __REGb(NF_BASE + 0x20)

#define NAND_CHIP_ENABLE  (NFCONT &= ~(1<<1))  
#define NAND_CHIP_DISABLE (NFCONT |= (1<<1))  
#define NAND_CLEAR_RB     (NFSTAT |= (1<<2))
#define NAND_DETECT_RB    { while(! (NFSTAT&(1<<2)) );}

#define NAND_SECTOR_SIZE 2048
#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)

/* low level nand read function */
int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
    int i, j;

    if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK))
    {
        return -1;
    }

    NAND_CHIP_ENABLE;

    for(i=start_addr; i < (start_addr + size);)
    {

        NAND_CLEAR_RB;
        NFCMD = 0;


        NFADDR = i & 0xFF;
        NFADDR = (i >> 8) & 0xFF;
        NFADDR = (i >> 12) & 0xFF;
        NFADDR = (i >> 20) & 0xFF;

        NAND_DETECT_RB;

        for(j=0; j < NAND_SECTOR_SIZE; j++, i++)
        {
            *buf = (NFDATA & 0xFF);
            buf++;
        }
    }

    NAND_CHIP_DISABLE;

    return 0;
}
这是nandflash rrad的程序啊
级别: 新手上路
UID: 73892
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2012-07-16
最后登录: 2012-08-23
3楼  发表于: 2012-07-19 14:06
#ifdef CONFIG_S3C2410_NAND_BOOT
    mov r1, #NAND_CTL_BASE
    ldr r2, =( (7<<12)|(7<<8)|(7<<4)|(0<<0) )
    str r2, [r1, #oNFCONF]  
    ldr r2, [r1, #oNFCONF]
    ldr r2, =( (1<<4)|(0<<1)|(1<<0) )
    str r2, [r1, #oNFCONT]  
    ldr r2, [r1, #oNFCONT]
    ldr r2, =(0x6)          
    str r2, [r1, #oNFSTAT]
    ldr r2, [r1, #oNFSTAT]
    mov r2, #0xff          
    strb r2, [r1, #oNFCMD]
    mov r3, #0          
nand1:
    add r3, r3, #0x1
    cmp r3, #0xa
    blt nand1
nand2:
    ldr r2, [r1, #oNFSTAT]  
    tst r2, #0x4
    beq nand2
    ldr r2, [r1, #oNFCONT]
    orr r2, r2, #0x2        
    str r2, [r1, #oNFCONT]
  
    ldr sp, DW_STACK_START  
    mov fp, #0              
    //copy U-Boot to RAM
    ldr r0, =TEXT_BASE
    mov r1, #0x0    
    mov r2, #0x30000
    bl nand_read_ll  
    tst r0, #0x0
    beq ok_nand_read
bad_nand_read:
    loop2: b loop2    
ok_nand_read:

    mov r0, #0
    ldr r1, =TEXT_BASE
    mov r2, #0x400           //4 bytes * 1024 = 4K-bytes
go_next:
    ldr r3, [r0], #4
    ldr r4, [r1], #4
    teq r3, r4
    bne notmatch
    subs r2, r2, #4
    beq stack_setup
    bne go_next
notmatch:
    loop3: b loop3           //infinite loop
#endif //CONFIG_S3C2440_NAND_BOOT

这个读取nand flash的,但是这是64M的,如果是128M的nand flash怎么修改啊
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2012-07-19 15:50
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 73892
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2012-07-16
最后登录: 2012-08-23
5楼  发表于: 2012-07-20 17:53
我现在找不到当他拷贝完成以后是如何跳转的内存的
级别: 新手上路
UID: 73892
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2012-07-16
最后登录: 2012-08-23
6楼  发表于: 2012-07-20 17:55
执行了ok_nand_read:之后notmatch:bad_nand_read:都是没有执行的,但是ldr    pc, _start_armboot这个他也没有执行,我不知道他到底执行到哪了