Coldfire微处理器MCF5272 USB模块停止触发中断

Coldfire微处理器MCF5272 USB模块停止触发中断,usb,firmware,codewarrior,coldfire,Usb,Firmware,Codewarrior,Coldfire,这是我多年来一直试图解决的问题,定期花1-2个月来解决 我正在使用Metrowerks IDE和ColdFire C编译器MCFCCompiler ver 4.0构建使用USB模块与主机通信的嵌入式代码。这种硬件的产品已经问世八年了,非常成功。然而,这些年来,我们收到了来自现场的投诉,与主机的通信偶尔会中断,操作无法恢复 我使用USB嗅探器和Coldfire调试硬件跟踪了这个bug,这就是我在其中找到代码的条件和场景 通信中断在固件端,而不是主机上的驱动程序 挂起仅在从多个线程通过rapid f

这是我多年来一直试图解决的问题,定期花1-2个月来解决

我正在使用Metrowerks IDE和ColdFire C编译器MCFCCompiler ver 4.0构建使用USB模块与主机通信的嵌入式代码。这种硬件的产品已经问世八年了,非常成功。然而,这些年来,我们收到了来自现场的投诉,与主机的通信偶尔会中断,操作无法恢复

我使用USB嗅探器和Coldfire调试硬件跟踪了这个bug,这就是我在其中找到代码的条件和场景

  • 通信中断在固件端,而不是主机上的驱动程序

  • 挂起仅在从多个线程通过rapid fire从主机(windows 7)发送USB固件命令时发生。每个固件命令都会回复到主机。因此,通过USB端口的流量最大

  • 我正在使用摩托罗拉提供的实现,该实现在USB-STANDLE-ALONE-DRIVER_V03.pdf中有很好的文档记录(谷歌会为您找到它)。在我的关注点中有两个功能,它们应该很好地结合在一起:usb_in_服务(由中断处理程序调用)和usb_tx_数据(启动传输,在某个点上会生成中断)

  • usb_tx_数据功能的实现方式是,如果usb fifo仍有数据要发送到主机,则它将退出。但等待fifo清除会将代码带入无限循环

  • 之后不再发生中断,尽管USB模块的寄存器内容告诉我中断已启用

  • 我检查了USB模块没有得到重置事件,也没有挂起

  • 主要问题是错误是在USB模块硬件中还是在代码中。我没有发现任何关于这个问题的勘误表。如果是代码,那么逻辑没有解释的整个代码在哪里

    我们正在开发一种基于相同固件的新产品线,在解决这个问题之前,我无法发布它