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

article/2025/9/22 4:40:21

文章目录

  • 前言
  • 资料来源
  • 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)卡而言在它上面的数据存储布局通常如下:

startsectorsizeusage
0KB08KBUnused, available for an MBR or (limited) GPT partition table
8KB1632KBInitial SPL loader
40KB80Max 984KBU-Boot
1MB2048-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 的原理图(可以点击查看大图):
在这里插入图片描述


http://chatgpt.dhexx.cn/article/p2XFsnRe.shtml

相关文章

MySql 内连接与外连接 作用和 区别

内连接&#xff1a;指连接结果仅包含符合连接条件的行&#xff0c;参与连接的两个表都应该符合连接条件。 外连接&#xff1a;连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。 左外连接&#xff1a;左边表数据行全部保留…

php左内连接,内连接和外连接的区别是什么

内连接和外连接的区别&#xff1a;1、连接结果不同&#xff0c;内连接的连接结果仅包含符合连接条件的行&#xff0c;而外连接的连接结果包含了符合连接条件的行&#xff1b;2、注意事项不同&#xff0c;内连接需要注意区分在嵌套查询时使用的any以及all的区别&#xff0c;外连…

Mysql内连接和外连接的区别

内连接 简单来说&#xff1a;就是根据交集的部分来链接到一条完整的数据&#xff0c;以此来完成查询 以两张表相同的部分来链接上两张表的数据&#xff0c;而不是说&#xff0c;内连接查询的就是交集的部分&#xff0c;那样查询出来的不就是表的id信息了或者仅仅是关联的信息 …

mysql内连接和左连接的区别_MySQL连接查询 内连接和外连接的区别

展开全部 内连接&#xff1a;指连接结果仅包含符合连接条件的行&#xff0c;参与连接的两个表都应该符合连接条件。 外连62616964757a686964616fe78988e69d8331333363393638接&#xff1a;连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连…

mysql内外三种连接,mysql内连接和外连接的区别

以下面两张表为例来看一下内连接与外连接的区别&#xff1a; 一、内连接( 最常用 ) 定义&#xff1a;仅将两个表中满足连接条件的行组合起来作为结果集。 关键词&#xff1a;INNER JOINselect * from employees e inner join department d on e.employee_id d.department_id …

Sql 中内连接、外连接、全连接、交叉连接的区别

外连接(out join) 外连接分为外左连接(left outer join)和外右连接(right outer join) 注释&#xff1a;left outer join 与 left join 等价&#xff0c; 一般写成left join right outer join 与 right join等价&#xff0c;一般写成right join 左连接&#xf…

谈谈你对计算机的发展,结合您目前对计算机的认识,请您谈谈对计算机发展趋势的看法。...

计算机从出现至今&#xff0c;经历了机器语言、程序语言、简单操作系统和Linux、Macos、BSD、Windows等现代操作系统四代&#xff0c;运行速度也得到了极大的提升&#xff0c;第四代计算机的运算速度已经达到几十亿次每秒。 计算机也由原来的仅供军事科研使用发展到人人拥有&am…

对计算机科学与技术专业课程的认识,计算机科学与技术专业课程

计算机科学与技术专业课程计算机科学与技术专业课程 二、课程简介 TOP 1.数字逻辑电路: “数字逻辑”是计算机专业本科生的一门主要课程,具有自身的理论体系和很强的实践性。它是计算机组成原理的主要先导课程之一,是计算机应用专业关于计算机系统结构方面的主干课程之一。…

计算机网络技术的专业认识,计算机网络技术课程学习后的自我认识

计算机网络技术课程学习后的自我认识 随着计算机、多媒体、现代通讯网络为代表的信息技术的迅猛发展&#xff0c;信息技术已经渗透到了教育领域&#xff0c;在教育领域中引起了一场深刻的变化。小编是YJBYS小编整理的计算机网络技术课程学习后的自我认识&#xff0c;欢迎阅读 信…

计算机专业认识和规划,计算机科学与技术专业认识与规划

计算机科学与技术专业认识与规划 专业认识与规划专业认识与规划对于这个专业的学生&#xff0c;它要求学生的英语水平&#xff0c;数学水平很高。最主要的是&#xff0c;它的专业课程很多&#xff0c;很复杂&#xff0c;很累人&#xff0c;它需要你付出很多的努力&#xff0c;…

对计算机网络的认识论文800,对计算机的认识论文

为毕业生写对计算机的认识论文提供对计算机的认识论文范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文&#xff0c;包括论文选题、开题报告、文献综述、任务书、参考文献等&#xff0c;是优秀免费对计算机的认识论文网站。 对计算机软件属性和保护方式的认识 摘要&…

JS取整,取余

1、取整 // 丢弃小数部分,保留整数部分 parseInt(5/2)  // 2 2.向上取整 // 向上取整,有小数就整数部分加1 Math.ceil(5/2)  // 3 3.向下取整 // 向下取整,丢弃小数部分 Math.floor(5/2)  // 2 4四舍五入 // 四舍五入 Math.round(5/2)  // 3 5 取余 // 取余 6…

JS中的求余和求模

在JS中有两个操作符&#xff0c;求余和求模&#xff0c;它们本质上并没有区别&#xff0c;但仍有一些差异&#xff0c;今天就给大家区分一下它们 求余 符号&#xff1a;% 写法&#xff1a;a % b 求余&#xff1a;a % b &#xff0c;表示为a rem b&#xff0c;相当于 a - n * …

js数据取整,取余,保留小数,数据脱敏等的一些处理方式

一个经典的解决四舍五入问题后js保留两位小数的方法&#xff1a; 1.四舍五入保留2位小数&#xff08;若第二位小数为0&#xff0c;则保留一位小数&#xff09; function keepTwoDecimal(num) {var result parseFloat(num);if (isNaN(result)) {alert(传递参数错误&#xff0…

js中小数计算时精度问题

js中的number为双精度浮点型&#xff0c;计算时需要先进行进制转换&#xff0c;将十进制换成二进制&#xff0c;而进制转换时&#xff0c;小数就有可能出现精度问题了&#xff0c;原因如下 整数转二进制&#xff1a;除二取余法&#xff08;没有问题&#xff09; 4 除以 2 取余…

JavaScript数学运算(取整,取余和取模)

来源 | https://www.fly63.com 这篇文章主要介绍js取整、取余和取模的实现方法和它们之间的区别&#xff0c;以及Math对象的常用方法函数介绍&#xff0c;有需要的朋友可以参考下。 取整 在项目开发过程中&#xff0c;有时要对小数取整操作&#xff0c;JavaScript也提供了4种方…

JavaScript数字取整、取余总结

一、取整&#xff1a; 取整 //丢弃小数部分&#xff0c;保留整数部分 parseInt(85.5)//85向上取整 //向上取整&#xff0c;有余数或者小数&#xff0c;整数位1 Math.ceil(7/3) //3 Math.ceil(85.6) //86 Math.ceil(72.1) //73向下取整 //向下取整&#xff0c;有余数或者小数…

QuickSort 拿下!

剑指 Offer 45. 把数组排成最小的数   输入一个非负整数数组&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。 由于这一题的解题思路是&#xff1a;首先将数组转换为字符数组&#xff0c;然后根据规则对其进行排序&#xff…

经典算法之快速排序(QuickSort)

​ 活动地址&#xff1a;CSDN21天学习挑战赛 目录 快速排序算法原理图解Java代码实现 算法分析 快速排序 通过一趟排序将待排元素分成独立的两部分&#xff0c;其中一部分为比基准数小的元素&#xff0c;另一部分则是比基准数大的元素。然后对这两部分元素再按照前面的算法进行…

QuickSort(快速排序)——C语言实现

前言&#xff1a; 快速排序可真是太经典啦&#xff01;当然&#xff0c;我的复现并没有实现调用一个排序参考函数来实现对不同类型数据进行排序这一功能。 快速排序其中的一大重要思想就是分而治之&#xff0c;采取不断二分的方式进行排序&#xff0c;时间复杂度O&#xff08;n…