hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2287回复:12

从U盘文件读取任意字节的数据的疑惑?大家给点思路!(50分)

楼主#
更多 发布于:2004-04-01 14:50
  看了FAT系统的一些资料,发现对U盘读写,host只是送了一个LBA也就是逻辑块地址和需要读写的块的数目.
  假设u盘的每个扇区512字节,那么如果我想从一个扇区的某个位置读取小于512一个字节的数据能办到吗?
  有做过类似工作的兄弟给点思路!

最新喜欢:

quickerquicke...
lxhpt
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-01 16:41
可以做到的.只要你先找到该数据在文件中FAT区的位置,在到相应的数据区去读取你所需要的数据.最小你可以读取1sector的数据,再取出你需要的数据.
hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-01 18:02
  老兄,你没有答对阿?
  我的意思就是要读/写小于1个sector的数据阿?
  如果我想写1个字节的数据到文件中,总不能事先读出最后1个secotr的数据,然后修改该sector中1个字节的数据,最后写1个sector的数据到U盘阿?这样效率也太低了吧?
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-01 18:08
 老兄,你没有答对阿?
  我的意思就是要读/写小于1个sector的数据阿?
  如果我想写1个字节的数据到文件中,总不能事先读出最后1个secotr的数据,然后修改该sector中1个字节的数据,最后写1个sector的数据到U盘阿?这样效率也太低了吧?

的确如此,总之你每次读写的数据不会小于一个扇区!
www.dragon-2008.com 欢迎交流
shaoshengli
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2022-02-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望77点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-04-01 18:28
个位:其实NandFlash读任意BYTE是件很容易的事情,只要区分好A,B,C三个区域就可以啦!!!我给一段我写的可以在任意位置读写NF代码给大家看看,希望能对你们有用。

实例:   从NandFlash 0x0000 中读2字节到数组A[]

example:  unsigned int A[2];
          NF_ReadMultiByte(0x0000,2,A);

void NF_ReadMultiByte(unsigned long int dAddr, unsigned int wLen, unsigned int *wrData )
{
  unsigned int i;
  F_InitWriteNF();    
  NF_WaitBusy();
  
  F_WriteCmdToNF((dAddr>>8)&0x1 );
   F_WriteAddrToNF(dAddr); //1st Cycle
   F_WriteAddrToNF((dAddr>>9)&0xff); //2nd Cycle
   F_WriteAddrToNF((dAddr>>17)&0xff);   //3th Cycle
  F_InitReadNF();
  NF_WaitBusy();
  for(i=0; i<wLen; i++)
  {
   *wrData++ = F_ReadNF();      
  }
}

SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-01 18:28
到 我佩服你的精神
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-01 23:08
shaoshengli,SUNSHANXING两位老兄,真是好人阿!帮了我很多阿1真是无以为谢!你们要是在成都的话,小弟做东!废话不说了,给分先了!代码下回去慢慢看!
wxjljl
驱动牛犊
驱动牛犊
  • 注册日期2004-04-02
  • 最后登录2005-03-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-02 00:59
回复:==============================================
老兄,你没有答对阿?
我的意思就是要读/写小于1个sector的数据阿?
如果我想写1个字节的数据到文件中,总不能事先读出最后1个secotr的数据,然后修改该sector中1个字节的数据,最后写1个sector的数据到U盘阿?这样效率也太低了吧?
//=================================================

以上的理解是非常错误的,NandFlash 的写入操作之前必须把整个你要写入的扇区所在的Block擦一次,然后才能写入,也就是说你想改写的单元在你写入之前的内容必须为0xFF,要不然你会写不进去的,或着写进去了也不是你想要的数据. :P

[编辑 -  4/2/04 by  wxjljl]
hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-02 10:31
  很高兴大家都这么热心阿!
  其实我作的是单片机读写U盘里面的内容,至于U盘里面怎么操作我是不关心的,因为我是host!
  所以我想知道对于host可不可以只要求U盘从一个扇区的某个位置送出小于一个扇区字节数的数据给host!
  又或者host可不可以只送小于一个扇区字节数的数据到U盘某个扇区的某个位置。
lxhpt
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-02 11:32
我说了是可以的.前面有位老兄说的只是对FLASH的操作.wxjljl
说的对,FLASH只能这样操作.但这些host端是不要管.先读出最后1个secotr的数据,然后修改该sector中1个字节的数据,最后写1个sector的数据到U盘,就是你说的这样.
hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-02 11:39
  谢谢楼上的这位仁兄!可惜分已经放完了!呵呵!
  感谢驱动网给我们提供的这个平台阿!
ww7002
驱动牛犊
驱动牛犊
  • 注册日期2004-01-10
  • 最后登录2010-07-13
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-05 21:00
各位;
用那种单片机和811连接比较容易实现
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-06 09:50
个位:其实NandFlash读任意BYTE是件很容易的事情,只要区分好A,B,C三个区域就可以啦!!!我给一段我写的可以在任意位置读写NF代码给大家看看,希望能对你们有用。

实例:   从NandFlash 0x0000 中读2字节到数组A[]

example:  unsigned int A[2];
          NF_ReadMultiByte(0x0000,2,A);

void NF_ReadMultiByte(unsigned long int dAddr, unsigned int wLen, unsigned int *wrData )
{
  unsigned int i;
  F_InitWriteNF();    
  NF_WaitBusy();
  
  F_WriteCmdToNF((dAddr>>8)&0x1 );
   F_WriteAddrToNF(dAddr); //1st Cycle
   F_WriteAddrToNF((dAddr>>9)&0xff); //2nd Cycle
   F_WriteAddrToNF((dAddr>>17)&0xff);   //3th Cycle
  F_InitReadNF();
  NF_WaitBusy();
  for(i=0; i<wLen; i++)
  {
   *wrData++ = F_ReadNF();      
  }
}

 


是不是读了一个扇区,只不过只取了前wLen个字节啊?写操作你又打算怎样做呢?

[编辑 -  4/6/04 by  dragon_hn]
www.dragon-2008.com 欢迎交流
游客

返回顶部