DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 314|回复: 0
打印 上一主题 下一主题

TMS320C5000的Bootloader技术

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 20:11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    在TI DSP的开发环境CCS(Code Composer Studio)下,PC机通过不同类型的JTAG电缆与用户目标系统中的DSP通信,帮助用户完成调试工作。当用户在该环境下完成开发任务,编写完成用户软件之后,到DSP目标系统产品化阶段时,需要完全脱离依赖PC机的CCS环境,并要求目标系统上电后可自行启动并执行用户软件代码,这就需要用到自启动(Bootloader)技术。同时Bootloader也指由TI在生产DSP芯片时预先烧制其片内ROM中,完成该功能的一段代码名称。
   
   Bootloader的基本原理与模式
   TMS320C5000系列DSP芯片(以下简称C5000)是RAM型器件,掉电后不能保持任何用户信息,所以需要用户把执行代码存放在外部的无挥发存储器内,在系统上电时,通过Bootloader将存储在外部媒介中的代码搬移到C5000高速的片内存储器或系统中的扩展存储器内,搬移成功后自动去执行代码,完成自启动。
   Bootloader技术提供很多种不同的启动模式,包括并行8bit/16bit的总线型启动、串口型启动和HPI口启动等模式,兼容多种不同系统需求。当C5000芯片复位时,如果其处于微计算机模式(MP/MC引脚为逻辑0),那么复位后在C5000程序空间地址为0F800h处,可以通过CCS看到TI预先烧制在其片内ROM 的Bootloader这段代码。C5000复位后,程序指针指向0FF80h处的中断向量表,执行指令“BD 0FF80h”,即跳至Bootloader入口,开始执行Bootloader代码。在搬移用户代码之前,Bootloader会设置C5000的状态寄存器,包括将INTM位置1,禁止全局中断;OVLY置1,将片内DRAM映射到程序/数据空间;和设置整个程序/数据空间均插入7个等待状态,以适应可能慢速的EEPROM。
   为了兼容不同系统需求,C5000提供很多种启动模式,包括:
   ● HPI启动模式:由外部处理器(即主机)将执行代码通过C5000的HPI口搬移到其片内RAM。当主机搬移完所有程序代码,还要将程序入口地址写入C5000数据空间007Fh内。这样,C5000一旦检测到007Fh处不再为0值,即判断为代码转移完毕,并跳转到007Fh里存放的地址去执行,从而完成启动;
   ● 8bit/16bit的并行启动模式:在这种模式下,C5000通过其数据和地址总线从数据空间读取启动表(Boot Table)。启动表内容包括:需要搬移的代码段,每个段的目的地址,程序入口地址和其他配置信息。启动表具体内容将在下文介绍。
   ● 8bit/16bit的标准串口启动模式:在这种模式下,C5000通过工作在标准模式的多通道缓冲串口(McBSP)接收启动表,并根据启动表中的信息装载代码。McBSP0支持8bit模式,McBSP1支持16bit模式;
   ● 8bit串行EEPROM启动模式:在这种模式下,C5000通过工作在SPI模式的McBSP1接收来自外部串行的EEPROM中的启动表,并根据启动表中的信息装载代码。
   ● 8bit/16bit的I/O启动模式:在这种模式下,C5000使用XF和BIO引脚,与外部设备达成异步握手协议,从地址0h处的I/O端口读取启动表。
   一旦C5000复位,Bootloader会做循环检测操作,以决定执行哪种启动模式。Bootloader首先检测HPI启动模式条件是否成立,如果条件不满足,则继续检测下一种,直到找到一种满足条件的启动模式。它检测的顺序如下:
   1. HPI启动模式第一次检测:通过检测INT2引脚是否有中断发生来判断是否进入HPI启动模式;
   2. 串行EEPROM模式;
   3. 并行模式;
   4. 通过McBSP1的标准(8bit)串口启动;
   5. 通过McBSP0的标准(16bit)串口启动;
   6. I/O启动模式;
   7. HPI启动模式第二次检测:通过检测数据空间7Fh是否为非0值来决定程序入口点;
   需要注意的是,当Bootloader检测完所有可能的启动模式后,而没有发现一种有效的启动模式,则Bootloader仅会从标准串口启动模式开始重新检测启动模式,而并不是重新检测所有可能的启动模式。整个流程如图1所示。
   
   
   图1 Bootloader模式选择流程
   
   
   
   
   图2 并口启动模式处理流程
   
   
   
   并行启动模式分析
   在上述各种启动模式中,并行启动模式实现简单,速度较快,在实际系统中应用也最为广泛,本文则重点介绍这种启动模式。当检测完毕串行EEPROM启动模式无效后,Bootloader会转入8bit/16bit并行启动模式检测。
   Bootloader首先从I/O空间地址为0FFFFh处读取一个字的数据,并将该数据作为启动表在数据空间的起始地址。启动表起始地址处应包含用于判断8bit/16bit启动模式的关键字:对于8bit启动模式该关键字为08AAh,需要放在两个连续的8bit空间;对于16bit启动模式,该关键字为10AAh。如图1所示,如果Bootloader没有在启动表的起始地址处得到上述关键字,它会转到数据空间0FFFFh处再去读取一个字的数据,再将该数据作为启动表在数据空间的起始地址,再继续尝试通过该起始地址去读取上述关键字。因为Bootloader在读取启动表第一个字之前不知道存储器宽度,所以它需要检测两个位置,通过0FFFFh处得到该起始地址的低8bit,通过0FFFEh处得到其高8bit。整个流程如图2所示。
   根据Bootloader这个特性,用户可以将启动表与其起始地址一起烧制到单片EEPROM中,即可通过单片存储器为Bootloader同时提供启动表与其起始地址。另外提供给Bootloader读取的启动表起始地址为16bit寻址宽度,因此用户可将EEPROM译码在C5000 数据空间从04000h至0FFFFh任一地址范围内。最后,如果用户希望屏蔽并行启动模式,可以将C5000的D0引脚弱上拉为逻辑1,从而避免Bootloader从数据空间读到关键字AAh。
   当Bootloader在启动表的起始地址处检测到有效关键字后,则继续搬移剩余代码,然后执行程序。反之如果Bootloader在上述两个地方都没检测到有效关键字,则继续检测下一种模式(标准串口启动)。
   
   如何建立启动表
   如上所述,为了完成系统自启动,需要为Bootloader提供启动表,在里面写入Bootloader需要的所有数据。该启动表可以使用TMS320C5000汇编语言工具包提供的16进制转换工具来生成,该工具文件名为hex500.exe。当为C5000及更高版本的DSP芯片生成启动表时,需要使用hex500的v.1.2或更高版本。
   通过以下步骤生成C5000的启动表:
   1. 使用“-v548”选项编译代码(Assemble):该编译选项可以标记编译生成的目标文件需要使用增强型Bootloader功能。16进制转换工具会使用这个信息来产生正确的启动表格式。如果没有添加这个选项,16进制转换工具会生成早期版本的DSP芯片使用的启动表,并忽略所有的警告和错误。
   2. 链接文件(Link):启动表里每一部分数据都和COFF文件里已初始化段相关,包括.text、.const、.cinit,而未初始化段会被16进制转换工具忽略掉,包括.bss、.stack、.sysmem。一定要注意这些段不能链接在系统中没有RAM的位置。例如程序空间从0F000h到0FFFFh地址范围内就不可使用,因为这段地址由片内ROM占据,对于Bootloader不可写。
   3. 运行16进制转换工具hex500.exe:链接生成得到COFF文件后,根据不同的启动模式,设置hex500转换COFF文件为相应启动表时使用的选项,然后运行hex500,得到启动表,也即得到可供编程器烧制EEPROM的16进制文件。
   
   16进制转换工具hex500调用格式
   及常用选项
   16进制转换工具hex500调用格式为:
   hex500 [-options] filename
   -options:提供附加信息,控制16进制转换处理过程;
   可在命令行里或一个命令文件里使用多个 选项;不区分顺序与大小写;
   filename: COFF文件名或命令文件名;
   为了适应不同系统的应用, hex500支持多种可选项,常用选项如下:
   1. 通用选项
   -map filename:该选项使hex500生成转换报告,
    可用任何文本编辑器阅读;
   -o filename:指定转换输出的16进制文件名;
   2. 存储器选项
   -memwidth value:定义DSP系统存储器宽度(默
    认为16bit);
   -romwidth value:定义用户EEPROM存储器宽度
    (默认值由输出选项确定);
   3. 输出选项:输出指定格式的16进制文件,有如下格式;
   
   其中,可寻址宽度决定了输出格式所支持的地址信息bit数,所以16bit寻址宽度最高仅支持64k地址。
   4. 启动选项
   -boot:定义转换所有的段至启动表里;
   -bootorg value:定义启动表的起始偏移地址;
   -e value: 指定代码搬移完成后开始执行的入口地
    址,value可为 数值地址或全局符号;
   5. 其他选项
   -swwsr value:设置并行启动模式下软件等待状态
   寄存器(SWWSR)的初值;
   -bscr value:设置并行启动模式下段转移控制寄存
    器(BSCR)的初值;
   工程上常用两类方法使用16进制转换工具hex500,一是将使用到的选项写为命令行,做一个批处理文件,例如下例批处理文件boot.bat:
   rem boot.bat
   hex500 %1 -boot -bootorg 0 -memwidth 8 -I
   其中,“%1"是调用boot.bat时其后接第一个参数,为需要转换的COFF文件名。当在DOS下键入:
   C:>boot.bat myfile.out
   boot.bat将调用hex500,将myfile.out 转换为Intel格式、系统存储器宽度为8bit的16进制文件,其默认文件名为boot.i00。
   另一类方法是使用命令文件,例如下例命令文件exap.cmd:
   /*exap.cmd*/
   Myfile.out /*输入的COFF文件名 */
   -e 0300h /*入口地址 */
   -i /*输出Intel格式文件 */
   -boot /*转换所有的段至启动表里 */
   -memwidth 8 /*设置8bit的系统存储器宽度 */
   -o boot.i00 /*输出hex文件名 */
   当在DOS下键入:
   C:>hex500 exap.cmd
   同样可以得到Intel格式的16进制文件boot.i00,系统存储器宽度为8bit,程序入口地址为0300h。
   至此,TI的TMS320C5000系列DSP芯片的Bootloader技术介绍完毕。基于上述原理,用户可以根据自己DSP目标系统的需求,灵活采用各种启动模式,然后灵活利用16进制转换工具hex500生成各种启动表,并烧制到EEPROM内,使用户的DSP目标系统在上电或复位后可自行加载用户代码,完全脱离PC机而独立运行,从而完成DSP目标系统产品化阶段设计。
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-12-25 19:47 , 耗时 0.152244 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表