当前位置: 技术问答>linux和unix
(cdc-acm.c)usb转串口驱动中usb读数据问题:usb->status=-2
来源: 互联网 发布时间:2016-04-30
本文导语: 驱动是内核中的cdc-acm.c,现在可以往单片机写数据,但不能读数据,单片机在windows下都可以读写成功,所以单片机端应该没问题。 驱动产生的错误是: acm_control_msg: rq: 0x22 val: 0x3 len: 0x0 result: 0 set line: 38...
驱动是内核中的cdc-acm.c,现在可以往单片机写数据,但不能读数据,单片机在windows下都可以读写成功,所以单片机端应该没问题。
驱动产生的错误是:
acm_control_msg: rq: 0x22 val: 0x3 len: 0x0 result: 0
set line: 38400 0 0 5
Entering acm_rx_tasklet
acm_rx_tasklet: sending urb 0xf723cc00, rcv 0xf724e578, buf 0xf724e6b8 //连续出现16次类似的语句
acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
acm_control_msg: rq: 0x22 val: 0x2 len: 0x0 result: 0
set line: 38400 0 0 8
acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
Entering acm_tty_write to write 3 bytes,
acm_control_msg: rq: 0x22 val: 0x3 len: 0x0 result: 0
Entering acm_write_bulk with status 0
set line: 9600 0 0 8
Entering acm_softint
acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
acm_control_msg: rq: 0x22 val: 0x0 len: 0x0 result: 0
acm_ctrl_irq - urb shutting down with status: -2 //连续出现16次相同的语句
也就是:usb->status=-2
书上错误的解释是: urb被usb-kill-urb调用终止
我觉得原因不对!
请高手指点!
驱动产生的错误是:
acm_control_msg: rq: 0x22 val: 0x3 len: 0x0 result: 0
set line: 38400 0 0 5
Entering acm_rx_tasklet
acm_rx_tasklet: sending urb 0xf723cc00, rcv 0xf724e578, buf 0xf724e6b8 //连续出现16次类似的语句
acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
acm_control_msg: rq: 0x22 val: 0x2 len: 0x0 result: 0
set line: 38400 0 0 8
acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
Entering acm_tty_write to write 3 bytes,
acm_control_msg: rq: 0x22 val: 0x3 len: 0x0 result: 0
Entering acm_write_bulk with status 0
set line: 9600 0 0 8
Entering acm_softint
acm_control_msg: rq: 0x20 val: 0x0 len: 0x7 result: 7
acm_control_msg: rq: 0x22 val: 0x0 len: 0x0 result: 0
acm_ctrl_irq - urb shutting down with status: -2 //连续出现16次相同的语句
也就是:usb->status=-2
书上错误的解释是: urb被usb-kill-urb调用终止
我觉得原因不对!
请高手指点!
|
声明:我对usb不熟,我只是跟踪了下代码,说说我的看法。
所以status返回了-ENOENT,
有可能调用了usb_kill_urb。你顺着这条路去debug。
注意到
set line: 38400 0 0 5
set line: 38400 0 0 5
突然又变成了
set line: 9600 0 0 5
是不是有可能波特率设置的有问题呢?
请检查。。。。。。。
include/asm-generic/errno-base.h:
#define ENOENT 2 /* No such file or directory */
drivers/usb/class/cdc-acm.c:
function -> acm_ctrl_irq():
switch (status) {
case 0:
/* success */
break;
case -ECONNRESET:
case -ENOENT:
case -ESHUTDOWN:
/* this urb is terminated, clean up */
dbg("%s - urb shutting down with status: %d", __FUNCTION__, status);
return;
所以status返回了-ENOENT,
有可能调用了usb_kill_urb。你顺着这条路去debug。
注意到
set line: 38400 0 0 5
set line: 38400 0 0 5
突然又变成了
set line: 9600 0 0 5
是不是有可能波特率设置的有问题呢?
请检查。。。。。。。
|
出现的次数应该和你从该设备读取的字节数有关
考虑一下读取时时序的控制
考虑一下读取时时序的控制
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。