/XBOOT

A bootloader for TI c2000 DSPs and MCUs.

资源汇总

特性介绍

XBOOT是一款TI C2000平台的bootloader软件,配合USBTTL,USBCAN等硬件,可以实现C2000系列DSP固件IAP功能。

XBOOT分为基础版本和定制版本,基础版本免费,用于评估,无技术支持,定制版本可用于商业场合,提供有限的技术支持。

基础版本特性

  • 支持TMS320F28335/TMS320F28069/TMS320F28035。
  • 28335使用30M外部晶振,28069/28035使用内部10M晶振。
  • 支持1个CAN,28335支持3个UART,28069支持2个UART,28035支持1个UART,通讯GPIO固定。
  • CAN接口波特率固定500kbps。
  • 串口波特率固定115200bps。
  • 无固件加密功能。
  • 只支持1个用户程序,入口地址固定。
  • 支持用户固件更新。
  • 支持UIDiskC2000离线下载。

定制版本特性

  • 支持C2000系列所有芯片(极少数FLASH过小的芯片除外)。
  • 外部晶振频率可选。
  • 支持一个CAN接口,3个TTL串口或者485接口,用于通讯的GPIO可选。
  • CAN接口波特率可定值,默认500kbps。
  • 串口波特率可定制,默认115200bps。
  • 可自带固件加密功能,确保用户固件安全。
  • 可读取FLASH、SRAM、外设内容。
  • 支持最多6个用户程序。可以设置上电后自动运行的用户程序。
  • 支持用户固件更新。
  • 可访问内置模拟EEPROM。
  • 可设置器件全球唯一ID,用于产品序列号,固件加密等场合。
  • 支持器件P2P下载即使用刷好固件的器件更新其它器件。

硬件资源占用

  • FLASH:FLASHA和FLASHB
  • 定时器:CpuTimer0
  • 通信接口
    1. SCIA (GPIO28/GPIO29)(28335/28069/28035)
    2. SCIB (GPIO22/GPIO23)(28335/28069)
    3. SCIC (GPIO62/GPIO63)(28335)
    4. ECANA (GPIO30/GPIO31)(28335/28069/28035)
  • 由于跳转用户程序以后XBOOT不再运行,因此SRAM与用户程序无冲突。

工作原理

C2000上电引导过程

C2000系列DSP上电以后从内部BOOTROM引导,上电复位以后DSP跳转到0x3FFFC0执行内部 BOOTROM中的代码,根据特定GPIO状态,判断引导模式,一般均使用FLASH引导模式, 即BOOTROM中代码执行完毕之后将控制权交给FLASH中的代码。

整个过程如下图所示:

28335上电引导过程

XBOOT工作原理

C2000内置BOOTROM通过GPIO来判断引导模式,单板设计时需要设计引导跳线,每次更新程序 要插拔跳线,使用不便。同时内部BOOTROM中的代码只能执行简单的代码更新功能。

XBOOT工作原理

实际中C2000系列DSP的FLASH空间往往十分充足,将FLASH按照扇区(sector)划分为几部分, FLASHA包含了BOOTROM的跳转地址0x33FFF6,用来存放XBOOT程序;FLASHB用来模拟内置EEPROM; 剩下的所有FLASH存放用户程序。

上电以后,FLASHA中的XBOOT代码首先执行,根据串口或者CAN接口数据流判断进入用户程序 还是XBOOT shell,如果0.5秒内某个串口上连续收到5个字母’e’,进入XBOOT shell, 否则进入用户程序。该设计会带来上电0.5秒的上电延时,一般情况下可以接受,带来的好处 是硬件设计无需额外的跳线。XBOOT shell中可以执行用户固件IAP更新功能。

使用方法

进入XBOOT shell方法

XBOOT上电启动以后在0.5秒内检测串口输入,如果收到连续5个字母“e”,便进入XBOOT shell; 否则访问模拟EEPROM获取用户程序入口点,如果用户程序有效,执行用户程序,否则进入XBOOT shell。

使用超级终端连接串口,波特率115200,8位数据,1位停止,无校验,无流控。按住键盘上 的字母“e”,点击控制板上的复位按键,或者给控制板重新上电。可以进入XBOOT shell。

CAN接口借助UARTCAN或者USBCAN硬件,设置工作模式为桥接模式,其余使用方法与串口完全相同。

超级终端为Windows XP自带程序,通过开始->所有程序->附件->通讯->超级终端打开。 Windows7系统不带超级终端,可以将Windows XP系统的超级终端软件拷贝过去直接使用。

更新用户软件详细步骤

首先连接XBOOT shell,使用empty命令查看要写入的FLASH是否为空,如果不为空,使用 erase x命令擦除软件所在FLASH,其中x为FLASH名字,取值a、b、c….

使用ymodem命令更新用户软件。

注意:erase a命令将擦除包括XBOOT在内所有FLASH内容,也包括加密密码,擦除所有 FLASH内容以后掉电之前,XBOOT仍然可以运行并且更新程序,如果擦除以后掉电,只能使用 仿真器将XBOOT写入DSP。将用户代码写入未擦除的FLASH运行结果将是不确定的。

用户软件编写指南

复位向量

TMS320F28335 FLASH入口地址为0x33FFF6,这个地址位于FLASHA,已经被XBOOT占用。 用户代码需要使用另外的复位向量。XBOOT默认会将入口地址设置到FLASHC开头两个字, 地址0x328000,上电后XBOOT可以跳转到FLASHC执行用户代码。

用户代码需要将复位向量放到所在FLASH扇区开始两个字。所有用户代码放在FLASHC,复位 向量占用FLASHC开始两个字。

用户软件复位向量(28335)

定制版XBOOT固件可以使用entry命令重新设置复位向量,实现多APP支持。 由于XBOOT本身使用FLASHA和FLASHB,用户程序不能占用这两处FLASH,编写cmd文件时需要注意, 用户程序编译后注意检查map文件,确认两块FLASH没有使用。

用户软件编译后不能占用FLASHA和FLASHB

生成hex文件

使用hex2000命令行工具将CCS编译生成的.out文件转化为hex文件。命令如下:

hex2000 --intel -romwidth 16 -memwidth 16 TEST.out

其中TEST.out为需要转化的.out文件,根据实际需要进行替换。.hex文件实际为文本文件, 可以使用文本编辑器打开查看。

CCS5可以设置编译完成自动输出hex文件,设置方法如下:

在工程名上按Alt+Enter打开项目属性设置页,然后按照下图设置即可。

CCS5.5设置自动输出hex文件

uuid生成指南

UUID含义是通用唯一识别码 (Universally Unique Identifier),是指在一台机器上生成的 数字,它保证对在同一时空中的所有机器都是唯一的。通常使用一个16进制字符串表示, 如:BBF2CE53C8B54062B42C3E8423AD9E88

Linux

Linux平台下可以使用uuidgen命令生成uuid,注意输入时去掉中间的’-’分隔符。

Linux下使用uuidgen命令生成uuid

Windows

Windows平台下可以使用PDFFactory软件来生成uuid.

Windows下使用UUIDFactory生成UUID

免责条款

基础版

使用方法请参考本文档,作者不提供任何技术支持与保证。

定制版

可用于商业场合。使用方法请参考本文档,同时作者会尽力满足客户需求,并提供有限的技术支持。 技术支持仅仅限于XBOOT固件本身,用户需要对最终产品测试负责,作者不提供用户产品的 技术支持与保证。用户使用XBOOT默认接受以上条款。