您尚未登录。

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

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

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)

离线

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

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

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

离线

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

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

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

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

离线

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

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

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)

离线

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

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

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)

离线

页脚

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

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