打印

ads调试2410,从nandflash读数据,读出的全部是零,大侠指导呀

[复制链接]
3180|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxxxr|  楼主 | 2007-4-3 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
btiger2000| | 2007-4-3 10:50 | 只看该作者

先读出ID

使用特权

评论回复
板凳
lxxxr|  楼主 | 2007-4-3 11:12 | 只看该作者

id是什么?

btiger2000您说的id是什么呢?

我将详细的相关程序贴在下面

;reset nand
>    ldr r1,=0x4E000000       ;NFCONF
>    ldr r2,=0xf830           ;TWRPH0=3,TACLS=0,NAND CHIP INACTIVE,INITIALIZE ECC
>    str r2,[r1]        
>    ldr r2,[r1]
>    bic r2,r2,#0x800        ;NAND CHIP ACTIVE,ENABLE NAND FLASH CONTROLER
>    str r2,[r1]          
>    mov r2,#0xff
>    strb r2,[r1,#0x04]    ;NFCMD
>    mov r3,#0
>1      add r3,r3,#0x1
>    cmp r3,#0xa
>    blt %b1
>2      ldr r2,[r1,#0x10]       ;NFSTAT
>    TST r2,#0X1
>    beq %b2
>    ldr r2,[r1]
>    orr r2,r2,#0x800        ;disable chip
>    str r2,[r1]
>
>
>    ldr sp,=0x33df6ffb      ;DW_STACK_START ******  setup stack pionter
>    mov fp,#0
>    
>    ldr r0,=0x33f00000       ;VIVI_RAM_BASE   
>    mov r1,#0x0
>    mov r2,#0x20000         ;要拷贝128k
>;*******************************************************************************    
>
>    
>    bl nand_read_ll         ;nand_read_ll函数将nand的从0地址处开始的128k的内
>
>
>容读到 ram的指定处
下面是nand_read_ll函数:

#define NFCONF        (*(volatile unsigned char *)0x4e000000)
>#define NFCMD        (*(volatile unsigned char *)0x4e000004)
>#define NFADDR        (*(volatile unsigned char *)0x4e000008)
>#define NFDATA        (*(volatile unsigned char *)0x4e00000c)
>#define NFSTAT        (*(volatile unsigned char *)0x4e000010)
>#define BUSY 1
> void wait_idle(void) {
>    int i;
>
>    while(!(NFSTAT & BUSY))
>      for(i=0; i<10; i++);
>}
>
>#define NAND_SECTOR_SIZE    512
>#define NAND_BLOCK_MASK        (NAND_SECTOR_SIZE - 1)
>
>/* low level nand read function */
>int nand_read_ll(unsigned int *buf, unsigned long start_addr, int size)
>{                     //(0x33f00000,#0x0,#0x20000)
>    int i, j;
>
>    if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK))
>     {
>        return -1;    /* invalid alignment */
>    }
>
>    /* chip Enable */
>    NFCONF &= ~0x800;
>    for(i=0; i<10; i++);
>
>    for(i=start_addr; i < (start_addr + size);) {
>      /* READ0 */
>      NFCMD = 0;
>
>      /* Write Address */
>      NFADDR = i & 0xff;
>      NFADDR = (i >> 9) & 0xff;
>      NFADDR = (i >> 17) & 0xff;
>      NFADDR = (i >> 25) & 0xff;
>
>      wait_idle();
>
>      for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
>    *buf = (NFDATA & 0xff);
>    buf++;
>      }
>    }
>
>    /* chip Disable */
>    NFCONF |= 0x800;    /* chip disable */
>
>    return 0;
>    
>}

使用特权

评论回复
地板
lxxxr|  楼主 | 2007-4-3 16:18 | 只看该作者

没有大侠给俺建议吗?好失望

没有大侠给俺建议吗?好失望

使用特权

评论回复
5
阿南| | 2007-4-3 17:57 | 只看该作者

re:btiger2000已建议你先读k9f1208的ID了,

如果ID都没读正确,那肯定不行
可以去三星网站下公版的Nandflash的boot程序参考参考

使用特权

评论回复
6
lxxxr|  楼主 | 2007-4-3 18:18 | 只看该作者

先谢谢上面两位大侠的指导,我参考vivi源代码写的

先谢谢上面两位大侠的指导,我参考vivi源代码写的,vivi的源代码里并没有读nandflash的id的程序指令呀?也是上来设置寄存器然后就复制数据,并没有读它的id,难道不先读id就不能将里面的数据读出吗?请上面两大侠详细说一下,不胜感激!!!

使用特权

评论回复
7
wgj_fly| | 2007-4-4 00:57 | 只看该作者

驱动有问题?

使用特权

评论回复
8
阿南| | 2007-4-4 13:31 | 只看该作者

读id只是让你验证一下你的硬件,及读写程序是否正确。

假如你的硬件本身就有问题,你看这一堆的代码又有何用?

使用特权

评论回复
9
lxxxr|  楼主 | 2007-4-4 22:50 | 只看该作者

怎么读id?请给一段示例程序,我在实验室上不了国外的网

那位大侠给一个三星网站公布的Nandflash的boot源程序,俺的邮箱是:lxxxr@bit.edu.cn
大侠们也是过来人,都知道新手的郁闷,那位真正的大牛请帮帮忙,没有资料的顶一下
谢谢了

使用特权

评论回复
10
lxxxr|  楼主 | 2007-4-6 09:25 | 只看该作者

感谢

使用特权

评论回复
11
lxxxr|  楼主 | 2007-4-6 09:26 | 只看该作者

感谢greathead_2000,非常感谢您的帮助。

谢谢牛人!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝