1. DSP开发环境搭建与CCS工程构建
第一次接触TI DSP开发时,我被各种专业术语搞得晕头转向。经过几个项目的实战,终于摸清了从环境搭建到工程构建的门道。CCS(Code Composer Studio)作为TI官方IDE,虽然安装包较大(建议预留8GB以上空间),但一站式解决了编译、调试和烧录所有需求。
安装时有个坑要注意:默认路径不能有中文和空格,我曾在"C:\Program Files"路径下安装导致工程编译异常。推荐直接装在D盘根目录,比如"D:\ti\ccs1230"。装完后记得安装对应芯片的编译器支持包,比如C2000系列需要额外安装"controlSUITE"。
新建工程时,这几个参数最容易出错:
- Device:务必选择实际芯片型号,比如TMS320F28335和TMS320F28379D的寄存器定义完全不同
- Connection:XDS100v3和XDS200仿真器的驱动配置不一样
- Project template:空工程最保险,避免自带例程的配置冲突
工程目录结构建议这样组织:
MyDSPProject/ ├── driverlib/ # 外设驱动库 ├── include/ # 头文件 ├── source/ # 源文件 ├── cmd/ # 内存分配文件 └── main.c # 主程序2. 内存配置与CMD文件详解
第一次看到28335_RAM_lnk.cmd文件时,我完全不明白那些MEMORY和SECTIONS是什么意思。后来发现这其实就是DSP的"房产证",规定了代码和数据住哪个内存区域。
以F28335为例,其内存分为:
- RAM:快速存取但断电丢失,适合调试
- FLASH:永久存储但读写慢,适合量产
- OTP:一次性可编程区域,存放加密密钥
典型的RAM配置CMD文件包含:
MEMORY { PAGE 0: RAMM0 (RWX) : origin = 0x000000, length = 0x000400 PAGE 1: RAMM1 (RW) : origin = 0x000400, length = 0x000400 } SECTIONS { .text : > RAMM0, PAGE = 0 .stack : > RAMM1, PAGE = 1 }切换到FLASH烧录时需要修改:
- 替换为F28335.cmd文件
- 添加MemCopy函数初始化代码
- 在main()首行调用InitFlash()
3. Uniflash官方烧录工具实战
TI的Uniflash就像DSP界的"瑞士军刀",支持全系列芯片烧录。但版本兼容性是个大坑:XDS100v1仿真器只能用Uniflash 3.4.1,而新版只支持XDS100v3及以上。
烧录双核芯片F28379D的特殊操作:
- 先烧录CPU1的.out文件
- 再烧录CPU2的.out文件
- 两个核心的烧录地址不能重叠
实测遇到的典型问题:
- 报错"Failed to initialize target":检查仿真器驱动,重启CCS服务
- 烧录速度慢:在Uniflash设置中关闭校验选项
- 芯片锁死:避免烧录时断电,密码不要设全0
4. C2Prog第三方烧录技巧
当项目现场没有仿真器时,C2Prog的串口烧录就是救命稻草。但Boot引脚配置很关键,F28335需要将GPIO84拉低才能进入串口引导模式。
JTAG烧录比Uniflash快30%的秘诀:
c2prog -d f28335 -o 0x80000 -f program.out参数说明:
-d指定器件型号-o设置烧录偏移地址-f指定输出文件
支持的主流仿真器:
- XDS100系列(性价比首选)
- XDS200系列(支持高速调试)
- XDS560v2(企业级性能)
5. 烧录安全与故障处理
最痛苦的经历是烧坏了一块价值2k的F28379D芯片,总结出这些血泪经验:
防锁死三原则:
- 烧录前确认供电稳定(电压波动<5%)
- 先擦除再编程(避免残留数据干扰)
- 设置非全0密码(建议0x12345678)
常见故障排查:
- 芯片无响应:检查JTAG接线,SCLK频率降至1MHz试试
- 校验失败:可能是Flash寿命到期(通常10万次擦写)
- 程序跑飞:检查CMD文件中的中断向量表地址
双核同步烧录的隐藏技巧:在C2Prog中使用-core参数指定内核编号,配合-sync实现原子化操作。这在电机控制等实时系统中尤为重要。
6. 进阶:自动化烧录脚本
量产时手动操作太耗时,我用Python写了自动化脚本:
import subprocess def flash_program(hex_file): cmd = [ "uniflashcli", "-config", "f28335.ccxml", "-operation", "erase program verify", "-program", hex_file ] subprocess.run(cmd, check=True)这个脚本实现了:
- 自动连接仿真器
- 擦除Flash
- 烧录程序
- 校验数据
配合Jenkins可以实现每日构建自动烧录测试,大幅提升CI/CD效率。