T113-S3从入门到精通
T113-S3 从入门到精通:全志工业级双核 ARM + HiFi4 DSP SoC 全解析
目录
- 芯片概述与市场定位
- T113 系列家族谱系与选型
- 架构全景:双核 A7 + HiFi4 DSP + SIP DDR3
- 显示子系统详解
- 视频编解码与 G2D 图形加速
- 音频子系统详解
- 连接与外设接口全览
- 存储接口与启动方式
- 安全引擎
- Tina Linux SDK 开发环境搭建
- U-Boot 开发详解
- Linux 内核与设备树配置
- 系统编译、打包与烧录
- GPIO 与基础外设编程
- CAN 总线开发实战
- 串口与 RS485 开发
- 显示与 LVDS/MIPI DSI 屏幕适配
- Buildroot 根文件系统定制
- 实用项目:工业 HMI 人机界面终端
- 实用项目:CAN/RS485 工业网关
- 实用项目:智能商显广告机
- 开发板与核心板选型指南
- 常见问题与排障指南
- 进阶学习路线
- 参考资料
适用读者:嵌入式 Linux 工程师、工业控制开发者、HMI 产品开发者、智能硬件创业者
关键词:T113-S3、全志、Cortex-A7、Tina Linux、工业 HMI、LVDS、CAN、HiFi4 DSP、eLQFP128
1. 芯片概述与市场定位
1.1 什么是 T113-S3?
T113-S3 是全志科技(Allwinner Technology)推出的一款 高性价比、工业级应用处理器,专为 汽车电子、工业控制、智能显示(HMI) 市场设计。它采用 双核 ARM Cortex-A7 @ 1.2 GHz 作为主处理器,集成 HiFi4 DSP 用于音频/语音处理,并在封装内部以 SIP(系统级封装) 方式集成了 128 MB DDR3 内存。
一句话总结:T113-S3 = 双核 ARM Cortex-A7 + HiFi4 DSP + 128MB DDR3 + 1080p 视频 + 全显示接口 + 双 CAN + 千兆以太网,封装在一颗 14mm×14mm 的手焊友好 eLQFP128 中。
1.2 为什么 T113-S3 在工业界如此受欢迎?
| 传统方案 | T113-S3 方案 |
|---|---|
| ARM SoC + 外挂 DDR3 + 外挂 Flash + 外挂以太网 PHY + 外挂 CAN 控制器 | 1 颗 T113-S3 集成 DDR3 + 多显示 + 双 CAN + 千兆 MAC |
| BGA 封装(焊接困难,至少 4~6 层 PCB) | eLQFP128(手工可焊,2~4 层 PCB 即可) |
| 多供应商、多数据手册协调 | 全志统一 SDK + 完整 BSP |
| −20°C ~ +70°C 商业级 | −40°C ~ +85°C 工业级 |
1.3 关键规格速览
| 参数 | 规格 |
|---|---|
| CPU | 双核 ARM Cortex-A7 @ 1.2 GHz |
| DSP | 单核 HiFi4 DSP @ 600 MHz |
| L2 Cache | 256 KB(共享) |
| 片上 DDR3 (SIP) | 128 MB,最高 800 MHz |
| 视频解码 | H.265/H.264/MPEG-1/2/4/JPEG/VC-1 @ 1080p 60fps |
| 视频编码 | JPEG/MJPEG @ 1080p 60fps |
| 显示输出 | MIPI DSI (4-lane) + 双链路 LVDS + RGB LCD + CVBS OUT |
| 摄像头输入 | 8-bit 并行 CSI + CVBS IN |
| 音频 | 2ch DAC + 3ch ADC / 耳机/线路/MIC / I²S / 8ch DMIC / OWA(SPDIF) |
| 以太网 | 10/100/1000M 千兆 MAC (RGMII/RMII) |
| CAN | 2 路 CAN 2.0B |
| USB | 1×USB 2.0 OTG + 1×USB 2.0 Host |
| UART/SPI/I²C | 最多 6×UART / 2×SPI / 4×I²C |
| PWM | 8 路独立通道 |
| 存储 | SD 3.0 / eMMC 5.0 / SPI NOR / SPI NAND |
| 安全 | AES/DES/3DES + RSA + SHA/MD5 + TRNG + 2Kbit eFuse |
| 封装 | eLQFP128,14mm×14mm(手工可焊!) |
| 工作温度 | −40°C ~ +85°C(工业级) |
| 生命周期 | 10 年长期供货承诺 |
2. T113 系列家族谱系与选型
2.1 全系列型号对比
全志 T113 系列目前包含 S2、S3、S4 和 i(T113-i)等多个子型号:
| 对比维度 | T113-S2 | T113-S3 ⭐ | T113-S4 | T113-i |
|---|---|---|---|---|
| CPU | 双核 A7 @1.2G | 双核 A7 @1.2G | 双核 A7 @1.2G | 双核 A7 @1.2G |
| RISC-V 协处理器 | ❌ | ❌ | ✅ C906 | ✅ C906 |
| HiFi4 DSP | ❌ | ✅ | ✅ | ✅ |
| SIP DDR | 64MB DDR2 | 128MB DDR3 | 256MB DDR3 | 外挂(可达2GB) |
| 封装 | eLQFP128 | eLQFP128 | eLQFP128 | LFBGA337 |
| MIPI DSI | ≤720p@60fps | ≤1920×1200@60 | ≤1920×1200@60 | ≤1920×1200@60 |
| LVDS | 有限 | 双链路 | 双链路 | 双链路 |
| 视频解码 | 1080p@60fps | 1080p@60fps | 1080p@60fps | 4K@30fps |
| CAN | ✅ | ✅ 双路 | ✅ | ✅ |
| 千兆以太网 | ✅ | ✅ | ✅ | ✅ |
| 工作温度 | 商业级 | −40~+85°C | −25~+85°C | −40~+85°C |
| 参考单价 | ¥1520 | ¥2035 | ¥2540 | ¥4060 |
2.2 选型决策
你的产品需求是什么?
├── "最低成本,720P 显示足够,不需要 DSP"
│ └── → T113-S2 ✅(成本最优,64MB DDR2)
├── "需要 HiFi4 DSP 音频处理 + 1080P 显示 + 128MB DDR 刚好够"
│ └── → T113-S3 ✅(本文主角,性价比最佳)
├── "需要 RISC-V 协处理器跑 RTOS + 256MB DDR"
│ └── → T113-S4 ✅
├── "需要 4K 解码 / 外挂大容量 DDR (1GB+) / BGA 焊接可接受"
│ └── → T113-i ✅(最强性能,最全功能)
└── "手焊原型验证最重要 → S2/S3/S4 任意选"
3. 架构全景:双核 A7 + HiFi4 DSP + SIP DDR3
3.1 系统架构框图
T113-S3 系统架构
┌─────────────────────────────────────────────────────────┐
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Dual ARM Cortex-A7 @ 1.2 GHz │ │
│ │ • 每核 32KB L1 I-cache + 32KB D-cache │ │
│ │ • 共享 256KB L2 Cache │ │
│ │ • NEON SIMD + VFPv4 + Thumb-2 │ │
│ └──────────────┬───────────────────────┘ │
│ │ │
│ ┌──────────────┴───────────────────────┐ │
│ │ AXI 总线互连 │ │
│ └──┬─────┬──────┬──────┬──────┬───────┘ │
│ │ │ │ │ │ │
│ ┌──▼──┐┌─▼───┐┌─▼───┐┌─▼───┐┌─▼─────┐ │
│ │128MB││ ││视频 ││显示 ││外设 │ │
│ │DDR3 ││HiFi4││引擎 ││引擎 ││矩阵 │ │
│ │SIP ││ DSP ││H.265││MIPI ││CAN │ │
│ │800M ││600M ││H.264││LVDS ││GMAC │ │
│ │ ││ ││JPEG ││RGB ││USB │ │
│ └─────┘└─────┘└─────┘└─────┘└───────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ 存储: SD3.0 / eMMC5.0 / SPI NOR/NAND│ │
│ │ 安全: AES/DES/RSA/SHA/TRNG/OTP │ │
│ │ 模拟: GPADC/TPADC/LRADC │ │
└─────────────────────────────────────────────────────────┘
3.2 HiFi4 DSP:不只是音频
HiFi4 是 Cadence(Tensilica)推出的高性能音频/语音 DSP。在 T113-S3 中,它承担:
| 应用 | 说明 |
|---|---|
| 语音唤醒/识别 | 低功耗关键词检测,无需唤醒 A7 核 |
| 音频降噪/回声消除 | 单麦/双麦前端处理 |
| 音频编解码 | MP3/AAC/OPUS 软解,减轻 A7 负担 |
| 传感器融合 | 加速度计+陀螺仪数据预处理 |
HiFi4 DSP 有独立的 32KB I-Cache + 32KB D-Cache,以及 64KB I-RAM + 64KB D-RAM,可以完全独立于 A7 运行。
3.3 SIP DDR3:简化硬件设计的秘密武器
T113-S3 最大的硬件创新之一是 SIP DDR3——将 128MB DDR3 内存和 SoC 裸片封装在同一个 eLQFP128 外壳中。这意味着:
传统设计:
SoC (BGA) + DDR3 (BGA/TSOP) → 需要复杂的 DDR 等长走线、阻抗匹配、至少 4 层 PCB
T113-S3:
1颗 eLQFP128 = SoC + DDR3 → 无需外挂 DDR!2 层 PCB 即可工作!
这对于中小团队的硬件设计来说是革命性的:不再需要面对高速 DDR 布线的挑战,极大降低了 PCB 设计门槛和成本。
4. 显示子系统详解
4.1 显示接口对比
| 接口 | 最大分辨率 | 通道/位宽 | 适用屏幕 |
|---|---|---|---|
| MIPI DSI | 1920×1200 @ 60fps | 4-lane | 手机屏、高分小屏 |
| 双链路 LVDS | 1920×1080 @ 60fps | 2×4 差分对 | 工业屏、大尺寸屏 |
| RGB LCD | 1920×1080 @ 60fps | 24-bit 并口 | 低成本小屏 |
| CVBS OUT | 720×576 (PAL) | 模拟复合视频 | 车载显示器、监控 |
4.2 SmartColor 2.0 显示增强
全志自研的 SmartColor 2.0 是显示后处理引擎,提供:
- 自适应色彩增强 — 优化肤色、蓝天、草地等自然色彩
- 动态对比度调整 — 提升暗部和亮部细节
- 蓝光过滤 — 硬件级护眼
- Gamma 校正 — 适配不同液晶面板特性
4.3 多屏异显与多屏同显
T113-S3 支持最多同时驱动两路显示输出(如一路 MIPI DSI + 一路 LVDS 同显/异显),适用于双屏收银机、智能门禁等场景。
5. 视频编解码与 G2D 图形加速
5.1 硬件视频解码器
| 编码格式 | 最大分辨率 | 最大帧率 | 典型用途 |
|---|---|---|---|
| H.265/HEVC | 1080p | 60fps | 高效流媒体播放 |
| H.264/AVC | 1080p | 60fps | 通用视频播放 |
| MPEG-1/2 | 1080p | 60fps | 老旧格式兼容 |
| MPEG-4 | 1080p | 60fps | |
| VC-1 | 1080p | 60fps | |
| JPEG | 最大 16384×16384 | — | 图片浏览 |
| MJPEG | 1080p | 60fps | 运动 JPEG 视频 |
5.2 硬件视频编码器
| 格式 | 最大分辨率 | 帧率 |
|---|---|---|
| JPEG | 1080p | 60fps |
| MJPEG | 1080p | 60fps |
T113-S3 不具备 H.264/H.265 硬件编码能力。如果应用需要录制视频到本地或推流,使用 MJPEG 编码(文件较大但 CPU 开销极小)。
5.3 G2D 2D 图形加速器
G2D 是 T113-S3 的 2D 硬件加速器,支持:
| 操作 | 说明 |
|---|---|
| 旋转 | 90°/180°/270° 任意旋转 |
| 缩放 | 任意比例,Bilinear 滤波 |
| 混合 | Alpha 混合(Porter-Duff 规则) |
| 颜色空间转换 | RGB↔YUV 转换 |
| 填充 | 矩形区域/渐变填充 |
| LBC 解压缩 | 全志自研压缩格式解码 |
这在 UI 动画和摄像头预览场景中能显著降低 CPU 负载。
6. 音频子系统详解
6.1 模拟音频接口
| 接口 | 数量 | 说明 |
|---|---|---|
| DAC | 2ch | 立体声耳机输出,支持 16/24-bit |
| ADC | 3ch | 麦克风/线路输入 |
| 耳机输出 | L/R | 直驱 16Ω/32Ω 耳机 |
| 麦克风输入 | 3 对差分 (P/N) | 支持驻极体 MIC |
| 线路输入 | L/R | 外部音源输入 |
| FM 输入 | L/R | 收音机信号接入 |
6.2 数字音频接口
| 接口 | 说明 |
|---|---|
| I²S/PCM | 2 路,可配输入/输出,支持 8/16/24/32-bit |
| DMIC | 最多 8 通道 PDM 数字 MEMS 麦克风 |
| OWA (One-Wire Audio) | 兼容 S/PDIF 输入/输出 |
7. 连接与外设接口全览
7.1 通信接口
| 接口 | 数量 | 关键特性 |
|---|---|---|
| 千兆以太网 MAC | 1× | RGMII / RMII 接口,需外接 PHY |
| CAN | 2× | CAN 2.0A / 2.0B,独立控制器 |
| USB 2.0 OTG | 1× | DRD(双角色设备),可做 Host 或 Device |
| USB 2.0 Host | 1× | 独立 Host 端口 |
| UART | 最多 6× | 全双工,支持硬件流控 |
| SPI | 2× | 主/从模式 |
| I²C/TWI | 最多 4× | 标准模式 (100k) / 快速模式 (400k) |
| PWM | 8 路 | 独立通道,支持多种输出模式 |
7.2 模拟与传感器接口
| 接口 | 数量 | 说明 |
|---|---|---|
| GPADC | 1ch | 通用 12-bit ADC |
| TPADC | 4ch | 电阻触摸屏 ADC |
| LRADC | ❌ 不支持 | T113-i 才有 |
| IR RX | 1ch | 红外接收 |
| IR TX | 1ch | 红外发射 |
| LEDC | 1ch | 智能 LED 控制器 (WS2812 等) |
8. 存储接口与启动方式
8.1 存储接口
| 接口 | 规格 | 典型用途 |
|---|---|---|
| SD/MMC 0 | SD 3.0 | TF 卡 |
| SD/MMC 1 | SDIO 3.0 | Wi-Fi/BT 模组 |
| SD/MMC 2 | eMMC 5.0 | 板载 eMMC 存储 |
| SPI NOR | SPI 接口 | 固件存储 (小容量) |
| SPI NAND | SPI 接口 | 固件存储 (大容量) |
8.2 启动顺序
T113-S3 的 BROM(片上启动 ROM)按以下顺序尝试启动:
1. SD 卡 (SD/MMC 0)
2. SPI NOR Flash
3. SPI NAND Flash
4. eMMC (SD/MMC 2)
5. USB FEL 模式(强制升级)
调试技巧:如果固件损坏无法启动,短接/按住 FEL 按键 连接 USB 即可强制进入 FEL 模式,用 PhoenixSuit 重新烧录。
9. 安全引擎
| 功能 | 说明 |
|---|---|
| AES / DES / 3DES | 对称加解密硬件加速 |
| RSA | 非对称签名验证(安全启动) |
| MD5 / SHA / HMAC | 哈希与防篡改 |
| TRNG | 硬件真随机数发生器 |
| OTP (eFuse) | 2 Kbit 一次性可编程存储(存密钥/设备 ID) |
| SPC / SMC | 安全外设/内存访问控制 |
10. Tina Linux SDK 开发环境搭建
10.1 SDK 概览
Tina Linux 是全志官方定制的嵌入式 Linux 发行版,融合了 OpenWrt 的构建系统 和 Buildroot 的根文件系统,是 T113-S3 的首选开发平台。
Tina Linux SDK 架构
┌─────────────────────────────────────────────┐
│ 应用层: Qt / LVGL / MiniGUI / 音视频 App │
├─────────────────────────────────────────────┤
│ 构建系统: OpenWrt Buildroot (Kconfig + Make) │
│ 包管理: ipkg/opkg │
├─────────────────────────────────────────────┤
│ Linux 内核: 5.4.x (Tina) / 6.6+ (主线) │
│ 驱动: 全志 BSP 驱动 + 主线驱动 │
├─────────────────────────────────────────────┤
│ Bootloader: U-Boot 2018 + SPL (boot0) │
├─────────────────────────────────────────────┤
│ T113-S3 硬件 │
└─────────────────────────────────────────────┘
10.2 环境准备 (Ubuntu 20.04/22.04)
# 安装必需依赖包
sudo apt update
sudo apt install -y build-essential git subversion wget curl \
libncurses5-dev zlib1g-dev gawk flex bison quilt \
libssl-dev xsltproc libxml-parser-perl mercurial \
unzip device-tree-compiler python3 python3-pyelftools \
python3-setuptools swig cpio ccache cmake pkg-config \
libelf-dev bc lzop u-boot-tools
# 配置 git
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
10.3 获取 SDK
# === 方式一:百问网 T113-S3 Tina SDK (推荐入门) ===
mkdir ~/t113-sdk && cd ~/t113-sdk
# 从百问网下载 100ASK_T113s3-PRO_TinaSDK5.tar.gz.00/.01/.02
cat 100ASK_T113s3-PRO_TinaSDK5.tar.gz.0* | tar xz
# === 方式二:repo 拉取 (需全志论坛账号) ===
mkdir tina && cd tina
repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git \
-b master -m tina-d1-h.xml
repo sync -j4
# === 方式三:从厂商(米尔/飞凌/万象等)直接获取定制 SDK ===
# 购买开发板后由厂商提供 SDK 下载链接和文档
10.4 SDK 核心目录结构
Tina-SDK/
├── brandy/ # ★ Bootloader 源码
│ └── u-boot-2018/ # U-Boot 2018
├── linux-5.4/ # ★ Linux 内核源码
├── buildroot/ # Buildroot 包管理系统
├── device/
│ └── config/
│ └── chips/t113/ # 芯片级配置
│ └── configs/ # 板级配置 (BoardConfig.mk)
├── target/ # 目标平台工具链/库
├── package/ # 应用软件包
├── tools/ # 打包工具
│ └── pack/ # PhoenixSuit 打包
├── out/ # 编译输出
├── build/envsetup.sh # ★ 环境初始化脚本
└── build.sh # 编译入口脚本
11. U-Boot 开发详解
11.1 U-Boot 启动流程
BROM (片上 ROM)
│
▼
boot0 (SPL — 初始化 DDR + 时钟)
│
▼
U-Boot 主程序 (u-boot-sun8iw20p1.bin)
│
▼
Linux 内核 (boot.img / Image)
11.2 双设备树设计
T113-S3 采用 U-Boot 与内核分离的设备树:
| 设备树文件 | 作用范围 | 主要配置 |
|---|---|---|
uboot-board.dts | U-Boot 阶段 | 内存映射、基础时钟、启动介质、调试串口 |
board.dts | Linux 内核 | 完整外设配置(显示/音频/网络/CAN…) |
11.3 常用 U-Boot 命令
# 查看环境变量
printenv
printenv bootcmd
# 设置启动参数
setenv bootargs "console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait"
setenv bootcmd "fatload mmc 0:1 0x41000000 boot.img; bootm 0x41000000"
saveenv
# 手动加载内核
fatload mmc 0:1 0x41000000 Image
fatload mmc 0:1 0x42000000 board.dtb
booti 0x41000000 - 0x42000000
# 查看内存信息
bdinfo
11.4 修改 U-Boot 调试串口
# 编辑 U-Boot 配置
# brandy/u-boot-2018/configs/sun8iw20p1_defconfig
CONFIG_BAUDRATE=115200
CONFIG_CONS_INDEX=1 # 1=UART0, 2=UART1, 3=UART2
CONFIG_DEBUG_UART=y
CONFIG_DEBUG_UART_BASE=0x02500000 # UART0 基地址
CONFIG_DEBUG_UART_CLOCK=24000000
12. Linux 内核与设备树配置
12.1 内核版本
| 分支 | 版本 | 状态 |
|---|---|---|
| Tina SDK (官方 BSP) | Linux 5.4.61 | ✅ 全功能、最稳定、生产推荐 |
| 主线 Linux | 6.4+ ~ 6.12+ | ✅ 基本支持、持续完善中 |
12.2 设备树 (Device Tree) 核心语法
T113-S3 的设备树文件通常位于 linux-5.4/arch/arm/boot/dts/:
// 示例:配置 UART1 和 CAN0
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&can0 {
pinctrl-names = "default";
pinctrl-0 = <&can0_pins>;
status = "okay";
};
// 示例:配置 LVDS 显示
&lvds {
pinctrl-names = "default";
pinctrl-0 = <&lvds_pins>;
status = "okay";
panel: panel {
compatible = "simple-panel";
width-mm = <154>;
height-mm = <86>;
data-mapping = "vesa-24";
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <51200000>;
hactive = <1024>;
vactive = <600>;
hfront-porch = <160>;
hback-porch = <140>;
hsync-len = <20>;
vfront-porch = <12>;
vback-porch = <20>;
vsync-len = <4>;
};
};
};
};
12.3 内核配置菜单
# 进入内核 Kconfig 菜单
make kernel_menuconfig
# 常用配置路径:
# Device Drivers → Network device support → CAN bus → Allwinner CAN
# Device Drivers → Graphics support → DRM → Allwinner Display Engine
# Device Drivers → Sound card support → ALSA → Allwinner Audio
13. 系统编译、打包与烧录
13.1 完整编译流程
cd ~/Tina-SDK
# 1. 初始化编译环境(每次新终端都要执行)
source build/envsetup.sh
# 2. 选择板级配置
lunch
# 在弹出的菜单中选择对应板卡,例如:
# 4. t113_100ask-tina
# 3. 全系统编译(首次约 20~40 分钟)
make -j$(nproc)
# 4. 打包生成固件镜像
pack
# 5. 生成的镜像位置
# out/t113-100ask/t113_100ask-tina.img
13.2 单独编译各组件
# U-Boot
mboot # 或 ./build.sh bootloader
# Linux 内核
mkernel # 或 ./build.sh kernel
# 设备树
mdtb
# 根文件系统
make # 自动根据变化增量编译
# 打包
pack
13.3 烧录方式
方式一:PhoenixSuit USB 线刷(推荐)
1. 安装 PhoenixSuit(位于 SDK 的 tools/ 目录或全志官网下载)
2. 按住开发板的 FEL 键不放
3. USB 连接电脑
4. PhoenixSuit 自动检测到设备 → 选择镜像 → "开始升级"
5. 烧录成功后自动重启
方式二:PhoenixCard TF 卡刷
1. 安装 PhoenixCard V2.8+
2. TF 卡插入读卡器
3. 选择镜像 → 选择模式:
- "启动卡": 只从 TF 卡启动(不固化到 eMMC)
- "量产卡": 上电自动将固件烧录到 eMMC/NAND
4. "烧录" → 完成
方式三:fastboot 烧录
# 在 U-Boot 命令行进入 fastboot 模式
fastboot 0
# PC 端
fastboot flash boot boot.img
fastboot flash rootfs rootfs.ext4
fastboot reboot
14. GPIO 与基础外设编程
14.1 sysfs 方式控制 GPIO(Shell)
# 导出 GPIO(计算 pin 号:GPIO 基址 + 偏移)
echo 34 > /sys/class/gpio/export
# 设置方向
echo out > /sys/class/gpio/gpio34/direction
echo in > /sys/class/gpio/gpio34/direction
# 输出高低电平
echo 1 > /sys/class/gpio/gpio34/value
echo 0 > /sys/class/gpio/gpio34/value
# 读取输入
cat /sys/class/gpio/gpio34/value
# 释放 GPIO
echo 34 > /sys/class/gpio/unexport
14.2 libgpiod C 语言编程
#include <gpiod.h>
#include <stdio.h>
int main(void) {
struct gpiod_chip *chip;
struct gpiod_line *line;
// 打开 GPIO 控制器
chip = gpiod_chip_open("/dev/gpiochip0");
if (!chip) {
perror("gpiod_chip_open");
return -1;
}
// 获取某引脚
line = gpiod_chip_get_line(chip, 34); // GPIO 编号
// 设为输出,初始低电平
gpiod_line_request_output(line, "myapp", 0);
// 翻转 LED
while (1) {
gpiod_line_set_value(line, 1);
sleep(1);
gpiod_line_set_value(line, 0);
sleep(1);
}
gpiod_line_release(line);
gpiod_chip_close(chip);
return 0;
}
编译:
arm-openwrt-linux-muslgnueabi-gcc -o gpio_test gpio_test.c -lgpiod
14.3 PWM 控制(背光调节)
# 导出 PWM
echo 0 > /sys/class/pwm/pwmchip0/export
# 设置周期 (ns) 和占空比 (ns)
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period # 1kHz
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle # 50%
# 启用
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
15. CAN 总线开发实战
15.1 设备树配置
// 在 board.dts 中添加
&can0 {
pinctrl-names = "default";
pinctrl-0 = <&can0_pins>;
status = "okay";
};
&can1 {
pinctrl-names = "default";
pinctrl-0 = <&can1_pins>;
status = "okay";
};
15.2 Linux SocketCAN 配置
# 设置 CAN0 波特率 500kbps
ip link set can0 type can bitrate 500000
# 启用 CAN0
ip link set can0 up
# 查看 CAN 状态
ip -details -statistics link show can0
# 开机自动配置 (写入 /etc/network/interfaces 或 init.d 脚本)
15.3 CAN 收发测试
# 终端 A:接收
candump can0
# 终端 B:发送 (CAN ID=0x123, 数据=DEADBEEF)
cansend can0 123#DEADBEEF
15.4 C 语言 SocketCAN 编程
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <unistd.h>
int main(void) {
int s;
struct sockaddr_can addr;
struct ifreq ifr;
struct can_frame frame;
// 创建 CAN socket
s = socket(PF_CAN, SOCK_RAW, CAN_RAW);
strcpy(ifr.ifr_name, "can0");
ioctl(s, SIOCGIFINDEX, &ifr);
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
bind(s, (struct sockaddr *)&addr, sizeof(addr));
// 发送 CAN 帧
frame.can_id = 0x123;
frame.can_dlc = 4;
frame.data[0] = 0xDE;
frame.data[1] = 0xAD;
frame.data[2] = 0xBE;
frame.data[3] = 0xEF;
write(s, &frame, sizeof(frame));
// 接收 CAN 帧
int nbytes = read(s, &frame, sizeof(frame));
if (nbytes > 0) {
printf("CAN ID=0x%03X DLC=%d Data=", frame.can_id, frame.can_dlc);
for (int i = 0; i < frame.can_dlc; i++)
printf("%02X ", frame.data[i]);
printf("\n");
}
close(s);
return 0;
}
16. 串口与 RS485 开发
16.1 T113-S3 UART 与 RS485 的关系
T113-S3 的 6 路 UART 本身是 TTL 电平。要实现 RS485,需要外接 RS485 收发器芯片(如 MAX485 / SP3485),通过 GPIO 控制收发使能:
T113-S3 UART TX ───→ DI (MAX485) ─→ A/B ──→ RS485 总线
T113-S3 UART RX ←─── RO (MAX485) ←─ A/B
T113-S3 GPIO ───→ DE + RE (MAX485) 收发使能
16.2 RS485 收发使能控制
// 在设备树中定义 RS485 控制 GPIO
// 或通过用户空间控制
#include <gpiod.h>
void rs485_set_tx_mode(struct gpiod_line *ctrl_pin) {
gpiod_line_set_value(ctrl_pin, 1); // 发送模式
}
void rs485_set_rx_mode(struct gpiod_line *ctrl_pin) {
gpiod_line_set_value(ctrl_pin, 0); // 接收模式
}
16.3 Modbus RTU 协议
RS485 最常见的应用是 Modbus RTU。T113-S3 上可以使用 libmodbus 库:
# 在 Buildroot 中启用 libmodbus
# make menuconfig → Target packages → Libraries → libmodbus
# 或在 SDK 中添加 package
#include <modbus.h>
modbus_t *ctx = modbus_new_rtu("/dev/ttyS1", 9600, 'N', 8, 1);
modbus_set_slave(ctx, 1);
modbus_connect(ctx);
uint16_t regs[10];
modbus_read_registers(ctx, 0, 10, regs); // 读取寄存器
modbus_close(ctx);
modbus_free(ctx);
17. 显示与 LVDS/MIPI DSI 屏幕适配
17.1 屏幕适配流程
1. 从屏幕厂商获取规格书 (分辨率、时序参数、接口类型)
2. 在设备树中添加 panel 节点 (display-timings)
3. 配置显示引擎 (DE) 和接口 (LVDS/DSI/RGB)
4. 编译烧录 → 检查背光亮、图像正常
5. 如有偏色/偏移 → 调整 color-depth、时序 fine-tune
17.2 LVDS 屏幕适配示例
关键时序参数对照:
| 规格书参数 | 设备树字段 | 说明 |
|---|---|---|
| Pixel Clock | clock-frequency | 像素时钟 (Hz) |
| H Active | hactive | 水平有效像素 |
| H Front Porch | hfront-porch | 水平前肩 |
| H Back Porch | hback-porch | 水平后肩 |
| H Sync Width | hsync-len | 水平同步宽度 |
| V Active | vactive | 垂直有效行 |
| V Front Porch | vfront-porch | 垂直前肩 |
| V Back Porch | vback-porch | 垂直后肩 |
| V Sync Width | vsync-len | 垂直同步宽度 |
17.3 Framebuffer 测试
# 查看 framebuffer 信息
cat /sys/class/graphics/fb0/modes
cat /sys/class/graphics/fb0/virtual_size
# 随机颜色填充测试
cat /dev/urandom > /dev/fb0
# 显示图片
ffmpeg -i test.jpg -pix_fmt bgra -f fbdev /dev/fb0
17.4 Qt / LVGL 图形框架
T113-S3 的 GPU 能力有限(无 3D GPU),推荐使用 Qt for Embedded Linux (eglfs/linuxfb) 或 LVGL (轻量级嵌入式 UI):
# Buildroot 中启用 Qt5
make menuconfig
# Target packages → Graphic libraries → Qt5 → 选择所需模块
# 或启用 LVGL
# Target packages → Graphic libraries → lvgl
18. Buildroot 根文件系统定制
18.1 添加自定义应用
# 方法一:通过 make menuconfig 添加官方包
make menuconfig
# 搜索并勾选所需软件包
# 例如:openssh, iperf3, can-utils, i2c-tools
# 方法二:将自己的程序放入 rootfs
mkdir -p target/allwinner/t113-common/myapp/
cp myapp target/allwinner/t113-common/myapp/
# 在对应 Makefile 中安装到 /usr/bin/
18.2 常用 Buildroot 包推荐
| 包名 | 用途 |
|---|---|
can-utils | CAN 总线调试工具 |
i2c-tools | I²C 设备读写 |
spi-tools | SPI 设备调试 |
libgpiod | GPIO 控制库 |
openssh | SSH 远程登录 |
iperf3 | 网络性能测试 |
alsa-utils | 音频播放/录制 |
ffmpeg | 视频编解码/流媒体 |
lighttpd / nginx | Web 服务器 |
mosquitto | MQTT Broker |
libmodbus | Modbus 协议库 |
19. 实用项目:工业 HMI 人机界面终端
19.1 系统架构
┌──────────────────────────────────────────┐
│ T113-S3 HMI 终端 │
│ │
│ 7"/10.1" LVDS LCD ── 显示 UI (Qt) │
│ 电容触摸屏 (I²C) ── 触摸交互 │
│ 千兆以太网 ── 连接 PLC/SCADA │
│ CAN × 2 ── 现场总线通信 │
│ RS485 × 2 ── Modbus 设备 │
│ USB Host ── 键盘/鼠标/U盘 │
│ TF 卡 ── 数据记录/日志 │
│ RTC 电池 ── 掉电时钟保持 │
│ GPIO ── LED 指示/蜂鸣器 │
└──────────────────────────────────────────┘
19.2 核心功能模块
// HMI 主程序伪代码
int main(void) {
// 1. 初始化 CAN 与 RS485
can_init("can0", 500000); // CAN 500kbps
rs485_init("/dev/ttyS1", 9600); // RS485 9600bps
// 2. 初始化显示
lvgl_fb_init("/dev/fb0");
touchscreen_init("/dev/input/event0");
// 3. 创建 LVGL UI
create_main_screen();
create_plc_status_page();
create_alarm_page();
// 4. Modbus 轮询任务
pthread_create(&modbus_thread, NULL, modbus_poll_loop, NULL);
// 5. 主循环
while (1) {
lv_timer_handler();
usleep(5000);
}
}
20. 实用项目:CAN/RS485 工业网关
20.1 系统架构
┌───────────────┐
CAN 总线 ◄─┤ CAN0 CAN1 ├─► CAN 总线
│ │
Modbus ◄───┤ RS485 UART1 ├─► RS485 设备
│ T113-S3 │
│ 千兆以太网 ├─► 局域网/云端 (MQTT/HTTP)
│ │
│ 规则引擎 ├─► 协议转换 + 数据过滤
│ 本地存储 ├─► SQLite / 日志文件
└───────────────┘
关键功能:
- CAN ↔ Modbus TCP 桥接
- CAN ↔ MQTT 云端上报
- 报文过滤 + 转发规则
- 本地 SQLite 数据缓存
21. 实用项目:智能商显广告机
21.1 架构
T113-S3 广告机
├── LVDS/MIPI DSI LCD (1080p) ← 广告画面
├── 千兆以太网 / WiFi (USB/SDIO) ← 远程更新内容
├── USB 2.0 Host ← U 盘内容更新
├── eMMC 8GB ← 本地素材存储
├── Audio DAC → Speaker ← 背景音乐
└── GPIO → 人体感应 (PIR) → 播放/待机切换
核心能力:
- 1080p@60fps H.265 硬解,流畅播放高清广告
- 定时开关屏 + PIR 节能
- OTA 远程更新广告内容
- Qt 叠加 OSD 信息(时间/天气)
22. 开发板与核心板选型指南
22.1 主流方案对比
| 厂商 | 型号 | 规格亮点 | 参考价格 | 适合场景 |
|---|---|---|---|---|
| 百问网 | 东山Π T113s3-Industrial | 板载双 CAN+双 RS485+LVDS | ¥200~350 | 工业快速验证 |
| 百问网 | 东山Π T113s3-PRO | MIPI DSI+LVDS+音频 | ¥150~250 | 显示应用入门 |
| 米尔科技 | MYD-YT113S3 | 邮票孔核心板+千兆网+CAN | ¥300~500 | 产品级开发 |
| 米尔科技 | MYC-YT113X | 核心板 (37×39mm) | ¥100~180 | 直接集成到产品 |
| 飞凌嵌入式 | FET113-i | 工业级 T113-i 核心板 | ¥200~400 | 真正工业级需求 |
| NetCube | Nagami | mini PCIe 形态+ESP32 | ¥150~300 | 紧凑型 IoT |
| Ebyte | ECB31-PB | Raspberry Pi A 形态 | ¥200~350 | 树莓派替代 |
22.2 选型建议
你的开发阶段?
├── "刚开始评估,需要快速上手"
│ └── → 百问网东山Π T113s3-PRO 或 米尔 MYD-YT113S3
│ (文档完善,社区活跃,带屏幕)
├── "做工业产品,需要 CAN + RS485 + 工业级验证"
│ └── → 百问网 T113s3-Industrial 或 飞凌 FET113-i
├── "产品定型,需要核心板集成"
│ └── → 米尔 MYC-YT113X 核心板(邮票孔,直焊)
├── "自己做底板,只买芯片"
│ └── → T113-S3 eLQFP128,立创商城 ¥20~35
│ (2~4 层 PCB 即可,手工可焊!)
23. 常见问题与排障指南
23.1 编译与烧录
| 问题 | 原因 | 解决方法 |
|---|---|---|
source build/envsetup.sh 报错 | 未在 SDK 根目录执行 | cd ~/Tina-SDK 后再执行 |
lunch 无可用选项 | 板级配置未加载 | 检查 device/config/chips/t113/configs/ 目录 |
make 编译错误 No such file | 缺少依赖软件包 | sudo apt install 补全缺失的包 |
| 编译到一半内存不够 | 虚拟机内存不足 | 给虚拟机至少 8GB 内存,或加 swap |
| PhoenixSuit 找不到设备 | 未进入 FEL 模式 / 驱动未装 | 按住 FEL 键再插 USB;装 PhoenixSuit 驱动 |
| PhoenixSuit 烧录失败 | 镜像不匹配 / USB 线质量问题 | 检查镜像文件名;换短 USB 线 |
23.2 内核与驱动
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 启动卡在 “Starting kernel…” | 内核 / 设备树不匹配 | 检查 bootargs 和设备树文件名 |
| 外设不工作 | 设备树 status≠okay | 检查 board.dts 中外设的 status = "okay" |
| CAN 初始化失败 | 引脚复用冲突 | 检查 pinctrl 配置是否与其他外设冲突 |
| LVDS 无显示 | 屏时序参数错误 | 用示波器量 CLK,对比规格书微调 |
| LVDS 花屏 | 数据映射 (VESA/JEIDA) 错误 | 修改 data-mapping 属性 |
23.3 硬件设计
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 芯片不启动 | VCC_CORE (1.1V) 电压不对 | 检查外部 DCDC 输出电压 |
| 芯片不启动 | 32.768kHz 晶振不起振 | 检查晶振 + 负载电容 |
| DDR 不稳定 | VCC_DRAM 电压 / 退耦不足 | 检查 1.35V/1.5V 供电纹波 |
| 以太网不识别 PHY | MDIO 地址/复位时序不对 | 检查 PHY 地址 strap,确认 reset 时序 |
| 模拟音频底噪大 | 模拟地与数字地隔离不够 | 单点接地 + VCCA 独立 LDO 供电 |
23.4 快速诊断命令
# 查看系统信息
cat /proc/cpuinfo # CPU 信息
cat /proc/meminfo # 内存信息
free -h # 内存使用
df -h # 磁盘使用
# 查看外设
ifconfig -a # 网络接口
ip link show # 所有网络设备
cat /proc/net/can/version # CAN 驱动版本
# 查看设备树
ls /proc/device-tree/ # 当前生效的设备树
# 查看 GPIO 状态
cat /sys/kernel/debug/gpio # 需挂载 debugfs
# 查看内核日志
dmesg | tail -50
dmesg | grep -i error
# 查看中断
cat /proc/interrupts
24. 进阶学习路线
阶段 1:入门 (1~2 周)
├── 购买一块 T113-S3 开发板(推荐百问网或米尔)
├── 搭建 Tina Linux SDK 编译环境
├── 编译默认固件 → 烧录 → 启动!
├── 串口登录,熟悉 Linux 基本命令
└── 学习设备树基础概念
阶段 2:外设驱动 (2~3 周)
├── GPIO 控制(LED + 按键)
├── UART 通信(串口终端 + 数据收发)
├── I²C 传感器驱动(温度/湿度/加速度计)
├── PWM 输出(背光调节/舵机控制)
├── SPI Flash 读写
├── 千兆以太网联网通信
└── CAN 总线收发(SocketCAN)
阶段 3:显示与 UI (3~4 周)
├── 适配 LVDS 屏幕(时序配置 + 设备树)
├── 适配 MIPI DSI 屏幕
├── Framebuffer 图形测试
├── Qt for Embedded Linux 移植
├── LVGL 轻量级 UI 框架移植
├── 电容触摸屏驱动 + 校准
└── 多屏异显配置
阶段 4:应用开发 (4~6 周)
├── 视频播放 (H.265/H.264 硬解 + FFmpeg)
├── 摄像头采集 (CSI/MIPI + V4L2)
├── 音频录制与播放 (ALSA)
├── 网络应用 (MQTT / HTTP / WebSocket)
├── Modbus RTU/TCP 工业协议
├── SQLite 本地数据库
├── OTA 远程固件升级
└── 看门狗 + 异常重启恢复
阶段 5:产品化 (4~8 周)
├── 自主设计 PCB (2~4 层板,手工焊接 T113-S3)
├── 电源完整性 + 信号完整性验证
├── 低功耗优化 (CPUfreq + Suspend-to-RAM)
├── 安全启动 (Secure Boot + eFuse)
├── 量产烧录方案 (TF 卡量产 / USB 一拖多)
├── EMC/EMI 预测试与整改
├── FCC/CE 认证
└── 生产测试治具设计
25. 参考资料
官方文档
- 全志 T113-S3 数据手册 (Datasheet) — 全志科技 / 代理商获取
- 全志 T113-S3 用户手册 (User Manual) — 全志科技
- Tina Linux SDK 开发文档 —
docs/目录 - 全志在线论坛 — bbs.aw-ol.com
社区与开源
- Linux-sunxi T113-s3 Wiki — linux-sunxi.org/T113-s3
- 百问网东山Π文档 — docs.100ask.net
- 米尔科技 MYD-YT113X 文档 — myirtech.com
- CNX Software T113-S3 报导 — cnx-software.com
- 主线 Linux T113 支持 — kernel.org v6.4+
工具下载
- PhoenixSuit — 全志 USB 烧录工具
- PhoenixCard — 全志 TF 卡烧录工具
- 交叉工具链 —
arm-openwrt-linux-muslgnueabi-gcc - 全志 Image 打包工具 —
imgrepacker
学习资源
- 全志 Tina Linux SDK 编译指南 — CSDN/博客园 社区文章
- Buildroot 官方手册 — buildroot.org
- Linux Device Tree 规范 — devicetree.org
- SocketCAN 编程文档 — Linux kernel Documentation/networking/can.rst
版权声明:本文由作者原创撰写,仅供学习和交流使用。文中技术参数来源于全志科技官方数据手册、Tina Linux SDK 文档及公开技术资料,如有疏漏欢迎在评论区指正。
转载声明:如需转载,请联系作者获得授权,并注明出处。
免责声明:本文所述代码示例和电路方案仅供学习参考,实际产品设计请以全志科技官方最新数据手册为准。
更多推荐


所有评论(0)