阅读:20634回复:47
U盘开发成功,问题和心得
我不是常来这里,但仅有的几次给了我很大的帮助。心存感激,因此想要和大家一起分享开发的体会。我没有刻意总结U盘有关的问题,但我想有几点是大家都关心的:
(重申:希望大家都是以个人研究的目的来讨论,而不是商用化,很多商用化的问题不要来问我。呵呵) 1.选件:很重要,有些内部程序和数据空间太小的单片机是不应该用于设计U盘的。商用一般都采用专用集成芯片。作为研究,我不推荐。不过有能力的同志可以用PLD去实现,那是另外的话题了。我选用的是Cypress的EZ2131,这款芯片的好处就是很容易使存储器与操作系统之间的传输率达到1M左右,相信用9602的同志们经常会为速度问题头痛的。另外,2131的程序加载和调试都很容易。 2.开发工具:强烈推荐bushound,用它监视总线,一切问题都可以迎刃而解。加上加几个控制用的小灯泡在I/O上,根本不需要买什么开发板。 3.协议:BULK ONLY+SCSI transparent。不要过多的考虑别的协议了,如果U盘是当做硬盘来用的,UFI协议是不太合适的,RBC的针对性比较强,但我发现2000下似乎只支持SCSI Transparent,具体的我没有深究,希望大家提出意见。因为协议的选择是系统建立初期很多人绞尽脑汁的问题。其根源就在于,不明了文件系统和下层硬件之间的操作规范,这是Windows的痼疾,我们也没办法。简单说来,文件系统对于下层硬件多数情况下发送Read 10,Write 10,Read Capacity这几个命令,只要持处理好它们,基本通讯可以无误。不要去想什么Format,高级Format根本就是Read Write Verify的组合。没别的指令。 4.分区表,BPB,FAT,ROOT:分区表可以不要,但分区头部的BPB必不可少,里面有几个参数很重要,簇的大小,对于三星的Flash,一般选用16K,或者32K,你要计算一下选用不同的簇,对于FAT大小的影响。系统对于FAT的操作是1个扇区1个扇区这样来的。例如我们实现16M的U盘,最好就规定为32K的簇,这样FAT就占据一个扇区,换句话说,一个Block就行了,这样你可以不需要对FAT作缓冲,每次直接擦除FAT所在块,并写入就行。ROOT是根目录的大小,系统以8个扇区为单位进行操作。 5.数据区:数据区我不知道大家怎么处理的,如果要建立一个数据区的好坏块参数表,那比较耗费内存,如果不建立,则当系统进行非标准写(既不是标准长度的写)的情况下就会变得缓慢。典型的情况是WORD文档的修改,当你修改WORD文档的时候,系统会下发一些不标准长度的数据,这样,我们就需要备份原有块中的内容,然后再导回来,过程烦琐,速度成倍降低。当然,wo指的是在没有扩充缓冲内存的情况下。我使用的2131只有2K左右的数据内存可用。因此很难实现大容量缓冲。我采用用FLASH进行中转的方式,但速度较慢。 6.地址转换:系统下发的LBA与你提供给系统的BPB参数有关。检测一下BUS HOUND你就可以很明确地了解了。这个问题很容易解决。 下面我说说我的成果和所遇到的难题: 我用2131有限的8K PRAM和2K DRAM实现了具有两个功能的USB client。其中一个就是U盘,代码量大约占据了0x0000-0x1800,6K左右的字节。基本上没有采用任何形式的数据缓冲。接口模式采用2131的Fast Write 和Fast Read。最终U盘的大块读写速度都很快,将近1M,和专用芯片没什么区别,甚至更快,得益于2131的出色性能。 困扰我的问题有: 1.怎样处理系统格式化,这是一个典型的因为Flash和单片机的缘故需要开发者采用底层协议控制上层协议的例子。我必需控制系统不让它格式化,因为格式化会破坏原有的U盘参数。Win2000最可恶,提供用户一堆格式化形式(FAT16,FAT32,NTFS),多数都会将U盘格式化到8K以下的簇,这很可怕,意味着每次都需要缓冲16K的数据。请问高手,什么硬盘参数可以控制系统格式化的形式? 2.怎样处理小于簇长度的写入请求,刚才说过WORD修改就是一个例子,它下发小于32K(簇长度)的写入请求,且是在数据区。我们不可能只为一个扇区分配一个块,因此只能作中转,中转是影响U盘速率的罪魁祸首。请问大家是怎么解决这个问题的。当然,扩充外部内存可以解决,但系统提及就会增大,外部缓冲内存和Flash的交互怎么办?增加DMAC么?如果不增加,速度也不乐观啊! 上面是我开发过程中的体会和问题,希望大家给予意见,我的email是nuxifish00@mails.tsinghua.edu.cn,欢迎大家来信和我讨论,因为都是课余爱好,旨在学术研讨,因此商业团体就别来询问了,我这套方案绝对不适合商业推广。呵呵! 再声明一点:做U盘和U Disk不一样,后者容易得多,因为没有Block的限制。我觉得开发过程中最扼我脖子的就是这个16KBlock限制。:) |
|
沙发#
发布于:2004-07-02 22:25
我想请教一个问题:1,能高诉你的开发班是什么吗?还是自己设计的电路?
2,你的U盘的容量是好多? |
|
板凳#
发布于:2004-03-22 13:38
zhpan@zmoi.com.cn我也想要,能给我一份吗
|
|
地板#
发布于:2004-02-29 21:46
再声明一点:做U盘和U Disk不一样,后者容易得多,因为没有Block的限制。我觉得开发过程中最扼我脖子的就是这个16KBlock限制。:) 我只想请教一个问题,楼主认为U盘和U Disk的区别是什么? |
|
地下室#
发布于:2004-02-19 08:57
u盘的可不可以给出一点资料共享哦
|
|
5楼#
发布于:2003-12-05 12:11
开发成功后,老板没有炒你??
据说现在的公司在你把它的主要项目做完后,就没你的事了,意味着你要卷起铺盖 |
|
6楼#
发布于:2003-11-17 15:46
刚入此门者可以看看Frank的资料,在论坛上很容易能找到!对我帮助很大啊,强烈要求给frank_wang加分,希望大家都能如该君,我也正在学习如何高一个U盘,这的帖子给我猛补了一下,以后大家多多执教!
|
|
7楼#
发布于:2003-11-12 17:20
好贴.互相学习,共同提高
|
|
8楼#
发布于:2003-10-28 14:19
我好菜呀,请问bushound是什么?在哪有?如何用?
谢谢! |
|
9楼#
发布于:2003-10-14 18:01
好!很有帮助!
|
|
|
10楼#
发布于:2003-10-14 10:45
感谢frank_wang
|
|
11楼#
发布于:2003-10-13 17:04
能否把SCSI transparent协议贴出来,与大家一起分享?
|
|
12楼#
发布于:2003-10-13 11:30
我也想学习,只是刚还没真正入门
|
|
13楼#
发布于:2003-10-12 20:39
新手上路,希望能得到各位前辈的帮助.感觉开发网真不错,只可惜今天才搜到!
|
|
14楼#
发布于:2003-08-29 11:18
能不能给我也发一些开发资料,多谢了!shipshi_21@163.net
|
|
15楼#
发布于:2003-08-29 11:17
能不能给我也发一些开发资料,多谢了!
|
|
16楼#
发布于:2003-08-26 15:12
2131的设计过程,以及固件等能不能给偶发份资料,cheapcheapchan@163.net,谢了 :P
|
|
17楼#
发布于:2003-08-08 19:11
2131的设计过程,原理图以及固件等能不能给偶发份资料,先谢了
xyao_dyw@hotmail.com |
|
18楼#
发布于:2003-08-03 21:43
我也在学习U盘开发,向大侠学习
|
|
19楼#
发布于:2003-08-03 12:10
贴主做的很好,互相交流,一起学习,共同进步.
|
|
|
上一页
下一页