Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
发布于 2015-03-18 13:19:47 浏览:3163
订阅该版
问题描述:(所用平台是STM32F207+DP83848) APP用的是RT-THREAD的,bootloader用的是裸机版本的。我的做法是在APP中通过finish敲命令后在flash中置更新程序标志,然后切换到bootloader程序。bootloader程序检查更新程序标志是否置起,如果置起则等待更新命令(有超时跳转到APP操作),当程序更新完毕或者超时跳转到APP,则把升级程序的标志清掉。 遇到的问题是在从APP切换到bootloader后,bootloader是跑起来了,有打印信息,但是就是网络ping不通,所以无法通过网络更新程序。 之后发现在跳转到bootloader后不能ping通网络,但是每次按键复位芯片后都可以正常ping通网络且可以正常下载程序。发现这个规律后索性在APP中敲命令置起更新程序标志后软件复位芯片,复位后芯片默认从bootloader启动。之后发现这样bootloader可以正常ping通网络,可以正常下载程序了。 说明:我的bootloader程序flash对应是0x08000000开始,APP是从0x08010000开始,并且也在APP中把中断向量表映射到(NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);)相应地址。 以下附上从APP中前换到bootloader函数,大家帮忙分析下问题到底处在哪里。 ```typedef void (*pFunction)(void); pFunction Jump_To_Application; uint32_t JumpAddress; #define USER_FLASH_FIRST_PAGE_ADDRESS 0x08000000 /* Only as example see comment */ #define USER_FLASH_LAST_PAGE_ADDRESS 0x080E0000 #define USER_FLASH_END_ADDRESS 0x080FFFFF void Clear_All_INT_FLAG(void) { ETH_DMAClearITPendingBit(ETH_DMA_IT_R); ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS); TIM_ClearITPendingBit(TIM3, TIM_IT_Update); EXTI_ClearITPendingBit(EXTI_Line11); USART_ClearITPendingBit(USART1, USART_IT_IDLE); USART_ClearITPendingBit(USART1,USART_IT_TXE); USART_ClearITPendingBit(USART1,USART_IT_TC); USART_ClearITPendingBit(USART2, USART_IT_IDLE); USART_ClearITPendingBit(USART2,USART_IT_TXE); USART_ClearITPendingBit(USART2,USART_IT_TC); USART_ClearITPendingBit(USART3, USART_IT_IDLE); USART_ClearITPendingBit(USART3,USART_IT_TXE); USART_ClearITPendingBit(USART3,USART_IT_TC); } void Iap_Updata_load(void) { #define IAP_UPDATA_FLAG 0XAA u8 temp[ADDR_TOTAL]={0}; SPI_FLASH_HighSpeedReadCont(temp,CMD_0XC1_SAVE_FLAG1,ADDR_TOTAL); temp[UPDATA_FLAG] = IAP_UPDATA_FLAG; Flash_Sector_Erase(CMD_0XC1_SAVE_FLAG1); SPI_FLASH_WriteCont(temp,CMD_0XC1_SAVE_FLAG1,ADDR_TOTAL); __set_FAULTMASK(1); // 关总中断 /* disable interrupt first */ Clear_All_INT_FLAG();//清除我在APP中打开的中断的标志 //reset_chip();//软件复位芯片 rt_hw_interrupt_disable(); if (((*(__IO uint32_t*)USER_FLASH_FIRST_PAGE_ADDRESS) & 0x2FFE0000 ) == 0x20000000) { /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS); Jump_To_Application(); } else {/* Otherwise, do nothing */ rt_kprintf("do nothing "); /* do nothing */ while(1); } return ; }``` 下面附上相应的log信息: 1.这个是从APP敲命令前换到bootloader的信息及ping信息: ![{C0X3UWI6J(NS4HE}URBPYT.png](/uploads/7150_201845bcdf26827b24d2cba7bd0fe792.png) ![)A_AJ_OXP{QBN[W}JUI@2RV.png](/uploads/7150_ea65ae4687b657e5337e64c4a363ea1d.png) 2.当打开reset_chip();//软件复位芯片函数,让芯片复位后bootloader的信息及ping信息: 可以正常更新程序(相应log信息): ![578M5]QLUI%(NGC]{}{S2MV.png](/uploads/7150_c76fd44353cdbbbd5b879c03cd09e281.png) 相关ping信息(红色圈住部分是重启后在bootloader的ping信息): ![11111A910.png](/uploads/7150_59f29d80c6a7b2ab69e1ff9432ccba2e.png)
查看更多
2
个回答
默认排序
按发布时间排序
aozima
2015-03-18
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
好长,没看完。 简单点说就是网络不通,那么去查不通的原因,而不要纠结为什么有了bootloader就不通,因为程序本来就是有问题的,可能有些地方没初始化而使用了默认的状态。 刚好有bootloader把它复现出来了而已。 比如MII/RMII的IO状态不确定导致在PHY复位时对其设置了错误的参数。 dump出PHY的寄存器并逐个解析。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.2k
关于作者
batbob
这家伙很懒,什么也没写!
提问
4
回答
3
被采纳
0
关注TA
发私信
相关问题
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
stm32f103+dm9000的IAP操作
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【24嵌入式设计大赛】基于RT-Thread火星一号华为云平台储能监测管理系统
2
RVBacktrace RISC-V极简栈回溯组件
3
一文教你如何在VSCODE中搭建RT-Thread开发环境
4
分享第一次PR的经历
5
EtherCAT EOE移植及上手说明
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
文件系统
DMA
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
ota在线升级
WIZnet_W5500
UART
flash
packages_软件包
cubemx
PWM
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
中断
flashDB
socket
Debug
GD32
编译报错
msh
keil_MDK
at_device
rt_mq_消息队列_msg_queue
ulog
C++_cpp
SFUD
本月问答贡献
出出啊
1512
个答案
341
次被采纳
小小李sunny
1437
个答案
289
次被采纳
张世争
774
个答案
167
次被采纳
crystal266
546
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部