基本信息
Manufacturer Allwinner
CPU ARM ARM926EJ-S @ 533MHz
L1 Cache: 16KB Data, 32KB Instruction
FPU: None
Memory 32MB Embedded DDR (F1C100s) or 64MB Embedded DDR (F1C200s)
GPU Custom 2D-only
VPU Unknown
Video LCD, CVBS
Audio DAC
Storage SD/MMC (SD v2.0, eMMC V4.41)
USB USB 2.0 OTG
功能框图
典型应用
- F1C100s的内核是 ARM926EJ-S ,ARMv5架构,有MMU,没有硬件FPU,主频默认为408MHz;
- F1C100s内置32MB DDR1内存;
- F1C200s是F1C100s的兄弟型号,其它特性都相同,内存容量翻倍为64MB;
启动过程
1、上电后, f1c100s内部 BROM (芯片内置,无法擦除) 启动;
2、首先检查 SD0 有没有插卡, 如果有插卡就读卡 8k偏移数据,是否是合法的启动数据, 如果是BROM 引导结束, 否则进入下一步;
3、检测SPI0 NOR FLASH(W25QXXX, MX25LXXX) 是否存在, 是否有合法的启动数据, 如果是BROM 引导结束, 否则进入下一步;
4、检测SPI0 NAND FLASH 是否存在, 是否有合法的启动数据, 如果是BROM 引导结束, 否则进入下一步;
5、因为找不到任何可以引导的介质, 系统进入usb fel 模式, 可以用USB烧录了。
对于F1C100s而言启动时寻找用户程序的位置顺序如下:
- SDC0接口(PF0~PF5)上的SD(TF)卡;
- SPI0接口(PC0~PC3)上的Nor Flash;
- SPI0接口(PC0~PC3)上的Nand Flash;
对于SD(TF)卡而言在它上面的数据存储布局通常如下:
start | sector | size | usage |
---|---|---|---|
0KB | 0 | 8KB | Unused, available for an MBR or (limited) GPT partition table |
8KB | 16 | 32KB | Initial SPL loader |
40KB | 80 | Max 984KB | U-Boot |
1MB | 2048 | - | bootfs and rootfs |
上面参数中SPL从8K位置开始不能动(这是由BROM决定的);文件系统可以根据需要来分区,boot分区在前,通常为FAT格式。
编译后得到 u-boot-sunxi-with-spl.bin 这个文件会拼合 spl 和 u-boot ,直接把这个文件写入到 8KB 开始的位置就行了。
对于SPI Flash而言其实和SD(TF)卡而言差不多,最关键的就是将 u-boot-sunxi-with-spl.bin 文件放在头部,即从0位置开始写入;其它内容根据需求而设置,只要对应的调整 u-boot 读取启动内核时相关位置参数就行。
需要注意的是默认情况下SPI Flash最大支持16M,更大就需要在程序中设置bank了。
fel模式
上文中可以了解到F1C100s要是启动外部程序均失败的话就会进入FEL模式,用户可以通过USB和芯片进行交互 。在FEL模式你可以直接运行 u-boot 和 linux 等,也可以将数据写入spiflash中(可以用作烧录固件到设备中)。
FEL模式其实也就是BROM上的一段程序,可以在 u-boot 命令行中使用 go 0xffff0020 跳转进入。另外也可以通过在SD(TF)卡写入下面数据来通过SD(TF)卡启动跳转:
# sdX 为SD(TF)卡,使用 sudo fdisk -l 查看
# 如果有自动挂载的分区则逐条使用 sudo umount /dev/sdXn 进行卸载
wget https://github.com/linux-sunxi/sunxi-tools/raw/master/bin/fel-sdboot.sunxi
sudo dd if=fel-sdboot.sunxi of=/dev/sdX bs=1024 seek=8