hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1200回复:11

metalwing,xxczsy123456,jinghuiren几位大侠,请教啦

楼主#
更多 发布于:2004-09-16 08:41
大侠们好,小妹最近又遇到麻烦了。
我做host主机读写U盘,目前已经可以正确读写sl811寄存器和外部ram,但是下面这个函数中,用if(SL811Read(IntStatus)来查询设备是否准备好了,每次检测的结果都是设备尚未准备好,然后就不停的检测设备,请指点一下吧,我现在是束手无策。
&USB_RESET)
unsigned char speed_detect()
{    int int0;
    unsigned char temp;
SLAVE_FOUND = FALSE;        // Clear USB device found flag
FULL_SPEED  = TRUE; // Assume full speed device
HUB_DEVICE  = FALSE; // not HUB device
DATA_STOP  = FALSE;

SL811Write(cSOFcnt,0xAE);       // Set SOF high counter, no change D+/D-, host mode
SL811Write(CtrlReg,0x08);       // Reset USB engine, full-speed setup, suspend disable
DelayMs(10); // Delay for HW stablize
SL811Write(CtrlReg,0x00);       // Set to normal operation
SL811Write(IntEna,0x61);
temp=SL811Read(IntEna);     // USB-A, Insert/Remove, USB_Resume.
SL811Write(IntStatus,INT_CLEAR); // Clear Interrupt enable status
//        SL811Write(IntStatus,0xc1);
DelayMs(100); // Delay for HW stablize

if(SL811Read(IntStatus)&USB_RESET)      
{ // test for USB reset
SL811Write(IntStatus,INT_CLEAR);// Clear Interrupt enable status
DelayMs(30); // Blink LED - waiting for slave USB plug-in
return 0; // exit speed_detect()
}

if((SL811Read(IntStatus)&USB_DPLUS)==0) // Checking full or low speed如果不是全速的
{ // ** Low Speed is detected ** //
SL811Write(cSOFcnt,0xEE);   // Set up host and low speed direct and SOF cnt
SL811Write(cDATASet,0xE0); // SOF Counter Low = 0xE0; 1ms interval
SL811Write(CtrlReg,0x21);   // Setup 6MHz and EOP enable
FULL_SPEED = FALSE; // low speed device flag
}
else
{ // ** Full Speed is detected ** //
SL811Write(cSOFcnt,0xAE);   // Set up host & full speed direct and SOF cnt
SL811Write(cDATASet,0xE0);   // SOF Counter Low = 0xE0; 1ms interval
SL811Write(CtrlReg,0x05);   // Setup 48MHz and SOF enable
}
SLAVE_FOUND = TRUE;        // Set USB device found flag
SLAVE_ENUMERATED = FALSE;        // no slave device enumeration

SL811Write(EP0Status,0x50);   // Setup SOF Token, EP0
SL811Write(EP0Counter,0x00); // reset to zero count
SL811Write(EP0Control,0x01);   // start generate SOF or EOP

DelayMs(25); // Hub required approx. 24.1mS
SL811Write(IntStatus,INT_CLEAR); // Clear Interrupt status
return 0;     // exit speed_detect();
}


原理图如下
附件名称/大小 下载次数 最后更新
2004-09-16_myusb_05.SCH (19KB)  1
新手上路,各位大侠莫不理睬
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-16 12:58
怎么都没有人理会啊。
新手上路,各位大侠莫不理睬
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-16 16:25
我检测到设备了,但是是低速设备,还是不对的吧,u盘是全速设备的啊!
新手上路,各位大侠莫不理睬
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-16 19:04
这是你的固件程序吧?
新手上路,请多关照.
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-20 12:13
这两天调试程序,这个问题已经解决了,检测到u盘是全速设备了,但是往下进行又出现问题了,头疼啊。
发送setup包的时候,传入sl811的数据缓冲区中顺利,但是枚举却不成功,getdescripter函数中调用usbXfer函数,读Ep0Statuse寄存器结果是D0,也就是说设备端点被禁止,设备忙,可是我把u盘插上去,是空闲的啊,怎么会这样?
新手上路,各位大侠莫不理睬
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-20 16:26
不理解你说的是什么意思.枚举没成功吗?可你不是说识别设备了吗?
新手上路,请多关照.
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-22 10:28
只是识别出来是全速设备啊!而且我晕的还多着呢,调用函数的时候,常常会参数传递不过去,行参根本不和实参数值对应起来,而是有几个是对应的,有几个完全不对。
新手上路,各位大侠莫不理睬
wlfworld
驱动牛犊
驱动牛犊
  • 注册日期2004-03-01
  • 最后登录2005-07-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-22 15:38
我刚把读写u盘做成功不久,也曾遇到过你的问题,请确认你的程序有没有严格按照HOST的启动时的配置?应相关资料不在身边无法帮你查看了,如有需要下次上网帮你解决,并有相关资料可MAIL给你
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-23 13:05
请确认你的程序有没有严格按照HOST的启动时的配置?

什么意思啊?我不懂啊,能把你的QQ留下吗?这样我好请教
新手上路,各位大侠莫不理睬
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-23 18:35
我发送的setup包是80,06,0001,0000,1200,
进入usbXfer后发送给u盘,返回的结果是超时。都快把人磨死了,
我用的是12m的无缘晶振,没有办法啊,我没有48m的有缘晶振,请问是这个原因吗?请指教啊。
新手上路,各位大侠莫不理睬
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-24 08:42
80,06,0001,0000,1200
是0100吧?不记得了.
我用的是12m的无缘晶振,没有办法啊,我没有48m的有缘晶振,
你这个晶振是哪的晶振?
新手上路,请多关照.
hongshanger
驱动小牛
驱动小牛
  • 注册日期2004-07-19
  • 最后登录2006-04-06
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-09-24 11:21
什么哪儿的晶振啊,我不知道啊,就是普通的那种,上面有12000字样
新手上路,各位大侠莫不理睬
游客

返回顶部