你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6859|回复: 5

STM32F217 VirtualCOMPort IAP功能 问题~~!

[复制链接]

1

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-6-3 15:00:52 | 显示全部楼层 |阅读模式
    我在自己编写USB IAP烧录功能的过程中,遇到了关于APP-->Bootloader跳转的问题,详细内容如下描述,希望大家能提供一些解决方案与技术支持,谢谢
 
平台:
1.         使用芯片:STM32F217.
2.         硬件平台:公司内部设计的Demo仿真板.
 
现今状况:
1.         Bootloader代码放在 0x08000000 ~ 0x08008000 地址区;APP代码放在0x08008000 ~ 0x080FFFFF区域;
2.         BootloaderAPP两个代码中都加入了USB_DEVICE_LIBVirtual COM Port功能,且单独运行Bootloader,能正常通过VCP烧录APP代码;单独运行APP,能正常通过VCP烧录Bootloader代码。
3.         当前采用的代码跳转方式
a)         Bootloader跳转至APP的方式:
参考官方SCI-IAP例程(AN2557),Bootloader上电时检测是否在烧录模式.
                         i.              若否,则JumpAddress = *(__IO uint32_t*) (0x08008000 + 4); 直接将PC指针跳转到APP代码入口地址;
                       ii.              若是,则进入SCI & VCP烧录模式,对APP代码进行烧录,烧录完毕后驱使芯片SoftwareRest.
b)        APP跳转至Bootloader的方式:
APP代码中,当检测到需要烧录APP代码时,采用SoftwareRest的方式,跳转至Bootloader程序,进入SCI & VCP烧录模式。
 
已实现功能:
1.         完整实现普通SCI串口烧录功能.
a)         APP中通过SCI串口烧录Bootloader.
b)        APP检测到需烧录APP代码时,通过SoftwareRest,进入Bootloader代码的烧录模式,对APP代码进行烧录。
 
遇到问题:
1.         不能实现通过Virtual COM Port烧录APP代码的功能。
a)         原因分析:
                         i.              在烧录APP代码时,需要通过SoftwareRest的方式进入Bootloader代码的烧录模式。但是,当芯片Reset后,USBDP脚的3.3V上拉会消失,导致PC认为USB设备断开,当Bootloader代码对USB寄存器进行重新初始化后,DP脚的3.3V上拉重现,PC认为USB设备连接,这就相当于对USB设备进行了一次热插拔。
                       ii.              同时,由于此时上位机正在占用着VCP的端口号,所以,当在USB设备被PC重新识别时,会由于端口号被占用而导致识别失败,从而导致上位机不能通过VCP发送任何数据,使得在Bootloader烧录模式下不能继续对APP代码进行烧录。
b)        临时解决方式:
在芯片从APP代码通过SoftwareReset跳转至Bootloader代码后,退出上位机,重新热插拔USB设备,则PC能重新正确识别Virtual COM Port,此时再打开上位机,即可通过VCP 烧录APP的代码。
 
需求方案:
       虽然通过“退出上位机”à“热插拔USBà“重新运行上位机”这样的操作后,能够实现通过VCP烧录APP代码的功能。但是,此方式并不能满足项目实际应用需求。项目实际应用中,烧录过程需要能连贯进行。
       所以,我想询问:
a)         是否可以通过非SoftwareReset的方式,实现从APP代码到Bootloader代码的跳转。
回复

使用道具 举报

1

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-6-3 15:03:06 | 显示全部楼层

RE:STM32F217 VirtualCOMPort IAP功能 问题~~!

帖子显示不完全,下面继续补充一下:
需求方案:
        虽然通过“退出上位机”“热插拔USB”“重新运行上位机”这样的操作后,能够实现通过VCP烧录APP代码的功能。但是,此方式并不能满足项目实际应用需求。项目实际应用中,烧录过程需要能连贯进行。
        所以,我想询问:
a)        是否可以通过非SoftwareReset的方式,实现从APP代码到Bootloader代码的跳转。
b)        同时,在跳转过程中,保持USB外设不需要被PC重新识别,实现跳转到Bootloader后不需热插拔USB,Virtual COM Port 也能正常运行,从而完成对APP的烧录.
希望您们能抽空思考此问题,同时给予一些实现方案和技术指导。谢谢~
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-6-3 15:29:58 | 显示全部楼层

RE:STM32F217 VirtualCOMPort IAP功能 问题~~!

你这个问题解决的办法最好通过PC机软件来结局,比如当检测到这个端口无效的时候,自己断开,然后等待有效的时候,再重新执行USB串口的连接。如果跳转你可以使用类似从bootloader跳转到APP的指令来实现。但是,这样就会在每次跳转以后重新初始化USB,所以这个还是不可取的。如果可以使用MCU本身的串口来做,这个就可以避免。
回复 支持 反对

使用道具 举报

1

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-6-7 15:59:28 | 显示全部楼层

回复:STM32F217 VirtualCOMPort IAP功能 问题~~!

回复第 3 楼 安于2011-06-03 07:29:58发表:
你这个问题解决的办法最好通过PC机软件来结局,比如当检测到这个端口无效的时候,自己断开,然后等待有效的时候,再重新执行USB串口的连接。如果跳转你可以使用类似从bootloader跳转到APP的指令来实现。但是,这样就会在每次跳转以后重新初始化USB,所以这个还是不可取的。如果可以使用MCU本身的串口来做,这个就可以避免。 

    谢谢你的回答, 由于上位机不能修改,所以我想还是从MCU入手. 现在我有两个猜想:
    1.   如果使用类似Bootloader跳转到APP的指令来实现, 在从APP跳转到Bootloader前,不对USB寄存器进行复位, 跳到Bootloader后,也不重新初始化USB寄存器. 这样的话是否可以使USB外设保持工作,使PC不重新枚举USB设备呢?
    2.  依旧使用SystemReset的方式实现从APP跳转到Bootloader, 但是人为地在DP管脚上增加1.5Kohm 3.3V上拉, 以此欺骗PC, 使PC不重新识别USB设备, 这样跳到Bootloader后继续使用VCP.
    上述第一种方案已作测试, 但是JumptoBootloader后,能运行Bootloader的代码,且能响应中断, 可以在JTAG调试下单步运行, 但只要点击全速运行,则会跑到HardfaultHandler.
    第二种方案仍未尝试.
    请问斑竹对上述两种方案的可行性有什么看法呢? 谢谢~ ^_^
回复 支持 反对

使用道具 举报

1

主题

4

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-6-13 16:07:28 | 显示全部楼层

RE:STM32F217 VirtualCOMPort IAP功能 问题~~!

测试发现,利用DP口外加上拉电阻的方式 并不能 欺骗PC, 在Jumptobootloader后,PC依然认为USB DEVICE disconnect了...
同时,利用PC地址跳转的方式,可以跳转到Bootloader,可以进入TIM2中断,也可以进行单步运行.在TIM2中断中增加unsigned long 变量udwCnt, 每进入一次TIM2中断加1, 单步运行时,该值可以一直加到1500,而且可以继续单步运行. 但是,如果按全速, udwCnt 只能加到2, 代码就进入HardfaultHandler()了... 这个可能会是什么问题呢...
"可以单步运行,但是不可以全速运行.."
回复 支持 反对

使用道具 举报

2

主题

11

回帖

0

蝴蝶豆

新手上路

最后登录
2018-9-6
发表于 2016-6-1 17:16:28 | 显示全部楼层
請問樓主解決了嗎? 我目前遇到跟你一樣的問題,只要從APP跳轉至IAP,USB就會列舉失敗,使得無法在IAP區進行USB通訊,也試過了再IAP區不重新初始化USB,可以傳資料到PC端,但是IAP區的USB收資料中斷卻無效了,真是頭大阿!!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版