硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2810|回复: 13
收起左侧

建立NANDFLASH坏块表

[复制链接]

6

主题

44

回帖

62

积分

初级会员

积分
62
发表于 2017-10-7 11:42:03 | 显示全部楼层 |阅读模式
我框哪里是多余的吧!
QQ图片20171007033549.png
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-7 11:42:24 | 显示全部楼层
你加1就不是坏块标志
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-7 11:44:32 | 显示全部楼层
*********************************************************************************************************
*    函 数 名: NAND_BuildLUT
*    功能说明: 在内存中创建坏块管理表
*    形    参:  ZoneNbr :区号
*    返 回 值: NAND_OK: 成功;     NAND_FAIL:失败
*********************************************************************************************************
*/
static uint8_t NAND_BuildLUT(void)
{
    uint16_t i;
    uint8_t buf[VALID_SPARE_SIZE];
    uint16_t usLBN;    /* 逻辑块号 */

    /* */
    for (i = 0; i < NAND_BLOCK_COUNT; i++)
    {
        s_usLUT = 0xFFFF;    /* 填充无效值,用于重建LUT后,判断LUT是否合理 */
    }
    for (i = 0; i < NAND_BLOCK_COUNT; i++)
    {
        /* 读每个块的第1个PAGE,偏移地址为LBN0_OFFSET的数据 */
        FSMC_NAND_ReadSpare(buf, i * NAND_BLOCK_SIZE, 0, VALID_SPARE_SIZE);

        /* 如果是好块,则记录LBN0 LBN1 */
        if (buf[BI_OFFSET] == 0xFF)
        {
            usLBN = buf[LBN0_OFFSET] + buf[LBN1_OFFSET] * 256;    /* 计算读出的逻辑块号 */
            if (usLBN < NAND_BLOCK_COUNT)
            {
                /* 如果已经登记过了,则判定为异常 */
                if (s_usLUT[usLBN] != 0xFFFF)
                {
                    return NAND_FAIL;
                }

                s_usLUT[usLBN] = i;    /* 更新LUT表 */
            }
        }
    }

    /* LUT建立完毕,检查是否合理 */
    for (i = 0; i < NAND_BLOCK_COUNT; i++)
    {
        if (s_usLUT >= NAND_BLOCK_COUNT)
        {
            s_usValidDataBlockCount = i;
            break;
        }
    }
    if (s_usValidDataBlockCount < 100)
    {
        /* 错误: 最大的有效逻辑块号小于100。可能是没有格式化 */
        return NAND_FAIL;
    }
    for (; i < s_usValidDataBlockCount; i++)
    {
        if (s_usLUT != 0xFFFF)
        {
            return NAND_FAIL;    /* 错误:LUT表逻辑块号存在跳跃现象,可能是没有格式化 */
        }
    }

    /* 重建LUT正常 */
    return NAND_OK;
}
为什么以0XFFFF作为标志;不是OOB里坏块的标志
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2017-10-7 12:21:59 | 显示全部楼层
以后你的NAND相关的问题就在这个帖子里面聊就行了,你已经发了好几个帖子了,帖子都是没有结帖都收尾。

ps:这个NAND的驱动是站长做的,如果你想研究讨论,请联系站长。可以旺旺联系咨询下,另外上次给你推荐的RL-FlashFS很好用的,拿去用就好了。
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-7 16:03:51 | 显示全部楼层
你意思不用管理坏块吗
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-7 17:07:42 | 显示全部楼层
好啊!你那个RL_FLASHFS怎么移植的啊
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-7 17:47:08 | 显示全部楼层
还有一个问题啊!你那个RL_FLASHFS文件系统适用所有的NANDFLASH吗
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-7 18:32:02 | 显示全部楼层
我看了你那个RL_FLASHFS;我是不是还要实现底层扇区驱动
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-10 14:27:39 | 显示全部楼层
还有这里的i是逻辑块号还是物理块号
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-10 14:28:23 | 显示全部楼层
还有这里的i是逻辑块号还是物理块号
QQ图片20171010062341.png
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-10 17:04:38 | 显示全部楼层
为啥把物理块号都赋值0XFFFF
QQ图片20171010085941-A.png
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-10 17:21:22 | 显示全部楼层
为啥把物理块号都赋值0XFFFF
QQ图片20171010091629-B.png
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-10 18:02:55 | 显示全部楼层
还有你这里的逻辑块;是LSN0;LSN1;LSN2
QQ图片20171010095732-C.png
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-10 18:03:20 | 显示全部楼层
怎么你只用LSN0和LSN1
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-10 05:57 , Processed in 0.315406 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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