又有新问题!CH375作HOST操作USB鼠标,返回STALL

--7.14--- 请问对于控制USB鼠标,设置空闲模式set_idle()是必须做的步骤吗?是不是get_report_ex和set_report对于鼠标来说也是非必需的呀?

--7.12--- 我用的单片机是Atemga16,+CH375作主机,操作USB鼠标。 参照网上例程,复位过了,设备已经连接上了,SETUP阶段操作也成功了,DATA阶段不成功,status返回的值是0x2e,对照了一下是STALL错误。 不知道是什么意思,请高手帮忙解答,成、万分感谢!

unsigned char get_descr_ex() { unsigned char descr_len; unsigned char *p=data_buf; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf); issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* SETUP阶段操作成功 */ { endp6_mode=0xc0; toggle_recv(); } else return(0); issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* DATA阶段操作成功 */

Request.Req_buf中是什么数据,与例程是否一样的


是的哦 除了牵涉到单片机部分 其他的都没改


可能是数据大小端错,例程基于MCS51,是大端格式,而AVR是小端格式,Request.Req中的成员有的是16位数据,那么就存在大小端转换问题了 Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0001; Request.Req.wIndex=0x0000; Request.Req.wLength=0x1200; 改为: Request.Req.bmRequestType=0x80; Request.Req.bRequest=0x06; Request.Req.wValue=0x0100; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0012;


应该是这个问题。。 那么,读数据会不会牵涉到相关问题呢,如data_buf[]的顺序


除8位变量以外,16位或32位变量都会存在这个问题,看看这个数组的类型就知道


我也出现了这个问题啊!复位过了,设备已经连接上了,SETUP阶段操作也成功了,DATA阶段不成功,status返回的值是0x2e.把Request.Req的数据改了也没用啊!我用的单片机是M3内核的LM3S9B92!!为什么啊?????


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