由于项目需求,要用到USB进行通信,但是纯的usb通信实现起来相对比较麻烦,所以就用了usb cdc模式,也就是usb虚拟串口的形式进行通信,这样又又可以实现usb通信,又不会对研发周期产生影响。这些驱动的实现TI的驱动库都提供了比较完整的实现方法,比较好实现。不过usb通信的缺点就是容易受到外界的干扰,不光是从整体的设备或者是usb线都会对其影响甚大。
在项目初期,出现的问题是通信一段时间突然间就莫名其妙地断开了,得重新插拔才能再通信,这个问题对我们设备来说是致命的问题,因为我们电脑对设备需要实时采集数据,一旦断开我们设备的测量结果就断开了。
一开始就是从软件上进行跟踪,发现usb异常都会进入挂起状态,因此首要任务就是怎么在挂起状态下重新唤醒,通过软件来实现,经过很多种软件唤起或者屏蔽挂起的功能,都无法实现这个现象。
后来在不经意间发现,如果开关电烙铁都会使通信中断,这个就找到什么原因造成usb通信的中断——电源的干扰。市电的干扰抖动对设备电源的扰动,最后传到usb的差分信号上,导致usb自动挂起,保护usb自身接口。
最后跟一个专门做EMC和EMI的公司合作来解决这个问题,这家公司出配套方案,帮忙整改设备内部电源系统及处理走线方式,最后进行脉冲群测试,能测试达到3级水平。
所以大家在用usb通信,不管是哪种处理器的应用,个人觉得usb对电源和辐射要求还是很高的,所以首先要处理好电源系统,强电和弱点要严格分开,要对电源进行差模和共模的抑制,usb差分信号要布差分走线,还要做一些ESD或TVS的处理,电路板的强弱电要明确。
如上经验就是项目设计的心得共享,希望对大家有帮助,还可以继续交流。如有需要可以继续交流设计心得,可以加我qq:1454968971,或者直接留言讨论。共同进步,一起解决难题。