zyyz1100
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2009-10-12
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2025回复:18

sl811作主机控制U盘的读写一问???

楼主#
更多 发布于:2003-03-21 11:09
我枚举已经通过。其中枚举过程是这样的,getdevicediscreptor,然后设置地址为1,而后再通过地址得到设备描述表,然后再得到config描述表,interface描述表,endpoint描述表,再setconfig。

  而后我就下cbw SCSI INQIRY指令,值如下数组:{0x55,0x53,0x42,0x43,0x68,0x6e,0x60,0x24,0x00,0x00,0x00,0x80,0x00,0x06,0x12,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},但是结果返回的是超时,并没有ACK。

不知何故!那位大侠帮帮忙!!! :)

最新喜欢:

ww7002ww7002
zyyz1100
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2009-10-12
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-25 10:28
^_^,我已经解决这个问题了。原来如此
jinfen
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-25 10:49
zyyz1100你好:
 你做的sl811-host是用51控制吗?
jinfen
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-25 10:57
我正在做sl811+51+U盘读写.能不能给点关于硬件方面的建议?
我是用DMA好?还是地址+数据好?
b5cbb3ac
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2004-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-25 12:09
敬请指教:
我也是在用SL811,
但是第一步获取他的描述付还没有通过:
我是先发出一个SETUP包,再发一个IN包,就是没有数据返回来。
我发完IN 包以后读取的16个寄存器状态如下:
20 10 00 00 00 05 a0 87
20 c0 08 00 08 91 21 66
读取它的BUFFER都是我初始化后的0,

请不论指教!
zyyz1100
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2009-10-12
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-25 13:02
GET DEVICE desciptor SETUP:0X80 0X06 0X0001 0X0000 0X1200
jinfen
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-25 15:24
请问:
     你用的函数都是cypress-host例子里的吗?
zyyz1100
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2009-10-12
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-25 16:41
不完全了,不过参看了一下那个程序。但我是在32位机上实现这种功能。你可以自己写一个这样的程序。
你最好能用最原始的办法,就是初始化积存器,送数据包,在取得试验结果。这样可检查出比较多的问题了^_^
祝你好运了!
jinfen
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-26 09:07
谢谢!
b5cbb3ac
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2004-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-26 10:54
//我用的也是SL811发送的setup 请求包也没有收到ACK,还有就是一直超时.
 你是怎么解决的?
b5cbb3ac
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2004-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-03-26 11:21
超时的问题终于解决了,现在出现的是ACK, 和DATA1!
但是它的DATA0 和1之间是怎样计算的,在那里可以设置?

NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-03-27 02:02
你有个问题想跟你请教一下

我检测了一下一个u盘的格式化过程,它的容量是32兆,FAT16格式,FAT共有3f个扇区,由于每次写操作都不是写一个完整的block,那么应该采用怎样的算法来对FLASH进行写操作!你是怎样做的呢!
b5cbb3ac
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2004-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-03-27 19:18

我已经可以从优盘读取device,configuration的descriptor,
    现在我正在设置设备的地址,设置完以后读取它的返回信息都没有错误,
但是用新的地址来获取device descriptor 就出现STALL and ACK,
那位大峡碰到过这样的错误?
能不能给我点提示?
zyyz1100
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2009-10-12
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-03-28 09:14
应该是你的地址值超出了范围,或者你得到device descr时用的地址值与呢设置的地址值不匹配
b5cbb3ac
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2004-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-03-28 10:08
谢谢你的提示,刚刚通过了。
b5cbb3ac
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2004-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-03-29 11:07
再请问:
如果在碰到发送数据以后,设备提示还有更多的数据,
你是怎样处理的?


我读取寄存器2 3 4时候的数据分别是:
0x12 0x09 0x0a
他提示还有0x0a个数据没有接收,应该怎样处理好呢?
我直接发回一个OUT的空包,ENDPOINT就处于STALL,
如果再发一个in 的包,提示要读取0x0a的数据,endpoint就处于超时状态。
以上是在读取设备的descriptor 时候碰到的
zyyz1100
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2009-10-12
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-03-29 11:41
可以开一个适当大小的buffer,然后连续读数据,直到数据读完。如果buffer满时,把其丢到其他地方,从而再继续传,其中要注意data0/1的切换。
不过按理说不会出现这种状况,因为U盘device descr的长度只有39个byte(一般情况最多),default pipe的传输长度为64byte应该可以一次读出的。
^_^
b5cbb3ac
驱动牛犊
驱动牛犊
  • 注册日期2003-01-23
  • 最后登录2004-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-03-30 16:05
这个方法我已经试过,但是还是不行
miller1104
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2006-12-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-12-11 06:25
我枚举已经通过。其中枚举过程是这样的,getdevicediscreptor,然后设置地址为1,而后再通过地址得到设备描述表,然后再得到config描述表,interface描述表,endpoint描述表,再setconfig。

而后我就下cbw SCSI INQIRY指令,值如下数组:{0x55,0x53,0x42,0x43,0x68,0x6e,0x60,0x24,0x00,0x00,0x00,0x80,0x00,0x06,0x12,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},但是结果返回的是超时,并没有ACK。

不知何故!那位大侠帮帮忙!!!
//----------------------------------------------------
我也有和您相同的情况发生,请问您是如何解决这个问题的?

我使用SL811HS控制USB disk
程序代码如下:
code unsigned char commandtable[]={0x55,0x53,0x42,0x43,0x77,0x88,0x77,0x88,0,0,0,0,0,0,0x0c};
void addUFIcommand(unsigned char lengthl,lengthh,direction)
{
unsigned char i;
for(i=0x10;i<0x1f;i++)
wrotg(i,commandtable[i-0x10]);

wrotg(0x18,lengthl);
wrotg(0x19,lengthh);
wrotg(0x1c,direction);
}
void addUFICBWCB(unsigned char v1f,v21,v22,v23,v24,v27)
{
unsigned char i;
for(i=0x1f;i<0x2f;i++)
wrotg(i,0);

wrotg(0x1f,v1f);
wrotg(0x21,v21);
wrotg(0x22,v22);
wrotg(0x23,v23);
wrotg(0x24,v24);
wrotg(0x27,v27);
}
addUFIcommand(0,0,0);
addUFICBWCB(0,0,0,0,0,1);
for(aaa=0x10;aaa<0x2f;aaa++)
{
rdotg(aaa);
trdata(otgdata);
delay(3000);
} // 显示OUT command


endpoint=2;
outpackage(0x10,0x1f,deviceaddr,data0);
trdata(otgdata); // sl811hs return ACK
delay(3000);
trdata(otgdata);
delay(3000);
trdata(otgdata);
delay(3000);

// delay(100);

endpoint=1;
inpackage(0x60,0x0d,deviceaddr,data0);
trdata(otgdata); // sl811hs return NAK--------不知道该如何解决
delay(3000);
trdata(otgdata);
delay(3000);
trdata(otgdata);
delay(3000);

请问各位先进,这可能是哪边出问题??小弟感激不尽……


miller1104
游客

返回顶部