这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » 有关多个SL811使用问题

共2条 1/1 1 跳转至

有关多个SL811使用问题

菜鸟
2006-11-29 22:43:50     打赏
各位大侠. 我作了一个嵌入式的带多个USB接口的东西。我选了SL811作为USB Host,通过AT89C51RD2的P0口作为多个SL811的片选信号,P2口作为SL811的RST信号。 现在出现这样的问题,请教大家: 1.通过For循环依次对多个SL811进行枚举,均成功; 2.然后依次对USB设备进行读写操作,但结果:是仅有枚举成功的最后一个设备可以正常操作,其他所有的设备均不能正常操作。 因我使用的是MCU为SPI的,故无法通过仿真器来看程序Fail在什么地方,另外如果单独对某个USB设备操作时均成功。 所以请问通过SL811芯片对USB设备操作时,是否有延续性? 谢谢!



关键词: 有关     多个     SL811     使用     问题    

菜鸟
2006-11-29 23:32:00     打赏
2楼
我通过示波器看到,当切换到第二个设备枚举时,第一个设备的SOF停止发送了,所以才导致仅有最后一个设备能够正确操作。 请问各位大虾: 是SL811的某个寄存器设置不正确,还是什么原因?郁闷中。。。 令附SL811寄存器设置程序: int speed_detect(void) { unsigned char i=0,j=0; gbv_full_speed = 1; drv_SL11Write(cSOFcnt,0xAE); // Set SOF high counter, no change D+/D-, host mode drv_SL11Write(CtrlReg,0x08); // Reset USB engine, full-speed setup, suspend disable delay(300); // Delay for HW stablize drv_SL11Write(CtrlReg,0x00); // Set to normal operation drv_SL11Write(IntStatus,0xFF); // Clear Interrupt enable status i=drv_SL11Read(IntStatus); if(i & 0x40) { drv_SL11Write(IntStatus,0x40); return(0x0A); } else { if((i & 0x80)==0) { // Checking full or slow speed, drv_SL11Write(cSOFcnt,0xee); // Set up Master and Slow Speed direct and SOF cnt high=0x2e drv_SL11Write(cDATASet,0xe0); // SOF Counter Low = 0xe0; 1ms interval drv_SL11Write(CtrlReg,0x21); // Setup 6MHz and EOP enable gbv_full_speed = 0; //低速 } else { drv_SL11Write(cSOFcnt,0xae); // Set up Master and Slow Speed direct and SOF cnt high=0x2e drv_SL11Write(cDATASet,0xe0); // SOF Counter Low = 0xe0; 1ms interval drv_SL11Write(CtrlReg,0x05); // Setup 48MHz and SOF enable } drv_SL11Write(EP0Status, 0x50); drv_SL11Write(EP0Counter, 0); drv_SL11Write(EP0Control, 0x01); // start generate SOF or EOP drv_SL11Write(IntStatus,0xff); delay(25); // Hub required approx. 24.1mS drv_SL11Write(IntStatus,0xff); i = drv_SL11Read(IntStatus); // Read Interrupt Status if(i & 0x40) return(0x0D); else return 0; } }

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]