我已经说过很多次了,只要解决了ECC问题,所有的MLC Flash性能都是一样的,几乎没有差别。
如果没有解决ECC问题,最明显的体现就是Flash根本无法正确烧写和读取,系统自然就无法跑起来,ECC实际是概率问题。比如说,把4BIT ECC应用于本应该需要8BIT ECC的U0D,只能说明,大部分时候读写是可以的,但无法保证100%每次成功,所以就会出现有时无法启动的情况。而把1BIT ECC应用于U0M或U0D,因为要求相差悬殊,读写失败的概率也几乎达到100%,也就是无法正常读写。
而对于需要12BIT ECC 或 16BIT ECC, 或24 BIT,甚至40BIT ECC的MLC Flash,我们采用了软硬结合的ECC校验方式,并配合Flash的OOB区域,最终实现了安全稳定的读写。对于K9GAG08U0E的驱动,这不仅仅因为它需要12BIT ECC,更关键的是U0E的读写时序要求非常严格,如果说Linux尚可找资料摸索到,但WinCE部分则基本无迹可寻。目前估计仅有我们公司实现了U0E的完善驱动,鉴于此,U0E的驱动不开源的。
当然,我们十分欢迎并支持感兴趣的志愿者,甚至公司参与到U0E在6410上的开源驱动项目中,它远非某些人所认为的U0E驱动很简单,只要在U0D的基础上改一下就可以实现,实际远非如此。如果有人实现了(达到我们所实现的效果即可),可以随时联系通知我们,并发布到本论坛,我们将会提供一些奖励。
补充一下,凡是需要更多位ECC的MLC Flash,其本身的OOB也都预留了足够的空间,以便CPU配合软件来解决ECC问题。很多采用MLC的电子产品如mp3, mp4, 优盘等正是采用了这点才能保证数据的稳定性。
无论怎样,MLC比SLC都要差很多,速度慢,寿命短,是它天生的缺陷。做产品,要看具体的需求,如果是广告机之类的,不需要频繁读写,就可以使用MLC,如果监控类,需要经常保存大量的数据,推荐使用SLC。
附:Superboot目前支持的NAND Flash型号列表:
SLC NAND Flash:
K9F1G08: 128M
K9F2G08: 256M
K9F4G08: 512M
K9K8G08: 1GB
MLC NAND Flash:
K9GAG08U0D: 2GB
K9GAG08U0E: 2GB
[ 此帖被mindee在2011-08-08 10:26重新编辑 ]