CYPRESS的USB外设控制器CY7C68013A是一款广泛应用于USB打印机,手机,存储设备,USB测试等多个领域的经典产品。该产品符合USB2.0协议规范,支持full speed和high speed两种速度模式,并且配有8051的MCU,带有IO,IIC,UART,定时器等功能。由于该芯片是市场上唯一支持high speed模式的芯片,所以一上市后,就获得了广泛的关注。
关于CY7C68013A的开发,CYPRESS提供了完整的程序架构,一般的应用只需要理解了它的软件架构以及寄存器的含义,然后根据自己的需求修改寄存器初始化值,并且修改USB的相关描述符即可实现。并且CYPRESS提供了较多的例程以及上位机,方便参考和调试,加快了开发的进度。
但是在开发的过程中,如果你想实现将你的CY7C68013A设备速度模式变为可切换,那你可能就要纠结和痛苦了。因为你查遍了它的DATASHEET和TRM手册也不会发现有相关的介绍。
但是请不要急,看完这篇帖子,你就能够实现了。
首先,在CY7C68013A的所有例程中,默认情况下,都是将设备枚举成高速模式的。那么如果想实现将其默认枚举成全速设备的话,应该怎么做呢?那就需要修改其中的寄存器值了。怎么改,改哪里呢?CY7C68013A的实现方法有点weird。因为他不是像别的MCU那样在程序中配置了某个寄存器的值就可以实现的,他是通过修改KEIL软件的配置实现的。准确的说是在KEIL调用Hex2bix文件,实现将HEX的文件转换为IIC文件时通过修改转换的参数来实现的。即将KEIL配置中的命令改成
c:\cypress\usb\bin\hex2bix -c 0x80 -i-f 0xC2 -o bulkloop.iic bulkloop.hex。
如果不加-c 0x80命令,那么CY7C68013A就会默认枚举成高速,加上-c 0x80就默认枚举成全速。
那么在实现将设备默认枚举为全速后,如果在程序中将USB断开了一次,CY7C68013A又会变成了高速模式,此时想要切换速度模式,又需要怎么做呢?很简单,只需要这样(大招来了):
USBCS |= bmDISCON; // just disconnect from USB
CT1&=0x02; //0x02保证程序重启后可以保持在全速,//0x00保证在高速
EZUSB_Delay(1500);
USBCS&=~bmDISCON; // reconnect USB
USBCS|= bmRENUM; //EZUSB_Discon(TRUE);
即修改寄存器CT1的值就好了。这个寄存器就是控制速度模式的寄存器。但是翻遍了TRM手册,也没有关于这个寄存器的介绍,为什么呢?那是因为这个寄存器是不合法的,准确说是这个寄存器是CYPRESS公司开发的时候,在TEST时候使用的。所以没有公布。以上内容希望对大家有帮助。(本段代码只能参考例程中关于寄存器的文件fx2regs.h)