文章目录

  • 前言
  • 资料来源
  • u-boot & linux
  • 基础特性
  • 启动过程
  • FEL模式
  • 电路设计

前言

最早接触到F1C100s是前两年的一个文章,里面使用F1C100s制作了一张可以运行Linux的名片,就是下图这个。下图上实际电路部分就占用角落一点点面积,当时觉得蛮有意思的的,可以跑Linux的开发板可以做这么小,成本和常见单片机最小系统板差不多,用来玩挺有意思的。

在这里文章里了解到 Sipeed Lichee Nano (荔枝派Nano),这个差不多可以当作F1C100s的最小系统板板用了,某宝一搜一大片,当时价格还不错,这两年因为疫情等各种原因价格上涨不少。

这篇文章将介绍下上手玩F1C100s需要的一些基础信息,方便回头查询使用。

资料来源

  • linux-sunxi community
    https://linux-sunxi.org/Main_Page
    全志SoCs社区linux wiki,全志除了新出的基于RISC-V的D1,其它的芯片资料都是不开放的,mainlinux相关的开发都是由社区维护的,主要资料就是在这里;
    全志的芯片都以 sunxi 来指代,后面凡是看到 sunxi 或是 sun* 的内容可能就是全志相关的内容;
    比如F1C100s就关联 suniv
    https://linux-sunxi.org/F1C100s
    上面可以下载到F1C100s芯片的一些文档;
  • WhyCan Forum(哇酷开发者社区)
    https://whycan.com/index.html
    这个论坛虽然嵌入式相关的内容都有涉及,但目前主要还是全志相关的内容多些;
    https://whycan.com/t_717.html
    上面这篇文章中有很多F1C100s相关的例子资料等;
    https://whycan.com/t_3177.html
    F1C100s开发时的一个坑,编译工具链引起的问题;
  • 荔枝派Nano 全流程指南 与 资料下载
    https://wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/index.html
    https://dl.sipeed.com/shareURL/LICHEE/Nano
  • My Business Card Runs Linux
    https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/
    这个就是开头说的那个可以运行Linux的名片的文章;

u-boot & linux

F1C100s玩的最多的就是拿来搞Linux玩,重要的是针对该芯片的uboot和linux的修改,这里收集了一些主要的项目:

u-boot

  • https://github.com/Icenowy/u-boot
    这个项目有 f1c100sf1c100s-spiflash 两个分支,后者更加新点;
    分支中有 licheepi_nano_defconfiglicheepi_nano_spiflash_defconfig 两个配置文件;
  • https://github.com/Lichee-Pi/u-boot
    这个项目包含荔枝派所有的u-boot,对于F1C100s而言则是在前面项目的 f1c100s-spiflash 分支基础上新增了 nano-lcd800480 分支,增加了对lcd的支持;

linux

  • https://github.com/Icenowy/linux
    这个项目主要查看 f1c100s 分支;
  • https://github.com/Lichee-Pi/linux
    这个项目目前主要查看 nano-4.14-expnano-5.2-tfnano-5.2-flash 三个分支;
    nano-4.14-exp 分支是在前面项目的基础上修复了一个bug,这个分支可以下载 https://dl.sipeed.com/fileList/LICHEE/Nano/SDK/config 这个配置文件进行测试;

基础特性

F1C100s是全志的一颗比较便宜的芯片,其功能框图如下:

典型应用如下:

  • F1C100s的内核是 ARM926EJ-S ,ARMv5架构,有MMU,没有硬件FPU,主频默认为408MHz;
  • F1C100s内置32MB DDR1内存;
  • F1C200s是F1C100s的兄弟型号,其它特性都相同,内存容量翻倍为64MB;

F1C100s和F1C200s价格便宜的时候可以在1~2刀左右,带有LCD、摄像头、音频、视频等接口,还内置几十兆内存,用来简单的点屏使用比单片机之类的好多了。所以经常可以看到用F1C100s来做行车记录仪或是复古游戏机等产品。

启动过程

F1C100s的启动过程在它流出的手册中并没有找到相关描述,在 全志V3sDataSheet4.2. Boot System 章节中倒是有相似描述,可以作为参考:

芯片上电启动后,芯片会先执行内部固化的程序(BROM),该程序会依次检查外部存储器是否可用,如果可用再从中加载第二阶段程序(SPL)并执行。如果前面过程失败了则会进入全志系列处理器内置的FEL模式。

对于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 项目,编译后会得到 u-boot-sunxi-with-spl.bin 这个文件会拼合 spl 和 u-boot ,直接把这个文件写入到 8KB 开始的位置就行了。

更多内容可以参考:https://linux-sunxi.org/Bootable_SD_card

对于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

如果外接了SPI Flash,并且SPI Flash中有可运行的程序的话可以将F1C100s的 Pin60 - PC1 - SPI0_CS 即 SPI Flash 的 1 脚接地后进入FEL模式。

为了和FEL模式下的芯片交互我们还需要用到 sunxi-tools 工具包,针对运行程序或烧录等操作需要用到其中的 sunxi-fel 工具,工具包项目地址如下:
https://github.com/Icenowy/sunxi-tools

针对F1C100s的 sunxi-fel 工具可以使用下面方式下载、编译、安装:

sudo apt install pkg-config zlib1g-dev libusb-1.0-0-dev
git clone https://github.com/Icenowy/sunxi-tools.git -b f1c100s-spiflash
cd sunxi-tools
make
# 编译完成后可以使用下面方式安装到系统目录
# sudo make install
# 不过其实不推荐安装到系统目录,因为全志不同的芯片需要用不同分支的sunxi-tools
# 更加推荐使用时临时添加环境目录,比如下面这样
# export PATH=$PATH:sunxi-tools目录路径
# 这种方式使用时需要用下面方式
# sudo `which sunxi-fel` [-选项] 命令 参数

安装完成后可以使用 sudo sunxi-fel -l 列出所有处于FEL模式的设备、使用 sudo sunxi-fel ver 设备 BROM 信息:

可以使用 sudo sunxi-fel uboot /path/u-boot-sunxi-with-spl.bin 来直接运行u-boot程序;
可以使用 sudo sunxi-fel -p spiflash-write addr file (addr常用0)将数据写入spiflash(注意最大16M,再大可能需要改程序)。

Usage: ./sunxi-fel [options] command arguments... [command...]-v, --verbose                   Verbose logging-p, --progress                  "write" transfers show a progress bar-l, --list                      Enumerate all (USB) FEL devices and exit-d, --dev bus:devnum            Use specific USB bus and device number--sid SID                   Select device by SID key (exact match)spl file                        Load and execute U-Boot SPLIf file additionally contains a main U-Boot binary(u-boot-sunxi-with-spl.bin), this command also transfers thatto memory (default address from image), but won't execute it.uboot file-with-spl             like "spl", but actually starts U-BootU-Boot execution will take place when the fel utility exits.This allows combining "uboot" with further "write" commands(to transfer other files needed for the boot).hex[dump] address length        Dumps memory region in hexdump address length             Binary memory dumpexe[cute] address               Call function addressreset64 address                 RMR request for AArch64 warm bootreadl address                   Read 32-bit value from device memorywritel address value            Write 32-bit value to device memoryread address length file        Write memory contents into filewrite address file              Store file contents into memorywrite-with-progress addr file   "write" with progress barwrite-with-gauge addr file      Output progress for "dialog --gauge"write-with-xgauge addr file     Extended gauge output (updates prompt)multi[write] # addr file ...    "write-with-progress" multiple files,sharing a common progress statusmulti[write]-with-gauge ...     like their "write-with-*" counterpart,multi[write]-with-xgauge ...      but following the 'multi' syntax:<#> addr file [addr file [...]]echo-gauge "some text"          Update prompt/caption for gauge outputver[sion]                       Show BROM versionsid                             Retrieve and output 128-bit SID keyclear address length            Clear memoryfill address length value       Fill memory

对于Windows上装虚拟机来操作的话这之间还有一个坑:默认情况下FEL模式的USB设备Windows是无法识别的,这样就更没法传递给虚拟机使用了。这个问题可以使用 https://zadig.akeo.ie/ 这个工具来安装驱动解决(主要关注VID和PID就行):

除了 sunxi-fel ,也可以使用第三方的 XFEL 工具来进行FEL模式下的交互操作, XFEL 还有提供windows版本的可执行文件。项目地址如下:
https://github.com/xboot/xfel

关于FEL模式的更多内容可以参考下面链接:
https://linux-sunxi.org/FEL
https://linux-sunxi.org/FEL/USBBoot

电路设计

电路设计上主要有下面一些注意点:

  • SD(TF)卡连接在SDC0
    Pin53 - PF5 - SDC0_D2
    Pin54 - PF4 - SDC0_D3
    Pin55 - PF3 - SDC0_CMD
    Pin56 - PF2 - SDC0_CLK
    Pin57 - PF1 - SDC0_D0
    Pin58 - PF0 - SDC0_D1
  • SPI Flash连接在SPI0
    Pin59 - PC0 - SPI0_CLK
    Pin60 - PC1 - SPI0_CS
    Pin61 - PC2 - SPI0_MISO
    Pin62 - PC3 - SPI0_MOSI
  • FEL模式通过USB通讯
    Pin68 - USB-DM
    Pin69 - USB-DP
  • 控制台交互通过UART0
    Pin48 - PE1 - UART0_TX
    Pin49 - PE0 - UART0_RX
  • 供电
    VCC-CORE - 1.0~1.2V
    VCC-DRAM - 2.3~2.7V SVREF - 通过电阻将VCC-DRAM分压成一半
    AVCC - 2.5~3.1V
    VCC-IO / UVCC / HPVCC / TV_VCC - 2.5~3.1V

电路设计上可以参考 荔枝派Nano 的原理图(可以点击查看大图):

如果对电路功能上没啥需求,只需要跑个Linux玩的话可以参考 Business Card 的原理图(可以点击查看大图):

全志F1C100s使用记录:资料索引与基础说明相关推荐

  1. 全志F1C100s主线linux入坑记录 (6)音视频播放(视频播放软解)

    音视频播放(视频播放软解) 百度网站 文章目录 音视频播放(视频播放软解) 一.音频播放 1.声卡驱移动植入 (1)下载安装声卡补丁 (2)配置声卡 (3)linux内核编译烧录 (4)使用声卡 二. ...

  2. 【目录】全志F1C100S/F1C200S学习笔记

    全志F1C100S/F1C200S学习笔记目录 全志F1C100S/F1C200S学习笔记(1)--基础简介及资料 全志F1C100S/F1C200S学习笔记(2)--TF卡分区及系统构建烧录 全志F ...

  3. 玩转RT-Thread之荔枝派Nano(全志F1C100S) 新手上路

    玩转RT-Thread之荔枝派Nano(全志F1C100S) 一.新手上路 --作者:燕十三(flyingcys) blog:http://blog.csdn.net/flyingcys --荔枝派n ...

  4. java基础案例教程前4章知识点_java学习记录4 Java基础知识点

    java学习记录4 Java基础知识点 1. 注释 单行注释 使用"//"开头,后面是注释的内容 一般在要注释的语句的上面加注释 多行注释 以"/*"开头,以& ...

  5. 【目录】全志V3S学习记录

    全志V3s从一次接触到现在已经有两年了!现在复盘一下! 使用的硬件开发板有: Lichee zero Lichee zero dock CherryPi PC V3s Mangopi v3s SINV ...

  6. 基于荔枝派Lichee Nano(全志f1c100s)的kernel移植(二)

    基于荔枝派Lichee Nano(全志f1c100s)的kernel移植(二) 1.获取源代码 2.linux内核修改dts设备树文件 3.内核配置修改 3.1.使用命令进入配置界面 3.2.支持jf ...

  7. 基于荔枝派Lichee Nano(全志f1c100s)的rootfs移植(三)

    基于荔枝派Lichee Nano(全志f1c100s)的rootfs移植(三) 1.下载Buildroot代码包 2.解压文件,获得源代码 3.配置Buildroot 4.编译 5.生成rootfs. ...

  8. 全志F1C100s主线linux入坑记录 (10)调试串口更改

    调试串口更改 百度网站 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 调试串口更改 前言 uboot 修改 一.修改设备树 二.修改文件 3. 修改内核传递参数 内核修改 ...

  9. 全志F1C100s主线linux入坑记录 (1)linux系统移植

    linux系统移植 (基于SD卡启动) 百度网站 文章目录 linux系统移植 (基于SD卡启动) 一.安装gcc交叉编译器 二.Uboot移植 1.下载Uboot 源码 2.配置Uboot 3.编译 ...

  10. 全志F1C100S/F1C200S学习笔记(1)——基础简介及资料

    文章目录 一.芯片概览 二.芯片框图 三.芯片规格 四.资料: 五.仓库: 一.芯片概览 二.芯片框图 三.芯片规格 功能 描述 CPU ARM9 CPU architecture 16KByte D ...

最新文章

  1. Visual C#3.0新特性概览
  2. CL_CRM_REPORT_QUESTION call CRM_REPORT_RF_CHECK_AUTHORITY
  3. 内网通mac能用吗_纯干货!小容量Mac装外置硬盘Windows系统最完美的方案!(多图)...
  4. b站的服务器在哪个位置,b站用的是哪个云服务器
  5. a类怎么引用b类java_Java中A类的数组如何传入B类???急
  6. 王思聪花了100万的组装的电脑,网速到底有多快?
  7. 【YOLO家族】【论文翻译】YOLO 9000 /YOLO V2
  8. 解决eclipse乱码问题
  9. matlab单机无限大系统_MATLAB运用simulink建立简单的单机-无穷大系统仿真
  10. 用DDA算法绘制一条直线
  11. 堆和栈得区别--向WXP学习
  12. “网红”白鸦创立6年的有赞,为何不敌同样诞生于微信生态3年的拼多多?
  13. 让WiFi变“4G”?Hotspot2.0来了
  14. 99条为人处事经典法则剩下的一条由你自己来感悟
  15. alpine linux中安装docker
  16. 用CNN实现全景图像语义分割!
  17. 写给湘大计算机相关专业的学弟学妹们
  18. 实验一 网络对抗技术
  19. 1095 解码PAT准考证
  20. html表格中加入虚线分割,制作虚线表格三种方法

热门文章

  1. 数字化施工管理太玄乎?“要点+案例”让你一看就懂
  2. 基于时间窗的AGV调度算法优化
  3. 电商后台管理系统分享
  4. 企业业务逻辑常见风险
  5. 使用CLion的C语言开发环境配置
  6. 蓝牙调试工具如何使用_更新:使用此有价值的工具改进您的蓝牙项目
  7. 极速扫描器 masscan
  8. php 批量打印word pdf,Office批量打印精灵教程--Word、PDF、Excel、PPT批量打印
  9. c++ SIMD AVX2比较 例子
  10. 两种IP冲突检测方法