yaffs2和MLC 4G nand flash驱动问题

hellochick 2011-09-23 09:41:21
最近在做MLC 4G nand flash驱动,现在驱动完成。
但是mount -t yaffs2 /dev/mtdblock0 /root/nand/之后,
执行cp文件到/root/nand/,或者其他操作,有下面的错误:
1,
**>> Block 203 needs retiring
**>> yaffs write required 2 attempts
……
2,还会调用nand_default_block_markbad标记坏块(其实不是坏块)
3,__nand_correct_data 中 uncorrectable error

初步推测是因为4G nand flash,有溢出??ecc??
fs/yaffs2/需要修改??
之前没做过,没思路,网上搜索,yaffs2蛮复杂,求指导...
...全文
601 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellochick 2011-10-20
  • 打赏
  • 举报
回复

使用纠正1bit错误的ecc算法,比较nandwrite 和 nanddump 数据,是正确的;
或者flashcp,校验也正确;

但是,通过mount,yaffs2文件系统,cp 等操作,就会出错!
uncorrectable error
并且,拷贝的文件越多越容易出错(跟大小关系不大)
为什么呢?至今没明白!

之所以出现uncorrectable error,是因为出现了1bit以上的位错误,
改用bch纠正4——8bit,可以解决问题,但是速度慢了很多。
hellochick 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zmlovelx 的回复:]

你用 mtd utils 工具中的nandwrite写yaffs镜像进去看看. 记得写前先探除下.
[/Quote]

调试文件系统发现,写入数据后,调用verify检测,发现有数据错误,而且无规律,(也有正确的)

而且,对照时序图,检查寄存器配置,之后,问题依然存在。

会不会是nand_ecc.c只是针对slc来做的校验,

而mlc,更容易出现位错误,所以ecc没办法校验,导致出错呢?
帅得不敢出门 2011-09-23
  • 打赏
  • 举报
回复
你用 mtd utils 工具中的nandwrite写yaffs镜像进去看看. 记得写前先探除下.

hellochick 2011-09-23
  • 打赏
  • 举报
回复
kernel:2.6.32

nand flash:
page size 4096byte
block size 1M
chip size 4G
hellochick 2011-09-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zmlovelx 的回复:]

mtdblock0一般是存放u-boot的,u-boot 并非yaffs2格式.

yaffs的确让很多人苦了一把, 从 yaffs mtd utils u-boot kernel都有可能出问题

新的yaffs倒是对oob的部分做了调整与kernel一致了.

uncorrectable error 这个可能是写u-boot中写时采用的ecc规则与kernel中的不一致.
……
[/Quote]
zmlovelx你好,

上述/dev/mtdblock0是没加入nor flash情况下,加入nor,换成/dev/mtdblock2是一样的。
是在kernel中进行的,不是u-boot,而且nand flash是用的soft ecc。
kernel加载nand flash之后,进入nfs文件系统:
[root@AM3517CPB /root]# mount -t yaffs2 /dev/mtdblock2 /root/nand/
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
block 15 is bad
block 21 is bad
yaffs_read_super: isCheckpointed 0

[root@AM3517CPB nand]# cp /yaffs.tgz .
uncorrectable error :
**>> Block 249 needs retiring
**>> yaffs write required 2 attempts
++nand_default_block_markbad++
**>> Block 249 retired
Block 249 is in state 9 after gc, should be erased
uncorrectable error :
**>> Block 264 needs retiring
**>> yaffs write required 2 attempts
++nand_default_block_markbad++
**>> Block 264 retired
Block 264 is in state 9 after gc, should be erased
……

(其中++nand_default_block_markbad++是我自己加的调试信息,其他是yaffs2里面的)

[root@AM3517CPB nand]# ls -lh
drwx------ 1 root root 4.0k Jan 1 00:02 lost+found
-rw-r--r-- 1 root root 125.6M Jan 1 00:03 yaffs.tgz

yaffs.tgz是拷贝过来了,但是这过程中间不应该有坏块啊。。。

而且,多尝试几次,在这里tar zxf yaffs.tgz有可能出错:tar: crc error

说明数据读写有问题,该怎么调呢?
帅得不敢出门 2011-09-23
  • 打赏
  • 举报
回复
mtdblock0一般是存放u-boot的,u-boot 并非yaffs2格式.

yaffs的确让很多人苦了一把, 从 yaffs mtd utils u-boot kernel都有可能出问题

新的yaffs倒是对oob的部分做了调整与kernel一致了.

uncorrectable error 这个可能是写u-boot中写时采用的ecc规则与kernel中的不一致.
如果都是在kernel中写的, 也有可能是本身ecc 配置不对, 我遇到是采用硬件ecc,写时与读时产生的ecc不同, 每次读时都会出现这个,改成软件ecc没事.

内容概要:本文围绕Java环境配置在通信行业中的实际应用展开,重点阐述了如何通过标准化JDK版本、构建工具、容器化运行环境及配置管理,支撑话单处理、在线计费、5G网元等高并发、低延迟、强一致性的通信系统。文章以话单消费服务为例,深入剖析了Kafka消费者设计、JDBC批量插入、容器感知JVM参数配置、异常处理机制与可观测性集成等关键技术细节,强调Java环境配置在通信领域不仅是运行基础,更是保障系统稳定性与可维护性的工程规范。; 适合人群:具备Java开发基础,从事通信行业系统开发、运维或架构工作的1-5年经验研发人员;尤其适用于参与计费、网管、信令、风控等系统的工程师。; 使用场景及目标:①掌握通信级Java应用的环境标准化配置方法;②理解高吞吐话单处理服务的设计与调优要点;③构建可在多厂商、多机房环境下稳定运行的Java微服务;④实现与K8s、Prometheus、Kafka等云原生组件的深度集成。; 阅读建议:此文档强调工程实践,建议结合代码案例在真实环境中部署调试,重点关注JVM容器化参数、配置外部化、异常传播机制与监控接入方式,理解每一行配置背后的通信业务约束与可靠性考量。

4,469

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧