前几天搞测试,把我的U盘搞坏了,坏的原因其实很简单,我把我的那个系统的程序改了一下,不停的向U盘中写数据,U盘写满了就格式化再重新写,2G的U盘写满了2次,终于写坏了。
U盘内保存的数据放在一个文件中,系统每收到512字节数据就向U盘保存一下,因为是以文件形式保存,因此也要更新文件大小信息,导致目录扇区不停被写入数据,写得太多,Flash出现坏块了。
本来我以为只是出现坏块,把物理0扇区的相关参数修改一下,避开坏的扇区就行了,兴致勃勃地把程序改了一下,结果大失所望。物理0扇区的数据可以读出来,但是写入数据就不行,执行相应的UFI命令返回STALL,复位后再写依然返回STALL,REQUEST SENSE命令也是返回STALL。
我把物理0扇区的数据读出来跟正常的U盘比较一下,发现坏U盘的0扇区的数据是乱七八糟的,估计可能U盘内部的程序出问题了。
这可不是USB规范和OHCI就能搞定的了,看来还得网上搜索高人的答案了。找了半天,发现解决方案其实很简单,
1.先用u盘芯片型号检测工具检测u盘芯片:下载网址为 http://drv5.cn/sfinfo/64.html
2.在相同的链接上面找到(如果找不到就用搜索引擎找)并下载相应的U盘(关键是对应芯片型号)的量产工具进行修复。
关键是第二步的量产工具一定要找对,这没什么好办法,就是慢慢找,下来慢慢试了,一旦量产工具可以识别出U盘,那就基本没问题了。
U盘内保存的数据放在一个文件中,系统每收到512字节数据就向U盘保存一下,因为是以文件形式保存,因此也要更新文件大小信息,导致目录扇区不停被写入数据,写得太多,Flash出现坏块了。
本来我以为只是出现坏块,把物理0扇区的相关参数修改一下,避开坏的扇区就行了,兴致勃勃地把程序改了一下,结果大失所望。物理0扇区的数据可以读出来,但是写入数据就不行,执行相应的UFI命令返回STALL,复位后再写依然返回STALL,REQUEST SENSE命令也是返回STALL。
我把物理0扇区的数据读出来跟正常的U盘比较一下,发现坏U盘的0扇区的数据是乱七八糟的,估计可能U盘内部的程序出问题了。
这可不是USB规范和OHCI就能搞定的了,看来还得网上搜索高人的答案了。找了半天,发现解决方案其实很简单,
1.先用u盘芯片型号检测工具检测u盘芯片:下载网址为 http://drv5.cn/sfinfo/64.html
2.在相同的链接上面找到(如果找不到就用搜索引擎找)并下载相应的U盘(关键是对应芯片型号)的量产工具进行修复。
关键是第二步的量产工具一定要找对,这没什么好办法,就是慢慢找,下来慢慢试了,一旦量产工具可以识别出U盘,那就基本没问题了。
本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/229770,如需转载请自行联系原作者