grehxm
驱动牛犊
驱动牛犊
  • 注册日期2005-03-20
  • 最后登录2006-12-05
  • 粉丝0
  • 关注0
  • 积分210分
  • 威望26点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:2094回复:0

为什么usb从设备驱动老是遇到buffer overrun问题?

楼主#
更多 发布于:2005-06-15 13:44
使用s3c2410开发了一个数据采集程序,想通过usb接口将数据发送的pc端,及将2410作为device设备使用,小弟根据内核中的源代码稍加修改可以驱动2410,pc机可以识别,现在的问题是工作起来很不稳定,具体说来是:
在pc端使用readfile函数读取数据,刚开始工作正常,2410发数据时readfile返回接受的数据,没有数据时一直阻塞等待,工作一段时间(几十秒or几分钟)开始不正常工作,一用readfile马上返回,但是没有结收到数据,使用sfotice和bushond检测到出错原因是buffer overrun,(设备发送的数据量大于pc请求的数据量)。如果一开始就使用readflie阻塞但是2410一直不发送数据,readfile回阻塞一段时间后也回出错,原因也是buffer overrun,出错以后每次读取都会错,并显示是endpoint halted,出错时2410没有25中断及usb从设备的中断产生 。2410在正常通信时不论是接收pc发送的数据还是向pc发送数据,都会产生25中断,在该中断的响应函数中完成数据的交互,但出错时没有如何中断产生。          出错后可以在pc端设备管理器中停用设备,然后启用设备,这些步骤都正常,2410也会正常产生中断相应,pc再次正确识别设备,使用readfile读取函数又可以正常阻塞一段时间,之后又出现buffer overrun错误。     我将2410的有关寄存器的值打印过,出错时有关寄存器的值都没有任何变化。

小弟在网上看到有些朋友再讨论2410的usb时钟的稳定性,也曾和做过usb驱动的人交流了一下,他也认为可能是设备的信号不稳定造成的。小弟感觉刚搞定时还可以和pc通信几十分钟,好像后来正常的时间总是不过数分钟。

那位大侠能给的意见。
???????????
游客

返回顶部