您尚未登录。

楼主 # 2021-06-10 14:57:30

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

D1开发板的裸机程序

我想实现D1开发板的裸机程序(即不运行任何操作系统),试着用了xboot大神的xfel工具,但这个工具暂时还不支持将程序烧录至nand中,所以只好寻求别的办法,看了D1的启动流程,主要是芯片内部的bootRoM->spl->opensbi+uboot->linux,因为这里想实现的是裸机程序,所以我的想法是bootROM->spl->自己的工程,请问这个方法有可行性吗?求指点。

离线

#1 2021-06-10 15:01:12

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

没有问题的, 你先试一试, 把 boot0 烧到 tf 卡的 8k 偏移位置, 应该就能跑起来.





离线

楼主 #2 2021-06-11 10:32:59

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

请问tf卡的格式和大小有要求吗

离线

#3 2021-06-11 10:36:34

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

boot0大小有要求的,他会被bootrom加载到sram,因为sram大小有限,我记得f1c的限制是24k。

d1你得看下手册。





离线

楼主 #4 2021-06-11 12:07:53

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

请问把 boot0 烧到 tf 卡的 8k 偏移位置,是这样烧写的吗.png

离线

#5 2021-06-11 12:46:54

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

是的,但是可能不是这个文件。你先试一试





离线

楼主 #6 2021-06-11 14:28:02

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

_20210611-1423.pngD1的sram大小是32K,和boot0相关的.bin文件,大小均超过了32K,111.png

离线

#7 2021-06-11 14:28:50

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

是不是还有一个 SRAM A0?





离线

楼主 #8 2021-06-11 14:33:59

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

刚找了一下,没找到SRAM A0

离线

楼主 #9 2021-06-11 15:37:44

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

哇酷小二 说:

是不是还有一个 SRAM A0?

怎么办呢

离线

#10 2021-06-11 15:43:01

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

March 说:
哇酷小二 说:

是不是还有一个 SRAM A0?

怎么办呢

感觉那个N-BROM 0x0 - 0xBFFFF  48k 应该是SRAM

不知道里面具体的机制是啥, 猜测这个是brom把boot0加载到这个位置?





离线

楼主 #11 2021-06-11 15:52:25

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

哇酷小二 说:
March 说:
哇酷小二 说:

是不是还有一个 SRAM A0?

怎么办呢

感觉那个N-BROM 0x0 - 0xBFFFF  48k 应该是SRAM

不知道里面具体的机制是啥, 猜测这个是brom把boot0加载到这个位置?

这个N-BROM 0x0 - 0xBFFFF不是BROM程序的位置吗?_20210611-1552.png

离线

#12 2021-06-11 15:52:42

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

哇酷小二 说:
March 说:
哇酷小二 说:

是不是还有一个 SRAM A0?

怎么办呢

感觉那个N-BROM 0x0 - 0xBFFFF  48k 应该是SRAM

不知道里面具体的机制是啥, 猜测这个是brom把boot0加载到这个位置?

但是这样还是不能解释为啥 nand和sd可以有64k





离线

楼主 #13 2021-06-11 16:16:01

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

我先试试烧录到TF卡把,我的TF卡是64G的,还得重买卡,对了 为什么要烧录到TF卡得8K的偏移位置啊

离线

#14 2021-06-11 16:20:14

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

March 说:

我先试试烧录到TF卡把,我的TF卡是64G的,还得重买卡,对了 为什么要烧录到TF卡得8K的偏移位置啊

brom规定的,加上这个地址刚好避开文件系统的元数据?

如果你自己设计芯片,怼哪个地址都可以。

64G不识别吗?





离线

楼主 #15 2021-06-11 16:31:12

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

那个boot0的bin文件大小不都接近64G了嘛

离线

#16 2021-06-11 16:32:19

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

March 说:

那个boot0的bin文件大小不都接近64G了嘛

啊这。。。
不是64K吗?





离线

楼主 #17 2021-06-11 16:33:49

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

不好意了 打错字了

离线

楼主 #18 2021-06-11 17:37:07

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

成功将boot0烧到tf中,和直接用xfel运行boot0现象是一样的。_20210611-1730.png _20210611-1731.png,在初始化DDR停止了。

离线

#19 2021-06-11 17:41:21

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

March 说:

成功将boot0烧到tf中,和直接用xfel运行boot0现象是一样的。https://whycan.com/files/members/6619/捕获_20210611-1730.png https://whycan.com/files/members/6619/捕获_20210611-1731.png,在初始化DDR停止了。

https://whycan.com/t_6638.html#p64370

仿照这个修改试一试





离线

楼主 #20 2021-06-11 17:43:11

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

串口我已经改过来了

离线

#21 2021-06-11 18:00:03

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

March 说:

串口我已经改过来了

https://github.com/xboot/xfel/blob/master/payloads/d1/d1-ddr/source/start.S

或者修改boot0,照xboot这个代码初始化一下

ddr_param:
	.word 792
	.word 3
	.word 0x7b7bfb
	.word 0x01
	.word 0x000010d2
	.word 0x0000
	.word 0x1c70
	.word 0x042
	.word 0x18
	.word 0x0
	.word 0x004A2195
	.word 0x02423190
	.word 0x0008B061
	.word 0xB4787896
	.word 0x0
	.word 0x48484848
	.word 0x00000048
	.word 0x1620121e
	.word 0x0
	.word 0x0
	.word 0x0
	.word 0x00870000
	.word 0x00000024
	.word 0x34050100
	.word 0, 0, 0, 0, 0, 0, 0, 0

reset:
	addi sp, sp, -16
	sd ra, 8(sp)
	sd s0, 0(sp)
	addi s0, sp, 16

	call sys_uart_init
	call sys_clock_init
	la a0, ddr_param
	call sys_dram_init




离线

楼主 #22 2021-06-11 18:29:00

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

我试试

离线

#23 2021-06-11 18:59:04

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

March 说:

成功将boot0烧到tf中,和直接用xfel运行boot0现象是一样的。https://whycan.com/files/members/6619/捕获_20210611-1730.png https://whycan.com/files/members/6619/捕获_20210611-1731.png,在初始化DDR停止了。

烧这个试一试:
boot0_sdcard_sun20iw1p1.bin





离线

楼主 #24 2021-06-11 20:36:49

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

@哇酷小二
现象是一样的

离线

#25 2021-06-11 20:41:33

哇酷小二
wechat微信:whycan_cn
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,378
积分: 1902
个人网站

Re: D1开发板的裸机程序

March 说:

@哇酷小二
现象是一样的

这样吧,你用官方tf卡烧录软件,把img烧到tf卡,然后看能否正常启动。再把tf卡8k偏移读出1M,和上面文件比较,看看他是如何改的。





离线

楼主 #26 2021-06-11 20:43:50

March
会员
注册时间: 2021-05-28
已发帖子: 61
积分: 23

Re: D1开发板的裸机程序

我去试试看

离线

#27 2022-09-13 02:03:11

zhayujie
会员
注册时间: 2022-09-12
已发帖子: 3
积分: 28

Re: D1开发板的裸机程序

March 说:

我去试试看

请问楼主解决了吗

离线

#28 2022-10-15 23:58:30

dick2945
会员
注册时间: 2020-04-27
已发帖子: 4
积分: 1

Re: D1开发板的裸机程序

超过32K的话,将初始化用到的函数,数据,指定编译到到前面32K的位置。
link文件参考这个修改。
    .text :
    {
        PROVIDE(__image_start = .);
        PROVIDE(__text_start = .);
        PROVIDE(__spl_start = .);
        KEEP(*(.text.start))
        . = ALIGN(8);
        *(.text.utils)
        PROVIDE(__ddr_bin_start = .);
        KEEP(*(.ddr.bin))
        PROVIDE(__ddr_bin_end = .);
        */sys-*.o(.text*)
        *\\libc.a:*memcpy.o(.text*)
        *\\libc.a:*memset.o(.text*)
        PROVIDE(__spl_end = .);
        *(.entry)
        *(.text.vectors)
        *(.text*)
        *(.iplt)
        *(.note.gnu.build-id)
        PROVIDE(__text_end = .);
    } > ram
    PROVIDE(__spl_size = __spl_end - __spl_start);
startup.s文件参考这个修改
  .section .text.start
    .global _start
    .global __Vectors
_start:
    /* Boot head information for BROM */
    jal x0, reset
    //.long 0x0300006f // pc += 0x30
    .byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
    .long 0x12345678                /* checksum */
    .long __spl_size                /* spl size */
    .long 0x30                      /* boot header size */
    .long 0x30303033                /* boot header version */
    .long 0x00020000                /* return value */
    .long 0x00020000                /* run address */
    .long 0x0                       /* eGON version */
    .byte 0x00, 0x00, 0x00, 0x00    /* platform information - 8byte */
    .byte 0x34, 0x2e, 0x30, 0x00

这样就能避开32K的限制。
我刚开始开发D1S的lvgl程序时都没用到spl。

最近编辑记录 dick2945 (2022-10-16 00:00:34)

离线

页脚

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

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