笔记:瑞芯微启动分析

芯片从内部的ROM启动,称之为MaskROM,然后他会尝试从SPI FLASH NAND等等个存储介质找一个有效的可执行程序,什么叫有效的,那肯定时需要一个HEAD头啊,瑞芯微称之为叫IDB。所以只要符合瑞芯微IDB格式的,并且放到存储介质(SPI FLASH,NAND等)指定位置的都可以被MaskROM加载。

假定我现在开发了一个hello world程序了,其实就是一段bin固件,我单片机用的多,如果用BIN的话,是没有地址信息的,所以可以用hex或者s19。为了需要让maskROM加载,那么肯定需要一个打包工具,读取helloworld程序 ,生成符合IDB的程序,这个工具叫做boot_merger.也就是说boot_merger+hello world程序=生成一个合规的(相对于MaskROM来说)IDB程序.

显然其实我们不用开发这个helloword程序了,因为现在有两个方案供我们选择,瑞芯微提供了miniloader.bin和UBOOT-TPL,为什么有这玩意?为什么不直接UBOOT打包成IDB格式,MaskROM初始化把UBOOT从存储介质(同上)搬运到DDR,跳转到DDR运行?有说法是MaskROM空间小,功能少,我觉得最关键一点是扩展性。有的芯片内置DDR,有的芯片没有,外置DDR引脚不固定,比如PB6 也可以,PD10也可以,MaskROM咋知道用哪个?(当然也有解决办法,比如烧录一个固定的参数文件(这跟设备树没啥区别),MaskROM读取存储介质的参数文件,初始化对应的串口,DDR引脚,频率等等,如果我做芯片我就用这种方案,因为MaskROM功能需要的硬件资源只有串口,DDR引脚,频率)。另外的解决办法就是MaskROM做最简单的工作,从存储介质读到合格的IDB程序文件到内部SRAM,然后跳转到SRAM执行,因为SRAM不需要复杂的初始化,是内部的SRAM。内部SRAM有限,比如我现在用的3506内部SRAM有48K,所以放不下UBOOT那么大的东西(因为UBOOT现在很大了,网络协议栈也有)。比如我们可以用miniloader.bin作为IDB程序,加载到SRAM运行。miniloader.bin初始化DDR,把UBOOT整个搬运到DDR运行。也可以把UBOOT-TPL程序作为IDB程序,加载到内部SRAM,剩下的和上述一致。

最后一个问题,因为IDB程序位于存储介质指定位置,根据文档,IDB程序位于offset=0x40位置处。

无论如何,芯片已经成功跑到了UBOOT程序运行了.接下来就要加载内核了。

引用:

瑞芯微SDK

介绍RK3399 u-boot各个镜像生成的基本流程 - 瑞芯微Rockchip开发者社区 - 电子技术论坛 - 广受欢迎的专业电子论坛!

RK33XX/RK35XX系列设备启动流程、写入系统及编译流程 · ophub/amlogic-s9xxx-armbian · Discussion #1634

【U-Boot】TPL、VPL、SPL_uboot spl tpl-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值