天嵌 ARM开发社区

 找回密码
 注册
查看: 2865|回复: 5

关于光盘上面 uboot1.1.6那个nandflash坏块检查的地方

[复制链接]
happain 发表于 2013-1-13 02:17:56 | 显示全部楼层 |阅读模式
if(1){
                int col, page;

                col = i & NAND_BLOCK_MASK_LP;
                page = i / NAND_SECTOR_SIZE_LP;
                /* 鍙戝嚭READ0鍛戒护 */
                write_cmd(0x00);

                *p = 5;
                for(j=0; j<10; j++);
                *p = 8;
                for(j=0; j<10; j++);

                *p = page & 0xff;                /* Row Address A12~A19 */
                for(j=0; j<10; j++);
                *p = (page >> 8) & 0xff;                /* Row Address A20~A27 */
                for(j=0; j<10; j++);
if (b128MB == 0)
                *p = (page >> 16) & 0x03;                /* Row Address A28~A29 */
                for(j=0; j<10; j++);

                write_cmd(0x30);
                wait_idle();

                dat = read_data();
               
               
                nand_deselect_chip();
                if(dat != 0xff)
                        i += 131072;                // 1 Block = 2048*64= 131072
我看了datasheet  上面说大叶检查是列地址2048,而现在你用的
                     *p = 5;
                for(j=0; j<10; j++);
                *p = 8;
这个地址是2053,应该是spare data的第6个地址,这不是小叶的检查方式么,不知道我理解的对不对,请大神指点一下。
亚瑟王 发表于 2013-1-14 11:12:57 | 显示全部楼层
这个地方和我们的设置有关,理论上可以将判断坏块的区域放到任意地方。比如wince就是这样,它用oob空间来做标志,判断是坏块还是保留块,然后坏块标志的位置就变化了。
 楼主| happain 发表于 2013-1-16 00:59:40 | 显示全部楼层
亚瑟王 发表于 2013-1-14 11:12
这个地方和我们的设置有关,理论上可以将判断坏块的区域放到任意地方。比如wince就是这样,它用oob空间来做 ...

nand_select_chip();

        for(i=start_addr; i < (start_addr + size);)
        {
/* Check Bad Block */
if(1){
                int col, page;

                col = i & NAND_BLOCK_MASK_LP;
                page = i / NAND_SECTOR_SIZE_LP;
                /* 鍙戝嚭READ0鍛戒护 */
                write_cmd(0x00);

                *p = 5;
                for(j=0; j<10; j++);
                *p = 8;
                for(j=0; j<10; j++);
                *p = page & 0xff;                /* Row Address A12~A19 */
                for(j=0; j<10; j++);
                *p = (page >> 8) & 0xff;                /* Row Address A20~A27 */
                for(j=0; j<10; j++);
if (b128MB == 0)
                *p = (page >> 16) & 0x03;                /* Row Address A28~A29 */
                for(j=0; j<10; j++);

                write_cmd(0x30);
                wait_idle();

                dat = read_data();
               
                /* 鍙栨秷鐗囬
 楼主| happain 发表于 2013-1-16 01:03:20 | 显示全部楼层
亚瑟王 发表于 2013-1-14 11:12
这个地方和我们的设置有关,理论上可以将判断坏块的区域放到任意地方。比如wince就是这样,它用oob空间来做 ...

我一楼那个i += 131072;这个地方,我i认为执行玩检测坏块后应该加上一个continue这个关键词,如果不加,按照程序的意思就是第一次检测到坏块,i += 131072;就直接执行下一个块,而下一个块并没有检测好坏,如果加了continue的话,就退出本次循环检测i += 131072;后的这个块,不知道我这样理解对不对。
亚瑟王 发表于 2013-1-17 10:46:50 | 显示全部楼层
happain 发表于 2013-1-16 01:03
我一楼那个i += 131072;这个地方,我i认为执行玩检测坏块后应该加上一个continue这个关键词,如果不加,按 ...

这个流程我记得调试的时候是没有发现问题的,建议你把上下联系起来看一下。
如果是坏块就跳过这个块。
 楼主| happain 发表于 2013-1-17 20:13:22 | 显示全部楼层
亚瑟王 发表于 2013-1-17 10:46
这个流程我记得调试的时候是没有发现问题的,建议你把上下联系起来看一下。
如果是坏块就跳过这个块。

你说的我明白,如果是坏块就跳过这个块,但是你确定现在这个是坏块了,下一个坏块不检测就用么?
是不是我对条块理解的不对啊,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-4 04:19 , Processed in 1.046881 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表