全志F1C100S的BROM研究

全志f1c100s是个性价比很高的芯片,但是对一般人不太友好的是它的资料开放的太少了。
网上找不到完整版的用户手册,只能从有限的手册文档和参考代码旁敲侧击,反向猜测。
关于它的BROM网上的手册内容很少。


手册上只有短短3句话:

具体怎么个启动流程,完全没有描述。

但是从网上的代码和开发板资料来看,它启动是按照顺序自动选择。

我用的开发板只有SPI FLASH,它是先从SPI NOR FLASH启动,无法读到有效的SPL,则进入USB下载模式。

而进入USB模式的按键,其实就是把SPI的片选拉低,让它无法读FLASH内的数据,从而进入USB模式。

USB下载模式官方提供一个sunxi-fel.exe的工具,很方便,它支持下载image到RAM,同时也支持直接下载到SPI-FLASH,还能读回数据。


如何判断SPL的有效性?

文档没有描述,也是通过参考代码,代到线索。

启动文件是这样写的,生成的BIN头部必须包含下面的内容。

;/* Boot head information for BROM booting */
BROM_BHI        B       Reset_Handler
				DCB     "eGON.BT0"
				DCD     0, 0x4000
				DCB     'S', 'P', 'L', 2
				DCD     0, 0
				DCD     0, 0, 0, 0, 0, 0, 0, 0
				DCD     0, 0, 0, 0, 0, 0, 0, 0

编译生成的SPL.bin内容如下格式:

 除了编译生成的文件头信息外,还需要后期修改如下内容:

偏移000C:此SPL.bin的校验,用mksunxi.exe生成。
偏移0010:此SPL.bin的长度,必须256字节对齐。


SPL是在哪里运行的?

我们怎么确定SPL的运行环境?
文档也是没有任何描述。

下面文档的内存映射表:

BROM在0地址有32KB,内部SRAM在0x10000有40KB。
那事实真的如此吗?

只能通过写代码进行验证,我们的SPL是被加载到了0地址,在0地址运行。

而我们能使用的SRAM空间,也不在0x10000这个地址。

实际上芯片内部的SRAM空间是在0x0000 - 0x9000,一共有36KB。

后来还发现0xB000 - 0xB600还有一小段可以使用的SRAM。

在启动时,我们的SPL程序运行地0地址,可以使用内部SRAM用做栈空间,它负责初始化CPU时钟和SDRAM,并负责加载uboot或者其它程序。

另外此时,IRQ,FIQ,MMU都是关闭状态。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值