您尚未登录。

楼主 # 2021-06-04 19:09:39

a32425262
会员
注册时间: 2018-05-06
已发帖子: 104
积分: 401

NUC972裸机的IAP升级怎么做的?求指导

nuc972跑裸机,怎么做IAP?
stm32是使用一个BootLoader,+APP+缓存,标志位,app中下载升级的固件到缓存分区中
或者BootLoader部分升级app区域
目前我使用的是SPI+NorFlash
我现在是直接把程序下载到flash里面可以直接运行
如果要带升级的话,是和stm32一样的做法吗,然后重定向中断向量?
还是说使用uboot+linux的那种方式,把linux内核替换成我自己的裸机程序
通过uboot来启动和升级我的裸机程序?

最近编辑记录 a32425262 (2021-06-04 19:10:06)

离线

#1 2021-06-04 19:36:57

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,388
积分: 1902
个人网站

Re: NUC972裸机的IAP升级怎么做的?求指导

你也可以用 uboot(或者其他loader) + app + filesystem 这种方式。

APP进入IAP刷机,可以先写标识位,然后强行进入uboot刷机。





离线

#2 2021-06-04 19:44:55

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 583
积分: 587
个人网站

Re: NUC972裸机的IAP升级怎么做的?求指导

哇酷小二 说:

你也可以用 uboot(或者其他loader) + app + filesystem 这种方式。

APP进入IAP刷机,可以先写标识位,然后强行进入uboot刷机。

先做一个bootloader,bootloader可以指定加载flash里面的任意内容到内存,我们只要在flash不同区域存放不同的APP就可以了。
bootloader根据标志,进行选择加载。

离线

楼主 #3 2021-06-22 15:27:38

a32425262
会员
注册时间: 2018-05-06
已发帖子: 104
积分: 401

Re: NUC972裸机的IAP升级怎么做的?求指导

感谢晕哥和LinjieGuo大佬的回复
你们的回复是实现方法,和我之前的理解是一致的
现在重点就是不知道怎么跳转,
另外想问一下,nuc972这个运行的时候都是把flash中的内容拷贝到内存运行的吗
那么是不是可以用野路子办法,不用bootloader,直接在app运行的时候,修改flash中的内容后,重启以升级
另外我尝试用uboot来引导我的APP程序,但是失败了

U-Boot 2016.11-g2c907fa-dirty (Jun 22 2021 - 14:38:43 +0800)

CPU: NUC972
Board: NUC972
DRAM:  64 MiB
SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
In:    serial
Out:   serial
Err:   serial
Net:   emac
Error: emac address not set.

Hit any key to stop autoboot:  0 
=> 
=> 
=> 
=> 
=> 
=> 
=> sf probe 0 50000000
SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
=> sf read 0x100000 0x100000 0x200000
device 0 offset 0x100000, size 0x200000
SF: 2097152 bytes @ 0x100000 Read: OK
=> go 0x100000
## Starting application at 0x00100000 ...

停住没有运行我的APP
我的烧录是
uboot烧录的时候选择uBoot,执行地址是0xE00000
App烧录的时候选择Data,偏移地址的0x100000

离线

#4 2021-06-22 15:38:05

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,388
积分: 1902
个人网站

Re: NUC972裸机的IAP升级怎么做的?求指导

你的程序代码段地址是多少?





离线

楼主 #5 2021-06-22 16:27:52

a32425262
会员
注册时间: 2018-05-06
已发帖子: 104
积分: 401

Re: NUC972裸机的IAP升级怎么做的?求指导

我是菜鸡,段地址在哪里看。.s文件吗
就是买的酷客的开发板,用的里面的裸机程序的例子修改的

离线

#6 2021-06-22 16:37:05

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,388
积分: 1902
个人网站

Re: NUC972裸机的IAP升级怎么做的?求指导

a32425262 说:

我是菜鸡,段地址在哪里看。.s文件吗
就是买的酷客的开发板,用的里面的裸机程序的例子修改的

链接脚本文件可以看,一般是 .ld  或  .lds 文件


或者用  arm-linux-objdump -x 你的elf 文件   显示的.text 段开始地址


一般把你的程序装载到链接地址,go才能正确运行。否则需要重定位。





离线

楼主 #7 2021-06-25 19:54:20

a32425262
会员
注册时间: 2018-05-06
已发帖子: 104
积分: 401

Re: NUC972裸机的IAP升级怎么做的?求指导

感谢晕哥的回复
你前面说到的应该是linux吧
我是uboot引导keil编译出来的裸机程序
我重新做了测试
1.直接烧录app.bin到SPI,DDR,执行地址都是0.正常启动我编译的裸机程序
2.烧录uboot.bin、uboot-spl.bin、app.bin到nand ,可以正常启动我的uboot,和app
3.重新编译一个spi nor的uboot,烧录到spi,执行地址0xe00000,烧录app.bin,偏移地址0x100000,
   --可以正常启动uboot
   --可以读取app.bin
   --无法引导app.bin启动

U-Boot 2016.11-g2c907fa-dirty (Jun 22 2021 - 14:38:43 +0800)

CPU: NUC972
Board: NUC972
DRAM:  64 MiB
SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
In:    serial
Out:   serial
Err:   serial
Net:   emac
Error: emac address not set.

Hit any key to stop autoboot:  0 
SF: Detected W25Q128BV with page size 256 Bytes, erase size 4 KiB, total 16 MiB
device 0 offset 0x200000, size 0x200000
SF: 2097152 bytes @ 0x200000 Read: OK
## Starting application at 0x00007FC0 ...

按理说我用keil编译出来app.bin不需要任何修改,
uboot就可以引导启动的

最近编辑记录 a32425262 (2021-06-25 19:56:45)

离线

#8 2021-06-25 20:18:15

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,388
积分: 1902
个人网站

Re: NUC972裸机的IAP升级怎么做的?求指导

nuc972可以mdk + jlink调试的,你可以试一试。


还可以这样试一试,把 u-boot.bin 加载到 任意ddr地址,看是否能go起来。


然后加载到 0xE00000 是否能go起来。





离线

楼主 #9 2021-07-01 18:52:07

a32425262
会员
注册时间: 2018-05-06
已发帖子: 104
积分: 401

Re: NUC972裸机的IAP升级怎么做的?求指导

终结:
在晕哥的帮助下,搞定了
NUC972烧录SPI Nor,使用uboot引导裸机程序
可能不太丝滑,但是目前是可以使用的
uboot和裸机程序不需要做任何修改
只要修改启动参数就好了

bootcmd=sf probe 0 25000000;sf read 0x200000 0x200000 0x100000;cp.b 0x200000 0 0x100000;go 0;
bootdelay=0

说明:
1.先挂在spi节点
2.读取裸机app到0x200000
3.拷贝刚刚读取的到内存0位置

为什么不把裸机文件直接读取到内存0位置,然后直接启动?
因为直接读取到内存0位置,会提示错误

Failed to map physical memory

为什么不直接使用go命令从读取到的位置0x200000,启动
因为裸机文件的链接地址.TEXT是0.并且中断向量位置也是0
所以必须从内存0位置启动

最近编辑记录 a32425262 (2021-07-01 18:54:21)

离线

#10 2021-07-01 19:43:26

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,388
积分: 1902
个人网站

Re: NUC972裸机的IAP升级怎么做的?求指导

@a32425262
感谢大佬总结分享,也感谢大佬赠予小站的2888元大红包,已厚脸收下🤪🤪🤪





离线

#12 2022-04-08 17:32:50

ssulg
会员
注册时间: 2021-05-31
已发帖子: 5
积分: 0

Re: NUC972裸机的IAP升级怎么做的?求指导

大佬可以分享一下spi的uboot吗?菜鸟新人想在nuc970上玩spi的裸机,也有iap的需求

离线

#13 2022-04-14 23:23:51

老鸟kkk
会员
注册时间: 2020-03-24
已发帖子: 15
积分: 20

Re: NUC972裸机的IAP升级怎么做的?求指导

@a32425262
最近刚好在玩nuc972,貌似不需要重复拷贝两次app,直接把app从flash读到0x80000000 0x200000 0x100000\;go 0x0就能跑起来。
bootcmd=sf probe 0 300000000;sf read 0x80000000 0x200000 0x100000;go 0
uboot

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn