Station P2(ROC-RK3568-PC) 裸机开发7_裸机代码
整理出的第一份能运行的代码,下载链接如下(2022/02/10 更新为免积分下载)。
StationP2(ROC-RK3568-PC)裸机开发之最简裸机代码
Station P2(ROC-RK3568-PC) 最简裸机代码
没啥功能, 被 SoC bootrom 加载到 internal_sram 0xfdcc1000 处运行,
等待一定时间后,又返回 bootrom 运行。
make.sh 里面的 rkbin/tools/boot_merger 在这里下载:
https://github.com/rockchip-linux/rkbin
编译得到 rk3568_loader.bin,
使用 RKDevTool_Release_v2.84 工具烧写到板了上的 eMMC 内。
RKDevTool_Release_v2.84 使用的的地址配置如下图所未:
烧写到 spinor flash 也可以运行(RKDevTool 默认是烧到 spinor flash,无需特殊操作)
但不建议烧到 spinor 中!!
烧写到 eMMC 也可以运行,但因为要切换目标存储,步骤比较繁琐,具体如下:
1). 板子启动到 MASKROM 状态
2). 下载 ROC-RK3568-PC 的 MiniLoaderAll.bin
https://www.t-firefly.com/doc/download/107.html
3). 在 RKDevTool 在高级功能界面,点击 "Boot:" 对应的右边三个点的按钮,
选择前面下载的 MiniLoaderAll.bin,点击对应最右边的下载按钮,
这个操作是把 MiniLoaderAll.bin 下载到内存运行,不需要重启设备,
4). 点击 "读取存储列表" 按钮,右边的列表中就会显示出来板子上的存储设备,
(0) 结尾的是板子上有的存储
(x) 结尾的是板子上没有的存储
(√) 结尾的是当前选中的存储
5). 在列出来的存储清单中,选择 "Emmc(0)",再点击 "切换存储",
切换成功清单中的 "Emmc(0)" 会变成 "Emmc(√)"
6). 回到 RKDevTool 第一页的 "下载镜像" 界面,点击 "run" ,即是烧到 eMMC 中。
rk3568tpl_start.S :
.text
.global _start
_start:
b tpl_main
main.c :
static void static_delay(int nSecondWait)
{
if(nSecondWait < 0) return;
volatile unsigned long int i,j;
for(i=nSecondWait;i>0;i--)
for(j=200000;j>0;j--);
}int tpl_main(void)
{
static_delay(13); // 等待约13秒后return 2;
}
rk3568tpl.lds
SECTIONS {
. = 0xfdcc1000;
. = ALIGN(8);
.text :
{
rk3568tpl_start.o(.text)
*(.text)
}
.rodata ALIGN(8) : {*(.rodata*)}
.data ALIGN(8) : { *(.data) }
. = ALIGN(8);
__bss_start = .;
.bss ALIGN(8) : { *(.bss) *(COMMON) }
__bss_end = .;
}
rk3568tpl_start.S 中只有一行代码, 无状态跳转到C函数 tpl_main()
这个跳转不改变 lr 寄存器的值, 所以如果 tpl_main() 结束返回的话,
并不是返回到 rk3568tpl_start.S 中 "b tpl_main" 的下一行指令,
而是最后一次改变 lr 寄存器的跳转处:这个跳转在 bootrom 代码中!
结合 rkuboot 中的源码注释及实际测试,可以猜想得到,bootrom 应该有这样的代码:
设置栈指针,然后在各个存储中查找可启动的 Loader
while(nRetry < 5)
{
copy tpl.bin into sram addr 0xfdcc1000
bl 0xfdcc1000
}
继续执行bootrom中的代码。
即:
bootrom 会做5次重试, 都被返回的话,会继续执行bootrom code让设备处于MASKROM模式。
饱和面试题: 干货满满,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】
weixin_37556843: https://thegnomejournal.wordpress.com/2011/03/15/styling-gtk-with-css/
一方沃土: 你好,请问可以使用rk3568_ddr_1560MHz_v1.08.bin这个来初始化lpddr4吗
flyingyu99: 有没有开源lpddr4初始化代码
weixin_37556843: 不在SDK里,自己网上找一下哦,我原来是在 firefly 官方下载的