CH375主机模式时,有时候控制传输比如读设备的配置描述符,遇到返回的数据大于64字节时,我就很郁闷了,试验了好久,都没有办法成功。用芯片本身提供的get_descr(2)肯定不行了,数据溢出;那么用外部固件方法,按照USB标准的控制传输3步骤,设置阶段完成后,连续2次或以上的数据阶段,理论上就可以接收到超过64个字节的数据了。然后再状态阶段发送0字节握手。现在我的问题就出在数据阶段。控制阶段指明是读配置描述符,需要返回的数据大于64个字节。数据阶段先toggle_recv(1),然后issue_token( ( 0<< 4 )|DEF_USB_PID_IN),成功并读取数据后,toggle_recv(0),再一次issue_token( ( 0<< 4 )|DEF_USB_PID_IN),这次就死活不能成功了,没有buffer数据返回,status返回的错误代码为23H。程序大体如下: if(SETUPDAT[6]||SETUPDAT[7]) { /*Data Stage*/ unsigned char s; unsigned int len=((unsigned int)SETUPDAT[7]*256+SETUPDAT[6]); unsigned char *buf; unsigned char EPBUF0[256]; buf=EPBUF0; tog_recv=1; endp_out_size=64; endp_out_addr=0;
while( len ) { /* 连续接收数据块 */ toggle_recv( tog_recv); /* 数据同步 */ s=issue_token( ( endp_out_addr << 4 )||DEF_USB_PID_IN ); if ( s==USB_INT_SUCCESS ) { /* CH375成功收到数据 */ s=rd_usb_data( buf ); /* 将数据从CH375芯片中读出 */ if(s<64) break; tog_recv = ~ tog_recv; /* 切换DATA0和DATA1 */ len-=s; /* 计数 */ buf+=s; } else { break; } } }
请求哪位大侠指点!