一、前提条件(先确认 3 件事)
在开始之前,你必须确认:
1️⃣ 芯片 :TMS320F28335
2️⃣ CCS :5.5(你说得很明确,OK)
3️⃣ 控制卡/最小系统能正常烧写 Flash
⚠️ 注意:
这个工程 必须以 Flash 方式运行,不能只在 RAM 下跑。
二、创建 CCS 5.5 工程(不要偷懒)
✅ 1️⃣ 新建工程
File → New → CCS Project
配置如下(关键):
| 项目 | 选项 |
|---|---|
| Project name | FlashParam_28335 |
| Target | TMS320F28335 |
| Connection | XDS100 / XDS510(你用哪个选哪个) |
| Project type | Empty Project (with main.c) |
| Compiler | TI v6.x C2000 |
👉 一定选 Empty Project
👉 不要选 Example / Starter
三、导入 TI 官方支持文件(非常关键)
你需要 3 类文件:
① 芯片头文件(DSP2833x)
从 TI ControlSUITE / C2000Ware 拷:
DSP2833x_common/ DSP2833x_headers/
至少要这些:
DSP2833x_GlobalVariableDefs.c DSP2833x_SysCtrl.c DSP2833x_Gpio.c DSP2833x_PieCtrl.c DSP2833x_PieVect.c DSP2833x_DefaultIsr.c
📌 做法:
-
右键工程 → Add Files
-
复制到工程目录(推荐 Copy files)
② Flash API 库(重点)
从 TI 安装目录拷:
Flash28335_API_V210.lib Flash2833x_API_Library.h Flash2833x_API_Config.h
放到:
/FlashAPI/
③ Example 中的两个文件(你刚贴的)
Example_Flash2833x_API.c Example_Flash2833x_API.h
👉 第一阶段建议原样拷进来,先跑通
四、配置 Include 路径(90% 新手死在这)
右键工程 → Properties
Build → C2000 Compiler → Include Options
添加:
${PROJECT_ROOT} ${PROJECT_ROOT}/FlashAPI ${PROJECT_ROOT}/DSP2833x_common/include ${PROJECT_ROOT}/DSP2833x_headers/include
⚠️ 不加这个,Flash2833x_API_Library.h 会报错
五、链接 Flash API 库(极关键)
Build → C2000 Linker → File Search Path
添加:
${PROJECT_ROOT}/FlashAPI/Flash28335_API_V210.lib
六、使用 Flash 版 linker.cmd(不是 RAM 版)
必须用 Flash cmd 文件
从 TI 示例中拷:
DSP28335_FLASH.cmd
⚠️ 不要用 DSP28335_RAM.cmd
关键修改点(必须确认)
在 .cmd 里要有:
Flash28_API: { -lFlash28335_API_V210.lib(.text) -lFlash28335_API_V210.lib(.econst) } LOAD = FLASHD, RUN = RAML0, LOAD_START(_Flash28_API_LoadStart), LOAD_END(_Flash28_API_LoadEnd), RUN_START(_Flash28_API_RunStart), PAGE = 0
以及:
ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0
👉 没有这两段 = Flash API 不能运行
七、确认 main() 启动流程(照 Example)
你的 main() 至少要包含:
InitSysCtrl(); // PLL DINT; // 关中断 InitPieCtrl(); InitPieVectTable(); Example_CsmUnlock(); Example_MemCopy(&Flash28_API_LoadStart, &Flash28_API_LoadEnd, &Flash28_API_RunStart); Example_MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); Flash_CPUScaleFactor = SCALE_FACTOR; Flash_CallbackPtr = NULL; Example_CallFlashAPI();
👉 这一步你 先不要改任何逻辑
八、烧写 & 运行(第一次验证)
操作流程
1️⃣ Build 工程(无 error)
2️⃣ Debug
3️⃣ Load Program 到 Flash
4️⃣ Run
如果一切正确,你会:
-
看到程序停在
ESTOP0 -
Flash 对应 sector 内容发生变化
九、从 Example 过渡到「参数存储工程」
等你确认 Example 能跑通一次,下一步才做这件事:
🔧 精简工程
❌ 删除:
-
ToggleTest
-
各种错误示例写入
-
多余 Verify 测试
✅ 新增:
typedef struct { Uint16 magic; Uint16 version; float threshold; Uint16 crc; } FlashParam;
固定一个 sector:
#define PARAM_FLASH_ADDR 0x338000