"); //-->
调试日志: USB在LPC2214上不能枚举问题
最近在做移植一个以前做的USB固件程序到LPC2214上,碰到一个奇怪的问题:在得到建立描述符令牌包时,已经输出了描述符,但HOST还是发出三次,然后就进入挂起模式.
事情是这样的,帮朋友在LPC2214做一个USB设备,电路板是由他提供. 我把以前做的USB程序移植到板子上,因为是挂在LPC2214的BANK2上
跟以前的主控CPU不一样, 我仔细检查了BCFG2的值,先把它的WTS1和WTS2设置为最大值,然后把地址值和其它的IO PORT, 中断做了相应的修改.
插上USB,运行仿真程序. HOST能发现USB的插入,但不能正确识别.这很正常,不可能一下就移植成功的.
在中断函数中的下断点,能发现有中断进入,再读一下相关的中断状态REGISTER,可以看到不是0的值,可以知道外部总线的读是正确的.在SETUP包的下断点,看了一下HOST的发过来的数据,很熟悉的0X80, 0X06的数据出现了,可以知道建立令牌包是收到了.再看一下发过去的数据包, 这是我担心的问题,难道是写操作出问题了吗?
我们知道, HOST在检测了总线上有USB插入时, 会以0设备地址对设备访问,首先就是得到设备描述符, 如果不成功的话,会以5秒的间隔重试三次,还不成功的话,会报告设备有问题.
我想如何来测试写操作了,因为没有SCRATCH寄存器,我找了一个端点FIFO寄存器, 定义了一个常量数组,写上8个数据,然后再读取数据到一个缓冲器,你猜怎么着,数据居然是正确的.又改了一下这个常量数组,结果还是和写进去的一样,我知道:写操作是没问题了.
是报告的数据不对吗? 根据以往的经验, 看了一下, 设备描述符也有PACKET的标志,还有可能是大小端的数据问题.把串口打印加上,然后把上面的测试程序加进来,在写设备描述符后再加入读出来打印到串口输出, 奇怪了,数据完全OK,这是什么样的问题.
我敢肯定,HOST是没收到数据,或是收到的数据不正确.但收到的0X86建立包是正确的呀,所有不是总线的问题.但没有USB分析仪,也有没逻辑分析仪,BUSHOND这样的软件在这时候是不起作用的.示波器这时是抓不到数据的.但我想看一下数据的完整性, 因为USB接口有一大堆电阻电容, 找到D+,D-二根差分总线,突然发现有一个471的电阻,怎么有这个电阻呢,不是18~33R的匹配电阻吗?我马上仔细检测了一下电路,发现D-上是一个18R的电阻,但D+上确实是一个471R的电阻,估计是这个电阻的原因了.
换成18R的电阻,HOST能马上找到设备,提示安装设备的驱动程序了, 测试了一下读写速度, 200K/S的样子,还算可以吧.
总结一下:这个471的电阻浪费了我大半天的时间, 但设备可以接收到0X86的令牌包, 发送命令出去, HOST却收不到. 在这里分析有差错. 如果有分析仪, 可能不会花这么长的时间. 在这里写出来, 希望有朋友看到作为一个借鉴.
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。