CYPRESS的USB外設控制器CY7C68013A是一款廣泛應用於USB印表機,手機,存儲設備,USB測試等多個領域的經典產品。該產品符合USB2.0協議規範,支持full speed和high speed兩種速度模式,並且配有8051的MCU,帶有IO,IIC,UART,定時器等功能。由於該晶元 ...
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)