阅读:1365回复:5
求助关于sl811驱动,目前不能枚举通过
我使用的是LPC2134+SL811HST。现在问题是枚举不能通过,具体情况如下:
1。晶振试过12M和48M的有源晶振,并且相应调整过CM的电平,都不能通过 2。除了前面16个功能寄存器,后面的200多个寄存器读写是正确的。 3。u盘插上后,有时候能识别到,有时候识别不到,无盘时,中断状态一直是0x40。 插着U盘不拔,复位cpu后,可以看到IntStatus是0x00,这时候就可以进入识别到U盘了。 4。由于 中断状态是0x00,所以下面语句没有执行。应该是没有产生SOF信号。 i=SL811Read(IntStatus); if(i&0x80) { SL811Write(cDATASet,0xe0); SL811Write(cSOFcnt,0xae); SL811Write(CtrlReg,0x01);//devide whether it is a full speed device.zhshy old 0x05 } 但是,即使我在此处设置端点,改掉i的值,强制进去开启SOF。 也一样不能产生SOF信号。D+上面没有测到脉冲。 5。枚举传输数据后,有时候是传输超时,有时候就一直不能跳出以下的条件判断。 如果强制要求产生sof信号,就出现传输超时,否则就是一直等不到传输完成。 intr = SL811Read(IntStatus); // wait for interrupt to be done, and if((intr & USB_RESET) || (intr & INSERT_REMOVE)) // proceed to parse result from slave { // device. USB_Control.DATA_STOP = TRUE; // if device is removed, set DATA_STOP return FALSE; // flag true, so that main loop will } // know tis condition and exit gracefully if(intr & USB_A_DONE) break; // interrupt done !!! 6。我的U盘不是朗克的,但是已经尝试了至少3种U盘,测试的结果都如上面所述。 现在猜测出现问题的可能原因: 1。 晶振 2。 U盘 3。 难道是LPC2134???? 4。 。。。。。。。。。。。。。。。 实在不知道问题出现在哪里了,各位做过的xdjm来帮帮忙亚! |
|
沙发#
发布于:2008-06-10 10:39
SL811Write(EP0Control,0x01); 这里就没开启SOF吧。那当然就测不到了。
|
|
板凳#
发布于:2008-04-30 11:38
目前的情况:
1.关于48M有源晶振, 更换上以后,我用示波器测量晶振的输出。 测到波形是不对的,5V的晶振,结果波幅峰值大概2.2V,谷值1.6V左右吧,频率也不对。 由于示波器测量范围是最高25MHz的,所以频率不正确可以理解,但是波幅为什么 不正确呢。 但是,我更换为12M有源晶振时候,波幅频率都是正确的。 因此,最终选择的是12M有源晶振。 2.关于不能辨认到U盘插入和拔出。 发现原因在于SL811的初始化。 如果初始化为全速模式,即SL811Write(CtrlReg,0x5); 则不能辨认到U盘。 而如果初始化为低速模式,即SL811Write(CtrlReg,0x20); 则能辨认到U盘插拔。 因此我初始化为低速模式。 3. 辨认到u盘后,继续进行枚举。 发送80 06 00 01 00 00 12 00. 结果一直不能等到传输完成,或者传输超时的中断标志。 就是等待在以下代码处。 intr = SL811Read(IntStatus); // wait for interrupt to be done, and if((intr & USB_RESET) || (intr & INSERT_REMOVE)) // proceed to parse result from slave { // device. USB_Control.DATA_STOP = TRUE; // if device is removed, set DATA_STOP return FALSE; // flag true, so that main loop will } // know tis condition and exit gracefully if(intr & USB_A_DONE) break; // interrupt done !!! 4.在测试过程中,我在D+线上面没有测量到任何脉冲。即SOF |
|
地板#
发布于:2008-04-23 18:13
x 谢谢两位大哥,我试一下格式化FAT16,然后改一下init函数,再试,消息随时汇报
|
|
地下室#
发布于:2008-04-22 08:56
1。晶振用48M的有源晶振,设置
void SL811_Init(void) { SL811Write(cDATASet,0xe0); SL811Write(cSOFcnt,0xae); SL811Write(CtrlReg,0x5); SL811Write(EP0Status,0x50); SL811Write(EP0Counter,0); SL811Write(EP0Control,0x01); SL811Write(IntEna,0x20); // USB-A, Insert/Remove, USB_Resume. SL811Write(IntStatus,INT_CLEAR); // Clear Interrupt enable status } 2、把U盘格式化为FAT16格式的试试,最好是完全格式化。 |
|
|
5楼#
发布于:2008-04-21 22:02
试试容量较小的U盘(Full Speed).
|
|