只读分享解决方案文档原理方案设计📅 2026-10-14🔖 CCS⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 原理方案设计 -> 主芯片方案调试开发 -> TI德州仪器_开发指南

TI德州仪器_开发指南

同系列 · 原理方案设计
扫码打开本页
微信扫码

TI 德州仪器 开发指南

编制日期 2026-10-14

MSP430 / C2000 / Sitara / CC 四大系列 —— 一份把「选错调试器」「SysConfig 改了不生效」「RAM 初始化漏了一段」这些坑全部前置的工程手册

4
产品线(MSP430 / C2000
Sitara / SimpleLink)
内核从 16 位 RISC 到 Cortex-A53
16 MHz
MSP430 FR5994 主频
LPM4.5 关断电流 45 nA
200 MHz
C2000 C28x 主频
C28x + CLA 双核流水
48 MHz
CC13xx/CC26xx Cortex-M4F
另有一颗 Cortex-M0 射频控制器
1 GHz
Sitara AM64x Cortex-A53 上限
另有 4×Cortex-R5F 实时核
XDS110
不支持 MSP430
MSP430 必须用 MSP-FET 家族

结论:TI 的四大系列共用一套 Code Composer Studio,却分属四条完全不同的工程链路。 最容易踩的坑不在代码,而在选错调试器(XDS110 / XDS200 的官方「不支持器件」列表里MSP430 在列)、 搞不清 SysConfig 生成的代码与手写代码谁覆盖谁、以及C2000 与 CC26xx 的 Flash 编程行为。 本文按「选型 → 环境 → 配置 → 下载 → 调试 → 外设 → 硬件 → 量产」的真实流水线组织,每一节都给出可对照的表格、可复制的命令、以及该环节最常踩的坑。

报告总结

TI 的资料体系是全行业最规范的之一 —— 每颗芯片都有数据手册(DS)讲电气与引脚、技术参考手册(TRM)讲寄存器、用户指南(UM)讲模块用法、应用报告(APP)讲设计取舍,而且全部免费公开。但官方文档回答的是「这个模块怎么工作」,不回答下面这三类问题:

  • 四个系列之间的关系:MSP430 的 FRAM、C2000 的 CLA、Sitara 的 R5F、CC26xx 的 SCE 分别是为什么存在的?为什么一个做电表的公司会同时做实时控制和无线?
  • 同一件事在不同系列怎么做:同样是「让一个引脚每 1 ms 翻转一次」,四系列的答案完全不同,而且官方不会并排给你。
  • 工具链的真实边界:哪些器件能用 XDS110、哪些必须 MSP-FET、SysConfig 生成的 ti_xxx_config.c 能不能手改、UniFlash 的命令行参数怎么写 —— 这些散落在几十份文档和 E2E 论坛里。

本文档做了三件官方分散资料没做的事:把四条链路并排摆齐、把坑写在坑发生的那一章、把来源标到文档编号级别。

读者路径

本文档共 20 章 + 4 个附录,按「先跑通、再理解」的顺序组织:

  • 只想尽快跑通第一个程序:第 4 章(装 CCS)→ 第 5 章(建工程点灯)→ 第 7 章(下载)→ 第 20 章(核查清单),四章足够。
  • 正在做选型:第 2 章(四大系列全景 + 决策路径)→ 第 3 章(内核差异)。这一章能省掉一次错误的料号采购。
  • 要调 C2000 电机控制:第 2.3 节 → 第 11 章(时钟与上电)→ 第 13 章(ePWM / HRPWM)→ 第 14 章(ADC / CMPSS)。
  • 要做低功耗电池产品:第 16 章。注意 MSP430 的「LPM4.5 唤醒 = 复位」这件事。
  • 做 Sub-GHz 或 BLE:第 15 章(射频与协议栈)+ 第 17.7 节(RF 走线与天线净空)。
  • 从 STM32 切过来:第 18 章是专门的移植对照,先看这一章能省两三天。
  • 调不通、报错:直接翻第 19 章,按现象分层定位。

1 · 文档导读与阅读路径

这一章说明本文档的边界:覆盖什么、不覆盖什么,以及为什么把内容按「流水线」而不是按「功能模块」组织。

1.1 覆盖范围

本文档覆盖从「确定用哪颗 TI 芯片」,到「固件跑起来、能断点停下、能量产烧录」的完整链路,四大系列各自独立成路径:

  • 选型与内核:MSP430 的 16 位 RISC 与 FRAM 统一内存、C2000 的 C28x + CLA 双核、Sitara 的 A53/R5F/M4F 异构、CC13xx/CC26xx 的 M4F + M0 双核与 SCE 传感器引擎(见第 2、3 章)。
  • 开发环境:CCS v20(Theia 框架)、SysConfig 的 .syscfg 元数据机制、各系列 SDK 的分工与版本对应关系(见第 4、6 章)。
  • 构建:linker command file 的 MEMORY 配置、CMD 语法、启动代码、命令行 gmake、代码体积与 RAM 预算(见第 6 章)。
  • 下载与量产:XDS110 / XDS200 / MSP-FET 的能力边界、UniFlash 的图形与命令行、MSP430 BSL、C2000 ROM 与外设引导、CC26xx 的 Serial Flash 与 CCFG、并发烧录(见第 7 章)。
  • 调试:CCS Debug 配置、SysConfig 运行时视图、断点行为、实时 trace、Graph 工具,以及 Flash 编程的全片擦除特性(见第 8 章)。
  • 外设:GPIO / 外部中断 / 中断控制器 / 时钟复位电源 / UART / SPI / I2C / ADC / DMA / 定时器 / PWM / RTC / 看门狗,以及 C2000 的模拟与控制专用外设(见第 9~14 章)。
  • 射频与低功耗:CC13xx/CC26xx 的协议栈、频段、PA 与板级约束;MSP430 / C2000 / CC26xx / Sitara 四套低功耗机制(见第 15、16 章)。
  • 硬件与移植:电源分区、去耦、上电时序、多电源约束、复位、晶振、调试口布线、RF 走线;以及从 STM32 / 8051 迁移的改动清单(见第 17、18 章)。

1.2 不覆盖什么

以下内容超出本文档范围,需要时请查阅对应官方资料:

  • 寄存器位域全集:C2000 的 TRM 接近 3000 页,MSP430 与 CC13xx 的 TRM 也有数百页。本文只在需要解释「为什么会这样」的层面给出寄存器组名,具体位域请对照 TRM 核一遍。
  • 控制算法本身:FOC、PI 整定、无感观测器、InstaSPIN-FOC 的数学推导属于电机控制理论。本文只覆盖它们所依赖的外设资源、同步时序与调试接口。
  • Linux / RTOS 内核移植与驱动开发:Sitara AM62x/AM64x 的 Processor SDK Linux、Yocto、BSP 与设备树属于嵌入式 Linux 的独立体系。本文只讲它与 MCU 侧的接口(FSI、GPMC、PRU-ICSSG)和启动链概念。
  • 无线协议栈源码级细节:BLE 协议栈的 GATT 数据库、TI 15.4-Stack 的网络层与 MAC、Thread / Zigbee 的堆栈移植,属于各自 SDK 文档的范围。本文只讲选型、频段、功耗预算与板级约束。
  • 每一款封装的完整管脚定义:本文只给最常用封装的关键引脚(调试、自举、电源、RF),完整管脚表请查对应 DS。
  • 认证与合规的完整流程:SRRC / CE / FCC 的测试与认证流程由第三方实验室执行,本文只在 15.6 节列出「设计阶段就要考虑的分区与净空约束」。

1.3 型号命名约定

TI 的型号命名比多数厂商规整,看懂名字基本就能知道内核、主频档次与 Flash 容量。以四个系列的代表型号为例:

字段MSP430 示例C2000 示例CC26xx 示例Sitara 示例
家族前缀MSP430TMS320F28xxxCC13xx / CC26xxAM62x / AM64x
系列标识FR=高性能混合信号
G2xx=通用低功耗
WL=无线的低功耗变体
F28=C2000 实时控制
2837x / 2838x=Delfino 高端
28004x / 2807x=Piccolo
13xx=Sub-GHz 为主
26xx=2.4 GHz 为主
1352=双频
62x=MPU
64x=MPU+实时
243x=纯 MCU
功能码59xx=带 LEA
6xxx=带 LCD 段驱动
003x / 04x=C2000 入门到中端
P65x=功能安全锁步
52=带 2.4 GHz
90=更小封装
2 / 4=A53 核数或产品档位
封装后缀IPM=LQFP64
IZVWR=VQFN64
ZQ=QFN
PG=QFP
PN=LQFP
RGZ=VQFN48
ZST=WSON
SK=BGA 标称尺寸
TI=工业温度等级标志
温度/等级-40~85℃ 工业级
-40~105℃ 扩展级
-Q1=车规
无后缀=工业级
-40~+105℃ 多数型号TI 工业温度
车规另有独立料号
命名不能替代查手册

同一后缀在不同家族里的含义并不统一 —— 例如 ZQ 在 C2000 里是 QFN 封装,在 TI 的其它产品线里没有这个含义。 命名规则只用于快速缩小范围,最终必须以目标料号的 DS 封装表为准。特别是 C2000:同一个芯片功能(如 F28379D / F28379S)有 QFP、BGA 多种封装,引脚编号完全不同。

1.4 事实来源与免责

本文档所有数值型信息来自 TI 官方公开资料,正文中会就近标注出处。版本敏感的东西(IDE 版本、SDK 版本、下载入口)请以 ti.com 当日页面为准。

类别本文引用的资料族提供什么
数据手册(DS)SLASE54x(MSP430 FR59xx/FR58xx)、C2000 各系列 DS、CC1352R/CC1352P DS、AM62x/AM64x/AM243x DS电气特性、引脚定义、封装、热特性、典型应用
技术参考手册(TRM)各系列 TRM(SLAU 系列 / SPRU 系列)寄存器位域、中断向量表、存储器映射、外设模块细节
用户指南(UM)SLAU647(MSP Debuggers User's Guide)、SLAU319(MSP430 Programming Via the BSL)调试器行为、BSL 协议与时序、探针能力矩阵
应用报告(APP)SPRACo3、SPRAxx 系列、CC13xx/CC26xx Hardware Configuration and PCB Design Considerations设计取舍、外围电路计算、时序约束、应用拓扑
产品页与 E2E 论坛各产品 Description 页、Code Composer Studio 工具页特性清单、不支持器件列表、版本与发布日期
关于精确数值的使用原则

本文档只在确信时给出精确数值(主频、Flash/SRAM 容量、接口数量、电压范围、绝对最大额定值等,这些在 DS 与产品页都有明确列出)。 凡是寄存器地址、位域名称、中断向量号、等待周期、电流实测值这类容易随器件版本变化的细节, 本文一律写成定性描述 + 指向 TRM 的具体章节,或者给出「该去查哪本手册的哪一章」。
原因很直接:TI 的产品线极宽,同一个寄存器名在不同系列上的位定义可能不同;而 C2000 与 CC13xx 的 TRM 修订频繁, 拿三年前的本地副本当依据是本末倒置。

TI 四系列开发的六段式流水线 —— 每一段都要有一个可验收的现象上一段没配对,下一段的症状一定会伪装成别的东西① 选型确认内核与系列料号落在 SDK 支持表验收标志 ↓② 环境CCS v20 + SDK能建空工程并编译验收标志 ↓③ 配置SysConfig 生成ti_xxx_config.c 出现验收标志 ↓④ 下载仿真器 / BSL提示写入并校验验收标志 ↓⑤ 调试断点 / 寄存器视图能停在 main()验收标志 ↓⑥ 量产UniFlash 并发烧多工位同烧不冲突验收标志 ↓本文档的写法:每一段都给「现象 → 原因 → 处置」三元组第 4~8 章走完流水线中段;第 9~14 章是跑起来之后的外设细节;第 16~18 章是硬件、移植与低功耗;第 19~20 章是排障与收口。四系列共用一套 IDE,但不共用一条路:MSP430 走 MSP-FET,C2000 走 XDS110/XDS200,CC26xx 走 XDS110 或 BSL,Sitara 走 JTAG + Linux 引导。这一句是本文档存在的主要理由 —— 很多人在第一步就买了错的调试器。
图 1 · TI 四系列开发的六段式流水线与本文档的组织逻辑

2 · 四大系列全景与选型

TI 是极少数同时做「最省电的 MCU」和「最复杂的实时控制器」的公司,而且它们之间几乎没有重叠。理解这一点,选型就简单了。

2.1 一句话认识 TI 的嵌入式四条线

很多工程师对 TI 的印象停留在「做 DSP 和模拟芯片的公司」。实际上 TI 的嵌入式产品线有四条,各自解决完全不同的问题,彼此几乎不重叠:

系列存在理由(一句话)核心差异点
MSP430把「能跑的最小功耗」做到极致 —— 仪表、计量、可穿戴、一次性医疗FRAM 与 RAM 统一编址;16 位 RISC;LPM0~L4.5;AES 硬件协处理器
C2000把「确定性的实时控制」做到极致 —— 伺服驱动、光伏逆变、充电桩、数字电源C28x 32 位流水 + 独立 CLA 控制律加速器;ADC-OPP 与 ePWM 硬件同步;CMPSS 直接连 Trip-Zone
Sitara把「Linux 应用 + 硬实时」放进一颗 SoC —— 工业网关、PLC、机器视觉异构核(A53 / R5F / M4F);可配置 SRAM 分区实现域隔离;PRU-ICSSG 做工业协议
SimpleLink(CC13xx / CC26xx)把「超低功耗无线」做成单芯片 —— 智能表、传感、门禁、资产追踪应用核 M4F + 独立射频核 M0 + SCE 传感器引擎;Sub-GHz 与 2.4 GHz 双频共存(DMM)

把四个系列的共同点也列清楚 —— 这决定了它们能共用哪些工具:

  • 同一个 IDE:Code Composer Studio 从 CCS 7 到 v20 一直支持全部四条线(Energia 从 CCS 20 起不再支持,那是 Arduino 侧的独立产品)。
  • 同一套配置工具:SysConfig 对四个系列都用「.syscfg 元数据 + 生成 C 代码」的同一套机制,只是生成的文件名和内容不同。
  • 同一套仿真器家族:XDS110 / XDS200 / XDS560 在多个系列之间通用 —— 但有明确的不支持列表,见 7.1 节。
  • 同一个烧写工具:UniFlash 同时覆盖这四条线的芯片(对 AMx 器件只支持命令行)。
  • 同一条资源站:TI Resource Explorer 把文档、例程、SDK、Board 文件按器件树组织。

2.2 MSP430:超低功耗 16 位 RISC

MSP430 的设计目标只有一个:在最小的能耗下完成最多的工作。为了达成这个目标,它做了几个与主流 MCU 相反的选择:

  • 16 位 RISC 而不是 32 位:寄存器少、取指周期短、译码简单,单位能耗下的有效吞吐更高。
  • FRAM 与 RAM 统一编址:这是 MSP430 最独特的一点。以 MSP430FR5994 为例,256 KB FRAM 与 8 KB SRAM 在同一个地址空间里, 指针可以指向任何一处,写 FRAM 就像写 RAM 一样快(约 125 ns / 字),而且写入前不需要擦除。这直接带来两个工程优势:代码可以把自己改写(OTA 的基础),以及所有「变量」都能掉电保持而不用自己搬进 Flash。
  • 把模拟外设做到与数字同级:12 位 ADC 带采样时间控制与窗口比较器、多通道比较器、内部基准、可编程增益 —— 这些在当年的 MCU 上是罕见的。
  • LEA(低能耗加速器,FR599x 独有):一颗独立于 CPU 的小型信号处理引擎,可以做 FFT / FIR / 矩阵运算而不唤醒 CPU。官方给的对比是「在 256 点复数 FFT 上比 Cortex-M0+ 快到 40 倍」。它只与 4 KB SRAM 共享。
代表型号内核与主频FRAM / SRAM关键资源典型定位
MSP430FR599416 位 RISC,16 MHz256 KB / 8 KBLEA · 12 位 ADC(最多 20 个外部通道)· 16 通道比较器 · 6 通道 DMA · 4×eUSCI_A + 4×eUSCI_B · 6 个 16 位定时器 · RTC 带日历与闹钟 · AES-128/256 · CRC16/CRC32高精度信号采集 + 低功耗的结合体
MSP430FR599216 位 RISC,16 MHz128 KB Flash / 8 KB12 位 ADC · 比较器 · eUSCI · 32 位硬件乘法器 MPYFR599x 里不带 LEA 的简化档
MSP430FR604x16 位 RISC,16 MHz按档位 32~128 KB FRAM / 2~8 KB面向水表、燃气表等计量表计,带 LCD 段驱动(FR6x)计量与表计
MSP430G2xx216 位 RISC,最高 16 MHz按档位 8~64 KB Flash / 0.5~16 KB基础通用档,外设数量与模拟能力弱于 FR 系列成本敏感的通用控制
MSP430L2xx16 位 RISC,最高 16 MHz按档位 8~64 KB Flash更强调超低静态电流与 1.8 V 供电单节电池与纽扣电池

MSP430 的低功耗数字同样有官方来源。以 FR5994 产品页给出的典型值为准:活动态约 118 μA/MHz、LPM3(VLO 时钟)500 nA、LPM3.5(RTC 由 3.7 pF 晶体驱动)350 nA、LPM4.5 关断 45 nA。 这四个数字背后的机制在第 16 章展开,这里先记住一条结论:MSP430 的低功耗不是靠「关外设」,而是靠 CPU 本身进低功耗模式 + 内存保持策略。

LEA 的意义常被低估

如果你要做「唤醒采样 → FFT → 判断 → 发送 → 再睡」,传统做法是「唤醒 CPU → 算 → 再睡」, 每次唤醒都要付启动开销。LEA 的价值是让这条链变成「唤醒 M4F 极短 → 启动 LEA → LEA 独立算 → 结果存共享 RAM → 再睡」, 中间 CPU 大部分时间仍在睡眠。这是 MSP430 在「既要算力又要电池寿命」的场景里真正不可替代的地方。

2.3 C2000:实时控制专用 C28x

C2000 的存在理由是:一般的 MCU 无法在确定性的时刻把 ADC 结果送到 PWM 输出。C2000 用一整套专用硬件解决这个问题,这就是它与其它 MCU 最大的分野。

  • C28x 32 位流水内核:定点与单精度浮点混合流水线,带硬件乘法与专门的三角函数单元 TMU,在 200 MHz 下的等效实时信号链性能可达数百 eMHz 量级(TI 官方用 eMHz 这个自定义指标做横向对比)。
  • CLA(Control Law Accelerator,控制律加速器):一颗与 C28x 并行运行的 32 位浮点内核,专门跑控制律。典型分工是「C28x 跑通信与外设、CLA 跑电流环」,两个核的代码可以同时执行。这是 C2000 算力翻倍的根本原因。
  • ADC 与 ePWM 的硬件同步:ADC 在 PWM 载波中点触发采样(ePWM 可以直接触发 ADC 的 SOC),采样结果再由 ADC 的 EOC(转换结束)直接触发 ePWM 更新。整条链路没有一个 CPU 指令参与,抖动只有纳秒级。
  • CMPSS → Trip-Zone 硬件保护:比较器输出一旦越过上下限,直接硬件封锁 PWM 输出,不经过 CPU、不经过软件。这是「安全相关」设计的底座。
  • CLC(Configurable Logic Block):片内可编程的逻辑阵列,用外���逻辑(与、或、异或、移位、查表)代替一部分「用 GPIO 互连的逻辑」。它同时也是接绝对值编码器(EnDat / BiSS / SSI)的主流方式。
系列代表型号内核配置Flash等效算力口径定位
DelfinoF2838xD2×C28x + 2×CLA1.5 MB925 MIPS(官方口径)高端:含连接管理器、Ethernet / EtherCAT
DelfinoF2837xD2×C28x + 2×CLA1 MB800 MIPS(官方口径)高端:EMIF + 16 位 ADC
DelfinoF2837xS1×C28x + 1×CLA1 MB400 MIPS(官方口径)单核版,引脚与 F2837xD 兼容
PiccoloF2807x1×C28x + CLA512 KB240 MIPS(官方口径)中端,DesignDRIVE 主力
PiccoloF28004x1×C28x + CLA256 KB200 MIPS(官方口径)中端:7 个 PGA、2 个缓冲 DAC、SDFM、FSI、CAN-FD
PiccoloF28003x1×C28x(CLA 可选)384 KB120 MHz / 240 MIPS DSP成本优化:集成 DC/DC 控制器,带 CLB 与 SDFM
PiccoloF28002x1×C28x128 KB100 MHz入门:满足基础数字电源与单轴伺服
功能安全F28P65x最多 3×C28x + 3×CLA(含锁步)1.28 MB / 768 KB1000 eMHz(官方口径)ASIL-B / SIL-2 安全相关控制

C2000 的型号谱系有一个必须理解的事实:TI 用「eMHz(等效 MHz)」这个自定义指标做跨内核横向对比, 定义为「达到同样实时信号链性能所需的 Cortex-M7 级设备主频」。厂商对比表里的数字全部是这个口径, 不要拿它和 Cortex-M 系列的真实主频直接比。真实的 C28x 主频写在 DS 里:F2837xD / F2838xD 是 200 MHz,F2807x 是 120 MHz,F28004x 是 100 MHz,F28002x 是 100 MHz,F28003x 是 120 MHz。

C2000 的封装引脚不可跨型号套用

F28379D(QFP100)、F28379S(QFP100)、F28378D、TMDSMCU-F0467(controlCARD)之间的引脚定义完全不同, 数据手册里明确列出「本器件不支持 X 封装」。原理图必须按目标料号的 DS 引脚表逐个核对, 尤其注意 EMIF 引脚、并行 GPIO、以及那些「同功能但编号不同」的 ePWM / ADC 通道。
附录 A.3 给了 F2837x LQFP200 的关键引脚速查,但它只是速查,不能替代 DS。

2.4 Sitara:AM 系列应用处理器与 Sitara MCU

Sitara 在近几年的产品布局上分成了两条路,容易混淆:AM62x 是 MPU(跑 Linux,做应用处理与人机界面), AM64x / AM243x 是 MCU(跑 RTOS/裸机,做硬实时 + 工业通信)。两条路都叫 Sitara,但选型逻辑完全不同。

产品线代表型号核配置内存与外存跑什么典型应用
AM62x(MPU)AM623Arm Cortex-A53(多核)片上 SRAM + DDR3 / DDR4 / LPDDR4Linux(Processor SDK Linux,含 Yocto BSP)IoT 网关、手势/物体识别、显示终端
AM64x(MCU)AM64422×Cortex-A53 + 最多 4×Cortex-R5F + 1×Cortex-M4F + 2×PRU-ICSSG2 MB 带 ECC 片上 SRAM + 16 位 DDR4 / LPDDR4(带行内 ECC)Linux 与 RTOS 并存(可配置 SRAM 分区做域隔离)工业以太网设备、伺服驱动、可编程逻辑控制器
AM243x(MCU)AM2434最多 4×Cortex-R5F + 1×Cortex-M4F + 2×PRU-ICSSG(无 A53)片上 SRAM + DDR(按型号)RTOS / 裸机(MCU+ SDK)远程 I/O、电机驱动从控、需要实时通信的设备

Sitara 的技术特色有三点值得在做架构决策时纳入考虑:

  • 可配置 SRAM 分区 = 硬件级的域隔离:内部 SRAM 可以切成不同大小的块分配给不同核。 这让「Linux 应用」与「实时控制」在内存层面就是隔离的,一侧失控不会踩到另一侧 —— 这对功能安全设计非常关键(AM64x 明确把 Linux 应用与实时流之间的隔离列为架构能力)。
  • PRU-ICSSG:可编程实时单元,能实现 EtherCAT、PROFINET、Ethernet/IP、IO-Link 等工业协议,以及 Σ-Δ 抽取滤波器和绝对值编码器接口。AM64x 用两个实例加上 CPSW3G,最多支持 5 个千兆以太网口。
  • FSI(Fast Serial Interface):与 C2000 直连的高速串行接口。AM64x/AM243x 的实时核做控制环、C2000 做功率级驱动,中间用 FSI 走,是 TI 主推的「双芯片伺服」架构。

另外注意 Pin-to-Pin 与封装兼容性:TI 在 Sitara 家族内做了跨型号的引脚兼容设计(同一封装下从 AM62x 到 AM64x 尽量保持一致), 这意味着产品规划时可以在同一块 PCB 上跨越性能档位,不必为每个档位重画板子。具体兼容范围请查对应系列的 Software Build Sheet。

2.5 CC13xx / CC26xx:SimpleLink 无线

SimpleLink 无线 MCU 的架构创新点是三核分工,理解它就理解了这一系列所有的低功耗特性:

核架构职责为什么这样分
应用核48 MHz Arm Cortex-M4F跑协议栈与用户应用给你熟悉的 Arm 生态与寄存器编程模型
射频控制器Arm Cortex-M0执行射频与 PHY 层命令(代码在 ROM 或 RAM 中)射频时序敏感且要极低功耗,用一颗独立的 M0 保证它既不被应用代码干扰,也能在应用核睡眠时继续工作
SCE(传感器控制器引擎)独立可编程的小核传感器轮询与数据预处理可以只让 SCE 醒着,以「几 μA 平均电流」维持对环境变化的响应,应用核完全不动

这个架构带来的直接结果是:协议栈、应用逻辑、射频、传感四件事可以分别在不同的时间点进出低功耗状态, 而不是被绑在一起整体睡眠或整体唤醒。这正是「1 μA 级长期待机 + 仍能保持无线连接」这个看似矛盾的组合得以实现的原因。

型号频段应用核Flash / SRAM典型协议定位
CC1310Sub-GHz(868 / 915 MHz 为主)Cortex-M4F按档位 128 KB / 16 KB私有 Sub-1 GHz、TI 15.4-Stack成本最优的单频 Sub-GHz,LaunchPad 经典款
CC1352R双频:Sub-GHz + 2.4 GHz48 MHz Cortex-M4F352 KB / 80 KB + 8 KB cacheBLE 5、802.15.4、Thread、Zigbee、6LoWPAN、Wi-SUN、MIOTY、Wireless M-Bus单芯片同时跑 Sub-GHz 与 2.4 GHz 两套协议
CC1352P7双频,内置 PA48 MHz Cortex-M4F按档位最高 704 KB / 144 KB同上需要更高发射功率与更远距离的版本
CC2640R22.4 GHzCortex-M4F128 KB / 32 KBBLE 5(经典款)2.4 GHz 低成本 BLE
CC2652R2.4 GHzCortex-M4F352 KB / 80 KBBLE 5、802.15.4、Thread、ZigbeeCC1352R 的 2.4 GHz 单频简化版
CC2340R52.4 GHzCortex-M4F按档位 128~512 KB / 36 KBBLE 5.x新一代低成本 2.4 GHz

关于频段的具体范围,官方在 CC1352P7 的产品描述中给得很明确:Sub-1 GHz 部分覆盖 287–351 MHz、359–527 MHz、861–1054 MHz、1076–1315 MHz 四个子段;2.4 GHz 部分覆盖 2360–2500 MHz。 中国可用频段(SRRC)主要落在 470–510 MHz 与 902–928 MHz 区间,选型时务必对照目标市场的频段规划确定子型号。

CC13xx/CC26xx 适合什么样的项目

判断标准很简单:「这个设备的主要复杂度在无线协议,还是在控制算法?」 如果答案是「协议」(智能表、传感器、门禁、资产标签),选 CC 系列;如果是「控制」(电机、逆变、精密驱动),选 C2000, 哪怕你确实需要一点无线(可以外挂一颗 CC 芯片通过 SPI/UART 连过来)。
反过来,如果你的产品需要「本地显示 + 联网 + 复杂 UI」,那就该考虑 Sitara AM62x 而不是把 CC 和显示驱动硬凑在一起。

2.6 跨系列选型对照

把四个系列放在同一张表上对比,是做立项评审时最有效的一步。这张表的每一行都是「你在设计评审会上会被问到的问题」:

对比维度MSP430C2000SitaraSimpleLink
内核位数与类型16 位 RISC32 位 C28x + 独立 CLAA53 / R5F / M4F 异构多核32 位 M4F + 独立 M0
内存哲学FRAM 与 RAM 统一地址空间Flash + RAM 分离,关键 RAM 带 ECC多级存储:片上 SRAM / TCM / 外部 DDRFlash + 低泄漏 SRAM 分离
模拟外设强度强:12/14 位 ADC + 多通道比较器 + PGA + 内部基准最强:多 ADC、CMPSS、OPA、SDFM、缓冲 DAC中:多通道 ADC + 比较器中:12 位 ADC + 比较器 + 可编程电流源
控制专用外设无(用定时器 + ADC 软做)独有:ePWM/HRPWM、eCAP、eQEP、ADC-OPP 同步、Trip-Zone、CLBePWM / eCAP / eQEP / SDFM(工业向)无(GPTimer + ADC)
无线无(WL 变体除外)无无核心能力
操作系统裸机 或 RTOS(小资源)裸机 或 RTOS(DSP/28x 生态)Linux / RTOS / 裸机裸机 或 TI-RTOS(FreeRTOS 生态)
启动复杂度低(复位向量直接跑)高(多核启动顺序、CLA 与 C28x 各自入口)最高(Bootloader → SPL/MLOS → Linux 或 RTOS)中(ROM 引导 + CCFG 决定模式)
调试器MSP-FET 家族XDS110 / XDS200XDS110 / XDS200 / XDS560XDS110 / XDS200(板载也行)
量产烧录MSP-FET / BSL(UART/I2C/SPI/USB)UniFlash / 串行或 CAN / USB 引导程序UniFlash + SD 卡 / 网络UniFlash / BSL / OAD(空中升级)
典型封装TSSOP / QFN / LQFP(很小)QFP / QFN / BGA(较大)BGA(17 mm 级)QFN / WSON(小)
入门门槛低(资料多,外设简单)高(TRM 极大,外设极多)高(Linux + 多核 + 工业协议)中(协议栈层数多)

这张表里最容易被忽视、也最容易造成返工的是最后三行:启动复杂度、调试器、量产烧录。 很多项目在实验室里跑通了,掉到产线上才发现「调试器选错了」或者「烧录口没引出来」,代价极高。立项时把这三项和功能需求一起定,比功能本身更值得花时间。

2.7 软件生态:CCS / SysConfig / SDK 的分工

TI 的软件栈可以拆成四层。搞清这四层的边界,就知道遇到问题该去查哪一层:

层组件职责你什么时候会碰到它
IDECode Composer Studio v20(基于 Theia IDE 框架)工程管理、编辑、编译、调试、断点、Graph 视图每天都在用。CCS v20 不再支持 32 位 Windows,也不再支持 XDS510 类探针
配置SysConfig(独立工具,同时集成进 CCS)图形化配置外设与引脚,生成初始化 C 代码与 pinmux 定义新建工程时、引脚冲突时、时钟改了要同步时
平台 SDKMSP430Ware · C2000Ware / MotorControlWare · MCU+ SDK · Processor SDK · SimpleLink SDK提供 DriverLib / HAL、启动代码、链接命令文件、Device Family Driver、以及片上测试搭工程、找例程、改链接配置时
应用库InstaSPIN-FOC / InstaSPIN-MOTION · MotorControlWare 的算法库 · DigitalPower 库 · Bit-bang I2C 等把「算法与协议」打包成可调用的库做电机控制、数字电源时

关于 SDK 之间的层级关系,有几条实用经验:

  • C2000 的库是分层的:C2000Ware 是底座(DriverLib + 位域字段定义 + 启动代码 + 链接文件 + 例程), C2000Ware MotorControlWare SDK 叠在它上面(电机控制算法 + DigitalPower + 实时控制库), C2000Ware DigitalPower SDK 是数字电源的专用栈。三个 SDK 的版本必须互相对应, 混用会出现「位域字段定义与 DriverLib 不匹配」的编译或运行问题。
  • Sitara 与 CC26xx 走的是两条不同的栈:AM62x / AM64x 用 Processor SDK(Linux 侧用 Processor SDK Linux + Yocto,MCU 侧用 MCU+ SDK); CC26xx 用 SimpleLink CC13x2/26x2 SDK。两者不通用,但都在 SysConfig 里配置。
  • SysConfig 不是必需的:你可以完全手写寄存器配置代码。但一旦用了 SysConfig, 它生成的文件会在每次构建时被覆盖 —— 这是本文档里第 6.2 节要重点讲的一个坑。
  • TI Resource Explorer 是找例程最快的地方:比在 SDK 里翻目录树快得多,而且它按「板子 + 用例」组织, 很多例程直接就是你手上那块 LaunchPad 的板级配置。

2.8 选型决策路径

把上面这些收敛成六个问题的决策树,从上往下问,命中即停:

TI 四大系列地图 —— 内核、资源、封装与典型产品形态四个系列几乎不重叠:同一家公司同时供「电池供电的表」「电机逆变器」「工业网关」「无线传感器」MSP430超低功耗 16 位 RISCFR5994:16 MHz · 256 KB FRAM8 KB SRAM · LEA · 12 位 ADCFRAM 统一内存 · AES · 6 通道 DMAVQFN / LQFP / TSSOPC2000实时控制专用F2837xD:200 MHz C28x + CLA16 位 ADC · ePWM / eCAP / eQEPCMPSS · CLB · 1 MB FlashQFP / BGA · 车规可选Sitara应用处理器 + 实时核AM64x:2×A53 + 最多 4×R5F1×M4F · 2×PRU-ICSSGDDR4 / LPDDR4 · GPMC / FSIBGA · 17 mm 见方级SimpleLink无线 MCUCC1352R:48 MHz M4F + M0 射频核SCE 传感器引擎 · 双频352 KB Flash · 80 KB SRAMVQFN / QFN · 极低待机电流四个系列共用的东西:CCS v20(Theia)· SysConfig · UniFlash · XDS 系列仿真器 · TI Resource Explorer对比维度MSP430C2000SitaraSimpleLink内核16 位 RISC32 位 C28x + 32 位 CLAA53 / R5F / M4F32 位 M4F + 32 位 M0内存哲学FRAM 与 RAM 统一编址Flash + RAM 分立,多为 ECC多级:片上 SRAM / TCM / DDRFlash 与 SRAM 分立模拟能力12/14 位 ADC + 比较器最强:多 ADC / CMPSS / OPA / SDFM中:多通道 ADC + 比较器12 位 ADC + 比较器 + 基准无线无(另有 WL 变体)无(另有通信管理器)无Sub-GHz + 2.4 GHz典型功耗量级最低(关断 nA 级)中(运行 mA 级)高(需 DDR 与多电源域)极低(待机 μA 级)主战场仪表 / 计量 / 可穿戴伺服 / 光伏 / 逆变 / 充电桩工业网关 / PLC / 机器视觉智能表 / 传感 / 门禁
图 2 · TI 四大系列地图:内核、资源、封装与典型产品形态

来源:各产品 Description 页与系列 DS/TRM

TI 选型决策路径 —— 六个问题收敛到一条产品线顺序很重要:先砍无线与实时性,再砍算力与功耗,最后才是封装与成本① 需要无线(Sub-GHz 或 BLE)吗?判定条件是 → CC13xx / CC26xxCC1352R 双频 · CC1310 单频低功耗② 需要跑 Linux 或复杂图形界面吗?判定条件是 → Sitara AM62x / AM64xA53 应用核 + 可选 R5F 实时核③ 是电机 / 逆变 / 光伏这类实时控制吗?判定条件是 → C2000C28x + CLA · ADC-OPP 同步 · ePWM④ 是电池供电、平均电流在 μA 级吗?判定条件是 → MSP430FRAM 统一内存 · LPM0~L4 · nA 级关断⑤ 需要高精度模拟前端吗?判定条件是 → MSP430 FR / CC13xx12~14 位 ADC + 比较器 / PGA⑥ 通用控制 + 生态优先判定条件MSP430 的 G2xx / L2xx 档最省事、资料最多、FRAM 省心终点:以上都不满足时的默认答案 → 回到第 ⑥ 行右侧的 MSP430 通用档
图 3 · TI 四系列选型决策路径

补充五条不成文经验:

  • 先定调试器,再定芯片。MSP430 不支持 XDS110/XDS200;MSP-FET 又不能调 C2000。选芯片之前先确认你能拿到对应的探针。
  • 同系列内优先选 Flash / SRAM 更大那档。TI 同一型号系列常有 4~6 个 Flash 档位,差价很小,后期发现不够用的成本远高于差价。
  • C2000 一定要用 controlCARD 或 LaunchPad 起手,不要从自制最小系统板开始 —— C2000 的电源域数量与上电时序要求比想象中复杂(见 17.3 节)。
  • 无线产品的第一步不是写代码,是读两份文档:对应型号的 DS(含 RF 电气参数)与 TI 的 CC13xx/CC26xx Hardware Configuration and PCB Design Considerations。射频部分的返工成本是全项目最高的。
  • 功能安全项目从一开始就要看对系列。C2000 的 F28P65x 带锁步与 ASIL-B/SIL-2 使能,CC 系列有安全启动与安全固件更新;如果项目将来要做认证,选型时就要按认证需求选,而不是等认证阶段再换。

3 · 内核与架构差异

四个系列的差异,第一层在内核。但真正决定「能不能移植」的不是内核本身,而是它带来的地址空间模型与中断模型。这一章把这两件事讲透。

3.1 MSP430:16 位 RISC 与冯·诺依曼

MSP430 的指令集是 16 位 RISC,寄存器宽度也是 16 位。它的架构有三个特点,每一个都能在代码里直接观察到:

  • 单总线冯·诺依曼:指令和数据走同一根总线。这意味着「取指时不能同时访存」—— 但也意味着硬件极其简单、面积小、功耗低。典型表现是:add @r4, r5 这类单字指令在时钟上升沿完成,而某些需要两次访存的双字指令耗时更长。
  • 寄存器少:只有 R0~R15,其中 R0(SP)、R1(SR)、R2(PC)、R3(CG2)固定用途,R12~R15 是 Scratch 寄存器。好处是上下文切换只需保存 PC + SR + 少量寄存器;代价是编译器要频繁把变量搬到栈上,代码密度不如 8/32 位机。
  • 统一地址空间:MSP430FR 系列最独特的一点 —— FRAM 与 RAM 在同一个 16 位地址空间里。地址 0x0000 以上是 FRAM,顶部 0xFFxx 附近是信息区(TLV / 校准值),没有「写 Flash 前要擦除」这回事。
统一内存带来的两个直接好处

① 代码可以自修改:把一段代码写进 FRAM 然后跳过去执行,是 MSP430 做 OTA 的经典做法, 也可以用来做「不重新烧录就能更新参数」的功能。
② 不需要区分 const 与变量的写法:面向对象里那些「把常量表放 Flash 让它不进 RAM」的操作,在 MSP430 上是天然的 —— 它本来就在同一个空间里,只是你把那段地址标成只读习惯即可。

3.2 MSP430 的「天然低功耗」从哪来

很多资料说「MSP430 天生低功耗」,但没说清机制。实际上是四条机制叠加的结果:

机制做法带来的收益限制
16 位指令 + 单总线每次访存的能耗更低;状态机更简单单位指令能耗低于 32 位机吞吐也低,所以它不是高性能方案
五级低功耗模式CPU 时钟停止后由异步唤醒源触发LPM3 / LPM4 的电流可到 nA 级唤醒有延迟,不适合需要连续计算的场景
FRAM 保持进低功耗模式时RAM 与 FRAM 内容全部保持唤醒后从原处继续执行,不需要重初始化FRAM 的保持电流也算在总功耗里,档位越高电流越大
模块时钟可关用时序发生器按需给外设供电时钟不用的外设不耗电关掉之后访问会挂住,必须先开回来
低功耗不是免费的

三个必须一起看的开销:① 唤醒延迟(从 LPM3 退出到执行第一条指令,需要等 DCO 起振并稳定,典型是几十到上百微秒量级,具体查 TRM); ② 保持电流(进 LPM3 后 CPU 停了,但 FRAM / RAM 保持要耗电,所以「保留更多 RAM」与「更低电流」是矛盾的); ③ 调试器连接会破坏低功耗(调试器一连上,芯片被强制留在活动态,测到的电流完全不是真实值)。 这三项都会直接影响你的功耗预算能不能兑现,详见第 16 章。

3.3 C28x:32 位定点浮点流水与 CLA

C28x 是 TI 自研的 32 位 DSP 内核,不是 Arm 也不是 RISC-V。它的定位非常明确:为实时信号链而生。理解它的三个设计取舍:

  • 修正哈佛结构:程序空间与数据空间在物理上分立,通过页寄存器切换。这意味着指令与数据可以并行访问,这是它能在同样时钟下跑出比通用 MCU 更高「每周期有效吞吐」的原因。代价是:指针不能随便跨空间解引用,跨空间的调用要显式处理。
  • 32 位定点为主 + 单精度浮点加速:控制算法里绝大多数工作是定点乘加(电流环、PI、Clarke/Park 变换)。C28x 对定点做了深度优化,同时提供浮点 FPU 与 TMU(三角数学单元) 加速 sin/cos/atan2 —— 因为这三个函数在电机控制里调用频率极高。
  • CLA 作为第二内核:CLA 是一颗独立的 32 位浮点处理器,与 C28x 并行执行。这是 C2000 算力「翻倍」的来源。典型的分工方式:CLA 跑电流环(要求确定性延迟),C28x 跑通信、调度、后台任务(要求吞吐量)。
能力C28x(主核)CLA(控制律加速器)
数据类型32 位定点为主,兼做浮点以 32 位浮点为主,兼做定点
三角函数TMU 加速 sin/cos/atan2 等同样有 TMU
流水线深度较深,取指与执行分离专为控制回路的确定性延迟优化
片上 SRAM 的使用者主栈 + 通信缓冲 + 控制变量与 C28x 共享同一片 SRAM,两者有独立的分配
中断有完整的中断控制器与外设中断有自己的中断入口与优先级
启动有独立的引导与初始化流程需要被显式使能并分配内存,否则不运行
典型分工通信、调度、非实时任务、后台电流环、PWM 更新、实时采样

关于 CLA 有一个非常容易踩的坑:CLA 不是自动启动的。芯片复位后 CLA 处于不运行状态, 必须由 C28x 侧的初始化代码显式配置(分配它的内存、设置它的向量、使能它的时钟),CLA 才会开始执行第一条指令。 C2000Ware 的 device_init() 里包含了这一步,但如果你自己写启动代码或者裁剪了初始化流程,CLA 就「不响应中断」。 这个现象的表现是「控制回路完全没有输出」,但 C28x 侧的通信一切正常。

3.4 Arm:Cortex-A9 / M4 / M33

Sitara 与 CC 系列都用 Arm 内核,但三者的定位完全不同,混着理解会得出错误的性能预期:

内核用在哪定位关键差异
Cortex-A9Sitara AM62x / AM64x 的应用核应用处理器:跑操作系统、有 MMU、有缓存层级带 MMU、指令/数据缓存、可多核 SMP;跑 Linux
Cortex-R5FSitara AM64x / AM243x 的实时核实时处理器:跑 RTOS/裸机、强确定性带 TCM(紧耦合存储器) 与缓存,可做锁步;无 MMU 或精简 MMU
Cortex-M4FCC13xx / CC26xx 的应用核微控制器:单指令集、低功耗、带 FPUThumb-2 指令集 + DSP 扩展;NVIC 中断控制器;典型 48 MHz
Cortex-M33TI 新一代 MCU 产品线(如 MSPM33)带 TrustZone 的微控制器架构安全区;比 M4 更强调安全隔离
Cortex-M0CC13xx / CC26xx 的射频控制器最小内核:专做一件事Thumb-2 子集,无 FPU,极低功耗

AM64x 里 Cortex-M4F 被设计成「功能安全监控器」,官方明确说明它有「freedom from interference」的独立性 —— 可以跑安全相关任务而不被实时核干扰。这一点在做功能安全设计时非常关键:它不是「顺便带的」一颗小核,而是安全架构的一部分, 配套的专用外设(I2C / SPI / UART / GPIO)也可以被隔离出来单独使用。

3.5 地址空间与内存映射差异

这是移植时最容易出致命问题的地方。四种模型,四套完全不同的假设:

MSP430C2000 C28xArm Cortex-MArm Cortex-A/R
地址宽度16 位16 位数据总线 + 分立程序空间(按页扩展)32 位32 位
模型统一编址(FRAM + RAM 同空间)修正哈佛:程序与数据分立统一编址统一编址 + MMU
指针宽度16 位16 位数据指针(程序空间另算)32 位32 位
栈的增长方向向低地址增长向高地址增长向低地址增长向低地址增长
字节序小端小端(16 位字长,注意字的排列)小端小端
是否有 MMU无无可选 MPU(无虚拟内存)有 MMU(虚拟地址)
DMA 能访问整个统一空间受通道配置限制整个地址空间受缓存一致性约束
移植踩坑点指针类型要改小;栈方向反了栈方向不同;跨空间指针要显式转换栈方向与 MSP430 相同,改动最小MMU 与缓存一致性需专门处理
栈增长方向是移植里最隐蔽的杀手

MSP430 与 Arm Cortex-M 的栈向低地址增长,C28x 向高地址增长。 如果你把一段 C 代码从 Cortex-M 抄到 C28x,而这段代码里有任何手工指针算术 (比如 buf + len 之后与某个栈上变量比较、或者自己算栈空间大小),方向反了不会报错,只会静默写坏内存。
更隐蔽的情况:链接脚本里写栈段位置时用了绝对地址假设、或者把一个「在 Cortex-M 上碰巧能工作」的指针转成整型数再还原的做法。
规则:凡是涉及指针算术、结构体映射、寄存器绝对地址的代码,一律逐行重写,不要复制。

3.6 架构差异带来的移植影响

把上面这些汇总成一张「改动清单」,可以拿它对照评估一个移植项目的工作量:

要改的东西MSP430 ← STM32C2000 ← STM32CC26xx ← STM32
指针类型全部指针从 32 位改成 16 位改成 16 位并处理跨空间无改动
寄存器映射头文件全部重写(基址与位定义全不同)全部重写可用 CMSIS 风格,但基址不同
中断服务函数重写(向量表结构完全不同)重写(PIE + 96 向量)可用 CMSIS 风格,但命名与分组仍需核对
启动代码 / 链接脚本全部重写全部重写(多核启动)改链接配置即可
RTOS 移植层重写 port 层重写 port 层多数 RTOS 已有现成移植
外设驱动全部重写全部重写可参考 CMSIS,但寄存器不同
业务逻辑 / 算法可复用可复用(注意整数宽度假设)可复用
工作量估计大最大最小

三个实用结论:

  • CC26xx 是最容易迁的 —— Cortex-M4F + NVIC + 常规外设,基本就是「换个头文件」。如果你手上是一个 Cortex-M 项目想上 TI,CC 系列是阻力最小的落点。
  • MSP430 的迁移成本被低估 —— 它是 16 位,所有指针、所有地址计算、所有结构体在内存里的布局都要重新审视。特别是「把结构体指针强转成整数」这类写法,会因为指针宽度变化而静默出错。
  • C2000 的迁移本质是「重写」 —— 但如果目标本来就是电机控制,那 C2000 的 SDK 与算法库能省掉大量算法工作,实际净收益可能是正的。关键在于判断你的代码里「控制部分」有多少。
取指与执行通路 —— 四系列最本质的架构差异「内存统一还是分离」决定了你的指针能指向哪,也决定了 DMA 要挂在哪条总线上MSP43016 位单总线 · 冯·诺依曼· 统一 16 位地址空间· FRAM 与 RAM 同址· 同一根取指/访存总线· 16 位字长,无 MMUC2000 C28x修正哈佛 · 数据与程序分立· 16 位数据总线 / 程序空间· 按页切换寻址空间· 指令与数据走不同总线· 并行取指的流水结构C2000 CLA独立的第二执行核· 与 C28x 并行运行· 共享同一片 SRAM· 各自的中断入口· 分担控制律与主循环Arm Cortex冯·诺依曼 + 写数据缓冲· 32 位地址 / 数据· 统一编址 + MPU 可选· 指令缓存 + 数据缓存· MMU / MPU 虚拟或保护架构差异的三个可观测后果指针的可达范围MSP430 的指针可以指向任何 FRAM 或 RAM 地址C2000 / Arm 的指针受各自数据空间限制DMA 挂在哪条总线统一空间的 MCU:DMA 与 CPU 抢同一总线分立空间的 MCU:DMA 走自己的通道能否自举修改固件FRAM 写起来像 RAM:改代码容易Flash 需先擦除:OTA 麻烦得多
图 4 · 四系列 CPU 的取指与执行通路对比及其可观测后果
架构 → 编译器 → 指令模型 → RTOS → 调试:一条链推到底选内核的真正代价不在这张表的最后一行,而在中间四行应用层你的固件裸机 / RTOS / LinuxRTOS 层TI-RTOS(FreeRTOS 系)· Linux · RTOS四系列都有对应选项SDK 层MSP430Ware · C2000Ware · MCU+ SDK · SimpleLink SDK各自独立,不可互换驱动层DriverLib / HAL / 位域字段定义寄存器之上的薄封装指令模型层RISC-V-free 16 位 · C28x 定点浮点 · Thumb-2寄存器宽度与调用约定内核层MSP430 16 位 · C28x/CLA · Cortex-M4F / R5F / A53决定地址空间与中断模型移植成本集中在「指令模型层」与「中断模型层」这两行:前者决定代码能否编译,后者决定中断服务函数要不要重写。地址空间与外设寄存器则是「必须逐个重查 TRM」的部分,没有捷径。
图 5 · 从内核到应用软件的六层映射:移植成本集中在哪两层

4 · 开发环境:CCS 与 SysConfig

四个系列共用一套 IDE。这一章讲清 CCS v20 现在的样子、SysConfig 到底做了什么,以及安装阶段最容易坏在哪里。

4.1 Code Composer Studio v20(Theia 版)

从 CCS 20 开始,TI 把 IDE 从 Eclipse 迁到了 Theia IDE 框架(与 VS Code 同源),操作习惯与 Eclipse 版有明显差异。这一点对老用户尤其重要:网上大量教程是 Eclipse 版 CCS 的截图与操作步骤,直接照做会找不到菜单。

项目当前状态对开发的影响
主版本CCS v20 系列,基于改造过的 Theia-IDE 框架界面与 VS Code 类似;扩展机制也换成了 Theia 的模型
操作系统要求不再支持 32 位 Windows老工控机 / 虚拟机里跑 32 位系统的需要换环境
探针支持不再支持 XDS510 类探针手上有老 XDS510 的需要换 XDS110 / XDS200,见 7.1 节
Energia从 CCS 20 起不再支持Arduino 风格的项目要与 CCS 分开安装与维护
安装包体积官方提供 Windows / Linux / macOS 的单文件离线安装包(全功能全器件,1 GB 量级)内网环境可以下离线包;在线安装器只装选中的组件
云端版CCStudio 云版可在浏览器里用(按需付费)适合快速验证,不适合长期项目
授权自 CCS 7 起全部版本免费(含商业用途)不再需要 license 文件

CCS 里几个值得知道的视图:

  • SysConfig 面板:工程里带 .syscfg 时自动出现,改配置后会自动触发生成(见 6.2 节)。
  • Graph 视图:CCS 内置的数据绘图工具,支持实时刷新曲线、FFT、直方图。调试 C2000 的控制量时它比 printf 有用得多(见 8.4 节)。
  • Memory Browser / Registers 视图:直接看内存与寄存器,MSP430 上尤其好用(因为 FRAM 就是内存,你能直接看到「改一个字」的效果)。
  • Scripting Console:CCS 20 之后增强了脚本控制台,可以用 JS/MJS 操作工程、构建与调试,适合写自动化脚本。
版本记录要跟着归档

CCS 与 SDK 都是强版本相关的东西:换一版 SDK 可能编译不过、寄存器定义可能变、生成的文件名可能改。 建议在工程里放一个 README 或版本清单,写清楚「CCS 版本 + SDK 版本 + 编译器版本 + SysConfig 版本」四元组, 并随固件版本一起归档。
另一个实用做法:把 SDK 与 CCS 的安装包也归档到内网。TI 的下载入口会变,但只要有安装包就能离线重装。

4.2 SysConfig:把配置变成可版本管理的代码

SysConfig 是 TI 现在统一推荐的配置方式,理解它的机制比记住每个字段更重要 —— 因为字段会随版本变,机制不会。

  1. 你编辑的是一个文本文件 .syscfg:里面是「哪个外设的哪一路接到哪个引脚」「时钟源与分频」这类声明,不是二进制、也不是 GUI 状态。
  2. 构建时 SysConfig 读它并生成 C 代码:不同系列生成的文件不同(见下表),但性质一样 —— 它们是产物。
  3. 你的主程序调用生成的初始化函数:通常是一个总入口函数,调用它即可完成时钟、引脚、外设的初始化。
  4. 改配置的正确流程:改 .syscfg(或在 CCS 的 SysConfig 面板里改,它写回 .syscfg),不要改生成的 .c/.h。
系列SysConfig 生成的文件你调用什么板级文件在哪
MSP430ti_msp_dl_config.c / .hSYSCFG_DL_init()(DL = DriverLib)SysConfig 里的 Board 配置项;也可手写
C2000board.c / board.h 及 driverlib/ 下的 GPIO 等文件Device_Init()(SysCtl_init() 等)SysConfig.settings 里指定 Board 与外设实例
CC13xx / CC26xxti_boards_config.c / .h、ti_drivers_config.c / .hSYSCFG_DL_init(),以及 SCE 的 scifStart 流程ti_drivers_config 由 SysConfig 生成;SCE 代码由 Sensor Controller Studio 生成
Sitara.syscfg 驱动子系统配置(时钟、pinmux、外设实例)按 SDK 模板调用(MCU+ SDK / Processor SDK 的示例工程带 .syscfg)由 SDK 的板级配置文件指定
SysConfig 最大的坑:生成的文件会被覆盖

新手最常见的损失是:打开 ti_msp_dl_config.c 看到一堆初始化代码, 直接在里面加了自己的两行代码,编译通过、调试通过,然后某天改了 SysConfig 配置后那两行代码无声消失。
正确做法:所有「我自己的逻辑」写在 SysConfig 生成的文件之外。 需要自定义的初始化,写成自己的函数,在 main() 里于 SYSCFG_DL_init() 之后调用。
另外一条经验:把 .syscfg 当成源码来评审 —— 它能进 Git、能 diff、能 code review,比「在 GUI 里点出来的配置」可靠得多。

什么时候可以不用 SysConfig

完全可以不用。TI 的 DriverLib / HAL 本身就是普通的 C 函数库,手写调用是完全合法且常见的做法。 SysConfig 的价值在于把「配置」从「隐含在代码里」变成「显式的、可评审的声明」。
适合手写的场景:① 你的工程已经有成熟的寄存器配置代码;② 你在做教学 / 验证某个外设的裸用法;③ 你的配置需要动态计算(SysConfig 是静态的)。

4.3 各系列 SDK 与它们的关系

SDK 是「除了 IDE 之外你还要装的东西」。四个系列的 SDK 互不通用,各自需要单独勾选安装。它们的定位与内容:

SDK覆盖器件提供什么选它的时候注意
MSP430Ware全部 MSP430DriverLib(DL)、SysConfig 支持、启动文件与链接命令文件、大量例程、MSP430 的片上自测(OST / FRAM BSL 工具)版本要与 SysConfig 版本匹配;老例程可能依赖老版本的 API
C2000Ware全部 C2000DriverLib、位域字段(bitfield)定义、启动代码(boot_*.c 系列)、链接命令文件、Board 文件、外设自测(Self-Test)库三个 C2000 SDK 必须版本对应:C2000Ware / MotorControlWare / DigitalPowerWare
C2000Ware MotorControlWareF28xxx在 C2000Ware 之上叠控制算法库、实时控制库、InstaSPIN 系列、数字电源库、以及 M0 侧支持只装电机/电源相关的功能也可以,但底层仍需 C2000Ware
SimpleLink CC13x2/26x2 SDKCC13xx / CC26xx协议栈(BLE / 15.4 / Thread / Zigbee 等)、TI-RTOS、Sensor Controller Studio 生成的 SCE 代码、CCFG 工具、OAD 升级协议栈版本决定可用协议;SCE 代码要单独生成并与主核一起链接
MCU+ SDKAM243x / AM26x / AM64x 的 MCU 侧RTOS 与裸机例程、驱动、pinmux、SysConfig 集成与 Processor SDK Linux 是配对的;要查 Software Build Sheet 确认支持的版本
Processor SDK LinuxAM62x / AM64x 的 A53 侧Yocto/BSP、Linux 内核(长期支持版本)、每年更新一次、启动链(SPL / MLOS)只适合跑 Linux 的 A53 侧;启动链比 MCU 侧复杂得多

关于 C2000 的「三个 SDK 必须版本对应」,展开说:DriverLib 与位域字段定义只在 C2000Ware 里, MotorControlWare 与 DigitalPowerWare 依赖它。如果你在 MotorControlWare 里引用了新版才有的 DriverLib 函数, 而编译时链接到的是旧版 C2000Ware,就会出现「头文件有声明、链接时找不到符号」。
反查办法:TI 在 Edge AI Studio 与 C2000 SDK 的 release notes 里会给出一张「SDK / Compiler 版本 ↔ 支持器件」的对照表, 动手前先查这张表,比在论坛里问有效得多。

4.4 安装步骤与目录规划

安装本身不复杂,但目录规划值得花两分钟想一想:

  1. 装 CCS:从 ti.com/tool/download/CCSTUDIO 下离线单文件安装包。安装路径建议纯英文、无空格(虽然 Theia 版对路径的要求比以前宽松,但中文路径在部分工具链的脚本里仍可能出问题)。
  2. 在安装器里勾选你要的 SDK:这一步决定 CCS 认识哪些器件。四个系列的 SDK 可以只勾你需要的 —— 全勾会显著增加安装时间与磁盘占用。
  3. 装 SysConfig:建议装独立版并在工程中指定它,这样它可以脱离 CCS 单独跑(命令行构建时很有用,见 6.6 节)。
  4. 装仿真器驱动:XDS 与 MSP-FET 的驱动由 CCS 安装器一并装上;UniFlash 单独安装。
  5. 装额外的命令行工具:SmartRF Studio(CC 系列射频配置)、Sensor Controller Studio(SCE 代码生成)、以及各系列的 Flash 编程工具。
  6. 做一次「空工程」验证:新建一个最简单的工程,编译通过、下载成功、断点停在 main()。这一步做完再开始做正式项目,否则出问题时分不清是环境还是代码。
磁盘与索引

CCS 的 Theia 版比 Eclipse 版更吃索引:大型 SDK 装完后第一次打开工程会有明显的「索引中」阶段。 两个实用建议:① 把工程放在本地 SSD 的短路径下,不要放网络盘或 OneDrive 同步目录(文件被同步工具锁住会导致索引失败); ② 不要把 SDK 目录交给杀毒软件实时扫描,会明显拖慢构建与索引。 如果索引反复出问题,删掉工程的 .metadata 与索引目录重建通常能解决。

4.5 组件配置与工程创建

CCS v20 里创建工程的方式有两条,选择合适的能省很多事:

方式怎么做适合谁注意事项
导入 SDK 例程File → Import → Code Composer Studio → CCS Projects,选 SDK 目录下的例程第一次做这个系列的人(强烈推荐)例程自带 Board 配置与 pinmux,跑通后再改;改坏了可以随时重新导入
新建空工程File → New → CCS Project,选器件与模板已经熟悉这个系列、想从头搭架构的人要自己处理链接命令文件、启动代码与 Board 定义
导入 SDK 资源(Resource Explorer)View → Resource Explorer,按「板子 + 用例」浏览并直接导入找特定功能的例程最快的方式Resource Explorer 需要联网;内网环境建议提前把例程包下全

建工程时几个值得确认的选项:

  • 器件型号要与实物一致:TI 的同系列产品型号极多(如 C2000 的 F28379D / F28379S / F28379E),选错型号会导致固件引脚定义与硬件完全不符,现象是「下载成功但没有任何反应」。
  • 编译器的选择:C2000 用 TI 自己的 C28x 编译器(对应 C28-CLA Compiler 版本);Arm 核用 TI Arm Clang 或 GCC;MSP430 用 TI 的 MSP430 编译器。不要随意换编译器,SDK 里的部分代码依赖编译器特有行为。
  • 输出格式:除了 .out(含调试信息,用于烧录与调试),如果你要用 BSL / 外设引导烧录,需要额外生成对应格式的镜像文件(见 7.6、7.7 节)。
  • 是否生成 SysConfig 工程:新建工程时选带 SysConfig 的模板,以后再想加回来需要手工补不少东西。

4.6 常见安装故障

把安装阶段最常遇到的五个问题按「现象 → 原因 → 处置」列出。这一节的价值在于:这几种情况占了安装失败的大多数。

现象原因处置
CCS v20 安装器直接拒绝安装操作系统是 32 位 WindowsCCS v20 已不支持 32 位 Windows。换 64 位系统,或用旧版本号 CCS
安装到一半失败 / 回滚路径含中文或空格;权限不足;杀软或企业策略拦截装到纯英文短路径(如 D:/ti/ccs);整个目录加杀软白名单;用管理员权限重跑
装完了但工程向导里找不到目标器件安装时没勾选对应的 SDK重跑安装器并勾选该系列 SDK。四个系列的 SDK 互不通用,必须分别勾选
编译报找不到头文件 / 找不到库SDK 装到了别的实例;或 include 路径没指对确认 SDK 实际安装位置;在工程属性的 include path 里核对
索引一直失败或构建极慢工程放在网络盘 / 同步目录;杀软实时扫描工程放本地 SSD 的短路径;把 CCS 与 SDK 目录加白名单;必要时删 .metadata 重建索引
安装完成后立刻做这一次验证

装完之后不要直接开始做正式项目。先花五分钟做一次最小验证:导入一个官方例程 → 原样编译 → 下载 → 断点停在 main()。
这一步能把「环境问题」与「代码问题」彻底分开。它通过之后再开始写代码,之后遇到任何问题都默认是代码或硬件问题 —— 这个区分能省掉大量无谓的排查。

CCS v20 · SysConfig · 各系列 SDK:谁生成什么、谁覆盖什么搞清这张图,就搞清了「我改了配置为什么没生效」和「我改了代码为什么被冲掉」Code Composer Studio v20(基于 Theia IDE 框架)工程管理 · 编译构建(gmake)· 调试会话(JTAG / SWD)· Graph 视图 · 内存与寄存器视图SysConfig(独立工具,同时可从 CCS 内启动)输入:.syscfg 文本元数据(可进 Git,能 diff,能 code review)输出(每次构建被重新生成,不要手改):MSP430ti_msp_dl_config.c / .hC2000board.c / board.hCC26xxti_boards_config.c / .hSitarasyscfg 驱动子系统配置平台 SDK(安装时选装,四者互不通用)MSP430WareDriverLib · 例程C2000WareDriverLib · 位域MotorControlWare控制算法库SimpleLink SDK协议栈 · SCEMCU+ / ProcessorSitara 的 BSP两个必守规则① SysConfig 生成的文件每次构建都会被覆盖,任何手改都会丢失 —— 要改就去改 .syscfg。② CCS 不支持 32 位 Windows,也不再支持 XDS510 类探针;选探针前先看第 7.1 节。③ 四系列 SDK 互不通用,安装时按需勾选即可,不必全装。
图 6 · CCS v20、SysConfig 与各系列 SDK 的三层关系与生成物

5 · 第一个工程:从新建到点亮 LED

这一章的目标很具体:用最短路径让一个 LED 闪起来。三个系列各给一条,每条都以「跑通官方例程 → 改成自己的」为路径。

5.1 三条路径的最小工程概览

先说清为什么强烈建议从例程改而不是从空白开始:

从空白开始的风险后果从例程改的优势
链接命令文件里的 MEMORY 配置写错链接过了但运行到取 RAM 数据就死,或者根本链接不过例程的 MEMORY 配置是官方核对过的
启动代码缺了关键步骤现象极难查:能下载、能进调试、单步能走,但一跑就飞例程的 copy_in / 初始化顺序是完整正确的
引脚复用(pinmux)没配GPIO 没反应,或者配成了别的功能例程自带 Board 配置
时钟没配就访问外设外设「不响应」,读回值全是 0例程的时钟初始化是完整的
中断向量表没接对进不了中断例程的中断表是完整的

三条路径的共同步骤是:

  1. 确认硬件:目标板(LaunchPad / controlCARD / 自制板)与调试器都到位,且调试器接的是正确的口(C2000 controlCARD 有两个口:JTAG 与 USB 虚拟串口,别插错)。
  2. 导入例程并原样编译:不改一行代码,先确认工具链完整。这一步失败说明是环境问题,不是代码问题。
  3. 原样下载并验证现象:看到例程预期的输出(LED 闪烁 / 串口打印 / GPIO 翻转)。
  4. 再做最小改动:只改一个地方(比如换一个 GPIO),重新编译下载验证。
  5. 然后才逐块替换成自己的模块。
三个系列的最小工程路径:从空白到 LED 亮起三条路都要经过「建工程 → 配置 → 编译 → 下载 → 验证」五步,但每步用的工具不同① 建工程② 配置③ 编译④ 下载⑤ 验证MSP430最小工程导入 blink 例程或新建空工程SysConfig 配时钟与引脚gmake 编译产出 .out板载调试器或 MSP-FET断点停在 main()LED 闪烁C2000最小工程导入 gpio 例程board 文件已配改 board.c引脚定义gmake 编译产出 .outXDS110 / XDS200接 JTAG 口断点停在 main()GPIO 翻转CC26xx最小工程导入 empty 例程或新建工程SysConfig 配引脚与外设gmake 编译先编 SCE 侧板载 XDS110或外接探针断点停在 main()GPIO 翻转最省事的起步方式:不要从空白工程开始,直接跑官方例程。MSP430 从 MSP430Ware 的 blink 例程起步、C2000 从 C2000Ware 的 gpio 例程起步、CC26xx 从 SDK 的 empty 例程起步。跑通后再往里加自己的模块。
图 7 · MSP430 / C2000 / CC26xx 三条最小工程路径对比

5.2 MSP430 路径:LaunchPad + CCS

MSP430 的入门资料极其丰富(MSP430Ware 里有大量 blink 例程),这条路径最不容易卡住。

  1. 装 MSP430Ware(在 CCS 安装器里勾选),装完重开 CCS。
  2. 导入例程:File → Import → CCS Projects,选 MSP430Ware 里对应芯片系列的 blinky / empty 例程。芯片系列名与目录名对应关系:FR59xx、FR60x、G2xx3、L2xx3 等。
  3. 确认器件型号与 LaunchPad 对应:MSP430 LaunchPad 型号(如 MSP-EXP430FR5994)自带 板载调试器,多数情况下不需要外接探针,插 USB 就能调试。
  4. 编译:Project → Build Project。产出 Debug/<工程名>.out。
  5. 下载与调试:点 Debug 按钮,CCS 会自动连接板载调试器、加载符号、停在 main()。
  6. 验证:Run(F8 / Resume),LED 应该按例程设定的频率闪烁。
MSP430 的 printf 怎么输出

MSP430 例程常用两种输出方式,新手常常不知道该看哪个:
① 串口:例程里通常有一个 UART 回显(把 LaunchPad 上的 RXD/TXD 接到 PC 的 USB 转串口),波特率按例程代码里的设置。
② CCS 调试器的终端:这是 MSP430 的特色 —— 部分例程用 putchar 把字符写到一个特殊的内存地址, CCS 会把它显示在调试会话的「Console」或「Terminal」窗口里,不需要任何硬件连线。
用哪种都行,但如果你要做低功耗测试,必须断开串口且理解第 2 种方式对功耗的影响 —— 调试器连着的时候芯片被强制留在活动态,测出来的功耗没有参考价值。

MSP430 侧的最小代码(示意结构,具体 API 名以所用 DriverLib 版本为准):

/* 时钟与 GPIO 由 SysConfig 或 DriverLib 初始化完成后,进入主循环 */
#include "ti_msp_dl_config.h"

int main(void)
{
    SYSCFG_DL_init();      /* 关键一步:SysConfig 生成的初始化总入口 */

    while (1)
    {
        /* 翻转 LED 对应引脚,具体宏名以 SysConfig 里配置的引脚名为准 */
        DL_GPIO_togglePins(GPIO_LEDS, GPIO_LEDS_USER_LED_1_PIN);

        /* 简单的软件延时。用定时器更好,这里为了最小化依赖先这样写。
           注意:这个延时的精度依赖主频,改了时钟就要跟着改。 */
        delay_cycles(CLOCK_FREQ / 2);   /* 约 0.5 秒,具体见 6.7 节关于预算的讨论 */
    }
}

5.3 C2000 路径:controlCARD + C2000Ware 例程

C2000 的起步比 MSP430 复杂一档,主要复杂在初始化流程与多核,但只要用好官方例程反而更稳(因为 C2000Ware 的例程质量非常高,而且带自检)。

  1. 装 C2000Ware(以及你要用的 MotorControlWare / DigitalPowerWare),装完重开 CCS。
  2. 确认 controlCARD 的拨码开关:这是 C2000 特有的步骤 —— controlCARD 背面有 SW1 / SW2 / SW3 一组拨码开关与跳线,它们决定目标芯片的启动模式(Flash / RAM / 仿真调试)与时钟源选择。装反了的现象是「能识别到芯片但下载失败」或「下载成功但跑的是 RAM 里的东西」。具体设置查该 controlCARD 的用户手册。
  3. 导入例程:C2000Ware 里 driverlib/ 目录下按外设分了很多 *_ex 例程(如 gpio_ex_、epwm_ex_、adc_ex_),选 gpio_ex_ 最简单。
  4. 编译:C2000 工程的编译产物是 Debug/<工程名>.out,同时会生成 .hex 与 map 文件。
  5. 下载:用 XDS110 或 XDS200 接 controlCARD 的 JTAG 口。注意用 JTAG 口,不是 USB 口(controlCARD 的 USB 是虚拟串口与 XDS110 的 USB 通道,用它只能串口烧录不能 JTAG 调试)。
  6. 验证:导入的例程会让某个 GPIO 翻转,用示波器或逻辑分析仪看,或者把引脚接到 LED。
  7. 加一步:跑自检。C2000Ware 提供 Device Self-Test,能在上电时检查 RAM、Flash、ADC、CLA、TMU 等模块是否正常。把这个加进你的第一个工程,是排除「硅片本身有问题」最有效的手段。
C2000 的两个「第一次」现象

① 下载慢或第一次下载失败:C2000 的 Flash 编程要经过 RAM 里的 Flash Kernel(要先下载 kernel 再由它写 Flash), 所以一次烧录会传输两次数据,比 MSP430 慢。这正常。
② CLA 不响应:如果你自己写了 main() 而不是用例程的初始化流程,CLA 可能没被使能。 现象是「C28x 侧一切正常,但控制回路无输出」。永远确认 Device_Init() 走完了。

C2000 最小主循环的骨架(结构示意,具体函数名以所用 SDK 版本为准):

#include "board.h"          /* SysConfig 生成的 Board 定义 */
#include "driverlib.h"

int main(void)
{
    Device_Init();          /* 唯一且必须的初始化入口:时钟、GPIO、CLA、RAM 初始化全在里面 */

    SysCtl_delay(100);      /* 给外设留一点稳定时间,具体数值查本系列的 AC 指标 */

    /* 之后才是你的业务代码。注意别把耗时逻辑放进需要确定周期的位置 */
    for (;;)
    {
        GPIO_togglePin(GPIO_PIN_??);   /* 换成 board.h 里你的引脚宏 */
        SysCtl_delay(1000);
    }
}
不要跳过 Device_Init()

C2000 的 Device_Init() 里做了很多「不做就会死」的事: 配置 SYSPLL 与时钟门控、初始化 RAM(C2000 的很多器件需要显式初始化 RAM 才能用)、使能 CLA、配置中断向量表基址。
跳过它的典型现象是「程序跑飞、PC 落在无效地址、调试器显示的调用栈是乱码」。 调试初期遇到跑飞,第一件事是确认这个函数被调用了。

5.4 CC26xx 路径:LaunchPad + SDK 例程

CC26xx 的 LaunchPad 体验是四个系列里最好的之一:板载 XDS110 + 板载天线 + 板载传感器 + 按钮直接连调试器,插一根 USB 线就完事。

  1. 装 SimpleLink SDK(CC13x2/26x2 SDK)与 Sensor Controller Studio。
  2. 确认 LaunchPad 的拨码 / 跳线:与 C2000 类似,LaunchPad 上也有拨码开关,决定是否用板载 XDS110 与目标电压档位。CC 系列 LaunchPad 上通常有「XDS110 选择」与「3V3 / 5V 供电」相关的跳线。
  3. 导入例程:SDK 里 examples/rtos/<板子名>/ 目录下有大量例程。最简单的起点是 empty(空工程)或 pinstandby(引脚待机测试)。建议先跑 empty 确认工具链,再跑一个协议栈例程(如 ble5stack 下的例程)。
  4. 编译:注意 如果你用了 SCE(传感器控制器),必须先在 Sensor Controller Studio 里生成并编译 SCE 侧代码,否则主工程链接会缺符号。TI 的做法是主工程的 pre-build 步骤里调用 SCE 的构建脚本。
  5. 下载:CCS 里点 Debug,板载 XDS110 自动被识别。不需要外接探针。
  6. 验证:CC26xx 的 LaunchPad 上有个特别的坑 —— 很多例程上电就进低功耗(这是它的正常行为),所以 LED 可能不亮、调试器看起来「连上了但跑不动」。
CC26xx:调试器一连上就不是低功耗了

这是 CC 系列调试时最反直觉的一点:当你用 XDS110 连着调试时,芯片会被保持在活动态, 低功耗代码路径根本没被执行到。所以「调试时看不到预期的低功耗行为」往往是正常的。
验证低功耗必须用 EnergyTrace(XDS110 支持,配合 CCS 能看到电流与外设状态),或者干脆断开调试器用外部电源与电流表测。
反过来说:如果你要验证「唤醒后能正确恢复」,调试器连着反而会掩盖问题 —— 调试器干扰了唤醒流程。遇到「单独跑正常、调试时不正常」或反之,优先怀疑这个。

5.5 点不亮时的分层排查

「下载成功但现象不对」是最高频的问题。按下面的分层顺序查,每层只做一件事,不要跳:

层问自己验证手段如果答案是「否」
L1 工具链例程能不能原样编译通过?重新导入一个官方例程,只点编译先修工具链,别碰代码
L2 下载下载过程有没有报错?有没有校验通过?看 CCS 的 Console 与 UniFlash 的日志是连接问题,见第 7 章
L3 启动断点能停在 main() 吗?Debug 后看 PC 停在哪停不到 = 启动链问题,见 6.5 节
L4 初始化初始化函数被调用了吗?跑完了吗?在初始化函数末尾下断点没跑完 = 初始化卡住了
L5 引脚引脚配对吗?电压域对吗?复用对吗?用 SysConfig 视图核对 + 万用表量电平看 9.x 与 A.1
L6 时钟外设的时钟模块开了吗?寄存器视图看时钟使能位看第 11 章
L7 外设外设状态位对吗?寄存器视图读状态寄存器看第 12~14 章
L8 硬件焊接、供电、复位信号都对吗?量供电、量 NRST、量引脚电平看第 17 章与 19 章

最后一条经验:当 L1~L7 全部排除后,不要继续调代码,直接换硬件判断。 用一块确认过能工作的同型号板子(或者官方 LaunchPad)做 A/B 对比,能在十分钟内区分「是代码问题还是板子问题」, 比再读三小时代码有效得多。

相关报告 · 交叉引用 3 器件全部展开收起 ▾
点开类目即可展开:具体文档 / 章节(点章直接跳转到该章)
DDR/LPDDR(DRAM)
电路设计指南4
软件设计规范4
DDR2
章节(点章跳转,共 16 章)
DDR3
章节(点章跳转,共 16 章)
DDR4
章节(点章跳转,共 17 章)
DDR5
章节(点章跳转,共 17 章)
eMMC
电路设计指南
软件设计规范
Linux 驱动开发
样机问题排查
量产问题排查
其他提及器件(共 1)
eMCP/uMCP
电路设计指南2
软件设计规范2