硬汉嵌入式论坛

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

[有问必答] 求NANDFLASH 64Byte的OOB结构

[复制链接]

6

主题

44

回帖

62

积分

初级会员

积分
62
发表于 2017-9-29 18:24:54 | 显示全部楼层 |阅读模式
老大你有64BYTE的这个资料吗
捕获.PNG
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-9-29 18:25:29 | 显示全部楼层
64BYTE是一个什么样的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-9-30 00:23:14 | 显示全部楼层
NAND_Flash_ECC_Algorithm(SAMSUNG).pdf (166 KB, 下载次数: 84)
NAND_Flash_Spare_Assignment_Standard(SAMSUNG).pdf (168 KB, 下载次数: 74)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-9-30 00:24:28 | 显示全部楼层
NAND Flash管理算法的设计及实现.pdf (149 KB, 下载次数: 76)

评分

参与人数 1金币 +20 收起 理由
----- + 20 很给力!

查看全部评分

回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-9-30 10:06:46 | 显示全部楼层
谢谢
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-9-30 14:20:21 | 显示全部楼层
你那个建立坏块表根据什么逻辑?
1.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-10-2 10:18:54 | 显示全部楼层

回 nicejack 的帖子

nicejack:你那个建立坏块表根据什么逻辑?
 (2017-09-30 14:20) 
你一楼发的。具体看我上次的手册。
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-6 17:12:09 | 显示全部楼层
你那个建立LUT表是根据什么来的
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-6 17:12:43 | 显示全部楼层
没看懂你的逻辑
回复

使用道具 举报

6

主题

44

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2017-10-6 17:13:16 | 显示全部楼层
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;    /* 计算读出的逻辑块号 */
            //1页=2^14        一个块64页
            //逻辑空间地址为M位  M=20
            if (usLBN < NAND_BLOCK_COUNT)
            {
                /* 如果已经登记过了,则判定为异常 */
                if (s_usLUT[usLBN] != 0xFFFF)
                {
                    return NAND_FAIL;
                }

                s_usLUT[usLBN] = i;    /* 更新LUT表 */
                printf("%d%\\n",i);
                printf("\\r\\n");
            }
        }
    }

    /* 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;
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-17 01:18 , Processed in 0.049756 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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