硬汉嵌入式论坛

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

[ThreadX全家桶] FileX+LevelX(6.2.1) NANDFLASH 更新后移植

  [复制链接]

3

主题

16

回帖

25

积分

新手上路

积分
25
发表于 2023-4-23 15:11:54 | 显示全部楼层 |阅读模式
6.2.1版本的Levelx变更比较大,初始化前需要对NAND进行格式化一次;即在fx_media_format前调用_lx_nand_flash_format;

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2023-4-24 09:06:54 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

1

主题

75

回帖

78

积分

初级会员

积分
78
发表于 2023-4-25 09:35:49 | 显示全部楼层
6.2.1重新设计了NAND逻辑,修复了无法启用硬件ECC的问题
回复

使用道具 举报

2

主题

55

回帖

61

积分

初级会员

积分
61
发表于 2023-4-25 23:49:42 来自手机 | 显示全部楼层
都这会了,怎么还在修这些问题了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2023-4-26 10:14:46 | 显示全部楼层
tomyqg 发表于 2023-4-25 23:49
都这会了,怎么还在修这些问题了

这很正常,现在的芯片操作NAND都带了硬件ECC。像STM32的FMC,使用硬件ECC就要针对这些特地芯片开启。

回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
发表于 2024-2-1 10:58:49 | 显示全部楼层
阅读了一下源码,也发现了这个问题,不然_lx_nand_flash_open会报错退出
回复

使用道具 举报

2

主题

16

回帖

22

积分

新手上路

积分
22
发表于 2024-2-1 11:06:49 | 显示全部楼层
#define BAD_BLOCK_POSITION          0   /* 0 is the bad block byte postion */
#define EXTRA_BYTE_POSITION         2   /* 2 is the extra bytes starting byte postion */
#define ECC_BYTE_POSITION           40  /* 40 is the ECC starting byte position */

#define SPARE_DATA1_OFFSET                  4
#define SPARE_DATA1_LENGTH                  4
#define SPARE_DATA2_OFFSET                  2
#define SPARE_DATA2_LENGTH                  2

请问一页是4096+224的情况下,上面的参数怎么设置好啊
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-8-12 22:41:57 | 显示全部楼层
莫问1990 发表于 2024-2-1 11:06
#define BAD_BLOCK_POSITION          0   /* 0 is the bad block byte postion */
#define EXTRA_BYTE_PO ...


#define SPARE_DATA1_OFFSET                  4
#define SPARE_DATA1_LENGTH                  4
#define SPARE_DATA2_OFFSET                  2
#define SPARE_DATA2_LENGTH                  2

对于NANDFLASH这里的 4个宏定义的含义是啥?能指点一下吗?字面意思是备用字节的偏移地址,但4 又不对!
回复

使用道具 举报

49

主题

385

回帖

532

积分

金牌会员

积分
532
发表于 2024-8-14 09:44:52 | 显示全部楼层
这位兄台测试过基于这套中间件的读写速度吗?跟SDXC操作TF卡或eMMC相比较能差多少?
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2024-10-11 17:21:55 | 显示全部楼层
eric2013 发表于 2023-4-26 10:14
这很正常,现在的芯片操作NAND都带了硬件ECC。像STM32的FMC,使用硬件ECC就要针对这些特地芯片开启。

请问硬汉大佬有没有硬件ECC开启的示例代码呢,我在源码中暂时未发现如何启用芯片的硬件ECC使能
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-10-12 09:34:49 | 显示全部楼层
zorna 发表于 2024-10-11 17:21
请问硬汉大佬有没有硬件ECC开启的示例代码呢,我在源码中暂时未发现如何启用芯片的硬件ECC使能

这个没有,现在做的NAND例子都是用的软件ECC。

因为STM32提供的这个NAND ECC仅仅是做了个计算,而校验比较和ECC修正需要用户自己做。所以就移植用软件的了。
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2024-10-14 08:35:09 | 显示全部楼层
eric2013 发表于 2024-10-12 09:34
这个没有,现在做的NAND例子都是用的软件ECC。

因为STM32提供的这个NAND ECC仅仅是做了个计算,而校验 ...

那也就是说把STM32的硬件ECC这个功能给关掉了,然后将软件计算出的数据写入NAND FLASH的Spare区域?那如果我想使用硬件ECC的功能(我用的是NXP的,支持硬件层面的ECC计算以及数据纠错),移植Levelx代码的时候,应该怎么切换到硬件ECC的模式呢,我目前想到的是实现Levelx所需的函数时,调用硬件ECC的处理逻辑,不进行软件ECC校验
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2024-10-14 09:31:25 | 显示全部楼层
_lx_nand_flash_open这个函数中存在着下面的代码,
/* Check the spare data length.  */
    if (nand_flash -> lx_nand_flash_spare_data1_length < sizeof(ULONG))
    {

        /* Return an error.  */
        return(LX_ERROR);
    }
但是我要是启用了硬件ECC,spare区域不就不应该进行写入了吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-10-14 10:01:51 | 显示全部楼层
zorna 发表于 2024-10-14 08:35
那也就是说把STM32的硬件ECC这个功能给关掉了,然后将软件计算出的数据写入NAND FLASH的Spare区域?那如 ...

这个我倒是没有研究过了,你可以看下有对应的宏定义设置没,关闭了软件ECC即可。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-2-20 14:16:05 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 06:53 , Processed in 0.043445 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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