首页 C6000DSP的引导方式和bootloader

C6000DSP的引导方式和bootloader

举报
开通vip

C6000DSP的引导方式和bootloaderC6000DSP的引导方式和bootloader C6000是TI的高端DSP,它有3种引导方式:㈠无引导; ㈡ROM引导; ㈢主机引导 ㈠ – 无引导:CPU直接从地址0处开始执行代码。 ㈡ – ROM引导,加载过程: ①当CPU的Reset引脚处于低电平状态时,BOOTMODE的引脚状态根据预设设定, RESET信号处于上升沿的时候,相应加载方式启动。 ②ROM加载方式是通过DMA控制器,将外部ROM的一段固定大小的代码复制到内部RAM中(加载时CPU处于stall状态),对于不同型号芯片,复制的代码大...

C6000DSP的引导方式和bootloader
C6000DSP的引导方式和bootloader C6000是TI的高端DSP,它有3种引导方式:㈠无引导; ㈡ROM引导; ㈢主机引导 ㈠ – 无引导:CPU直接从地址0处开始执行代码。 ㈡ – ROM引导,加载过程: ①当CPU的Reset引脚处于低电平状态时,BOOTMODE的引脚状态根据预设设定, RESET信号处于上升沿的时候,相应加载方式启动。 ②ROM加载方式是通过DMA控制器,将外部ROM的一段固定大小的代码复制到内部RAM中(加载时CPU处于stall状态),对于不同型号芯片,复制的代码大小不同。 对于C620x/C670x,DMA从CE1空间拷贝64K数据到地址0处 对于C621x/C671x/C64x,EDMA从CE1空间拷贝1K数据到地址0处。 ③加载完毕后,CPU开始从0地址执行。 对于上述步骤②的第二种(C621x/C671x/C64x),1K是不能解决问题的,所以,一般在0地址处建立一个叫做“bootloader”的段(代码小于1KB),这一小段程序也叫 “引导程序”,上电或者重启后首先执行它,完成将其余程序(真正完成用户要求算法的程序)加载,然后跳转到主程序入口地址运行。 ㈢ – 主机引导: 对具有不同接口的芯片,分别有以下三种渠道连接: HPI XBUS PCI 介绍了TMS320C6x DSP的几种FLASH引导方法,比较了引导过程中基于软件流水的数据搬移方法和QDMA方式的数据搬移方法,并介绍了如何利用在系统编程(ISP)对上电引导程序进行FLASH编程。通过对实际的TMS32C6711 DSP电路调试实验,证明了以上方法简单易行。   关键词:FLASH存储器 上电引导 COFF文件格式 DSP   FLASH存储器是在EPROM和EEPROM的基础上发展起来的一种非易失性存储器,在掉电情况下仍能保证数据不丢失,并能够在不离开电路板或据设备的情况下实施擦除和再编程操作。由于其具有结构简单、维护便利、存取速度快、对环境适应能力强、抗振性能好等优点十分适合于嵌入式系统的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 和开发,并且已成为目前流行的数字信号处理系统的一个基本配置。   在许多DSP的应用中,系统上电后需要将用户程序从FLASH存储器引导到高速数据存储器中运行。这就需要给用JTAG接口调试通过的应用程序添加启动代码,将生成的目标文件进行格式转换使其能在线烧写,将转换过的文件利用FLASH烧写程序在线烧写到FLASH中。   本文将介绍引导过程中数据搬移的几种方法,包括QDMA方式的数据搬移方法、CPU直接数据搬移方法以及基于软件流水的数据搬移方法。经过比较测试,证明了QDMA方式和基于软件流水的数据搬移方法具有优越性。并且,根据COFF文件格式,编写了比TI公司的HEX60更为直接的转换工具,从而简化了文件的转换步骤。   1 应用程序的FLASH ROM引导   当DSP的应用程序从FLASH ROM引导时,目标板都有一个自动的引导程序。例如,对于TMS320C6x1x系列,目标板的自动引导程序会在系统上电时将FLASH ROM的前1K空间的内容复制以片内内存自0x00开始的地址空间,并从0x00地址处开始运行。因为需要搬到内存中运行的应用程序的向量 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 、初始化段等往往超过1K大小,为了能在系统上电时自动引导应用程序运行,就需要在引导的1K代码中包括自定义的引导代码,以将额外需要的初始化代码段和数据段复制到内存中运行。   将FLASH ROM的数据复制到IRAM(内部RAM)中,有两种方式:一种是直接存储器访问(DMA),它是在没有CPU参与的情况下完成映射存储空间的数据搬移;另一种是利用CPU直接搬移数据。QDMA是快速的DMA,不需要CPU参与数据传输,只需根据要传递内容的信息设置QDMA的相应寄存器即可。用CPU直接搬移数据也有两种方式:一种是是不用流水方式,另一种是采用软件流水方式。   在C6000的汇编中,不同类型指令有不同数目的执行节拍。执行节拍在数量上等于该指令在执行级所需要的时钟周期。对于所用到的读取指令ldw的存储指令stw,分别完成从存储到通用寄存器的数据搬移和从通用寄存器到存储器的数据搬移。读取指令ldw需要执行的步骤为:计算地址、地址送内存、访问内存、数据送CPU、数据写寄存器,即执行节拍数为5;而存储指令stw,执行节拍数为3,需要执行的步骤为ldw的前三步。表1给出了软件流水前后数据搬移间隔编排的比较表。   由表1可见,要将FLASH ROM中的一个数据搬移到IRAM中,需要从FLASH ROM中读取该数据到通用寄存器(ldw),再从通用寄存器中将其读到IRAM(指令stw)。在软件流水优化以前,需要至少8个指令周期。采用软件流水优化以后,根据指令的特点,第0到第4这5个指令周期可连续续5个数到通用寄存器,从第5到第9这5个指令周期再顺序地将读入通用寄存器的上述5个数读出到IRAM。于是,在10个指令周期内,可完成5个数据的搬移,从而使搬移周期下降到了两个指令周期,提高了CPU的运行效率。   2 QDMA方式和CPU直接数据搬移方式的比较   由于前面已比较了CPU直接数据搬移的两种方式,下面着重对QDMA方式和基于流水的CPU直接数据搬移方式进行比较测试。这次测试是在TMS320C6711 DSP上进行的,采用的FLASH型号为SST29LE010。首先根据待烧写应用程序的.map文件找出需搬移的初始化代码段的大小,其中.text段为0x8c40 byte,.const段为0byte,.cinit段为0x24c byte,共需搬移0x23A3个32bit字。然后利用QDMA方式和CPU流水方式分别从FLASH中读取0x23A3个32bit字到片内内存中。测量所用时间结果如表2所示。   表2 两种数据搬移方式的比较   搬移大小:SIZE=0小3A3 WORD   由测试结果可以看出,不需要CPU直接参与数据搬移的QDMA方式比CPU流水搬移更具优越性,搬移速度快且设置简单。但CPU的流水搬移利用了TMS320C6000系列DSP汇编的特点,深入 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 了指令的软件流水方式,很大程度地提高了CPU的利用率,拓宽了编程思路,也不失为一种好的选择。   3 利用ISP对上电引导程序进行了FLASH编程   3.1 文件格式的转换   完成了引导程序,包括.cmd文件中内存段的设置及连接设置后,用TI的编程工具CCS(Code Composer Studio)编译连接生成目标文件(.out文件)。但该.out文件格式是COFF文件格式,FLASH不支持这种格式,所以不能直接写入FLASH中,必须对该.out文件进行转换,提取出其中的数据部分,形成数据文件。最后利用烧写程序将已转换好的数据文件烧写到FLASH ROM中。   在前面的两节点,结合TMS320C6x系列DSP的特点,介绍了几种上电引导过程中的数据搬移方法,特别推荐和比较了基于软件流水思想的CPU数据搬移方法及QDMA方式,还介绍了ISP技术对上电引导FLASH编程的基本步骤,及如何根据COFF文件格式将目标文件转换成数据文件,供FLASH的烧写程序烧写。   从编写引导程序到将引导程序转换为可供烧写的数据文件,再到最终的FLASH ROM烧写,是比较繁琐的过程。本文所介绍的方法为编写引导程序拓宽了思路,并简化了文件转换的步骤。通过对实际的TMS320C6711 DSP电路调试实验,证明了以上的方法是简单易行的。   有两种方式可将COFF格式文件转换成数据文件。一种是利用TI公司的HEX6x.exe工具,将生成的.out文件转化成.hex输出文件。由于该HEX6x.exe工具是提供给EPROM编程器的,用EPROM编程器可直接烧写.hex文件。但对于FLASH ROM的在系统编程来说,生成的.hex文件不能直接使用,必须再编写一段程序将.hex的文件头去掉,分离出数据文件,最后才能由FLASH的烧写程序将最终的数据文件烧写到FLASH ROM中。也可以不用TI公司的工具,而根据COFF文件格式直接提取出数据。生成一个数据文件,然后将其烧写到FLASH ROM中。   COFF文件采用的是向量组织方式,可以很灵活地安排代码段和目标系统存储器。了解COFF文件的结构,不仅可以清楚.cmd文件的编写原理,而且可以认识初始化段和非初始化段的区别,同时还可以在转换文件时减少转换步骤。COFF文件的格式如表3所示。   要提取的数据部分即台化段是表3的Row data部分,也就是可执行代码和初始化代码部分。首先,根据文件头的信息(文件头描述了整个文件的全局信息)获得文件中段的数量,然后根据段的头(Section header)信息,判断该段是否为初始化段的头。因为非初始化段是在程序运行中才分配的,若为初始化段的头,则取得初始化段的位置,将这些段按地址由低到高的顺序复制到输出文件,便得到了可烧写的数据文件。其流程如图1所示。   3.2 利用ISP技术烧写FLASH   烧写程序负责将前面所生成的数据文件写入FLASH ROM中,利用ISP技术,就不需要其它编程设备和附加编程电源,直接通过烧写程序烧写就可以了。烧写程序必须根据所用的FLASH的型号来编写。以SST29LE010为例,其软件数据保护和页面写、芯片擦除、芯片型号软件检测等都有不同的指令和时序,如表4所示,需要查阅该型号的芯片手册,根据手册完成烧写程序。   表4 SST29LE010内存指令表   在前面的两节点,结合TMS320C6x系列DSP的特点,介绍了几种上电引导过程中的数据搬移方法,特别推荐和比较了基于软件流水思想的CPU数据搬移方法及QDMA方式,还介绍了ISP技术对上电引导FLASH编程的基本步骤,及如何根据COFF文件格式将目标文件转换成数据文件,供FLASH的烧写程序烧写。   从编写引导程序到将引导程序转换为可供烧写的数据文件,再到最终的FLASH ROM烧写,是比较繁琐的过程。本文所介绍的方法为编写引导程序拓宽了思路,并简化了文件转换的步骤。通过对实际的TMS320C6711 DSP电路调试实验,证明了以上的方法是简单易行的。 TMS320C62x HPI引导过程的实现 摘要:TMS320C62x和TMS320C67x DSPs提供了几种不同的启动模式,不同的启动模式决定了DSP复位后的初始化以及代码装载方式。本文就TMS320C62x DSP的HPI启动模式进行详细的说明。 关键词:TMS320C62x DSP HPI 启动模式 1 绪言 在TMS320C62x系列DSP中,主机口HPI是一个16位宽度的并行端口。主机(也称上位机)掌管该接口的主控权,通过它可以直接访问CPU的存储器空间。另外,主机还可以直接访问TMS320C62x片内的存储映射的外围设备。 HPI与CPU存储空间的互连是通过DMA控制器实现的。借助专门的地址和数据寄存器,通过DMA辅助通道,完成HPI对存储空间的访问。主机和CPU都可以对HPI控制寄存器HPIC进行访问,主机一方还可以访问HPI地址寄存器HPIA和HPI数据寄存器HPID。 2 TMS320C62x引导模式 TMS320C62x系列DSP提供了三种引导方式: (1) 没有自举过程:CPU直接从地址0开始执行代码; (2) ROM自举:由DMA/EDMA控制器从外部CE1空间中的ROM中拷贝固定数量的一段代码到地址0,拷贝结束后,CPU从地址0开始运行; (3) HPI自举:由外部主机通过HPI对芯片的存储器空间进行初始化,初始化结束后,外部主机通过HPI中断唤醒CPU,CPU开始从地址0运行。 所有这些设置项都是在芯片复位的时候才进行检查。一旦复位信号有效(reset=0),所有的三态输出管脚恢复为默认状态,然后在reset信号的上升沿处检查设置管脚BOOTMODE[4:0]的状态,自举逻辑开始生效。其中C6201/C6701有专门的管脚作为BOOTMODE[4:0],C6211/C6711则是利用主机口的HD[4:0],C6202/C6203利用扩展总线的XD[4:0]作为BOOTMODE[4:0]信号。 对于TMS320C62x的HPI自举模式过程如下:首先需要设置Boot模式,Boot模式设置如表1所示。当DSP被复位时,如果选择了HPI boot模式,那么只有DSP的内核进入复位状态,DSP其余模块均保持激活状态。这样,主机就可以通过HPI接口访问DSP的整个存储空间,包括片内、片外存储器和片内的外设寄存器,对它们进行初始化。主机对DSP做完了有关设置后,向HPIC寄存器的DSPINT位写1,将DSP从复位状态唤醒,接下来CPU就从地址0开始执行程序。主机对DSP可以进行的操作包括:初始化CPU和EMIF,向DSP加载程序以及数据等。 表1 TMS320C62x HPI boot配置 BOOTMODE[4:0] Memory Map Memory at Address 0 Boot 00110 MAP 0 External; default values HPI 00111 MAP 1 Internal HPI 3 TMS320C62x HPI引导模式的实现 3.1 创建启动代码 实现TMS320C62x HPI引导模式的第一步是生成HPI引导的DSP代码,并把它与主处理器应用程序合并在一起,使DSP应用程序可以和主处理器应用程序一起远程下载。为了简化,采用下列 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 :把DSP应用程序转换成头文件中的数组,并和主处理器应用程序一起编译连接。 具体实现分为两步:1)利用转换工具HEX6x把COFF文件转换成ASCII-Hex格式十六进制文件;2)利用自编工具hex2aray.exe将ASCII-Hex格式的文件转换成包含数组的头文件。 (1)利用转换工具HEX6x把COFF文件转换成ASCII-Hex格式十六进制文件 利用转换工具HEX6x把COFF文件转换成十六进制文件,使用转换工具HEX6x需要一个.cmd文件说明具体的转换格式,如下面文件hexcom.cmd所示:HEX6x把COFF文件test.out转换成两个ASCII-Hex格式的文件:一个是代码段,包含在文件test.a00中;另一个是初始化的数据段,包含在文件test.a10中。在DOS命令行中执行hex6x hexcom.cmd将产生test.a00和test.a10两个文件。 文件hexcom.cmd: ..objecttest.out -a -byte -image -memwidth 16 -romwidth 16 -order M ROMS { /* Size of the internal pgm memory */ PGM: org = 0x00000000, length = 0x10000 /* Size of the internal data memory */ DATA: org = 0x80000000, length = 0x10000 } (2)利用工具hex2aray.exe生成头文件 然后利用hex2aray.exe将两个ASCII-Hex格式的文件:test.a00和test.a10分别转换成两个个包含数组的头文件:code.h和init.h。工具hex2aray.exe为自编工具。在DOS命令行中分别执行hex2aray –i test.a00 –o code.h和hex2aray –i test.a10 –o init.h两条命令将产生两个头文件code.h和init.h。在文件hexcom.cmd中的选项:- a,指示HEX6x按ASCII-Hex格式转换文件,ASCII-Hex文件格式如下所示: ^B $AXXXX, XX XX XX XX XX XX XX XX XX XX. . . ^C 文件开始是ASCII STX 字符 (ctrl-B, 02h),结束是ASCII ETX 字符 (ctrl-C, 03h);$AXXXX,代表地址;其余为代码。转换后的头文件格式如下: const char code[]={0x12,0x18,0x01,0x00,0x28,0x00,0x00,0x00,0x2A,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12, 0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, … }; 3.2 主机对HPI接口的操作 TMS320C62x提供了三个16位寄存器:HPIC、HPIA、HPID和16位数据线与主处理器通信。主处理器通过HPIC、HPIA、HPID和16位数据线来与TMS320C62x进行数据交换,数据交换的过程如下: 1)首先初始化HPIC; 2)然后把地址写到HPIA; 3)最后通过HPID读或写数据。 假设主机CPU也是TMS320C62x,那么主机与目标机之间的连接如图1所示: 如图1所示,假如Target 6201的/HCS连接到主机6201的CE1上。Target 6201的HPI寄存器映射到Host 6201DSP内存中,HCNTRL[1:0]和HHWIL连接到主机CPU的地址线上,那么HPIC、HPIA、HPID寄存器的地址分配如表2所示。,那么在C语言中,可以通过指针访问HPIC、HPIA、HPID,例如: #define C6201_HPI 0x01400000 /* Host address on which C6x HPI is mapped */ int *hpi_ptr; /* define and initialize pointer*/ hpi_ptr = (int *)C6201_HPI; /* Write dest_address to HPIA, with HOB=1 */ ptr_hpi[2] = (int)(dest_address & 0x0ffff); ptr_hpi[3] = (int)((dest_address>>16)&0x0ffff); 表2 HPIC、HPIA、HPID各寄存器的地址分配 映射到主机的地址 HPI控制线 HPI寄存器访问 HCNTL[1:0] HHWIL HPI Base address + 0x00 00 0 HPIC 1st halfword HPI Base address + 0x04 00 1 HPIC 2st halfword HPI Base address + 0x08 01 0 HPIA 1st halfword HPI Base address + 0x0C 01 1 HPIA 2st halfword HPI Base address + 0x10 10 0 HPID 1st halfword HPIA 自增 HPI Base address + 0x14 10 1 HPID 2st halfword HPIA自增 HPI Base address + 0x18 11 0 HPID 1st halfword HPIA不自增 HPI Base address + 0x1C 11 1 HPID 2st halfword HPIA不自增 3.3 主机通过HPI下载代码和数据段到目标DSP 一个程序由初始化区和非初始化区两部分组成,主机处理器必须根据.cmd命令文件把这两个区装载到DSP正确的地址。下面这段代码就是将代码段和数据段两部分分别下载到指定地址(即程序RAM和数据RAM)。它主要是从*source中读出32位长的数据,然后通过HPI将此数据写到DSP的dest_add地址(即程序RAM和数据RAM)中。*source中的数据就是DSP的启动代码段和数据段中的数据。 void C6x_write_section(int *ptr_hpi, short *source, int dest_add, int length) { int i; /* Write HPIC with HWOB=1,1st halfword transferred is least significant */ /* HCNTRL1 HCNTRL0 HHWIL */ ptr_hpi[0] = 0x0001; /* 1st halfword 0 0 0 */ ptr_hpi[1] = 0x0001; /* 2nd halfword 0 0 1 */ /* Write destination address to HPIA, 1st halfword is least significant */ /* HCNTRL1 HCNTRL0 HHWIL */ ptr_hpi[2] = (int)(dest_add & 0x0ffff); /* 0 1 0 */ ptr_hpi[3] = (int)((dest_add>>16)&0x0ffff);/* 0 1 1 */ for(i=0 ; i < length ; i++) { /* Write source_word to HPID with address post-increment */ /* 1st half-word transferred is least significant */ /* HCNTRL1 HCNTRL0 HHWIL */ ptr_hpi[4] = (int) *source++; /* 1 0 0 */ ptr_hpi[5] = (int) *source++; /* 1 0 1 */ } } 3.4 目标DSP开始执行所下载的代码 主机通过HPI下载代码段和数据段到目标DSP以后,那么目标DSP就需要执行所下载的代码了。通过写HPIC寄存器的DSPINT位为1让DSP退出复位状态后,DSP就开始从地址0执行所下载的代码了。具体实现代码为: /* Write HPIC with DSPINT=1 */ /* HCNTRL1 HCNTRL0 HHWIL */ /* 1st halfword 0 0 0 */ /* 2nd halfword 0 0 1 */ ptr_hpi[0] = 0x0002; /* 1st halfword */ ptr_hpi[1] = 0x0002; /* 2nd halfword */ 4 总结 根据前面所述,TMS320C62x HPI启动过程如图2所示。
本文档为【C6000DSP的引导方式和bootloader】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_902265
暂无简介~
格式:doc
大小:77KB
软件:Word
页数:9
分类:互联网
上传时间:2018-09-10
浏览量:59