硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2716|回复: 22
收起左侧

V6开发板能否通过U盘对429芯片程序升级?【二楼坛友已经上传基于V6的Demo】

  [复制链接]

5

主题

17

回帖

32

积分

新手上路

积分
32
发表于 2020-8-24 13:36:22 | 显示全部楼层 |阅读模式
V6开发板能否通过U盘对429芯片程序升级,就是U内存放bin文件或hex文件,429芯片通过读取U盘内文件更新程序,看是否有好的解决方案?
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 2020-8-25 12:40:13 | 显示全部楼层
2 iap实现备份旧程序复制新程序.rar (30.55 MB, 下载次数: 337)

楼主你要的功能我给你做好了。欢迎测试,基于v6

将固件命名为 new.bin 放入U盘根目录,上电会自动比较U盘固件与flash固件是否一致,如果不一致 就备份旧固件,更新新固件。

如果一致 就直接启动。

固件 的格式须是bin文件,不可以hex。

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-8-24 14:21:04 | 显示全部楼层
没问题,就是没有做现成的参考程序供大家参考,后面有时间了做个。
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2020-8-24 14:43:59 | 显示全部楼层
可以做个,这种方式在实际产品上用的多,看了你写的用USB DFU方式升级,这种方式仍然不能脱离电脑。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-8-24 15:04:49 | 显示全部楼层
js2016 发表于 2020-8-24 14:43
可以做个,这种方式在实际产品上用的多,看了你写的用USB DFU方式升级,这种方式仍然不能脱离电脑。

好的,没问题。
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2020-8-24 15:24:19 | 显示全部楼层

我正在做这个,思路是这样的:
1、Bootloader作为一个单独的工程(假设程序起始地址固定为0)编译并生成bin文件。
2、用户APP程序作为另外一个单独工程(假设程序起始地址固定为A,A值大于Bootloader工程编译后数值)编译并生成bin文件。
现在不太清楚如何将这两个不同的bin文件烧写到STM32F429内部Flash?是分两次烧写,还是能合并后一次烧写?请硬汉看看有没有什么方法。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-8-24 15:51:20 | 显示全部楼层
js2016 发表于 2020-8-24 15:24
我正在做这个,思路是这样的:
1、Bootloader作为一个单独的工程(假设程序起始地址固定为0)编译并生成 ...

使用批处理实现内部flash,外部flash等多个地址hex文件合并,再通过CubeProg同时下载
http://www.armbbs.cn/forum.php?m ... 6166&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

82

主题

402

回帖

668

积分

金牌会员

积分
668
QQ
发表于 2020-8-24 16:04:57 | 显示全部楼层
js2016 发表于 2020-8-24 15:24
我正在做这个,思路是这样的:
1、Bootloader作为一个单独的工程(假设程序起始地址固定为0)编译并生成 ...

我就是这样做的  一个bootload程序  一个APP程序  可以通过 H7-TOOLS 一次性全部烧录进去。
武汉天纵鹏元科技有限公司。承接嵌入式项目开发,相关技术交流。STM32,物联网,工业控制方向。QQ  408137104
回复

使用道具 举报

16

主题

148

回帖

196

积分

初级会员

积分
196
发表于 2020-8-24 16:21:37 | 显示全部楼层
js2016 发表于 2020-8-24 15:24
我正在做这个,思路是这样的:
1、Bootloader作为一个单独的工程(假设程序起始地址固定为0)编译并生成 ...

假如你是使用的Jlink 的话 找到JFlash这个软件 先把Boot的hex拖进界面了 在点击软件左上角的File -> Merge Data File 然后会弹出来选择文件 找到APP的hex 确定 然后另存为 二合一.hex就可以了  最后的二合一取名以你实际工程项目名字为准
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2020-8-24 16:49:23 | 显示全部楼层
谢谢大家提供的方法,我试试
回复

使用道具 举报

1

主题

70

回帖

73

积分

初级会员

积分
73
发表于 2020-8-25 09:33:49 | 显示全部楼层
DAPLink不是有这个功能,还是开源的,去看看了解下。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-8-25 14:09:20 | 显示全部楼层
asj 发表于 2020-8-25 12:40
楼主你要的功能我给你做好了。欢迎测试,基于v6

将固件命名为 new.bin 放入U盘根目录,上电会自动比 ...

非常感谢分享。
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2020-8-26 13:46:30 | 显示全部楼层
asj 发表于 2020-8-25 12:40
楼主你要的功能我给你做好了。欢迎测试,基于v6

将固件命名为 new.bin 放入U盘根目录,上电会自动比 ...

非常感谢我测试下
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2020-8-26 17:20:54 | 显示全部楼层
asj 发表于 2020-8-25 12:40
楼主你要的功能我给你做好了。欢迎测试,基于v6

将固件命名为 new.bin 放入U盘根目录,上电会自动比 ...

行业内很多厂家用的是GSD和HYD格式,不清楚这种格式是怎么生成的,有了解这种吗?
回复

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
发表于 2020-8-26 17:37:20 | 显示全部楼层
先烧写bootload软件,自己的app软件可以直接用mdk下载,也可以用cubeprogrammer软件烧写,这边要注意下,自己app编译前要设置好IROM1地址,用cubeprogrammer下载,同样也要指定起始地址。  
  当然,用网友提供的两个bin整合软件可以省很多事
回复

使用道具 举报

2

主题

87

回帖

93

积分

初级会员

积分
93
发表于 2020-8-27 09:50:45 | 显示全部楼层
谢谢分享,学习一下,一直想这样整。
回复

使用道具 举报

6

主题

126

回帖

144

积分

初级会员

积分
144
发表于 2020-8-27 09:51:16 | 显示全部楼层
asj 发表于 2020-8-25 12:40
楼主你要的功能我给你做好了。欢迎测试,基于v6

将固件命名为 new.bin 放入U盘根目录,上电会自动比 ...

厉害,谢谢分享
回复

使用道具 举报

6

主题

641

回帖

659

积分

金牌会员

积分
659
QQ
发表于 2020-8-27 15:24:40 | 显示全部楼层
js2016 发表于 2020-8-26 17:20
行业内很多厂家用的是GSD和HYD格式,不清楚这种格式是怎么生成的,有了解这种吗?

自己改的后缀名吧
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2020-9-1 17:21:22 | 显示全部楼层
asj 发表于 2020-8-25 12:40
楼主你要的功能我给你做好了。欢迎测试,基于v6

将固件命名为 new.bin 放入U盘根目录,上电会自动比 ...

你好网友,上次你分享的内容,我想问下
if (((*(__IO uint32_t*)APPLICATIONADDRESS) & 0x2FFE0000 ) == 0x20000000) //这个表示什么意思?
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (APPLICATIONADDRESS + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APPLICATIONADDRESS);
      Jump_To_Application();
    }
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 2020-9-1 21:34:37 | 显示全部楼层
js2016 发表于 2020-9-1 17:21
你好网友,上次你分享的内容,我想问下
if (((*(__IO uint32_t*)APPLICATIONADDRESS) & 0x2FFE0000 ) == ...

哈哈哈 你问到我了,我也不知道,我从官方的iap程序抄的
我扒出来那个代码再看看
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 2020-9-1 21:52:03 | 显示全部楼层
en.stsw-stm32051.zip (13.89 MB, 下载次数: 15)
en.DM00023593.pdf (96.81 KB, 下载次数: 12)


我从这个程序抄的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-9-1 21:57:02 | 显示全部楼层
js2016 发表于 2020-9-1 17:21
你好网友,上次你分享的内容,我想问下
if (((*(__IO uint32_t*)APPLICATIONADDRESS) & 0x2FFE0000 ) == ...
if (((*(__IO uint32_t*)APPLICATIONADDRESS) & 0x2FFE0000 ) == 0x20000000)


这个是ST最喜欢搞的骚操作,其实一点用没有,应用程序首地址是栈首地址,通过判断栈首地址超出芯片最大RAM空间来判断应用程序是否有问题。

这个其实完全不用操心,因为我们应用程序编译的时候,完全可以知道超没有超
回复

使用道具 举报

5

主题

17

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2020-9-2 08:50:36 | 显示全部楼层
谢谢大家的分享
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 05:57 , Processed in 0.261678 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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