1. T113平台初探:认识这颗芯片

做嵌入式Linux开发这么多年,我接触过不少SoC。全志T113这颗芯片,说实话第一次拿到时我还有点不以为然——双核Cortex-A7,看起来中规中矩嘛。但真正用起来才发现,这玩意儿在性价比上确实有两把刷子。

咱们这门课就是围绕T113展开的。第一章,先带你把平台摸清楚。

1.1 全志T113处理器概览

T113是颗啥芯片?说白了,它是全志针对工业控制、智能家居、车载电子这些场景推的一款高集成度SoC。我习惯把它理解成「一颗能跑Linux的MCU」——功耗低、外设全、成本控制得死死的。

参数项 规格
CPU核心 双核 Cortex-A7 @ 1.2GHz
GPU Mali-400 MP2
内存接口 DDR3/DDR3L/LPDDR3,最大2GB
存储接口 SD/MMC、NAND Flash、SPI NOR
视频编解码 H.264 1080p@60fps 解码
显示接口 RGB/LVDS/MIPI DSI
网络 百兆以太网 + 内置WiFi/BT
封装 BGA 282,13mm x 13mm

嗯,这里要注意:T113的DDR控制器只支持到DDR3,别想着往上怼DDR4。我在一个项目里就吃过这个亏,采购那边图便宜买了DDR4颗粒,结果焊上去根本点不亮。

1.2 芯片架构:内部长啥样

咱们来看看T113的内部结构。我画了张图,把主要模块串起来,你一看就明白。

全志T113 芯片架构概览 Cortex-A7 核心0 32KB I-Cache / 32KB D-Cache Cortex-A7 核心1 32KB I-Cache / 32KB D-Cache 共享 L2 Cache (256KB) AXI 总线互联矩阵 DDR控制器 DDR3/DDR3L/LPDDR3 存储接口 SD/MMC / NAND / SPI NOR 显示引擎 RGB / LVDS / MIPI DSI USB 2.0 x2 UART x6 SPI x3 I2C x4 百兆以太网 MAC + PHY WiFi 802.11 b/g/n + BT 5.0 I2S / PCM / DMIC CPU核心 缓存 总线 存储/内存 显示 外设

从图上能看出来,T113的架构其实挺清晰的。两个Cortex-A7核共享256KB的L2缓存,通过AXI总线连到各个外设。我个人觉得这设计最聪明的地方是把百兆以太网的PHY也集成进去了——省掉一颗外部PHY芯片,BOM成本能降不少。

关键点:T113没有硬件视频编码器,只有解码器。如果你要做视频推流或者录像功能,得靠CPU软编码。1080p的H.264软编码大概能吃掉60%-80%的CPU资源,设计时心里要有数。

1.3 开发板资源介绍

市面上T113的开发板不少,我手头用的是全志官方的T113-S3参考板。咱们课程里所有的例程和调试方法,都是基于这块板子验证过的。

板载资源 说明
SoC T113-S3 (双核A7 @ 1.2GHz)
内存 512MB DDR3 (可扩展至1GB)
存储 8GB eMMC + SPI NOR Flash
网络 百兆RJ45 + 板载WiFi/BT天线
显示 7寸LVDS屏接口 + HDMI输出
调试接口 UART0 (3.3V TTL电平) + JTAG
扩展接口 40pin GPIO排针 (含I2C/SPI/UART/PWM)
电源 5V DC供电,支持USB供电

我的习惯:拿到一块新开发板,第一件事不是上电,而是拿万用表量一下电源对地阻抗。T113的VCC_IO和VCC_DDR如果短路,上电瞬间就可能烧芯片。别问我怎么知道的……

1.4 搭建最小系统

所谓最小系统,就是让T113能跑起来、能打印、能交互。你需要准备这几样东西:开发板、USB转串口模块(推荐FT232或CP2102)、5V/2A电源、一张TF卡(用于烧录系统)。

搭建步骤其实不复杂,我列个清单:

  1. 连接串口:把USB转串口的TX/RX/GND分别接到开发板的UART0对应引脚。波特率设115200,8N1,无流控。
  2. 准备启动介质:T113支持从SD卡、eMMC、SPI NOR启动。咱们先用SD卡,方便调试。
  3. 烧录Boot0:全志的启动流程是Boot ROM → Boot0 → U-Boot → Kernel。Boot0是固化在芯片里的,但你需要把U-Boot写到SD卡的特定偏移位置。
  4. 烧录U-Boot:用dd命令写到SD卡8KB偏移处。
  5. 烧录Kernel和DTB:放到SD卡的FAT分区里。
  6. 上电启动:插上SD卡,上电,看串口输出。
# 烧录U-Boot到SD卡(假设SD卡设备是/dev/sdb)
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

# 创建FAT分区并拷贝内核
sudo mkfs.vfat /dev/sdb1
sudo mount /dev/sdb1 /mnt
sudo cp zImage /mnt/
sudo cp sun8i-t113-s3.dtb /mnt/
sudo umount /mnt

注意:dd命令的seek=8这个参数千万别写错。我曾经手抖写成seek=0,直接把SD卡的分区表干掉了。全志的启动协议要求U-Boot必须放在8KB偏移处,这是Boot ROM硬编码的。

上电后,串口应该能看到类似这样的输出:

U-Boot 2023.07 (Jan 15 2024 - 14:30:00 +0800) Allwinner Technology

CPU:   Allwinner T113 (SUN8I)
DRAM:  512 MiB
MMC:   mmc@4020000: 0
Loading: zImage ... done
Starting kernel ...

看到这行输出,说明你的最小系统已经跑起来了。嗯,到这里,T113平台算是初步认识了。

小结一下:这一章我们看了T113的芯片规格、内部架构、开发板资源,还亲手搭了个最小系统。后面的章节,咱们会一个一个啃它的外设驱动——从GPIO开始,到I2C、SPI、UART、PWM、音频、显示……每个外设我都会带着你写驱动、做测试、踩坑、填坑。