用MSP430F5529自带的USB功能模块想做跟PC机通信应用,但是,当USB插入电脑时,什么反应都没有,刚开始,当我按下USB BSL按键时,可以在在电脑的设备管理器中的通用串行总线控制线看到有一个unknow device,但现在插进去按下BSL按键什么反应都没有。BSL下载软件业总是显示没有发现设备。后来就先放弃用BSL,写上USB程序,参考了TI的例子,也参考了其他人做的例子,写进去,插入USB,什么反应也没有。
这是什么问题呢?上传了一个USB硬件原理图。
Leon Yan:
你好:
首先需要搞清楚,你到底给MCU USB部分开发程序了没有?
BSL按键按下,windows有提示,说明硬件应该没什么问题。
再一个,你参考的例子,是哪种USB协议?
谢谢。
kandy286:
回复 Leon Yan:
你好,我有写入USB程序的。我参考的例子是TI的CDC的例子。
框架大概是:
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 PMMCTL0 = 0xA502; //系统频率为18MHz,Vcore调为level 2 SYS_Init(); //自己的硬件、系统初始化 TIMER1_A0_Init(); EEPROM_Init();
Init_Clock(); USB_init(); USB_setEnabledEvents(kUSB_VbusOnEvent + kUSB_VbusOffEvent);
if (USB_connectionInfo() & kUSB_vbusPresent){ USB_handleVbusOnEvent(); } OLED_Init();
__enable_interrupt(); //开中断
while(1)
{
…
//自己的程序。。。
switch (USB_connectionState()) { case ST_USB_DISCONNECTED: _NOP(); break;
case ST_USB_CONNECTED_NO_ENUM: break;
case ST_ENUM_ACTIVE: //得到接收数据字节数 bytesReceived = cdcReceiveDataInBuffer(dataBuffer, BUFFER_SIZE, CDC0_INTFNUM);
if (bytesReceived){ // 后台发送数据 cdcSendDataInBackground(dataBuffer, bytesReceived, CDC0_INTFNUM, 0);
// 数据LCD显示 for (i = 0; i < bytesReceived; i++) { ShowStr8X16(40,24,&dataBuffer[i],NORMAL); } } USBCDC_sendData(USBSENDDATA,5,0); //发送数据 break;
case ST_NOENUM_SUSPENDED: _NOP(); break;
case ST_ENUM_SUSPENDED: P1OUT |= BIT2; //LED _NOP(); break;
case ST_ENUM_IN_PROGRESS: _NOP(); break;
case ST_ERROR: _NOP(); break;
default:; } }}
大概就是这样。
现在有些问题还没搞清楚,用BSL下载时,按下BSL按键,单片机里面程序为空,电脑也应该会显示设备吧?但是现在插进去,什么反应都没有了,连unknow device也没有显示。
还有,程序写入单片机后,电脑也没有什么反应。
kandy286:
回复 kandy286:
还有,我也通过了描述符工具来开发,VID是0x2047,PID是0x0300,设置了XT2晶体等。
Leon Yan:
回复 kandy286:
个人建议,你先把F5529 EVM得原始程序下载进去,看USB在PC上是否正常工作;
然后再一步一步查软件的问题。
kandy286:
回复 Leon Yan:
你好,请问下5529的EVM的原始程序在哪下载?(不知道EVM是什么),如果硬件正常,下载进去,USB可以正常运行吗?
Leon Yan:
回复 kandy286:
你好,如果你已经安装了CCS,那么这个程序在以下路径:
C:\ti\ccsv5\ccs_base\msp430\msp430ware_1_40_00_26\examples\boards\MSP-EXP430F5529\src
谢谢。
kandy286:
回复 Leon Yan:
谢谢你的耐心回答。现在搞定了。HID 和 CDC都连上了。
kandy286:
回复 kandy286:
就剩下BSL没有搞定了。