第一章 课程介绍与开发环境搭建

大家好,我是你们的嵌入式系统工程师老张。做嵌入式开发十几年了,从最早的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模式

操作方法很简单:

  1. 按住开发板上的FEL键(或短接FEL引脚到GND)
  2. 插入USB线连接到电脑
  3. 松开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的时候,光一个启动流程就折腾了整整一周。但当你看到自己写的代码在芯片上跑起来的那一刻,那种成就感,是任何东西都换不来的。

咱们下章见。