mhxsoft
驱动牛犊
驱动牛犊
  • 注册日期2003-06-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1955回复:12

单片机读写U盘,能读出扇区数据,但写不上?

楼主#
更多 发布于:2003-10-28 16:17
单片机读写U盘,能读出扇区数据,但写不上。
在写扇区数据的时候,第二个64B时间特长,可能是U盘NAK,因为NAK时我一直重发,其它7个64B包均正常,但数据丝毫没有写上,为什么?
  CBW 64B  64B  64B 64B   64B 64B 64B 64B SBW
 =1mS 1mS 35mS  1mS 1mS   1mS 1mS 1mS 1mS 1mS  


[编辑 -  11/6/03 by  mhxsoft]
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-28 17:17
可能u盘自动在判断,是否正常,然后才会真正写入!
tan_1_2
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-02 21:46
NewTech 兄:
  U盘在判断什么正常后,才把数据写到U盘上。我也有同样的问题:数据写不进U盘
qbasic
驱动牛犊
驱动牛犊
  • 注册日期2002-07-30
  • 最后登录2006-01-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-04 08:53
我也有同样的问题,但是对于OTI方案的U盘比较容易写。其它的就不行了。
jinfen
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-04 14:21
收到sbw后看看是不是传输的数据结束了,如果U盘没有接收完512个数据,就无法写入了。
xxg
xxg
驱动小牛
驱动小牛
  • 注册日期2002-02-28
  • 最后登录2005-12-12
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-11-05 16:41
  这种问题我也遇到过,后来解决了,是延时的问题。
mhxsoft
驱动牛犊
驱动牛犊
  • 注册日期2003-06-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-11-06 14:13
我的系统是XXX+MSP430F149+SL811HS+U盘
“收到sbw后看看是不是传输的数据结束了,如果U盘没有接收完512个数据,就无法写入了。”
应该怎么判断?
“是延时问题”
是哪里的延时问题?


[编辑 -  11/6/03 by  mhxsoft]
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-11-06 17:34
please use bushound to capture the usb bus data, then analyze it!
or paste it here!!
:D
lxhpt
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-11-07 13:35
看看这有用吗?
uchar write_sector()
{

   init_8070i();

   init_cbw(); //get cbw
   if(bulk_out_data(31,cbw) == FALSE)  
   {
return FALSE;
   }
   else
   {
delay_ms(10);
if(BulkOutData() == FALSE)
{
return FALSE;
}
else
{
delay_ms(50);
if(BulkInData() == FALSE) {
return FALSE;
}
}
     }
     return TURE;
}
#define RETRY 300
uchar BulkOutData(uint Length,uchar *ptr)
{
uchar RCounter1=0,RCounter2=0;
for(;Length>64;Length-=64)
{
Sl811WriteBuffer(UsbaStartAddr,ptr,64); ptr+=64;

do
{
if(RCounter1++>RETRY)
return(0);
Sl811WriteByte(Sl811aAddr,Usba_start_addr);
Dl811EriteByte(Sl811aLength,64);
Sl811WriteByte(Sl811aStatus,(PidOut<<4)|EpOut);
Sl811WriteByte(Sl811aCount,0x02);
Sl811WriteByte(Sl811aCtrlreg,BulkWr);
while((Sl811ReadByte(Sl811aCtrlreg)&0x01)==0x01);
}while((Sl811ReadByte(Sl811aStatus)&0x40)==0x40);

if(BulkWr==Data0Wr)
BulkWr=Data1Wr;
else
BulkWr=Data0Wr;
DelayMs(2);
}
if(Length!=0)
{
do
{
if(RCounter2++>RETRY)
return(0);
Sl811WriteBuffer(usba_start_addr,ptr,length);
Sl811WriteByte(Sl811aAddr,UsbaStartAddr);
Sl811WriteByte(Sl811aLength,Length);
Sl811WriteByte(Sl811aStatus,(PidWut<<4)|EpOut);
Sl811WriteByte(Sl811aCount,0x02);
Sl811WriteByte(Sl811aCtrlreg,BulkWr);
while((Sl811ReadByte(Sl811aCtrlreg)&0x01)==0x01);
}while((Sl811ReadByte(Sl811aStatus)&0x40)==0x40);
if(BulkWr==Data0Wr)
bulk_wr=Data1Wr;
else
BulkWr=Data0Wr;
DelayMs(3);
}
return (1);
}
xxg
xxg
驱动小牛
驱动小牛
  • 注册日期2002-02-28
  • 最后登录2005-12-12
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-11-08 11:09
一般来说,这是由于延时不合适造成的,调整一下延时试试.
   欢迎访问俺自己的网站http://eden.51.net主要是USB设计方面的一些东东
mhxsoft
驱动牛犊
驱动牛犊
  • 注册日期2003-06-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-11-12 15:13
楼上的朋友,谁有8070i或SCSI SET或UFI等命令区块详细规范,请发给我一份。谢谢!
mhxsoft
驱动牛犊
驱动牛犊
  • 注册日期2003-06-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-11-12 15:14
楼上的朋友,谁有8070i或SCSI SET或UFI等命令区块详细规范,请发给我一份。谢谢!
mhxsoft@sohu.com

[编辑 -  11/12/03 by  mhxsoft]
tan_1_2
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-11-13 15:19
看看我这个写命令的CBW是否正确:

0x55,0x53,0x42,0x43,0x28,0xE8,0x31,0xFF,0x00,0x02,0x00,0x00,
0x00,0x00,0x0A,0x2A,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00                                      
游客

返回顶部