nuc972跑裸机,怎么做IAP?
stm32是使用一个BootLoader,+APP+缓存,标志位,app中下载升级的固件到缓存分区中
或者BootLoader部分升级app区域
目前我使用的是SPI+NorFlash
我现在是直接把程序下载到flash里面可以直接运行
如果要带升级的话,是和stm32一样的做法吗,然后重定向中断向量?
还是说使用uboot+linux的那种方式,把linux内核替换成我自己的裸机程序
通过uboot来启动和升级我的裸机程序?
最近编辑记录 a32425262 (2021-06-04 19:10:06)
离线
感谢晕哥和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
离线
我是菜鸡,段地址在哪里看。.s文件吗
就是买的酷客的开发板,用的里面的裸机程序的例子修改的
离线
感谢晕哥的回复
你前面说到的应该是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)
离线
终结:
在晕哥的帮助下,搞定了
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)
离线