今天一下午加上一晚上的成果,就是搞废了一片 SM3257AA 、两片 SM3252BA 跟一片 FC8505 附带两片久远的拆机 SLC NAND (我的心在滴血)。除此之外,还终于拿 SC708 做成了一只 U 盘,不过写入坑爹到只有 1MB/s 多一点。
板子是在 mydigit 上大树的淘宝店铺里面买的,其中 SC708 的板子去掉多余部分后是这个样子的:
装上闪存之后就照例开始量产了。第一次全部报坏快,于是又拿细毛牙刷好好地清理了下闪存的引脚,然后终于能通过低格了。
不过在最后一步还是出现了“创建文件系统失败”这样的错误,手动格式化则提示磁盘有写保护。
把做好的 U 盘从虚拟机里拿出来,发现如下内核日志:
dword@dword-as4741g:~$ dmesg|tail [182362.407057] sd 115:0:0:0: Attached scsi generic sg2 type 0 [182363.407186] ready [182363.407555] sd 115:0:0:0: [sdc] 2036736 512-byte logical blocks: (1.04 GB/994 MiB) [182363.408053] sd 115:0:0:0: [sdc] Write Protect is on [182363.408058] sd 115:0:0:0: [sdc] Mode Sense: 03 00 80 00 [182363.408061] sd 115:0:0:0: [sdc] Assuming drive cache: write through [182363.410044] sd 115:0:0:0: [sdc] Assuming drive cache: write through [182363.465080] sdc: unknown partition table [182363.466962] sd 115:0:0:0: [sdc] Assuming drive cache: write through [182363.466967] sd 115:0:0:0: [sdc] Attached SCSI removable disk
Write protect is on ?问题应该就在这了。但是这个板子貌似没有写保护开关啊?
后来突然想到以前研究 AU6987 ( AU6987 / FC8708 / SC708 其实几乎是完全相同的芯片)的时候发现它有个写保护相关的针脚:
这是一个输入脚,说明它是用来控制写保护开关的,并且正常情况下应该接低电平。但是一番测试后发现,这板子上的该针脚是悬空的!
数电老师没告诉你 CMOS 电路不用的输入不能悬空么?
后来从劣质变压器上扯下来一截非常细的漆包线(粗的不好使,想了半天才想到这玩意),把 SC708 的 20 脚跟旁边电容的地连起来了:
这样弄了以后果然就正常了:
dword@dword-as4741g:~$ dmesg|tail [183279.652451] sd 116:0:0:0: [sdc] 2036736 512-byte logical blocks: (1.04 GB/994 MiB) [183279.652943] sd 116:0:0:0: [sdc] Write Protect is off [183279.652947] sd 116:0:0:0: [sdc] Mode Sense: 03 00 00 00 [183279.652951] sd 116:0:0:0: [sdc] Assuming drive cache: write through [183279.654933] sd 116:0:0:0: [sdc] Assuming drive cache: write through [183279.709982] sdc: unknown partition table [183279.711664] sd 116:0:0:0: [sdc] Write Protect is on [183279.711668] sd 116:0:0:0: [sdc] Mode Sense: 03 00 80 00 [183279.711671] sd 116:0:0:0: [sdc] Assuming drive cache: write through [183279.711675] sd 116:0:0:0: [sdc] Attached SCSI removable disk
然后量产也成功了:
但是我实在高兴地早了点。把 U 盘重新分配到宿主机上之后,尝试写文件结果失败了,看了下内核日志:
dword@dword-as4741g:~$ dmesg|tail -20 [184759.523666] sd 125:0:0:0: Attached scsi generic sg2 type 0 [184759.524828] sd 125:0:0:0: [sdc] 2044928 512-byte logical blocks: (1.04 GB/998 MiB) [184759.525498] sd 125:0:0:0: [sdc] Write Protect is off [184759.525502] sd 125:0:0:0: [sdc] Mode Sense: 03 00 00 00 [184759.525506] sd 125:0:0:0: [sdc] Assuming drive cache: write through [184759.528179] sd 125:0:0:0: [sdc] Assuming drive cache: write through [184759.758485] sdc: [184759.759952] sd 125:0:0:0: [sdc] Assuming drive cache: write through [184759.759956] sd 125:0:0:0: [sdc] Attached SCSI removable disk [184760.400431] FAT: bogus number of reserved sectors [184760.400436] VFS: Can't find a valid FAT filesystem on dev sdc. [184798.663025] sd 125:0:0:0: [sdc] Unhandled sense code [184798.663029] sd 125:0:0:0: [sdc] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [184798.663038] sd 125:0:0:0: [sdc] Sense Key : Data Protect [current] [184798.663043] Info fld=0x0 [184798.663045] sd 125:0:0:0: [sdc] Add. Sense: Write protected [184798.663051] sd 125:0:0:0: [sdc] CDB: Write(10): 2a 00 00 00 00 00 00 00 08 00 [184798.663061] end_request: I/O error, dev sdc, sector 0 [184798.663066] Buffer I/O error on device sdc, logical block 0 [184798.663068] lost page write due to I/O error on sdc
在 wiki 上查到了 SCSI 的有关 Sense key :
7h Data Protect Indicates that a command that reads or writes the medium was attempted on a block that is protected from this operation. The read or write operation is not performed.
猜测是量产工具的问题,于是抛弃大树给的量产工具,改用 FC8x08 / SC708 专用的 FC MPTool 。最后终于成功了。
测试 U 盘:
dword@dword-as4741g:~$ dd if=/dev/urandom bs=1024 count=1022230 | tee compare /media/HY27UU088G5/test >/dev/null 记录了1022230+0 的读入 记录了1022230+0 的写出 1046763520字节(1.0 GB)已复制,465.158 秒,2.3 MB/秒
然后拔掉盘子,重新插上:
dword@dword-as4741g:~$ sha256sum compare /media/HY27UU088G5/test 78c10b1eb7e1cd381a88c75f8290513ea16d416f1497b81cddd6f9a9ded26481 compare 78c10b1eb7e1cd381a88c75f8290513ea16d416f1497b81cddd6f9a9ded26481 /media/HY27UU088G5/test
这说明 U 盘没有问题。
哎,折腾了这么长时间终于弄好了,真坑爹。
P.S. 从 SMI 主控板的悲剧中可以得出以下教训:
- 拆机 Flash 在贴装前一定要清理干净,并且矫正引脚的位置;
- 短接闪存恢复主控的时候一定要小心,不要碰到中间的电源脚;
- 上电前注意清除焊好的闪存引脚内测可能存在的锡渣,最好连主控也别放过;
- 没事别追求完美;
- SM325x 跟 SM325xEN 是两中完全不同的生物;
而那块奇葩的 FC8508 板子则告诉我们,不是所有板子单贴的时候都是贴主控面的,要注意看丝印。。。
P.S.2 今天真是黑色的一天,早上 4:40 发烧烧醒了,一直烧到现在,喝水喉咙都刺痛;YardVPS 的内部网络从早上一直抽到现在还没解决(这篇文章发得相当艰难),同时伴有某人拿大量数据包灌我的服务器(这样一想是 ARP 冲突吧);最后花了一下午 + 一晚上,毁掉了价值 ¥50+ 的东西……
大侠是搞什么的呀,应该是弄服务器的吧!怎么研究这个来了·
我不是 SA ,呵呵。
想问下大哥有没有安国FC8708主控芯片引脚资料,我的一个朋友的优盘因热插拔不能用了(插到电脑上没反应,也没有“找到新硬件”提示),我想给他短接恢复,但是没有引脚资料,而且就算有资料也不知道该短接哪两个脚,麻烦大哥将资料和短接脚的针数发我邮箱,感激不尽!
FC8708 = AU6987 ,资料很好找的,比如这个:http://wenku.baidu.com/view/fefd4cfb941ea76e58fa0402.html
短接 Flash 无效的话,先看看保险电阻是不是烧了,AU6987 内置的 LDO 有没有 3.3V 输出。一般热插拔不是导致闪存盘损坏的主要原因,静电打坏芯片的可能性要大些。
楼主,保险电阻一般多大,我有一个优盘被静电激坏了,主控就是sc708,您有sc708电路图么?
对了 我短接过flash芯片的29、30和其他两个脚(记不清了),不管用