Flash存储器分为NOR Flash和NAND Flash两种,NOR的特点是可以按字节随机读,速度快,适合存程序代码;NAND的特点是容量大、便宜,但必须按页(通常2KB或者4KB)读写、按块(通常128KB或者256KB)擦除,擦写次数也有限(SLC约10万次,MLC约1万次,TLC约3000次)。不管是NOR还是NAND,量产之前都需要做测试验证,今天就聊聊Flash存储器的常用测试方法。
首先是基础功能测试。NOR Flash的测试相对简单,因为可以随机读写,用MCU或者测试台往每个地址写入特定数据(比如0xAA、0x55、0xFF、0x00这种交替模式),读回来对比是否一致,再读回整个存储区域做数据校验(CRC或者MD5)。NAND Flash因为读写有按页和按块的限制,测试稍微麻烦点,要先擦块,再写页,再读出来验证。
坏块检测是NAND Flash测试的重中之重。NAND Flash出厂时就可能有少量坏块(SLC一般每颗不超过3个,MLC/TLC会多一些),这是正常现象,制造商也会在坏块标记区(一般是每个块最后一页的OOB区或者块的第一个页的特殊标记)做好标记。在使用之前,必须先扫描一遍所有块,读每个块的坏块标记,如果标记位不是0xFF就说明这个块是坏的,要跳过不用。
除了出厂坏块,Flash在使用过程中还会产生新的坏块,叫运行坏块。检测运行坏块的方法是在擦除或者写入的时候检测状态寄存器,如果状态寄存器显示操作失败,就把这个块标记为坏块。另外读数据的时候如果ECC纠错也纠正不了错误,也说明这个块可能坏了。所以Flash的驱动程序里必须有坏块管理的逻辑,不能假定所有块都是好的。
擦写寿命测试。不同类型的Flash擦写次数上限不同,实际寿命测试不可能真的擦写10万次然后等一年,所以通常做加速测试。方法是在高温(比如85℃)下循环擦写,高温会加速Flash的老化,然后根据Arrhenius模型换算出常温下的寿命。也可以用硬件测试台自动循环擦写,比如连续擦写10000次然后检测是否有新坏块产生。
数据保持力测试。Flash是非易失性存储器,断电后数据应该能保持几年甚至几十年。测试方法是把Flash放在高温高湿的老化箱里(比如85℃/85%RH)烤1000小时,然后读回数据看是否有错误。高温加速了电荷的泄露过程,1000小时的85℃老化大概相当于常温下10年的数据保持力。
对于使用Flash的系统来说,还有一个重要的测试是掉电保护测试。Flash的写入或者擦除操作需要一定时间(几毫秒),如果在操作过程中突然断电,可能会导致数据损坏甚至产生新的坏块。测试方法是在Flash正在擦写的瞬间切断电源,然后上电检测数据是否正确、Flash是否还能正常工作。好的驱动程序应该有掉电恢复机制,比如写之前先写个标志位,上电后检查标志位来判断上次操作是否完成。
下一篇:没有了