还有几个概念,想请大家给分析下,
1 nand flash是块擦除,页读写。
当一个页读/写失败了,那么是否要将其所在块标识成坏块。
2 ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?
3 是否只有当擦除一个块失败之后,才可以把该块视为坏块?
请教各位过来人,关于这方面有没有什么可以可供参考的信息!大家也可以帮偶分析下,探讨探讨!
5 个解决方案
#1
是什么操作系统呢?
如果是成熟的OS,比如wince/linux/winxpEmbedded/ucOSII的,就不用担心,已经实现FAT/FAT32了。而且对ECC和坏块有专门的管理策略。
如果是一般简化系统自己增加(比如单片机上的实时系统),就的确需要自己来实现。
FAT层属于“文件系统”(File System),只要符合FAT规定即可,以Sector来操作。
驱动层就需要完成ECC处理,提交各Sector信息,一个Block有多个Sector的,需要对多sector的处理进行管理。
1. 是的,不然再向里面写入数据就无法保证安全。
2. ECC就是针对NAND会出坏块的特征,提出的对数据进行校验算法,以验证是否发生了位翻转错误。不可关闭
3. 不一定。有的时候为了保护某些位置,也可将其标为坏块。
如果是成熟的OS,比如wince/linux/winxpEmbedded/ucOSII的,就不用担心,已经实现FAT/FAT32了。而且对ECC和坏块有专门的管理策略。
如果是一般简化系统自己增加(比如单片机上的实时系统),就的确需要自己来实现。
FAT层属于“文件系统”(File System),只要符合FAT规定即可,以Sector来操作。
驱动层就需要完成ECC处理,提交各Sector信息,一个Block有多个Sector的,需要对多sector的处理进行管理。
1. 是的,不然再向里面写入数据就无法保证安全。
2. ECC就是针对NAND会出坏块的特征,提出的对数据进行校验算法,以验证是否发生了位翻转错误。不可关闭
3. 不一定。有的时候为了保护某些位置,也可将其标为坏块。
#2
读写page的过程中,如果ecc校验失败,那么这个数据就读写错误了,那么这个时候是否应该将其视为坏块!
#3
Mark,偶做过一点,没有做完,用单片机很难满足性能要求,你用什么U,跑多少频率,最高bus速率是多少?FAT系统不要紧,实现比较容易,麻烦的是FTL实现.
#4
1 nand flash是块擦除,页读写。
当一个页读/写失败了,那么是否要将其所在块标识成坏块。
2 ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?
3 是否只有当擦除一个块失败之后,才可以把该块视为坏块?
说一下我的理解:
1.一般是擦除erase之后,发现擦除失败,才会去标记此为坏块。
一般的读写出错,是通过ECC校验算法去检错和纠错的。好像不涉及到坏块标记。
这部分没细节去研究过,有空研究研究。
2.ECC的出现是由于nand flash读写过程中都容易出错,所以才需要在读写前后,去用校验算法检测和纠错读/写的数据,
是否发生错误,以及发生错误去纠正错误。
ECC校验失败,未必一定是坏块。系统具体如何处理,我没去深究。
个人感觉,也有可能多做一次读写,如果再次错误,可以把其标记为坏块。
ECC理论上你可以关闭,但是实际会存在很大问题。因为硬件特性决定nand flash出错几率大,
你关闭了,那读写过程很容易发生错误,使得无法正常使用。
3。参见上面,我的理解,擦除失败,只是动态使用过程中的,一种识别方法。
其他的,也有可能读写多次失败而去标记坏块。
关于nand flash更多资料,参考:
【简介】如何编写linux下nand flash驱动
http://green-waste.blog.163.com/blog/static/326776782009622112913547/
另外,对于在nand flash上实现其他文件系统,比如FAT
个人没做过,不过看过介绍,最简单的是在上实现一个转换层,叫做
NFTL(Nand Flash Translation Layer),但是由于nand flash的读写特性,使得这样的文件系统总体效率会很低,
所以,才会出现jffs/jffs2,yaffs/yaffs2,这类专门针对nand/nor flash的文件系统。
如果只是学习研究,那么这么做还是可以慢慢学到很多东西的。
如果真正想做好,那么个人觉得没必要。
不如去抽空折腾yaffs之类的,会更有实际意义。
当一个页读/写失败了,那么是否要将其所在块标识成坏块。
2 ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?
3 是否只有当擦除一个块失败之后,才可以把该块视为坏块?
说一下我的理解:
1.一般是擦除erase之后,发现擦除失败,才会去标记此为坏块。
一般的读写出错,是通过ECC校验算法去检错和纠错的。好像不涉及到坏块标记。
这部分没细节去研究过,有空研究研究。
2.ECC的出现是由于nand flash读写过程中都容易出错,所以才需要在读写前后,去用校验算法检测和纠错读/写的数据,
是否发生错误,以及发生错误去纠正错误。
ECC校验失败,未必一定是坏块。系统具体如何处理,我没去深究。
个人感觉,也有可能多做一次读写,如果再次错误,可以把其标记为坏块。
ECC理论上你可以关闭,但是实际会存在很大问题。因为硬件特性决定nand flash出错几率大,
你关闭了,那读写过程很容易发生错误,使得无法正常使用。
3。参见上面,我的理解,擦除失败,只是动态使用过程中的,一种识别方法。
其他的,也有可能读写多次失败而去标记坏块。
关于nand flash更多资料,参考:
【简介】如何编写linux下nand flash驱动
http://green-waste.blog.163.com/blog/static/326776782009622112913547/
另外,对于在nand flash上实现其他文件系统,比如FAT
个人没做过,不过看过介绍,最简单的是在上实现一个转换层,叫做
NFTL(Nand Flash Translation Layer),但是由于nand flash的读写特性,使得这样的文件系统总体效率会很低,
所以,才会出现jffs/jffs2,yaffs/yaffs2,这类专门针对nand/nor flash的文件系统。
如果只是学习研究,那么这么做还是可以慢慢学到很多东西的。
如果真正想做好,那么个人觉得没必要。
不如去抽空折腾yaffs之类的,会更有实际意义。
#5
这个是pdf版本的,也许对你有用:
【简介】如何编写linux下nand flash驱动 v1.0 .pdf
http://download.csdn.net/source/1513220
【简介】如何编写linux下nand flash驱动 v1.0 .pdf
http://download.csdn.net/source/1513220
#1
是什么操作系统呢?
如果是成熟的OS,比如wince/linux/winxpEmbedded/ucOSII的,就不用担心,已经实现FAT/FAT32了。而且对ECC和坏块有专门的管理策略。
如果是一般简化系统自己增加(比如单片机上的实时系统),就的确需要自己来实现。
FAT层属于“文件系统”(File System),只要符合FAT规定即可,以Sector来操作。
驱动层就需要完成ECC处理,提交各Sector信息,一个Block有多个Sector的,需要对多sector的处理进行管理。
1. 是的,不然再向里面写入数据就无法保证安全。
2. ECC就是针对NAND会出坏块的特征,提出的对数据进行校验算法,以验证是否发生了位翻转错误。不可关闭
3. 不一定。有的时候为了保护某些位置,也可将其标为坏块。
如果是成熟的OS,比如wince/linux/winxpEmbedded/ucOSII的,就不用担心,已经实现FAT/FAT32了。而且对ECC和坏块有专门的管理策略。
如果是一般简化系统自己增加(比如单片机上的实时系统),就的确需要自己来实现。
FAT层属于“文件系统”(File System),只要符合FAT规定即可,以Sector来操作。
驱动层就需要完成ECC处理,提交各Sector信息,一个Block有多个Sector的,需要对多sector的处理进行管理。
1. 是的,不然再向里面写入数据就无法保证安全。
2. ECC就是针对NAND会出坏块的特征,提出的对数据进行校验算法,以验证是否发生了位翻转错误。不可关闭
3. 不一定。有的时候为了保护某些位置,也可将其标为坏块。
#2
读写page的过程中,如果ecc校验失败,那么这个数据就读写错误了,那么这个时候是否应该将其视为坏块!
#3
Mark,偶做过一点,没有做完,用单片机很难满足性能要求,你用什么U,跑多少频率,最高bus速率是多少?FAT系统不要紧,实现比较容易,麻烦的是FTL实现.
#4
1 nand flash是块擦除,页读写。
当一个页读/写失败了,那么是否要将其所在块标识成坏块。
2 ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?
3 是否只有当擦除一个块失败之后,才可以把该块视为坏块?
说一下我的理解:
1.一般是擦除erase之后,发现擦除失败,才会去标记此为坏块。
一般的读写出错,是通过ECC校验算法去检错和纠错的。好像不涉及到坏块标记。
这部分没细节去研究过,有空研究研究。
2.ECC的出现是由于nand flash读写过程中都容易出错,所以才需要在读写前后,去用校验算法检测和纠错读/写的数据,
是否发生错误,以及发生错误去纠正错误。
ECC校验失败,未必一定是坏块。系统具体如何处理,我没去深究。
个人感觉,也有可能多做一次读写,如果再次错误,可以把其标记为坏块。
ECC理论上你可以关闭,但是实际会存在很大问题。因为硬件特性决定nand flash出错几率大,
你关闭了,那读写过程很容易发生错误,使得无法正常使用。
3。参见上面,我的理解,擦除失败,只是动态使用过程中的,一种识别方法。
其他的,也有可能读写多次失败而去标记坏块。
关于nand flash更多资料,参考:
【简介】如何编写linux下nand flash驱动
http://green-waste.blog.163.com/blog/static/326776782009622112913547/
另外,对于在nand flash上实现其他文件系统,比如FAT
个人没做过,不过看过介绍,最简单的是在上实现一个转换层,叫做
NFTL(Nand Flash Translation Layer),但是由于nand flash的读写特性,使得这样的文件系统总体效率会很低,
所以,才会出现jffs/jffs2,yaffs/yaffs2,这类专门针对nand/nor flash的文件系统。
如果只是学习研究,那么这么做还是可以慢慢学到很多东西的。
如果真正想做好,那么个人觉得没必要。
不如去抽空折腾yaffs之类的,会更有实际意义。
当一个页读/写失败了,那么是否要将其所在块标识成坏块。
2 ecc是做什么的?ecc校验失败是否可以确定该块已经变成了坏块呢?ecc校验是否可以关闭?
3 是否只有当擦除一个块失败之后,才可以把该块视为坏块?
说一下我的理解:
1.一般是擦除erase之后,发现擦除失败,才会去标记此为坏块。
一般的读写出错,是通过ECC校验算法去检错和纠错的。好像不涉及到坏块标记。
这部分没细节去研究过,有空研究研究。
2.ECC的出现是由于nand flash读写过程中都容易出错,所以才需要在读写前后,去用校验算法检测和纠错读/写的数据,
是否发生错误,以及发生错误去纠正错误。
ECC校验失败,未必一定是坏块。系统具体如何处理,我没去深究。
个人感觉,也有可能多做一次读写,如果再次错误,可以把其标记为坏块。
ECC理论上你可以关闭,但是实际会存在很大问题。因为硬件特性决定nand flash出错几率大,
你关闭了,那读写过程很容易发生错误,使得无法正常使用。
3。参见上面,我的理解,擦除失败,只是动态使用过程中的,一种识别方法。
其他的,也有可能读写多次失败而去标记坏块。
关于nand flash更多资料,参考:
【简介】如何编写linux下nand flash驱动
http://green-waste.blog.163.com/blog/static/326776782009622112913547/
另外,对于在nand flash上实现其他文件系统,比如FAT
个人没做过,不过看过介绍,最简单的是在上实现一个转换层,叫做
NFTL(Nand Flash Translation Layer),但是由于nand flash的读写特性,使得这样的文件系统总体效率会很低,
所以,才会出现jffs/jffs2,yaffs/yaffs2,这类专门针对nand/nor flash的文件系统。
如果只是学习研究,那么这么做还是可以慢慢学到很多东西的。
如果真正想做好,那么个人觉得没必要。
不如去抽空折腾yaffs之类的,会更有实际意义。
#5
这个是pdf版本的,也许对你有用:
【简介】如何编写linux下nand flash驱动 v1.0 .pdf
http://download.csdn.net/source/1513220
【简介】如何编写linux下nand flash驱动 v1.0 .pdf
http://download.csdn.net/source/1513220