MAX3420E系统调试 | ||||||||||||
| ||||||||||||
引言
应采用欧姆表来检查MAX3420E和USB连接器之间的连线。特别注意D+和D-。二者很容易搞反。请注意,MAX3420E与连接器D+和D-引脚之间有33电阻。对于这么小的电阻,大部分测试是否接通的仪表都会发出“嘀嘀”声。如果需要检查USB电缆,请参考图3。
在执行该语句之前,D+和D-应均为低电平。这是因为电缆的主机侧电路通过15k电阻将这些信号下拉至地。现在,单步执行CONNECT语句后,MAX3420E在D+和VCC (3.3V)之间接入一个1.5k内部电阻。此时,D+应变为高电平,其后会出现一些突发脉冲(图4)。 上面的波形是D+,下面的是D-。该突发波形持续约18s,然后消失。D+保持高电平,D-保持低电平,然后弹出下面的Windows XP消息框(图5): 怎么回事? 图6所示为利用LeCroy Instruments (LeCroy兼并了CATC,CATC是该分析仪的最初生产商)的USB总线分析仪测得的总线过程。当PC探测到设备插入后(CONNECT = 1),它发出一个USB总线复位信号(没有画出)。然后,在Transfer 0,它发出一个“GET_DESCRIPTOR”请求以获取“DEVICE”类型。5.687s之后,PC发出第二个USB总线复位信号,再尝试5.578s,要求得到设备描述符。PC第三次复位总线,再尝试5.580s,然后挂起总线并放弃尝试。由于没有运行固件,设备不会听取或应答(ACK) PC的请求。 为清晰起见,图6没有画出MAX3420E回送的NAK (非应答)握手信号。图7将第一次传输过程展开,详细地显示数据包。现在可以看到Transfer 0以下面三个封包开始: 主机向刚刚连上的设备 在这种情况下,USB发送地址0)发送一个SETUP包(63)。
产生图6和图7波形的USB总线分析仪可能超出了您的预算。尽管本应用笔记假设您只有一个示波器和欧姆表,我们还是强烈建议在USB开发过程中使用USB总线分析仪。我们使用的LeCroy/CATC具有多种优点,包括友好的界面和丰富的软件,最重要的是它享有工业标准USB测量工具的美誉。通过比对CATC波形来确定实际情况,解决了许多争论不休的问题(硬件、软件和芯片等)。总线总是如实反映情况。 幸亏现在有低成本USB分析仪。图8所示为Beagle-USB的屏幕截图。Beagle分析仪能够以比LeCroy/CATC低很多的价格显示总线的工作情况。如果对比图8中的Index 10和图6中的字节数据包,会发现它们显示了完全相同的SETUP数据包。
下一步检查您的控制器是否能够成功地通过SPI总线与MAX3420E寄存器组进行通信。 检查rreg()和wreg()。 unsigned char rreg(BYTE r); // Read a MAX3420E register byte 在调试处理USB传输的代码前,先编写一个简单的子程序来测试这些函数。参见图9的例子: 图9中的测试代码先复位MAX3420E,然后向USBIEN寄存器写入每字节移动1位的8个字节。每个字节中有一位置位,从00000001开始,然后是00000010,最终以10000000结束。单步执行该函数,检查“rd”值8次,确定其值为0x01,0x02,0x04,0x08,0x10,0x20,0x40和0x80。如果是这样,则可以确定SPI接口寄存器的写和读操作均正常。如果能够写入USBIEN寄存器,并可靠的读回其内容,那么就可以读写所有的MAX3420E寄存器。 图10所示为采用CrossStudio调试MAXQ2000微控制器的屏幕截图。将光标指向“rd”变量时,将激活弹出窗口(截图没有显示光标)。单步执行代码时,可采用这种方式来查看任何变量。 测试代码首先设置微处理器SPI端口。对应每种微处理器类型和特定IO引脚分配,SPI_Init()函数各不相同。然后,代码向PINCTL寄存器写入0x10,设置MAX3420E SPI接口为全双工工作模式。这将置位FDUPSPI位。代码置位CHIPRES位,然后对其清零,使MAX3420E处于已知的状态。建议在代码的开始部分包含芯片复位功能,从而在每一个调试周期的开始使MAX3420E处于已知的状态。 如果图10中的代码没有产生正确的结果,应检查SPI信号,确定其工作是否正常。 测试程序test_SPI()中的第一次wreg()调用,向MAX3420E的寄存器17写入数值0x10。SPI总线的波形应与图11所示一致。 注意:图11所示的波形使用SPI模式(0,0),在SCLK的上升沿采样SPI数据,SCLK的空闲电平为低电平。SPI接口不同,显示的波形会有不同的脉冲持续时间,但是对应SCLK上升沿的数值应该相同。 每次访问SPI的第一个字节是命令字节,其字节格式如图12所示。注意图11中对应前一部分SLCK上升沿的MOSI波形,位模式10001010指定寄存器17 (第7位至第3位是10001,数值为17)。同样,第1位为高电平,表明是写操作。第二个字节的位模式是00010000。这是写入寄存器17的数据,即0x10 (只有第4位FDUPSPI寄存器位置位)。因此,该SPI访问将0x10写入寄存器17,置位FDUPSPI位。 得到这些波形的一种简单方法是设置示波器或者逻辑分析仪在SS#的下降沿触发,单步执行wreg()调用。 test_SPI()中的下一条语句是rreg()函数。第一次进入循环体时,将数值0x01写入USBIEN寄存器,如图13所示。 然后,test_SPI()函数读回USBIEN寄存器的数值,第一次通过循环体时,应等于1 (图14)。每次通过循环体时,写入和读回的位应向左移动一个SCLK边沿。 MAX3420E寄存器写和读操作验证完毕后,可以进一步调试程序。到目前为止所有的检查步骤均属于“完整性检查”。现在,我们开始实际处理USB通信功能的第一步:需要处理器响应不同的MAX3420E中断请求位。
EPIRQ寄存器: IN3BAVIRQ OSCOKIRQ 注意:MAX3420E IRQ寄存器位不论其对应的使能位(在EPIEN和USBIEN寄存器中)是否置位,均可有效置位。使能位决定是否将请求位传送到驱动INT引脚的逻辑电路。参见应用笔记3661,MAX3420E中断系统,了解更详细的信息。 USB插入后 USBIRQ寄存器: OSCOKIRQ 注意:USB连接器的VBUS引脚接MAX3420E Copyright © 2019- hyl365.com 版权所有 违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com 本站由北京市万商天勤律师事务所王兴未律师提供法律服务 |