TMS320F28335最小系统板实战解析:从原理图设计到Flash烧写调试
2026/9/10 2:36:11 网站建设 项目流程

简介:面向TMS320F28335嵌入式开发者的完整最小系统硬件与软件参考设计,内容覆盖Altium原理图、PCB、封装库以及配套测试工程。开发板采用四层板双面布局,板框尺寸为八十五乘六十毫米,主控芯片选用TMS320F28335,搭配USB转串口芯片CH340G、复位监控芯片MAX708R、低压差稳压器AMS1117-3.3,由Micro USB接口供电;所有文件均已实际制板并在项目中验证,适合硬件工程师、嵌入式学习者作为产品开发与学习的最小系统蓝本。

压缩包共有一百四十八个文件,整体大小约五点三八兆字节,主要包含C语言源码、头文件、汇编启动代码、库文件、GEL/CMD配置,以及Altium原理图、PCB、封装库与完整的CCS工程文件,可辅助理解DSP最小系统的电源、复位、串口通信等关键模块;目前已有九百一十人学习浏览。拿到后既可在Altium中直接修改电路,也可基于测试工程验证F28335外设功能,减少重复打板与调试排错时间成本,是一份可落地的实用参考。

1. 从一块已经量产的28335板卡说起

手头这块TMS320F28335最小系统板,尺寸只有85x60mm,四层板,双面布局,主控、供电、复位、USB转串口全集成在上面。它不是一版打样回来就吃灰的演示板,而是真正走完制板、贴片、调试、上项目这条流程的成熟设计。对正在做DSP板卡选型或者准备自己画第一块28335的人来说,这类经过实际验证的参考设计,比照着芯片手册从零起步要省掉大量试错成本。

很多刚接触DSP的工程师会拿28335和ARM Cortex-M系列做对比,两者定位完全不同。28335属于C2000实时控制家族,单精度浮点运算、150MHz主频、片上12位ADC,外设资源围绕电机控制、数字电源、电力电子这类场景优化。它的启动流程、代码安全区、Flash烧写机制和外置存储器接口,都有自己的一套逻辑,不能套用MCU的开发习惯。这套资料里不仅有AlTIUM格式的原理图和PCB源文件,还附带了一整套基于TI官方SPRC097库的测试工程,能从原理图一路跟到实际下载运行,正好把硬件设计和底层代码串起来看。适合硬件工程师、嵌入式软件工程师以及电力电子方向的研究生作为参考底板来用。

2. 原理图拆解:电源树、复位监控与启动配置

2.1 电源树设计:3.3V与1.9V双路供电的取舍

F28335对供电有严格要求,内核电压1.9V,I/O电压3.3V,两者必须独立供给,并且上电时序有讲究。这套设计用Micro USB接口引入5V,经过AMS1117-3.3稳压输出3.3V,再经由板上LDO降压到1.9V给VDD内核供电。AMS1117-3.3最大输出电流1A,对28335这种正常工作时总功耗在几百毫瓦级别的芯片来说余量充足。

这种双LDO方案在最小系统板上是常见做法。相比直接用一个DC/DC模块,LDO纹波小、电路简单、成本低,缺点是效率不高,尤其在压差大的时候。对最小系统板而言,稳定性和简洁性比效率更重要。芯片手册上对VDD和VDDIO的纹波要求一般在50mV以内,AMS1117的输出纹波在几十毫伏级别,配合足够容量的去耦电容完全满足要求。

电源部分的关键参数在去耦电容的布局上。每个电源引脚旁边放置0.1μF的陶瓷电容,就近打孔到地,芯片下方Power层保持完整参考平面。板上还有一个磁珠把模拟电源引脚和数字电源隔开,ADC模块的参考电压VREFLO直接从模拟地引出,避免数字开关噪声串入采样通道。

2.2 复位监控与JTAG调试接口

MAX708R是板上复位监控芯片,它同时负责三件事:上电复位、手动复位按钮的消抖、以及电压跌落时自动拉低复位信号。RST引脚直接连接到F28335的XRS引脚,这个引脚是芯片的复位输入,低电平有效。MAX708R的复位阈值是2.93V,当3.3V电源跌落到阈值以下时,它会在约200ms内保持复位输出低电平,防止芯片在欠压状态下跑飞。

复位引脚上还接了一个10kΩ上拉电阻和0.1μF的滤波电容,这是数据手册推荐的典型电路。上拉电阻保证复位信号在常态下被稳定拉高,电容滤除高频毛刺,防止JTAG连接或环境干扰导致误复位。在实际调试中,如果板卡频繁掉线或者程序运行不稳定,优先检查XRS引脚上是否有异常脉冲,这是排查复位问题的第一站。

JTAG接口引出标准的14pin插座,TMS、TCK、TDI、TDO四线加上TRST和EMU0/EMU1。TRST引脚必须下拉到地,否则芯片可能进入JTAG测试模式导致程序无法运行。EMU0和EMU1上拉到3.3V,这是连接XDS100V2或XDS510仿真器时的标准配置。

2.3 启动模式引脚:GPIO84/85/86的拨码逻辑

F28335的启动模式由GPIO84、GPIO85、GPIO86三个引脚的电平状态决定,在复位信号释放时被锁存。这套板上把它们引到了跳线或拨码开关上,方便切换启动方式。最常见的组合如下表所示:

GPIO84GPIO85GPIO86启动模式
111并行I/O启动
110外部存储器接口XINTF启动
101安全RAM启动
100跳转到Flash入口
011加载到RAM后跳转
010从OTP启动
001从外部Flash启动
000从内部Flash启动

调试阶段最常用的组合是把启动模式设为「跳转到Flash入口」的101组合,也就是GPIO84=1、GPIO85=0、GPIO86=1。这样芯片在复位后从片上Flash的0x3F7FF6地址处读取跳转指令,进入用户烧写的程序。如果使用仿真器加载代码到RAM中调试,可以切到「加载到RAM后跳转」的组合,这样绕过Flash烧写过程,缩短调试周期。

提示:更改启动模式引脚后需要重新上电或按下复位键才能生效。部分DSP开发者在调试时发现程序不更新,就是因为启动模式停留在RAM加载状态,复位后仍然执行旧的RAM内容。

CH340G USB转串口芯片的接线比较简单,TXD/RXD交叉连接F28335的SCIRXDA/SCITXDA引脚,板上预留了串口测试点,并用跳线帽控制是否把串口引脚接到DSP上。这套设计在做串口通信验证时非常方便,拔掉跳线帽就把28335的SCI引脚与CH340G隔离,不影响其他外设复用。

3. PCB布局布线:四层板叠层与信号完整性实践

3.1 四层板叠层方案

这块板子采用四层板设计,常见叠层结构是TOP-GND-PWR-BOTTOM。第二层完整铺地,第三层作为电源平面,顶层和底层走信号线。85x60mm的板面积对28335这种176脚LQFP封装的芯片来说布局密度适中,不至于因为板材尺寸太小导致走线困难,也不会因为过大而浪费空间。

叠层的核心价值在于提供完整的回流路径。高频信号的回流电流总是沿着阻抗最小的路径流动,也就是紧邻信号走线下方的参考平面。有了完整的地平面,顶层走线的回流电流可以直接从下方地层返回,环路面积被压缩到最小,对外辐射和接收干扰的能力都会显著降低。电源平面和地平面之间的薄介质层还构成了一个分布式平板电容,能在高频段提供比分立去耦电容更好的电源去耦效果。

3.2 关键走线规则与间距控制

F28335的I/O引脚电平是3.3V,但内部有高速外设总线,外部存储器接口XINTF的时序频率在几十MHz量级。对于这种速率的信号,走线时主要关注的是匹配长度和阻抗连续性,而不是像高速差分信号那样要精确控制100Ω差分阻抗。XINTF的地址线和数据线在布局时尽量保持等长,时钟线要比数据线稍长一些,满足建立时间要求。

晶振电路的处理是一大重点。20MHz无源晶振的两个引脚分别经过电容接地,电容容值按晶振规格书选择,常见做法的负载电容是18~22pF。晶振下方禁止覆铜,避免寄生电容改变振荡频率或影响起振。晶振到XCLKIN引脚的走线要短而直,不要经过过孔,整个布局放在板边远离大电流开关节点。

电源走线宽度按最大负载电流的1A/mm经验值估算。AMS1117的输入输出端走线宽度不低于1mm,USB 5V入口处预留加宽铜皮区域方便灌锡。DSP的每个电源引脚就近放置0.1μF电容,电容的地端通过独立过孔直接落到地层,不要和其他信号过孔共用,这是减少地弹和电源噪声的基本功。

3.3 DRC检查与丝印设计

用AD打开这套PCB文件后,需要重新跑一遍DRC。进入Design>Rules Check,重点关注几个规则:

  • Clearance(间距):默认设6mil即可,电源网络对地间距可以放宽到10mil以上
  • Width(线宽):最小线宽6mil,电源线宽单独设置Minimum为1mm
  • Hole Size(过孔孔径):最小过孔12mil钻孔/24mil外径,低于这个值制板成本会明显上升
  • Silk Over Component(丝印压焊盘):必须关闭,丝印覆盖焊盘会影响贴片和焊接

制板文件输出时还需要确认钻孔文件格式。AD中File>Fabrication Outputs>NC Drill Files,输出格式选择Excellon,单位选择Inches,精度选2:4,这样生成的钻孔文件与Gerber文件单位保持一致,不会出现孔位偏移。

丝印的参考设计值一般是字高0.8mm以上、线宽不低于0.15mm,太小在PCB成品上会模糊不清。板上预留了测试点标注,比如TP1、TP2,方便调试时用示波器探头测量关键信号。板边还要留出定位孔,孔径3.2mm,与板边距离5mm以上,方便后期安装铜柱固定。

4. 测试软件工程源码:启动流程与工程结构剖析

4.1 测试工程的文件组成与启动链路

这套资料里附带的测试软件工程基于TI官方DSP2833x系列外设库,核心启动文件是DSP2833x_CodeStartBranch.asm和DSP2833x_usDelay.asm。前者是芯片复位后执行的第一个代码段,存放在Flash入口地址0x3F7FF6处,内容是一条跳转指令,将程序跳转到_c_int00入口。

.sect "codestart" LB _c_int00

这段代码的作用可以用一句话说明:芯片上电后从Flash入口取出这条跳转指令,跳转到C语言运行时环境的初始化入口_c_int00。_c_int00完成全局变量初始化、栈指针设置、段重定位等C运行时初始化工作后,才调用main函数。如果这块Flash入口被擦除或者写入错误数据,芯片启动后就会跑飞,现象是程序既不执行main函数,JTAG也连不上芯片。

DSP2833x_usDelay.asm实现了一个精确延时函数,内部使用DSP指令周期计数实现微秒级延时,延时精度依赖PLL配置的SYSCLKOUT频率。这个函数在传统控制程序中用得非常多,例如驱动继电器、等待外设稳定、闪烁指示灯等场景。

4.2 中断服务程序与代码安全区

工程的DSP2833x_DefaultIsr.c里预定义了所有可能的ISR(中断服务程序),每个中断源对应一个默认的空函数。DSP2833x_SWPrioritizedDefaultIsr.c则提供了基于软件优先级的默认中断处理框架,用户只需要把自己的处理逻辑填入对应ISR中,而不需要重新编写完整的中断向量表。

DSP2833x_CSMPasswords.asm是代码安全模块(CSM)的口令定义文件。CSM是C2000系列芯片的防读取机制,如果不正确地配置口令并烧写Flash,外部调试器就无法通过JTAG读取芯片内部的程序代码。这个文件里定义了128位口令,全0表示禁用安全保护,全1表示永久锁定芯片。

.sect "csmpasswds" .long 0xFFFFFFFF ; 口令字第1个32位 .long 0xFFFFFFFF ; 口令字第2个32位 .long 0xFFFFFFFF ; 口令字第3个32位 .long 0xFFFFFFFF ; 口令字第4个32位

4.3 ADC校准与RAM复制段的处理

DSP2833x_ADC_cal.asm里存放的是ADC校准时序,这是在TI出厂测试时写入芯片OTP(一次性可编程存储器)的校准参数。每次上电后需要把OTP中的校准值复制到ADC寄存器中,否则ADC的转换结果可能有明显偏差。

调用校准的常见写法如下:

extern void ADC_cal(void); int main(void) { InitSysCtrl(); ADC_cal(); InitAdc(); // 其余初始化代码 }

调试时要把代码段从Flash复制到RAM中运行,最常见的是把ramfuncs段指定到RAM区域。在链接命令文件(.cmd)中做如下配置:

SECTIONS { ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0 }

然后在C源码中通过memcpy函数把这部分代码从Flash搬运到RAM执行:

extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadEnd; extern Uint16 RamfuncsRunStart; memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, &RamfuncsLoadEnd - &RamfuncsLoadStart);

这样配置的原因是28335的Flash读取存在等待周期,而常用控制算法对延时敏感。把频繁调用的函数放到RAM中执行,可以消除Flash访问等待时间,提高实时性。很多做数字电源和电机控制的工程师在优化循环周期时,都会检查哪些函数还留在Flash里。

5. 下载验证与调试陷阱排查

5.1 用CCS连接目标板并烧写Flash

测试程序编译完成后,在CCS中配置目标配置文件(Target Configuration),仿真器选XDS100V2,连接方式选14pin JTAG。连接前先确认板卡供电正常,XRS引脚电压为3.3V,晶振有输出时钟。连接成功后CCS会自动建立与DSP的JTAG链路,加载.out文件即可进行源码级调试。

运行测试程序时需要先确认启动模式已经切到Flash启动。连接CCS后执行Load Program选择编译生成的.out文件,CCS会把代码加载到RAM中运行,此时不写Flash。要固化到Flash需要修改链接命令文件,将代码段分配到Flash区域,或者在CCS的Flash插件中执行烧写操作。

烧写Flash时有一个容易踩的坑:如果程序写入后断电再上电,DSP运行的不是新程序。这种现象最常见的原因是启动模式拨码开关仍然停留在Boot to RAM状态。把GPIO84/85/86切换到Flash启动组合,复位后程序就走Flash运行了。

5.2 JTAG连接失败的排查路径

如果CCS提示JTAG连接失败,系统性的排查顺序如下表:

检查项操作方法判定标准
电源电压示波器测VDDIO和VDD3.3V±5%,1.9V±5%,无跌落
时钟信号示波器测XCLKIN20MHz波形正常
TRST电平万用表测TRST引脚低电平有效
EMU0/EMU1万用表测两个引脚均上拉到3.3V
复位状态手动复位后测XRS高电平恢复
目标板供电断开JTAG,用外部电源给DSP供电排除仿真器供电不足

常见的连接失败场景是把TRST直接悬空,这会导致芯片的JTAG测试访问端口状态不确定,时连时不连。还有一种情况是使用长线连接仿真器和板卡,超过20cm的杜邦线在TCK频率较高时会产生信号反射,降低TCK频率或者换屏蔽线可以解决。

5.3 一个实用技巧:用SCI串口输出调试信息

这套板上CH340G串口模块最大的价值是让调试输出变得简单。相比只能用JTAG看到的内存窗口,串口打印能让你在程序跑到实际工况点的时候看到关键变量的实时变化。一个实用的串口初始化函数写法如下:

void SCI_Init(void) { EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO28 = 1; // SCIRXDA 引脚复用 GpioCtrlRegs.GPAMUX1.bit.GPIO29 = 1; // SCITXDA 引脚复用 EDIS; SciaRegs.SCICCR.all = 0x0007; // 1个停止位, 8位数据, 无校验 SciaRegs.SCICTL1.all = 0x0003; // 使能TX和RX SciaRegs.SCICTL2.all = 0x0003; SciaRegs.SCIHBAUD = 0x0000; // 波特率设置高位 SciaRegs.SCILBAUD = 0x00C2; // 波特率设置低位,50MHz时钟下配置为9600 SciaRegs.SCICTL1.all = 0x0023; // 退出复位状态 }

串口工作不正常时,先用逻辑分析仪抓CH340G的TXD引脚,确认数据波形是否从DSP侧发出。两边波特率参数要严格一致,晶振频率不同会导致SCIHBAUD和SCILBAUD的计算值不同。如果收到乱码但能收到数据,优先检查DSP的SYSCLKOUT实际频率与计算波特率时使用的时钟频率是否一致。

实际项目中这套底板在环境温度-20℃到70℃的工况下持续运行,电源纹波和复位信号表现稳定,参考它可以直接搭建自己的28335控制板。做电源或电机控制方案评估时,先在这个底板上把算法跑通,再针对具体项目重新布局,是效率最高的开发路径。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询