OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6034|回复: 7

寻求一种软件触发的iap更新方式

[复制链接]

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-17
在线时间
0 小时
发表于 2014-5-18 22:25:53 | 显示全部楼层 |阅读模式
5金钱
原子哥的iap程序是用硬件触发iap更新的,有没有一种好的办法可以实现软件触发更新。

我想到一种方案是通过串口发送命令,但是效果不太好,总是被当做应用程序更新到代码中

求高人指点

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-18 23:43:04 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-17
在线时间
0 小时
 楼主| 发表于 2014-5-19 10:11:39 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
---------------------------------
比如我通过串口给mcu

发送一个1就进行软件复位,回到bootload程序中
发送一个2,那么就开始把sram程序copy到flash里面
发送一个3, 就开始运行 更新的程序
没有指令发送的时候就自动运行现有的app程序

当然这么单纯的发送肯定是不行的,程序会把它当做app拷贝到flash的,
我觉得应该设计一个寄存器用于存放指令可以让程序自动识别是更新指令还是需要进行更新的
app程序。

现在也没有一个特别好的实现思路,希望可以和大家共同探讨一下。
回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-17
在线时间
0 小时
 楼主| 发表于 2014-5-19 13:43:03 | 显示全部楼层


原子哥里面的sys文件面都是叉号,可是编译又没有问题这是什么情况??
回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-17
在线时间
0 小时
 楼主| 发表于 2014-5-19 15:33:46 | 显示全部楼层
加了一些判断语句好像是可以识别指令和代码了 但是又有了另外的问题  
我用jtag-flash  首先烧写bootlloader程序   起始地址为0x8000000
紧接着烧写我写的app程序,起始地址为0x8010000 如下图



然后打开串口调试助手,显示bootloader程序开始正常执行 

向串口发送指令AD (规定ADH为跳转指令)  

串口调试助手收到后 打印 开始执行flash代码,之后就死机不动了 如下图

  
  这说明下面这段代码的if条件已经满足了,但是在跳转的时候出了错,所以程序死在里面了
[mw_shl_code=c,true] if(Flag == 0XAD){ printf("开始执行FLASH用户代码!!\r\n"); if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX. { iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码 }e[/mw_shl_code]
 程序跳转的代码均是采用原子哥的库函数版本的代码,并未修改。
我实在想不出是哪里卡住了 ,请各位神给指点一二。
回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-17
在线时间
0 小时
 楼主| 发表于 2014-5-19 22:06:09 | 显示全部楼层
使用丁丁串口调试助手将app的,bin文件写到stm32f103rct6的sram中  缓存的起始地址为0x20001000 
打开bin文件如下图


可一看到 app的栈顶地址为20000a90
            app的reser_handler地址为08010145
打开app的map程序可以看到,复位地址和栈顶地址和bin文件相同



理论上来说,在执行如下代码时候,是可以进行复制的,因为根据上面的地址描述  if语句的判断应该为真的,但是实际结果确实“打印非FLASH应用程序!” 感觉很没有道理呀。
[mw_shl_code=c,true] if(Flag == 0XAB) {  [/mw_shl_code] [mw_shl_code=c,true] if(applenth) { printf("开始更新固件...\r\n"); if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//??????·???0X08XXXXXX. { iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//?ü??FLASH?ú?? delay_ms(100); UART_Send(buffer3, countof(buffer3)-1); Flag = 0; //break; }[/mw_shl_code] [mw_shl_code=c,true] }[/mw_shl_code]
贴出串口的接收程序段,问题会不会出现在这里呢,flag标志位存放在0x2000010c中  并不会给 [mw_shl_code=c,true]USART_RX_BUF[USART_REC_LEN] 数组造成破坏。请各位大神给看下  [/mw_shl_code]
[mw_shl_code=c,true]#if EN_USART1_RX //如果使能了接收 //串口1中断服务程序 //注意,读取USARTx->SR能避免莫名其妙的错误 u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20001000. //接收状态 //bit15, 接收完成标志 //bit14, 接收到0x0d //bit13~0, 接收到的有效字节数目 u16 USART_RX_STA=0; //接收状态标记 u16 USART_RX_CNT=0; //接收的字节数 u16 Flag; void USART1_IRQHandler(void) { u8 res; #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到数据 { res=USART_ReceiveData(USART1); if(USART_RX_CNT<USART_REC_LEN) { USART_RX_BUF[USART_RX_CNT]=res; USART_RX_CNT++; Flag = res; } }[/mw_shl_code]

回复

使用道具 举报

9

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-5-17
在线时间
0 小时
 楼主| 发表于 2014-5-19 22:51:12 | 显示全部楼层
回复【3楼】小猫薄薄:
---------------------------------
通过多方排查 我觉得就是串口在接收文件的时候出错了。并没有存放到20001000起始的这个地址块中,可是并没有找到解决办法。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-19 23:18:17 | 显示全部楼层
你这个代码不是可以仿真么?
仿真接收完以后,设置一个断电,查看下就知道是不是这么回事了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 05:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表