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

时间:2016-08-12 17:41:10

标签: usb firmware codewarrior coldfire

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

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

我使用USB嗅探器和Coldfire调试硬件跟踪了这个错误,这是条件和我找到代码的情况。

  1. 通信中断位于固件端,而不是主机上的驱动程序。

  2. 只有在主机(Windows 7)从多个线程快速发送USB固件命令时才会发生挂起。每个固件命令都会回复主机。因此通过USB端口有最大流量。

  3. 我正在使用摩托罗拉提供的实现,USB-STAND-ALONE-DRIVER_V03.pdf中有详细记录(谷歌会为您找到它)。我的焦点有两个函数,它们应该很好地结合在一起:usb_in_service(由中断处理程序调用)和usb_tx_data(启动传输,在某些时候会产生中断)。

  4. 如果USB fifo仍然有数据要发送给主机,则实现usb_tx_data函数使其失效。但等待fifo清理会使代码进入无限循环。

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

  6. 我检查过USB模块没有出现重置事件,也没有暂停。

  7. 主要问题是错误是在USB模块硬件中还是在代码中。我找不到指出这个问题的勘误表。如果它是代码,那么整个逻辑不在哪里?

    由于我们正在基于相同的固件制作新的产品系列,因此我们无法释放它直到解决这个问题。

0 个答案:

没有答案