本文转载改写自博客园 淡墨青云 的系列文章《小白自制Linux开发板》,原文链接:https://www.cnblogs.com/twzy/p/14714651.html
前言
说实话,我一直觉得能自己从零做出一块能跑Linux的开发板是一件很酷的事情。虽然之前玩过树莓派、ESP8266之类的开发板,但那些终究是别人设计好的成品,我只是个”使用者”而非”创造者”。
真正让我下定决心动手的,是看了两位大佬的作品:
- 稚晖君的硬核项目(B站:https://www.bilibili.com/video/av65365123/)
- Business Card Linux——在一张名片大小的板子上跑Linux(https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/)
看完之后心里直痒痒,于是给自己定了个小目标:
设计一个没啥实际作用,但能成功运行Linux的小板子。
大概长这样:

目标板子效果图
一、工具与芯片选型
开发工具
整个硬件设计部分全部使用 立创EDA 完成。立创EDA是国产的在线电路设计工具,对于初学者来说非常友好,而且和嘉立创的PCB打样服务无缝衔接,下单极其方便。
核心芯片
| 芯片 | 型号 | 说明 |
|---|---|---|
| 主控SoC | F1C100s | 全志基于ARM的小型SoC,自带32MB内存,可运行Linux |
| USB转串口 | CH340E | 体积小、外围电路少,用于串口调试通信 |
关于F1C100s:
这颗芯片可以说是”穷人版Linux SoC”的典型代表。它的升级版F1C200s自带64MB内存。最经典的基于该芯片的开发板就是荔枝派(LicheePi)。
芯片本身非常便宜(虽然最近受芯片涨价影响有所波动),而且可以运行完整的Linux系统,性价比极高。
参考资料
原理图设计先后参考了以下开源项目:
- Licheepi Nano
- Business Card Linux
- LiShanwenGit 的立创开源项目(https://www.oshwhub.com/LSW12315)
二、原理图设计
2.1 电源管理
电源部分使用USB供电,输入电压为5V。这里供电和串口电路共用同一个USB端口。
通过查阅F1C100s的数据手册:

综合分析后,可以把电源分为4类:
| 电源域 | 电压 | 说明 |
|---|---|---|
| Vdd-Core | 1.1V | 核心电压 |
| Vcc-Dram | 2.5V | DRAM供电 |
| AVCC | 3.0V | 模拟电源 |
| UVCC/VCC-IO/TV-AVCC/TTL | 3.3V | IO及外设电压 |

DC-DC降压电路(1.1V / 2.5V / 3.3V):
主要使用 SY8088AAC 同步降压DC-DC稳压器,SOT23-5封装,通过外部电阻调整输出电压。公式为:
模拟电源AVCC(3.0V):
使用 XC6206P302MR(SOT23封装),输入5V,输出3.0V。
[!tip] 为什么要单独给AVCC供电? AVCC是模拟电源电压,为了避免引入电源干扰,通常需要把模拟电路与数字电路分开隔离。虽然这个解释可能不够严谨,但实际设计中确实是这么做的。
完整的电源部分原理图如下:

电压输入输出端都使用了滤波电容进行处理,还需要接入 2.2μH的功率电感。
[!warning] 功率电感的选择 注意一定要用功率电感,电流要求至少达到1A以上。本板使用0805封装的功率电感,建议最好使用CD32类型的绕线功率电感。
2.2 核心电路
核心部分的原理图如下,因为本次设计主要以验证为主,所以没有做太多外设电路。

除了常规的核心、外围、DRAM引脚,核心部分还引出了以下模块:
1. TF卡接口 —— 作为唯一的系统启动源,这是必须的
2. 晶振 —— 使用24MHz的有源晶振,搭配两个15pF的负载电容
3. 串口调试 —— 板子与外界唯一交互的通道(后来在这里给自己挖了个坑)
4. LED灯 —— 唯一的外设,也是学习驱动开发的第一步
5. 外围引脚 —— dram_vref、Var1、Var2 这些是必须接的外围电路,具体作用……我也不太清楚 >_>
6. USB OTG —— 可通过此接口为板载Flash下载程序,但本板没有做Flash,目前唯一用途是验证FEL模式是否可用
7. 复位按钮
挖坑记:LED灯的接线错误
这里记录一个非常”奇妙”的错误。一直以来以为发光二极管也是普通二极管,于是有了下面的设计:

板子做出来后感觉没问题,但串口死活不显示数据。在众多大佬的帮助下,才发现这个”脑残”的接线方法——竟然把发光二极管当普通二极管用了!
最终的解决方案:把两个发光二极管的位置换成了两个 0欧电阻,一下子就成功调通了。
[!caution] 经验教训 发光二极管和普通二极管的特性完全不同!发光二极管的正向压降远高于普通二极管(通常在1.8V-3.3V),用在电源通路上会导致供电不足,整个系统无法正常工作。
滤波电容
对于芯片电源输入端的滤波电容:

简单来说,供电端的电压因为电路设计或外界干扰,并不是完美的直流电压,总会存在高频或低频的噪声。使用小容量的电容可以滤除这些干扰。
常用的容值:10μF、1μF、100nF
2.3 串口通信电路
在核心原理图中引出了串口线路,串口接口如下:

然而,翻遍你的超薄笔记本,大概率找不到这个接口。偶尔在一些老笔记本上能看到类似的——对不起,那大概率是VGA显示接口。
所以我们需要一个 USB转串口芯片,这里选用 CH340E,因为它体积小、接线方便。

[!info] 电源与串口共用USB 这个板子的电源和TTL串口共用一套USB接口设计,也就是说USB线插上就可以启动小板,同时开始串口调试。
原理图中的U5是一个自恢复保险丝。
[!warning] CH340E的V3引脚 根据CH340E官方原理图,当VCC接入5V时,V3需要接一个100nF电容。但此处V3直接接入5V也可以工作。实际使用时最好不要这样做。
2.4 TF卡接口
和电脑在BIOS选择启动方式一样,F1C100s支持多种系统加载机制,比如通过SPI接口加载Flash芯片中的镜像,或者通过TF卡加载镜像。
这里使用TF卡作为启动源,原因有两个:
- TF卡容量可以自己控制
- 系统烧写调试方便

这部分电路相对简单。
2.5 USB OTG与LED灯

USB OTG接口用于下载程序到板载Flash(本板未做Flash,暂时用于FEL验证)。LED灯作为唯一的外设,是驱动开发的第一步。
三、PCB绘制
PCB尺寸为 42mm × 29mm,可以说非常小了。为了便于手工焊接,所有容阻元件都使用 0805封装。

走线规则:
- 电源走线:14mil
- 信号线:8mil
四、PCB焊接
焊接PCB是一项手艺活,尤其是 QFN封装的F1C100s 更是难到令人发指。还好借助焊台和热风枪,最终完成了焊接。放大镜和洗板水是必不可少的工具。
因为板子经常需要在手上把玩(盘PCB),所以选择了 无铅锡浆 进行焊接。
焊接完成的效果:

五、成功运行Linux
因为还没开始着手做Linux移植,暂时使用 LicheePi 的镜像 进行验证。
成功启动的截图:

看到串口终端输出Linux启动信息的那一刻,真的有一种”创造生命”的感觉。
六、后记
世界上从来没有轻易的成功,对于初次玩PCB的小白更是如此。这块小板能成功运行,经历了 三四个月、五六次打板 才最终成功。
以下是早期的”趟雷”场景和”先烈”们(右下角为最终成功的小板):




总结
这篇文章记录了从零开始设计一块Linux开发板的全过程。虽然过程中踩了不少坑(尤其是LED那个经典错误),但最终成功跑起了Linux,那种成就感是无法形容的。
下一节计划开始做 Linux系统的移植,从U-Boot编译到内核配置,敬请期待。
[!note] 参考资料
- 原文作者:淡墨青云(冯天文)
- F1C100s 数据手册
- CH340E 数据手册
- 荔枝派 Nano 开源资料
部分信息可能已经过时





