使用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 双核启动规则

  1. 上电复位后:CPU1 自动从 Boot ROM 开始运行,CPU2 被硬件保持在复位状态,完全停止。

  2. CPU1 Boot ROM 的自动操作:

    完成系统时钟、Flash 初始化后会自动释放 CPU2 的复位;CPU2 退出复位后,进入自己的 Boot ROM。

  TMS320F28P650 双核启动规则

  1. 上电复位后:和 F28377 一致,CPU1 自动运行,CPU2 保持复位状态。

  2. 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,必须先满足两个前提:
    1. CPU1 已经完成 Flash 全局时钟配置和解锁;
    2. CPU1 已经将对应 Bank 的所有权分配给 CPU2。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐