【DSP】【第二篇】了解C6678和创建工程

2022年6月16日

1. TMS320C6678

  • 这里的字母C表示CMOS工艺。
  • C66x系列的核心。C6655 单核,C6657 双核,C6678 八核。
  • 采用KeyStone架构。
  • 4路SRIO。
  • 功耗较大,运行时需要散热片和风扇。

1.1 KeyStone架构

在这里插入图片描述

1.1.1 Memory Subsystem 内存子系统

(1)64位DDR3,EMIF

  • EMIF是External Memory Interface的简称,方便DSP和FPGA之间进行大量数据交换。
  • DDR,表示双倍数据速率SDRAM。
    (2)MSMC,The Multicore Shared Memory Controller
  • MSMC,4MB,MSM,SRAM。
  • 多核共享内存控制器 (MSMC) 管理多核设备中多个 TMS320C66x CorePacs、DMA、其他主控外设和 EMIF 之间的流量(manage traffic)。
  • MSMC 还提供了一个共享的片上 SRAM,可供所有 C66x CorePacs 和设备上的主控外设访问。
  • MSMC 为从系统主机访问 MSMC SRAM 和 DDR3 内存提供内存保护
  • C6678的MSMC负责处理系统中所有的master(包括8个核,以及SMS和SES接口)对MSMC SRAM和DDR3的访问请求。

1.2 BootRom

  • 通过TeraNet总线,可以访问BootRom。
  • 地址范围:0x20B00000-0x20B1FFFF,128KB。
  • DSP使用BootRom,可以支持多种启动过程。
  • ROM Bootloader (RBL) 使用一组参数表来执行引导过程。 BootRom从I2C EEPROM(或者从SPI设备)中读取参数表,每个参数表为0x80字节。
  • 参数表分为通用部分参数和专用部分参数。

1.2.1 启动参数表-通用部分

在这里插入图片描述

1.2.2 启动参数表-专用部分

1.2.2.1 EMIF16启动模式参数表

在这里插入图片描述

1.2.2.2 SRIO启动模式参数表

在这里插入图片描述

1.2.2.3 Ethernet启动模式参数表

在这里插入图片描述

1.2.2.4 PCIe启动模式参数表

在这里插入图片描述

1.2.2.5 I2C启动模式参数表

在这里插入图片描述

1.2.2.5 SPI启动模式参数表

在这里插入图片描述

1.2.2.5 HyperLink启动模式参数表

1.2.3 启动完成寄存器

  • Boot Complete Register。BOOTCOMPLETE 寄存器控制 BOOTCOMPLETE 引脚状态。目的是指示 ROM 引导过程的完成。
  • 寄存器中的Bit0-7,用来指示内核0-7的启动状态是否完成。
  • BootROM 代码将被实现,以便每个内核在跳转到内存中的预定义位置之前立即设置其相应的 BCx 位
    在这里插入图片描述

1.3 信号量Semaphore

  • 该器件包含一个增强的信号量模块,用于管理 DSP C66x CorePacs 的共享资源。
  • 信号量内存地址:0x02640000-026407FF , 2K空间大小。
  • 信号量强制 对共享的芯片级资源进行(核)访问,从而不会破坏读-修改-写序列。
  • 信号量块对每个内核都有唯一的中断,以识别该内核何时获取资源。
  • 模块内的信号量资源不依赖于特定的硬件资源。
  • 信号量模块支持 8 个主机,包含 32 个信号量(在系统内使用的)。
  • 信号量模块只能由特权 ID (privID) 0 到 7 的主设备访问,这意味着只有 CorePac 0 到 7 或 CorePac 0 到 7 发起的 EDMA 事务可以访问信号量模块。

1.4 EDMA

  • 加强版DMA, Enhanced Direct Memory Access (EDMA3) Controller。
  • EDMA3 的主要用途是为设备上两个内存映射从端点之间的用户编程数据传输提供服务。

1.4.1 三个EDMA通道控制器

  • (C6678 DSP)EDMA3CC0, EDMA3CC1, and EDMA3CC2.
1.4.1.1 EDMA3CC0
  • EDMA3CC0通道控制器,有两个传输控制器EDMA3TC1,EDMA3TC2。
1.4.1.1 EDMA3CC1
  • EDMA3CC1通道控制器,有两个传输控制器EDMA3TC0,EDMA3TC1,EDMA3TC2,EDMA3TC3。
1.4.1.1 EDMA3CC2
  • EDMA3CC2通道控制器,有两个传输控制器EDMA3TC0,EDMA3TC1,EDMA3TC2,EDMA3TC3。

1.5 电源管理

  • PowerManagement

1.5.1 电源状态控制寄存器

  • Power State Control Register (PWRSTATECTL) 由软件控制,以指示省电模式。
  • ROM 代码读取该寄存器,以区分各种省电模式。
  • 该寄存器仅由 POR 清除,并且将在所有其他器件复位后继续存在。
    在这里插入图片描述

1.5.2 掉电控制

  • Power-Down Control
  • C66x CorePac 支持关闭 C66x CorePac 各个部分的电源。
  • C66x CorePac 的断电控制器 (PDC) 可用于关闭 L1P、缓存控制硬件、DSP 和整个 C66x CorePac。
  • C6678 目前不支持 L2 内存的掉电模式。
  • 这些断电功能可用于设计系统以降低整体系统功率要求。

1.5.3 电源

  • Power Supplies,
  • 需要注意,如何正确启动 C6678 所需的正确电源排序和时序。
1.5.3.1 有哪些电源

在这里插入图片描述

1.5.3.2 上电顺序
  • Power-Supply Sequencing
  • 该设备有两种可接受的电源顺序。下面是简略介绍,待后续详细分析。

(1)第一个序列规定,核心电压开始 在 IO 电压之前,如下所示:

1. CVDD 
2. CVDD1, VDDT1-2
3. DVDD18, AVDD1, AVDD2
4. DVDD15, VDDR1-4

(2)第二个序列提供与其他 TI 处理器的兼容性,其 IO 电压在内核电压之前开始,如下所示:

1. DVDD18, AVDD1, AVDD2
2. CVDD 
3. CVDD1, VDDT1-2
4. DVDD15, VDDR1-4

1.6 锁相环

  • 三个片上锁相环,PLL
  • PLL 默认设置由 BOOTMODE[12:10] 位决定。

2. GPIO

  • 硬件初始化,未配置时,GPIO工作于主频的6分频。
  • 管脚复用配置(有复用则进行该操作)。
  • 配置GPIO端口为输出
  • 配置GPIO端口输出高电平

2.1 GPIO外设

  • 通用输入输出端口。
  • 外设时钟(CPU/6)。引脚具体的工作频率比这个慢,CPU控制和EDMA控制 经过的总线路径是不一样的。使用EDMA会快很多。

2.1.1 EDMA

  • EDMA事件和中断
  • GPIO的事件GPINTn 会同时输出给EDMA和中断(CPU)。

2.1.2 GPIO事件级别

  • 有一级事件和二级事件(需要先到CIC再到中断)

2.1.3 GPIO与多核心的绑定和共有

  • GPIO口和核心序号对应关系,绑定关系(local),被多核心共有(share)。

2.1.2 MMR内存映射寄存器

  • 32位的地址有效位,36位的地址线。
  • 对外设的控制,也就是对内存地址的访问读写。
    《6678-datasheet-2014》
    在这里插入图片描述
    《General Purpose Input/Output (GPIO) for KeyStone Devices User Guide》
    在这里插入图片描述

3. 创建工程

  • 以CCSv5为例。
  • 学习视频:创龙

3.1 创建工作区WorkSpace

  • 注意文件路径只能包含ACII码字符(不能中文等等)。
    在这里插入图片描述

3.2 创建项目Project

  • 进入CCS Edit视角界面

3.2.1 新建工程

在这里插入图片描述

3.2.1 编写代码

  • 由前文可以知道:
    GPIO的基地址:0x02320000,DIR寄存器偏移地址:0x10 ,OUT_DATA寄存器偏移地址:0x14 。
  • C6655,C6657开发板上,LED引脚存在管脚复用,需要引脚重映射,需要解锁kick。
    在这里插入图片描述
  • C6678上不存在管脚复用,不需要开启kick。且3个LED的控制逻辑存在差异,硬件上底板led需要置低才能点亮led,核心板则是拉高点亮。
    在这里插入图片描述

3.2.1 编写CMD文件

  • 一定要有的文件。文件扩展名“.cmd”。
  • 主要功能,知道内存分配,在链接过程起作用,修改一些链接选项。
  • 主要有两个部分,一个是内存区域的描述(需要放到那个内存空间就写哪边,多写也没事),一个是段分配。
    在这里插入图片描述

3.2.4 设置栈大小,堆大小

  • 工程设置
    在这里插入图片描述
  • 或者直接在cmd文件中添加(C6655和C6678的共享内存空间大小不同)
    在这里插入图片描述

3.2.5 debug下的map文件

  • 查看编译后详细的空间信息。

4. 下载到板子,进行调试

  • 方法一:调试工具(仿真器)。XDX100系列(10KB缓冲数据),200系列(100KB缓冲数据),560系列(1MB缓冲数据)。追踪功能。
  • 方法二:编写好的程序转换可启动镜像格式,烧录下载到DSP的CPU外挂的FLASH中(EEPROM,NorFLASH,NANDFLASH等等)。(C6000,DSP没有片内FLASH)
  • 参考视频:创龙

4.1 创建仿真器配置文件

  • File-new-target configuration file
  • 仿真器配置文件,只在调试的时候有关系,不是一个工程的必要文件。
  • 仿真器配置文件,可以针对当前工程创建,也可以创建一个共享的全局仿真器配置文件,方便使用。所有的工程都可以使用这个配置文件。
    在这里插入图片描述
  • 或者打开一个窗口,新建target configuration file。
    在这里插入图片描述

4.1.1 创建一个全局的仿真器配置文件

  • 起一个文件名。
  • 存储位置,选择共享路径。
    在这里插入图片描述
  • 选择好仿真器型号
  • 选择设备型号
  • 点击保存save
  • 如果选择一些开发板的型号,仿真器配置文件会默认加载一个GEL文件。
    在这里插入图片描述
  • 点击target Configuration(或者下方的Advanced),进行高级配置。
  • 选择核心C66x_0。其他核心也可以选择,但选择其他的,一般不会调用。只需要在核心0加载初始化甲苯文件GEL就可以了。
  • 右侧选择初始化脚本,点击Browse浏览。找到对应的GEL文件。
  • GEL文件只在CCS环境调试时有效。与用户的程序是完全独立的,他的作用仅是在调试时,替我们完成一些初始化( 配置时钟,DDL等)。
  • 如果是将程序固化在芯片外挂FLASH中,则由ROM BootLoader去替我们完成一些初始化(如锁相环,DDL,外设)。我们也可以写一个二级的应到程序,来进行初始化。
    在这里插入图片描述
    在这里插入图片描述

4.2 将配置文件设置为默认

4.3 工程进入debug模式

  • 可以先进行测试仿真器的通信是否正常。basic和advanced页面都有Test Connection按钮。

  • 如果测试有failed的情况,则可能是windows驱动不正常,CCS仿真器配置文件选择的设备型号 等原因。
    在这里插入图片描述

  • 进入Debug模式。F11或者点击debug按钮,(第一次会)弹出选项框,多核处理器,我们可以先只选一个主核心。
    在这里插入图片描述

  • 加载成功后,CCS会自动进入main函数。
    在这里插入图片描述

  • CPUreset,只复位当前核心,SYSTEMreset,复位所有(需要使用GEL文件重新初始化)。

  • 如果出现这个错误(这里只是说CCS找不到源文件c),不一定是程序出错了。程序退出时,进入了RTS库。

  • 找到LIB中的RTSsrc源码,解压出来。

  • 点击Locate File,定位到刚才解压出来的源码。
    在这里插入图片描述

  • 解压RTS的源码,到当前路径下。
    在这里插入图片描述

  • 备注:如果是调试6678,一定要带风扇和散热。因为C6678的功耗很大,发热很快。

4.4 硬件追踪

  • Hardware Trace Analyzer
    在这里插入图片描述
  • PC Trace CPU的追踪。如果通过ETB(CPU内部嵌入的4KB的buffer)的方式,不需要管仿真器有多少个引脚。如果是pro Trace的方式,需要仿真器支持(根据buffer空间大小和引脚数)。
    在这里插入图片描述
  • start,trace viewer 会记录运行每条汇编命令的 时钟数Cycle,等等。方便调算法。

5. 一级启动模式

  • 下图是C6655的启动方式(C6678少一个NAND启动方式)
    在这里插入图片描述

5.1 数据的大小端选择

  • GPIO0 决定是大端还是小端。一般有网络数据时,可以采用大端的方式。
  • 一般是小端字节序。
    在这里插入图片描述

5.2 启动方式0

  • GPIO321引脚为000,三种子启动。
  • 另外需要配置锁相环PLL,参考5.9

5.2.1 子模式-no boot

  • GPIO543 = 000 。
  • 子模式0,(在使用仿真器时),使用的是no boot。不需要进行子模式配置。

5.2.2 子模式-串口启动

  • GPIO543 = 001(uart0)和101(uart1) 。
  • 需要配置串口波特率,校验。

5.2.3 EMIF16

  • GPIO543 = 100。
  • EMIF16Boot,则需要配置相关。
  • 片选,位宽,等待位
    在这里插入图片描述

5.3 启动方式1-SRIO

  • GPIO321引脚为001,Serial Rapid I/O。
  • 通道配置,4x1,2x2
  • 速率,参考时钟。
  • 另外需要配置锁相环PLL,参考5.9
    在这里插入图片描述

5.3 启动方式2-Eth

  • GPIO321引脚为010,局域网启动。
  • 另外需要配置锁相环PLL,参考5.9
    在这里插入图片描述

5.4 启动方式3-NAND

  • GPIO321引脚为011。

在这里插入图片描述

5.5 启动方式4-PCIe

  • 可能会出现分配内存失败的情况,需要使用IBL启动辅助一下。
    在这里插入图片描述
  • 在启动的时候有效,应用中可以修改。
    在这里插入图片描述

5.6 启动方式5-I2C

在这里插入图片描述

  • 另外需要配置锁相环PLL,参考5.9

5.7 启动方式6-SPI

在这里插入图片描述

  • 另外需要配置锁相环PLL,参考5.9

5.8 启动方式7-HyperLink

在这里插入图片描述

5.9 锁相环配置PLL

  • 100MHz
    在这里插入图片描述

6. 二级启动模式

  • IBL,Initial Boot Loader (IBL)初始引导加载程序(二级引导程序)
  • IBL被烧写在EEPROM中。
  • 启动的时候先通过I2CEEPROM一级启动,再通过IBL二级引导启动应用程序。
  • 启动时间会慢一点。

6.1 为什么使用IBL二级引导

原因:

  • 解决早期PLL锁相环锁不住的问题,使用IBL引导。(到了C6000系列之后,该问题已经被解决了)
  • CPU支持很多的一级启动模式,但是生成镜像比较麻烦,尤其是多核的时候(多个启动镜像合成一个)。
  • PCIe启动时,可能存在分配内存失败的问题,使用IBL辅助该启动。
  • 支持更多的启动,如TFTP
  • 多核部署

7. 烧写

  • 以IBL二级引导启动方式

7.1 FactoryReset恢复出厂设置

  • 恢复EEPROM,NorFlash,NandFlash的数据参数等等。
  • 如果启动失败,可以先进行FactoryReset恢复出厂,恢复IBL等。
    在这里插入图片描述

(1)开始恢复出厂设置

  • 设置Flash.bat文件中CCS的路劲。
  • 调用脚本Flash.bat时,需要先退出CCS的Debug模式。
  • 调用脚本,选择开发板型号,选择仿真器型号
    在这里插入图片描述
  • 可以观察到,烧写EEPROM,NorFlash(无,则失败),NANDFLASH的过程。

(2)FLASH_SPI.bat ,是直接从SPI norFlash原生启动的脚本。从.out格式到.bin格式转换。“.OUT”文件包含很多调试信息,我们可以通过strip6x工具(在C6000编译器下)将这些信息去除。

  • 需要找到strip6x,将其路径添加到PC环境变量中。
  • 执行strip6x命令。
    在这里插入图片描述

7.2 使用脚本烧写进设备

  • nandFlash烧写方式。
  • 修改Flash.bat脚本,只添加参数nand(只会烧写nand,不会修改eeprom和nor)
    在这里插入图片描述
  • 执行Flash.bat,选择开发板类型,仿真器类型。等待。。。
    在这里插入图片描述
  • 在GEL文件初始化完成之后,直接自动开始烧写NAND的操作。

7.3 使用烧写程序来烧写

  • 修改烧写配置文件,保证烧写的文件和配置文件中的一致。使用notepad打开nand_writer_input.txt修改文件名。修改起始地址。
  • 回到CCS环境,找到创建的仿真器配置文件".ccxml",鼠标右击,选择Launch Select Configuration。
    在这里插入图片描述
  • CCS进入到了Debug模式(PC和仿真器进行连接)
  • 鼠标右击核心0,连接。(仿真器和设备连接)
  • 等待连接成功。CCS会调用GEL自动初始化。
    在这里插入图片描述
  • 工具栏的Load按钮 或者 Run->Load->Load Program,选择烧写程序文件“.out”,该文件包含bin文件参数信息。
    在这里插入图片描述
  • 在Memory Browser中,找到Load Memory。
    在这里插入图片描述
  • 选择待烧写的bin文件,将数据加载到内存DDR中。
    在这里插入图片描述
  • 下一步,选择起始地址,32位宽。
    在这里插入图片描述
  • 点击resume按钮,开始烧写。
    在这里插入图片描述
  • 等待烧写完成。退出启动模式,退出烧写,退出Debug模式。
    在这里插入图片描述
  • 12
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值