硬汉嵌入式论坛

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

[ThreadX全家桶] 移植LevelX出现未擦除反复写是什么原因?

[复制链接]

2

主题

1

回帖

7

积分

新手上路

积分
7
发表于 2021-2-17 12:53:33 | 显示全部楼层 |阅读模式
执行   
lx_nor_flash_initialize();  
status = lx_nor_flash_open(&nor_flash, "lx nor", _lx_nor_flash_hal_initialize);
成功。

读写扇区时就开始反复往0x0C位置写数据(擦除接口未被调用过),然后失败。

  1.     lx_nor_flash_initialize();
  2.    
  3.     status = lx_nor_flash_open(&nor_flash, "lx nor", _lx_nor_flash_hal_initialize);
  4.    
  5.     do
  6.     {
  7.         if(status != LX_SUCCESS)
  8.         {
  9.             DBG_PRINT("lx_nor_flash_open error \n");
  10.             break;
  11.         }
  12.         else
  13.         {
  14.             DBG_PRINT("lx_nor_flash_open sucess \n");
  15.         }
  16.    
  17.         DBG_PRINT("read sector 0 \n");
  18.         status = lx_nor_flash_sector_read(&nor_flash, 0, local_buffer);
  19.         
  20.         if(status != LX_SUCCESS)
  21.         {
  22.             set_u32(local_buffer,1,sizeof(local_buffer)/4);
  23.             
  24.             DBG_PRINT("lx_nor_flash_read error \n");
  25.             
  26.             DBG_PRINT("write sector 0 \n");
  27.             status = lx_nor_flash_sector_write(&nor_flash, 0, local_buffer);
  28.             
  29.             if(status != LX_SUCCESS)
  30.             {
  31.                 DBG_PRINT("lx_nor_flash_write error \n");
  32.             }
  33.         }
  34.         
  35.         
  36.     } while(0);
复制代码


输出调试信息
  1. LX TEST START
  2. lx_nor_flash_open sucess
  3. read sector 0
  4. lx write : addr = 0x0000000c - amount = 1
  5. lx error code    1
  6. lx_nor_flash_read error
  7. write sector 0
  8. lx write : addr = 0x0000000c - amount = 1
  9. lx error code    1
  10. lx_nor_flash_write error
  11. LX TEST END
复制代码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119475
QQ
发表于 2021-2-17 15:27:22 | 显示全部楼层
levelx还没有测试过,后面移植到nand时试试。
回复

使用道具 举报

8

主题

108

回帖

142

积分

初级会员

积分
142
发表于 2021-2-17 19:27:18 | 显示全部楼层
初次调用LevelX需要调用一次ChipErase,进行整片擦除。
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-8-5 22:55:30 | 显示全部楼层
level对同一位置多次写入数据(由1改写位0),由于每次写入时,计算得到的ECC码并不完全也是由1改写为0,所以这会致使后续读取时ECC出错。大家时如何解决这个问题的
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-8-5 22:55:51 | 显示全部楼层
level对同一位置多次写入数据(由1改写位0),由于每次写入时,计算得到的ECC码并不完全也是由1改写为0,所以这会致使后续读取时ECC出错。大家时如何解决这个问题的
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-8-5 22:57:09 | 显示全部楼层
level对同一位置多次写入数据(由1改写位0),由于每次写入时,计算得到的ECC码并不完全也是由1改写为0,所以这会致使后续读取时ECC出错。大家时如何解决这个问题的
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-8-5 23:28:50 | 显示全部楼层
UINT  _lx_nand_flash_open(LX_NAND_FLASH  *nand_flash, CHAR *name, UINT (*nand_driver_initialize)(LX_NAND_FLASH *))
{
   .........
/* Setup the initial erase count to 1.  */
            page_word_ptr[0] =  (((ULONG) 1) | LX_BLOCK_ERASED);

            /* Write the initial erase count for the block.  */            
            status =  _lx_nand_flash_driver_write(nand_flash, block, 0, page_word_ptr, LX_NAND_ERASE_COUNT_WRITE_SIZE);

            /* Check for status after the block erase.  */
            if (status == LX_SUCCESS)
            {

                /* Setup the initial erase count to 1.  */
                page_word_ptr[0] =  ((ULONG) 1);

                /* Write the initial erase count for the block.  */            
                status =  _lx_nand_flash_driver_write(nand_flash, block, 0, page_word_ptr, LX_NAND_ERASE_COUNT_WRITE_SIZE);
            }

      ...........
}
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-8-5 23:33:35 | 显示全部楼层
level 对同一位置多次写入不通的数据,每次写入时,计算的ECC并不能保证每次也是全有1改写为0 ,所以会致使后续读取本页数据时,ECC会出错:
大家移植时是如何解决的?这样多次写入同一位置的代码有多处。
UINT  _lx_nand_flash_open(LX_NAND_FLASH  *nand_flash, CHAR *name, UINT (*nand_driver_initialize)(LX_NAND_FLASH *))
{
  ........
/* Setup the initial erase count to 1.  */
            page_word_ptr[0] =  (((ULONG) 1) | LX_BLOCK_ERASED);

            /* Write the initial erase count for the block.  */            
            status =  _lx_nand_flash_driver_write(nand_flash, block, 0, page_word_ptr, LX_NAND_ERASE_COUNT_WRITE_SIZE);

            /* Check for status after the block erase.  */
            if (status == LX_SUCCESS)
            {

                /* Setup the initial erase count to 1.  */
                page_word_ptr[0] =  ((ULONG) 1);

                /* Write the initial erase count for the block.  */            
                status =  _lx_nand_flash_driver_write(nand_flash, block, 0, page_word_ptr, LX_NAND_ERASE_COUNT_WRITE_SIZE);
            }

.........
}
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-8-5 23:34:26 | 显示全部楼层
level

/* Setup the initial erase count to 1.  */
            page_word_ptr[0] =  (((ULONG) 1) | LX_BLOCK_ERASED);
            /* Write the initial erase count for the block.  */            
            status =  _lx_nand_flash_driver_write(nand_flash, block, 0, page_word_ptr, LX_NAND_ERASE_COUNT_WRITE_SIZE);
            /* Check for status after the block erase.  */
            if (status == LX_SUCCESS)
            {
                /* Setup the initial erase count to 1.  */
                page_word_ptr[0] =  ((ULONG) 1);
                /* Write the initial erase count for the block.  */            
                status =  _lx_nand_flash_driver_write(nand_flash, block, 0, page_word_ptr, LX_NAND_ERASE_COUNT_WRITE_SIZE);
            }

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119475
QQ
发表于 2021-8-6 08:11:45 | 显示全部楼层
云心水影 发表于 2021-8-5 23:34
level

/* Setup the initial erase count to 1.  */

这个地址,给他们官方提升即可

https://github.com/azure-rtos/levelx
回复

使用道具 举报

8

主题

14

回帖

38

积分

新手上路

积分
38
发表于 2021-8-6 09:45:36 | 显示全部楼层
李益达 发表于 2021-2-17 19:27
初次调用LevelX需要调用一次ChipErase,进行整片擦除。

我在STM32上移植了ThreadX、FileX、GUIX、NetX duo,还差USBX和LevelX了
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-8-13 09:46:38 | 显示全部楼层
云心水影 发表于 2021-8-5 23:34
level

/* Setup the initial erase count to 1.  */

levelX 的nand flash那块在开启ecc的时候有bug
不开启的话,nand flash总是会有那么一两个bit有问题
解决方式:
1、自己模仿他写坏块管理,它的第一个页拿来加速映射表读取不要用,自己写映射表管理,基本上他现有的那套方案有ecc的模式下就不可用
2、在git上提bug等官方更新解决
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-24 13:59 , Processed in 0.057323 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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