阅读:2190回复:10
对U盘逻辑块内部分字节读写问题!
偶现在考虑windows API里面文件处理函数如何最终实现对U盘的操作。假设U盘已经格式化成FAT32、盘符为G:,采用SCSI transparent command set;
我要copy C:\\xxx.doc to G:\\则可以用API的函数 CopyFile(\"C:\\xxx.doc\",\"G:\\xxx.doc\",true)实现。 转化成SCSI的命令至少需要3条write()命令; 1、write(logical block Address, length 32bytes):在根目录区所在的逻辑快写入32bytes的FDB(文件描述块); 2、对FAT区所在的逻辑快写入相应数据; 3、对一系列逻辑块写入文件数据; 问题:对于前两个命令都是对某个逻辑块中的部分字节的写入,例如根目录区的文件描述块只有32个byte,对于scsi 的write命令如何标示逻辑块内部的地址偏移?最小的存储单位不是逻辑块吗?这个矛盾是如何处理的?thank u! |
|
沙发#
发布于:2003-06-07 02:31
你看看这里吧!http://www.driverdevelop.com/forum/html_42926.html?1054924181
|
|
板凳#
发布于:2003-06-07 02:26
你过你是写u盘,那么你要自己处理文件系统的所有事情,至于你要的物理地址,你是不用关心的,因为u盘自己会处理,你只要在FAT中找到空的cluster,并计算出相应的逻辑地址就行了! 上面这段话指的是主机的,如果你问的是固件,那么你就要按照我前面的几个帖子的内容了!我估计你对文件系统不太熟悉啊!先好好看看书吧!这样问没什么意义啊! 简单的说,固件将cbw包中的逻辑地址取出,找到相应的物理地址,读出返回,或者加上新的数据写入一个新的物理块,再将旧块擦除,所以我说逻辑地址需要写在物理地址后面的区域,就是为了对照用的! |
|
地板#
发布于:2003-06-06 20:18
我当然要处理文件系统所有事情。
我怎么可能不关心物理地址。U盘自己怎么会处理??不是全靠 控制器里的固件来协调这一切的么?在往flash里面写数据前, 要先写3个周期的地址。这个地址我感觉跟页面末16字节里面的 块地址没有关系。事实上我认为。末16字节那个地址都是我们 在固件里编写进去的 |
|
|
地下室#
发布于:2003-06-06 12:19
你过你是写u盘,那么你要自己处理文件系统的所有事情,至于你要的物理地址,你是不用关心的,因为u盘自己会处理,你只要在FAT中找到空的cluster,并计算出相应的逻辑地址就行了!
一次要写的数据,最小是以page为单位的! |
|
5楼#
发布于:2003-06-05 21:12
那么scsi命令包里来的数据要一个簇的内容了??
怎么装阿。 |
|
|
6楼#
发布于:2003-06-05 20:44
谢谢。总算有人说清楚了。
:) |
|
|
7楼#
发布于:2003-06-05 17:40
逻辑块的地址实际上就是cluster的编号,从0到n-1,n为存储介质的cluster的数量,一个cluster可能对应于flash上的几个block,这个取决于磁盘的格式化结果,因此可以用一个简单的公式来计算。
|
|
8楼#
发布于:2003-06-05 16:31
我要copy C:\\xxx.doc to G:\\则可以用API的函数 请问楼主,可知道如何转换逻辑块地址和写flash前要先写的那个 地址??一直弄不清楚,请帮忙!! |
|
|
9楼#
发布于:2003-06-05 11:59
对于u盘的读写一定要完整的page,现在有两种格式的flash,所以分别是512/2048
|
|
10楼#
发布于:2003-06-05 11:43
用户被禁言,该主题自动屏蔽! |
|