Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
发布于 2015-03-18 13:19:47 浏览:3240
订阅该版
问题描述:(所用平台是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
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
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
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部