USB连接打印机问题

我用ch376芯片来获得打印机的设备描述符老师获不得,我换U盘就可以获得设备描述符,在获得打印机设备描述符时中断返回的状态时20.下面是我写的获得打印机设备描述符的代码,谢谢大家

void ch376_GET_DESCR(void)               //3

{

char *buf;

char lenth;

int i = 0;

int status = 0;

CS_LOW;

spi_ReadSend_byte(GET_DESCR);

spi_ReadSend_byte(1);

CS_HIGH;

for( i = 0; i < 100*1000; i++)

{

delay_us(1);

status = ch376_get_status();

if( status == USB_INT_SUCCESS )

{

u3_printf("%02x\r\n", 22);

break;

}

}

if(i>=100*1000)

{

u3_printf("%02x\r\n", 8);

//return;

}

u3_printf("recv interrupt");

//return;

delay_ms(10);

u3_printf("%x\r\n",ch376_get_status());

ch376_write(RD_USB_DATA0);

lenth = ch376_read();

buf = &lenth;

u3_printf("%x\r\n",lenth);

for(int i = lenth;i > 0;i--)

{

*buf = ch376_read();

u3_printf("%x\r\n",*buf);

buf++;

}

}


不要循环执行ch376_get_status();,换成等中断IO变低电平,执行一次ch376_get_status(),返回的就是中断状态值。

另外0X20表示设备响应超时,如果换一个设备就出现的现象,可以查一下U口插上瞬间供电电压是否稳定。可以并接电容尝试。


我以前也遇到这样的问题了,最后发现是因为连接打印机后还需要在复位一下,我复位之后就好了,各种描述符都能读取了,希望你试试


"连接打印机后还需要在复位一下,我复位之后就好了"很可能是电源供电问题,因为这样就没有U口的拔插环节了,U口拔插的瞬间会有电压波动的。


楼主,你好,请问你解决了吗?我也是返回错误码0x28,但是我复位了,楼主有什么意见吗


先排查测试命令是否通过,模式设置设置模式6。设备速度是否检测匹配?代码上参考/bbs/thread-65122-1.html 。

如果测试命不过,可排查硬件原因,主要看供电、晶振起振起振。


                           

先排查测试命令是否通过,模式设置设置模式6。设备速度是否检测匹配?代码上参考/bbs/thread-65122-1.html 。

如果测试命不过,可排查硬件原因,主要看供电、晶振起振起振。

    怎么检测设备速度是否检测匹配呢?


RTX截图未命名.png


                           

RTX截图未命名.png

                       大佬可否加个QQ?我QQ1187987705


只有登录才能回复,可以选择微信账号登录