第一章 课程介绍与开发环境搭建
大家好,我是你们的嵌入式系统工程师老张。做嵌入式开发十几年了,从最早的51单片机一路做到现在的ARM Cortex-A系列芯片。今天咱们要聊的这颗F1C200s,说实话,我第一次拿到它的时候还挺惊喜的——一颗芯片里集成了DDR、CPU、GPU、音视频编解码器,价格却只要十几块钱。嗯,这玩意儿很适合做入门级的嵌入式Linux或者裸机开发。
1.1 F1C200s芯片简介
F1C200s是全志科技推出的一款高集成度应用处理器。它基于ARM926EJ-S内核,主频最高可达1GHz。我个人的习惯是把它看作「一颗带DDR的SoC」——因为它内部直接集成了64MB的DDR2内存,省去了外部DDR颗粒的布线麻烦。
核心参数如下:
| 参数项 | 规格 |
|---|---|
| CPU核心 | ARM926EJ-S,单核,主频400MHz~1GHz |
| 内置内存 | 64MB DDR2(集成在芯片内部) |
| 视频解码 | 支持H.264/MPEG-4 1080p@30fps |
| 显示接口 | RGB LCD接口(最高1024x768) |
| 音频接口 | I2S、内置DAC/ADC |
| 存储接口 | SD/MMC、SPI NAND/NOR、USB OTG |
| 封装 | QFN88,尺寸仅8mm x 8mm |
为什么选这颗芯片做裸机开发课程?说白了,它既有ARM Cortex-A系列的特性(MMU、Cache、中断控制器),又因为集成度高、外围简单,非常适合初学者理解芯片的底层运作。我在项目中遇到过不少工程师,一上来就搞Linux驱动,结果连GPIO怎么点亮的都不清楚——这就是基础没打牢。
1.2 应用场景
F1C200s的应用场景其实挺广的。我列几个典型的:
- 智能家居面板:做一个小型触控屏,控制灯光、窗帘、空调
- 便携式媒体播放器:利用它的硬件解码能力,做MP4播放器
- 工业HMI:简单的数据采集与显示终端
- 游戏机模拟器:跑一些复古游戏模拟器,性能绰绰有余
- 学习板:作为ARM裸机开发的教学平台
你想想看,一颗芯片搞定CPU、内存、显示、音频,外围只需要加个电源、Flash和LCD屏就能跑起来。这种集成度,在十年前是想都不敢想的。
1.3 开发板介绍
市面上基于F1C200s的开发板有好几种,我个人推荐使用荔枝派Zero(Lichee Pi Zero)或者自己画的最小系统板。荔枝派Zero的硬件配置如下:
- 主控:F1C200s(内置64MB DDR2)
- 存储:SPI Flash(通常8MB~16MB)
- 接口:USB OTG、TF卡槽、40pin GPIO排针
- 显示:RGB LCD接口(需外接屏幕)
- 音频:板载麦克风、耳机接口
重要提醒:如果你用的是其他厂家的F1C200s开发板,引脚定义可能略有不同。建议先拿到原理图再动手,否则容易烧板子。我曾经就吃过这个亏——拿到一块没标注的板子,直接按荔枝派的引脚接屏幕,结果屏幕没亮,芯片还发烫。后来一查,电源引脚定义完全不同。
1.4 所需软硬件工具清单
工欲善其事,必先利其器。咱们先把工具备齐:
硬件工具
- F1C200s开发板(荔枝派Zero或类似)
- USB转TTL串口模块(推荐CH340G或CP2102)
- Micro USB数据线(用于供电和烧录)
- TF卡(建议8GB以上,Class10)
- 杜邦线若干
- 3.3V电源(开发板通常用USB供电,但调试时建议用独立电源)
软件工具
- 交叉编译器:arm-none-eabi-gcc(用于编译裸机程序)
- 烧录工具:sunxi-fel(全志芯片的USB烧录工具)
- 串口终端:PuTTY(Windows)或minicom(Linux)
- 代码编辑器:VS Code或Vim(看个人习惯)
- Git:用于版本管理
1.5 搭建交叉编译环境
交叉编译,说白了就是在你的PC上编译出能在ARM芯片上运行的程序。我们用的是arm-none-eabi-gcc,这个工具链专门针对裸机开发(没有操作系统)。
在Ubuntu/Debian上安装
我个人习惯用Linux做嵌入式开发,Windows下虽然也能用,但坑比较多。以下是安装步骤:
# 更新软件源
sudo apt update
# 安装arm-none-eabi-gcc
sudo apt install gcc-arm-none-eabi
# 验证安装
arm-none-eabi-gcc --version
如果安装成功,你会看到类似这样的输出:
arm-none-eabi-gcc (15:9-2019-q4-0ubuntu1) 9.2.1 20191025
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
小技巧:如果你用的是Windows,建议装个WSL(Windows Subsystem for Linux),然后在WSL里安装Ubuntu,再按上面的步骤来。别直接在Windows下用mingw或者cygwin,那会把你折腾疯的——我当年就是这么过来的。
验证工具链
写一个最简单的程序测试一下:
// test.c
void main(void) {
while(1);
}
# 编译
arm-none-eabi-gcc -c test.c -o test.o
# 查看生成的目标文件
arm-none-eabi-objdump -d test.o
如果能看到反汇编代码,说明工具链工作正常。
1.6 烧录工具安装与配置
全志芯片有一个很实用的功能——FEL模式。说白了,就是芯片上电后先进入一个内置的boot ROM,等待USB命令。我们可以通过sunxi-fel工具直接往芯片内存里写程序,甚至烧录SPI Flash。
安装sunxi-fel
# 克隆源码
git clone https://github.com/linux-sunxi/sunxi-tools.git
cd sunxi-tools
# 编译
make
# 安装到系统
sudo make install
进入FEL模式
操作方法很简单:
- 按住开发板上的FEL键(或短接FEL引脚到GND)
- 插入USB线连接到电脑
- 松开FEL键
然后运行:
sudo sunxi-fel version
如果看到类似下面的输出,说明进入FEL模式成功:
AWUSBFEX soc=00001663(F1C100s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
注意:有些开发板(比如荔枝派Zero)默认没有引出FEL引脚,需要自己焊接或者用镊子短接。另外,进入FEL模式时,开发板上不要插TF卡,否则芯片会尝试从TF卡启动,不会进入FEL模式。这个坑我踩过好几次,后来干脆在代码里加了个判断——如果检测到FEL按键按下,就强制进入FEL模式。
测试烧录
我们来试一下往芯片内存里写一段简单的程序:
# 生成一个简单的二进制文件(全0)
dd if=/dev/zero of=test.bin bs=1024 count=1
# 写入芯片内存地址0x80000000
sudo sunxi-fel write 0x80000000 test.bin
# 从该地址执行
sudo sunxi-fel exec 0x80000000
当然,这段程序什么都不会做,但至少证明我们的烧录链路是通的。
1.7 本章小结
嗯,到这里,第一章的内容就差不多了。我们认识了F1C200s这颗芯片,了解了它的应用场景,准备好了开发板,搭建了交叉编译环境,还装好了烧录工具。下一章,咱们就要开始真正的裸机编程了——从点亮第一颗LED开始。
最后说一句:嵌入式开发没有捷径,多动手、多踩坑,才能积累经验。我当年学ARM的时候,光一个启动流程就折腾了整整一周。但当你看到自己写的代码在芯片上跑起来的那一刻,那种成就感,是任何东西都换不来的。
咱们下章见。