TMSF28P650DK9双核dsp芯片CPU1/2烧录
使用TI的F28p650双核dsp芯片,想两个核都用上,cpu1核跑控制,cpu2核跑通讯。刚开始以为和F28377双核芯片一样进行调试就可以了,结果发现使用仿真器调试cpu2核怎么都不行。特此记录下cpu1、cpu2两个核调试时使用仿真器烧录时的配置,以防遗忘,如果错误请帮忙指出修正谢谢。
1:CCS中Flash配置
我的CPU1核程序运行在Flash 的 Bank0,1,2;CPU2核程序运行在Flash 的 Bank3,4。对应设置如下:
CCS菜单栏->View->Target Configurations->选中工程的.ccxml文件->右键->Propertioes
CPU1进行Flash设置


CPU2进行Flash设置


设置好后 就可以使用仿真器在CCS中进行在线调试了。
2:调试说明
2.1:正常调试CPU2核外设时应该是需要在CPU1核里配置对应外设权限给CPU2,然后运行CPU1核再去调试CPU2核。
CPU1中对Flash进行对应设置
MemCfgRegs.GSxMSEL.bit.MSEL_GS0 = 0U;//0:cpu1,1:cpu2
MemCfgRegs.GSxMSEL.bit.MSEL_GS1 = 0U;//0:cpu1,1:cpu2
MemCfgRegs.GSxMSEL.bit.MSEL_GS2 = 0U;//0:cpu1,1:cpu2
MemCfgRegs.GSxMSEL.bit.MSEL_GS3 = 1U;//0:cpu1,1:cpu2
MemCfgRegs.GSxMSEL.bit.MSEL_GS4 = 1U;//0:cpu1,1:cpu2
EDIS;
SysCtl_allocateDxRAM(SYSCTL_D2RAM,SYSCTL_CPUSEL_CPU1);
SysCtl_allocateDxRAM(SYSCTL_D3RAM,SYSCTL_CPUSEL_CPU1);
SysCtl_allocateDxRAM(SYSCTL_D4RAM,SYSCTL_CPUSEL_CPU2);
SysCtl_allocateDxRAM(SYSCTL_D5RAM,SYSCTL_CPUSEL_CPU2);
SysCtl_allocateFlashBank(SYSCTL_FLASH_BANK0,SYSCTL_CPUSEL_CPU1);
SysCtl_allocateFlashBank(SYSCTL_FLASH_BANK1,SYSCTL_CPUSEL_CPU1);
SysCtl_allocateFlashBank(SYSCTL_FLASH_BANK2,SYSCTL_CPUSEL_CPU1);
SysCtl_allocateFlashBank(SYSCTL_FLASH_BANK3,SYSCTL_CPUSEL_CPU2);
SysCtl_allocateFlashBank(SYSCTL_FLASH_BANK4,SYSCTL_CPUSEL_CPU2);
将对应外设权限给CPU2(我这里是使用EtherCat,其他外设对应设置)
SysCtl_selectCPUForPeripheralInstance(SYSCTL_CPUSEL_ECAT, SYSCTL_CPUSEL_CPU2);
2.2:双核启动规则说明
需要在CPU1中显式调用Device_bootCPU2(),我cpu2从Flash Bank3开始运行,所以指定BOOTMODE_BOOT_TO_FLASH_BANK3_SECTOR0。这样设置后,芯片重启上电后能够自动运行CPU1\CPU2的程序,测试发现不加这一句重启上电只能运行CPU1的程序。
Device_bootCPU2(BOOTMODE_BOOT_TO_FLASH_BANK3_SECTOR0);
TMS320F28377 双核启动规则
-
上电复位后:CPU1 自动从 Boot ROM 开始运行,CPU2 被硬件保持在复位状态,完全停止。
-
CPU1 Boot ROM 的自动操作:
完成系统时钟、Flash 初始化后,会自动释放 CPU2 的复位;CPU2 退出复位后,进入自己的 Boot ROM。
TMS320F28P650 双核启动规则
-
上电复位后:和 F28377 一致,CPU1 自动运行,CPU2 保持复位状态。
-
CPU1 Boot ROM 的差异:
不会自动释放 CPU2 复位!必须由 CPU1 的用户应用代码,显式调用Device_bootCPU2()或直接操作复位寄存器,才能让 CPU2 退出复位。F28P650 的 Boot ROM 不会帮你自动启动 CPU2,必须由你的应用代码主动控制。
3:两款双核芯片Flash区别
查询了下F28377和F28P650芯片Flash区别,是下面这么说的。
1. F28377:双独立 Flash 子系统(硬件天然隔离)
F28377D 内置两套完全独立的 Flash 子系统,这是它可以独立烧录、互不干扰的根本原因:
- 物理分离:Flash A(通常 512KB)专属 CPU1,Flash B(通常 512KB)专属 CPU2,各有独立的擦写电路、ECC 校验模块、保护寄存器。
- 权限独立:CPU1 只能操作 Flash A,CPU2 只能操作 Flash B,硬件上就不存在跨核访问的可能,自然不会出现 “烧 CPU2 擦掉 CPU1 程序” 的情况。
- 调试独立:JTAG 可以分别连接两个 CPU 内核,Uniflash/CCS 里选 CPU2 内核,就可以直接擦写 Flash B,完全不需要 CPU1 参与,也碰不到 Flash A。
2. F28P650:单控制器 + 可配置归属的多 Bank(灵活但需配置)
F28P650 的 Flash 是统一架构,5 个 Bank 共享一套控制电路,权限由 CPU1 统一分配,这是你遇到各种烧录问题的根源:
- 物理统一:5 个 Bank(Bank0~Bank4)共用同一个 Flash 控制器、时钟电路和擦写状态机,全局配置(时钟、解锁、保护)只能由 CPU1 操作,CPU2 没有全局配置权限。
- 归属可配:每个 Bank 的读写权限可以通过寄存器分配给 CPU1 或 CPU2,官方默认配置是:Bank0/1/2 归 CPU1,Bank3/4 归 CPU2。
- 烧录依赖:CPU2 要擦写自己的 Bank,必须先满足两个前提:
- CPU1 已经完成 Flash 全局时钟配置和解锁;
- CPU1 已经将对应 Bank 的所有权分配给 CPU2。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)