公司项目要求通过VCP实现IAP功能。1、boot与app都会有vcp驱动代码,用的是同一套usb代码; 2、在boot时可实现vcp通信,将app代码烧写到相就的app分区; 3、app代码实现了keil的编译(分区偏移)设置,中断向量表重映射; 4、现在遇到的问题是:app应用程序若开启usb时钟配置,IAP跳转到App程序不能正常运行,若关掉app的usb时钟,则能够正常运行; 5、尝试完成IAP功能后复位,boot中直接跳转到app,boot不经过usb初始化,APP的usb也能够正常使用; 6、从以上的现象中,我怀疑是boot,App程序中两次初始化usb导致这个问题的; 7、请问:usb不能够两次初始化(枚举)吗? 8、有什么方法可以同时使得boot与app程序都能够使用usb功能? |
我这里来说说我的想法。
App中应该是可以使用USB的,枚举两次没问题。
但是首先得让上位机知道,你断开了之前的USB。接下来,才能再次连接新的USB。
具体到你的应用的话,你的USB D+的上拉1.5K的电阻是否接入,必须可控。暴力一点的话,你可以在App中,先把D+的上拉电阻关断,D+、D-置为输入状态,然后延时一定的时间,再次初始化USB,D+的上拉电阻接入。这样就模拟了一次USB拔出,和再次插入的过程。
之前试过用USB Hound发送复位命令给下机位,让USB设备复位,然后重新枚举。
但是不知道下位机有没有软件命令,通知上位机要进行一次复位操作,如果有的话,执行一次也是可以的。复位后执行新设备的枚举。
搜了个帖子,或许对你有用
STM32 软件断开连接 USB 设备问题(在线等!比较急!)
http://bbs.21ic.com/icview-426319-1-1.html?fromuser=toofree
评分
查看全部评分