都说SSD有磨损平衡,那U盘呢?最小操作单位是sector,首先0扇区是禁区,改了文件系统就挂了,保证U盘没重要文件,改最后一个Block可能是最安全的了.那么怎么确定最后一个Block呢.用MSC的函数啊.所以我就这么写了.
USBH_MSC_GetLUNInfo(&hUsbHostFS,0,&info); for(;;){ pBuf[0] = 0xAA; USBH_MSC_Write(&hUsbHostFS,0,info.capacity.block_nbr,pBuf,1); USBH_MSC_Read(&hUsbHostFS,0,info.capacity.block_nbr,pBuf,1); if(pBuf[0] != 0xAA){ break; } pBuf[0] = 0x55; USBH_MSC_Write(&hUsbHostFS,0,info.capacity.block_nbr,pBuf,1); USBH_MSC_Read(&hUsbHostFS,0,info.capacity.block_nbr,pBuf,1); if(pBuf[0] != 0x55){ break; } cycle++; }
如果不存在磨损平衡,那么假设这个NAND非常长寿,也应该不会过100K的(100K是一般的外置NOR典型寿命.).而写一个Sector是非常快的.一瞬间就10000(10K)多次了.
大概经过大半分钟,已经超过10K次了,而数据读出验证依然没问题,所以,U盘也是有磨损平衡的,不然我指定这个sector的这个byte,早把他写死掉了.
大哥测试的u盘主控是啥型号?