实例介绍
讲述了使用CAN更新DSP28335芯片程序的原理与使用方法、基本操作
2工作原理 21C2000上电引导过程 c2000系列DSP上电以后从内部 BOOTROM引导,上电复位以后DSP跳转到0x3FFC0 执行内部 BOOTROM中的代码,根据特定GPO状态,判断引导模式,一般均使用 FLASH引 导模式,即 BOOTROM中代码执行完毕之后将控制权交给 FLASH中的代码。 整个过程如图1所示。 上电 BOOTROM (Ox3FFFCO) 3FFF6 FLASHB FLASHC 用户程序 图128335上电引导过程 22XB0OT工作原理 c2000内置 BOOTROM通过GPo来判断引导模式,单板设计时需要设计引导跳线,每 次更新程序要插拔跳线,使用不便。同时内部 BOOTROM中的代码只能执行简单的代码更新 功能 上电 BOOTROM FLASHA (Ox3FFFO) 0x33FFF6)Boot! FLASHB FLASHC (0x3F000 用户程序 图2 XBOOT工作原理 实际中C2000系列DSP的 FLASH空间往往都很大,将 FLASH按照扇区( sector)划分为几 部分, FLASHA包含了 BOOTROM的跳转地址0x33FF6,用来存放 XBOOT程序; FLASHB用来 模拟内置 EEPROM;剩下的所有FLAH存放用户程序。 上电以后, FLASHA中的 XBOOT代码首先执行,根据串口或者CAN接口数据流判断进入 用户程序还是 XBOOT shell,如果05秒内某个串口上连续收到5个字母e',进入 XBOOT shel, 否则进入用户程序。这样设计会带来上电0.5秒的上电延时,一般可以接受,带来的好处是 硬件设计无需额外的跳线。 XBOOT she中可以执行用户固件|AP更新功能。 3使用方法 31进入 XBOOT She方法 XBOOT上电启动以后在05秒内检测串口输入,如果收到连续5个字母“e”,便进入 BOOT Shel:;否则访问模拟 EEPROM获取用户程序入口点,如果用户程序有效,执行用户程 序,否则进入 XBOOT shel 使用超级终端连接串口,波特率115200,8位数据,1位停止,无校验,无流控。按住 键盘上的字母“e”’,点击控制板上的复位按键,或者给控制板重新上电。可以进入 XBOOT shell CAN接口借助υ ARTCAN或者 USBCAN馊件,设置工作模式为桥接模式,其余使用方法 与串口完全相同。 超级终端为windσwsⅹP自带程序,通过“开始->所有程序-→>附件->通讯->超级终端”打 开。 Windows7系统不带超级终端,可以将 WindowsⅪP系统的超级终端软件拷贝过去直接 使用。 32更新用户软件详细步骤 首先连接 BOOt she,使用 empty命令查看要写入的 FLASH是否为空,如果不为空, 使用 eraseⅹ命令擦除软件所在 FLASH,其中κ为 FLASH名字,取值a、b、C.… 使用 ymodem命令更新用户软件,请参考44内容 注意: erase a命令将擦除包括 XBOOT在内所有 FLASH内容,也包括加密密码,擦除所 有 FLASH内容以后掉电之前,ⅩBoσT仍然可以运行并且更新稈序,如果擦除以后掉电,只 能使用仿真器将ⅪBOOT写入DSP。 将用户代码写入未擦除的 FLASH运行结果将是不确定的。 4基础命令 本节对基础版 XBOOT提供的命令进行描述,基础命令足以完成IAP功能。 4.1 empty FLASH查空命令,无参数,用来检测用广 FLASH是否为空。 empty FI ASHA is NOT empty Qx338096 FLASIIB is NoT empty C (xJJ0006 FLASHc is empty 0x 328960 FLASHD is empty 0H320000 FLASHE is empty 0%318000 FLASHF is empty a 9x310955 FLASHG is empty 5x 308060 FLASHH is empty 9x300900 图3empy命令执行结果 注意:28335的 FLASH最小擦除单位是一个扇区,写入之前必须确保为空,否则需要先 进行擦除 4,erase FLASH擦除命令。 erase命令接受一个字符串参数: abcdefgh,分别对应8个 FLASH扇区。可以同时指定 多个 FLASH扇区,如 erase bcd将会擦除三个fash扇区。 注意: erase a命令将会擦除 FLASHA,也就是ⅹBOoT本身所在的 FLASH扇区,擦除 XBOOT 以后,芯片成为空片,DSP也将解除加密,如果掉电,只能使用仿真器将ⅩBOOT写入DSP erase b erase lesli sector 0x02 OK enpty FLASHA is NOT empty g 0x338600 FLASHB is empty d 0x330000 FLASHC is empty d Ox328000 TLASHD is empty 0x320000 FLASHE is emply Ox318000 FLASHF is empty x310000 FLASHG is empty园3g8cg FLASHH is empty e ax300000 图4 erase命令执行结果 4,3 reboot 重启系统。带一个延时参数,单位ms。执行 reboot1000即延时1秒以后重新启动,无 参数默认10ms延时以后重新启动。 4.4 ymode 使用 ymodem协议更新用户软件。 执行 ymodem命令,超级终端显示宁符“C”以后,选择菜单发送>发送文件,弹出图5 对话框,文件名选择用户程序的hex文件,协议选择 Ymodem,点击发送即可,命令执行成 功以后如图7所小。 发送文件 件夹 文件名F〕 Ⅱ:{ PP her 浏览G) 议吧 发送6)匚关闭0)取消 图5选取发送的hex文件 为COM1115200发送 Ymodem文件 正在发送:卫:AP.he 数据包:120错误检查:CE文件大小:132K 重试次数:0 重试总次数:0 文件数:11 上一错误 文件 ■■■■■■■■■■■口■■■■口■■■■口口口■■ 11TE了132K 已用 00:0:25 剩余 吐量:4792cp 匚取消(qPs/hs〕 图6APP固件发送过程 ymodem Warning: flash address 0x JJ0000 is not empty, do not use it ymodem update firmware press a to abor t CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC Update firmware OK! Fi1 e Name:∩PP.he File size: 197951 End Addr 0x 32ED79 图7 ymodem命令执行结果 执行 ymodem命令以后,超级终端显示C时,可以按字母a取消命令。 用户发送的APP固件,不能使用 FLASHA或者 FLASHB,否则将公损坏 XBOOT固件。 4.5 help 显示XBO0T帮助信息 empty ->empty Check flash sector is empty or not erase -> erase labcdefgh erase flash sector entry - entry they addr] get/set user app entry menrd->memrd thex addr] [hex len] Show Memory gotO o hex addr] to execute eeprom ->eeprom [load i save readwrite] laddr] [datal uuid - uuid [128bits hex string] show/Setup Uuid reboot - reboot delay ms] Restart boot ymodem ->update user APPs help p InTo version - version display boot info 图8help命令输出 注意:基础版本不支持 entry、 memrd、goto、 eeprom、uuid命令。 4.6ⅴ ersion 显示 XBOOT版本和版权信息。 version for TMS320F28335 by ECHO Studio <echo. xjtugmailcac boat v16,88.12SN:66E4D∩6F897F4B』nn66DB4907738 HI Rights Reserved 图9 version命令输出 注意:没有写入唯一D的DSP芯片,序列号SN内容为全FF。 5高级命令 定制版 XBOOT可以支持高级功能,通过本节提供的扃级命令进行支持。 5.entry 设置、查看用户程序入口点 默认无参数查看当前用户程序入口点,带一个参数为设置用户程序入口点。 entry user app entry is 0x328000 ntry t user app entry to 0x320000 entry user app entry is 0x320000 图10 entry命令执行结果 5.2 memrd 读取DSP内存。內存地址包括SRAM或者 FLASH memrd命令接受两个参数,第个为要读取的内存地址,第二个为要读取的数据长度, 默认128。全部为十六进制。 memrd o38000 x33809990@9388909889903g8000099 x3388889003318gg8g88ggg3180g0gg ×33881080009328g880g888089』0328008的098 Ax3388189696993389660908996963380000009 3382090809948002001999898400020091 8x338828「E121E46g44ns428n56764984n964D 0x338030 5200 Ec13 FIEF 509E 28110 53t/064120716 的x33883819811E48c4428300898n9n6669D 的x33840G4488F33 FFFF A8∩9Fn668879642FF x3388R6的1Fn?RF6F16G?838的n8n9 8x3388589FA6669C4488F3897FFR8n9"n66898 x338658國642FFA!11E456BF104E6F0390C 8x3386606F707648821976229n93F4n9的n8D761n x33886882811E58064658685C5C4E64AFF69 x33877648298964B2B519251522D6728BE8 0338678761F03366240Fn6EC93c524367844 图11 memrd命令执行结果 5.3 goto 跳转到新地址执行。 接受一个复位向量作为参数。28335平台下goto336*会重启 XBOOT,如图12。 oto FFB goto address OxF+bb to execute 图12goto命令实现 XBOOT重启 5.eeprom 读写DSP内部模拟 EEPROM。带四个了命令:read、 write、load、 save c 读 eeprom: eeprom read[地址][长度],其中地址为必要参数,长度可不填,默认128 字,从内部缓存读取数据 写 eeprom: eeprom write[地址][数据],其中地址和数据均为必要参数,数据写入内部 缓存。 加载 eeprom: eeprom load,数据从 FLASH加载到内部缓存。 存储 eeprom: eeprom save, eeprom数据从内部缓存写入 FLASH,掉电保存。 读取内部 eeprom内容执行结果参考图13 内置 eeprom总共255个16位宇,前16个字预留给 XBOOT自身使用,其余用户程序 可用。 eeprom read 0x0000 8000 0032 FFFF 01F4 FFFFFFFF FFFFFFFF 0x0008 FEFF FFFF FEFF FFFF FFFF FFFFFFFF FFFF x9109829981c299的14R99g的9 FFFF FFFF 0x9018 FFFF FFFFFFFF FFE FFFF FFF FFFF FFFF x20的082的981C2090814B9@009 FFFF FFFF 0x0028 FFFF FFFF FEFE FFFF FFFFFFFF FFFF FFFF 0x0030 007D FFFF FFF FFFF FFFFFFFFFFFF FFFF Gxg038 FFFF FFFFFFFF FFFFFFFF FfFF FFFF Ff x400681g9g1C20600814B800 FFFF FFF ×』48 FEFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF Gx0050 FFFF FFFFffFFffFF FFFFFFFF FFFF 0x0058 FFFF FFFF FFFF FFFF FFFFFFFF FFFF FFFF 0x0060 FFFFFFFFFFFFFFFF FFFF FFFFFFFF FFFF ×』968 FFFF FFFFFFFFFFFF FFFFFFFFFFFF FFFF 0x0070 FFFFFFFFFFFF FFFFFFFFFFFFFFFFFfFF 图13读取内部模拟 eeprom 5.uuid 查看或者设置芯片的唯·1D。芯片的唯·ID可以用作芯片序列号、单板序列号、设各 序列号。还可以用来加密固件。许多现代MCU如STM8、STM32、STC本身提供了唯一ID TC2000系列MCU没有提供唯一1D, XBOOT利用OTP存储空间来实现唯一1D功能 不带参数的uuid命令可以显示当前单板的uuid,如卜所示: uuid BBF2CE53C8B54062B42C3E8423AD9E88 如果单板没有设置uuid,uuid命令无输出。 未写入ud的单板,可以使用uud命令写入uid,如下所示。 uuid BBF2CE53C8B54062B42C3E8423AD9E88 uud介绍及成方法参考7 注意:块单板uud只能写入次,要保证写入的uuid每次都是重新生成的,避免重 复。uuid写入以后,重新擦写 FLASH均不受影响,更换uid的唯一方法是更换新的芯片。 6用户软件编写指南 61复位向量 TMS320F28335 FLASH入口地址为0x33FFF6,这个地址位于 FLASHA,已经被 XBOOT占 用。用户代码需要使用另外的复位向量。 XBOOT默认会将入∏地址设置到 FLASHC丌头两个 字,地址0X328000,上电后XBOT可以跳转到 FLASHC执行用户代码 用户代码需要将复位向量放到所在 FLASH扇区开始两个字。如图14所示,所有用户代 码放在 FLASHC,复位向量占用 FLASHC开始两个字。 85 FLASHC origin =0x328002, length =0x007FFE 86 BEGIN origin = 0x328000, length 0x000002 87 FLASHB origin 0x330000, length 0x00800E 88 FLASHA origin =0x338000, length =Bx007F8B 89/* BEGIN origin= 0x33FFF6, length 0x000002 gE CSM RSVD origin = 0x33FF80, length = 0xB00876 图14用户软件复位向量(28335 定制版 XBOOT固件可以使用 entry命令重新设置复位向量,实现多APP支持。 由」 XBOOT木身使用 FLASHA和 FLASHB,用户程序不能占用这两处 FLASH,编写cmd 文件时需要注意,用户程序编译后注意检查map文件,确认两块 FLASH没有使用,见图15。 12 ane origin length unUs已 13 14 pAge 8. 15zoNE日 884ee8881888E98Ee91898 16 RAMLEL1 BB8B吧2B2eB813f82Bc8 1 RAML2L3 1820NE6 19 ZoNEZA 26 FLASHH 3¢88E888888 21 FLASHG 8838888288BB7ffe8888888887ffe 22 FLASHF 8E31898E898 8 9885BE9898 23 FLASHE 00318002 00007ffe 00000ee0 00007ffe 24 FLASHD BB3288888888888BB88888 25 BEGIN 8B3288888888888288888B828EBE 26 FLASHC 8328c287fFee66fd28191 27 FLASHB 338eB吧88888eBe8B吧9e88 28 FLASHA 8B33888888B87F88888888888B878B 图15用户软件编译后不能占用 FLASHA和 FLASHB 62生成hex文件 使用hex2000命令行工具将CCS编译生成的out文件转化为hex文件。命令如下: hex2000--intel-romwidth 16-memwidth 16 tEStout 其中TEs.out为需要转化的.out文件,根据实际需要进行替换 hex文件实际为文本文件,可以使用文本编辑器打开查看。 cCS5可以设置编译完成自动输出hex文件,设置方法如卜 在工稈名上按At+ Enter打开项目属性设置页,然后按照图16设置即可。 uild Configuratio 点ctiv Optimization E Builder @) Behaviour** Steps Li Variable: D Er Pre-build st Per Advison D Advanccd Options Ceo Link Basic Options DesI File search path b Advanced Options Post· build ste Command SCG_TOOL_HEX"-isBuildArtifactFile Namel"-c De script。n: Create flash image: InteI-HEX Apply Predefined Step! Create flash image: Intel-HEX 图16CCS5.5设置自动输出hex文件 7uuid生成指南 UUD含义是通用唯一识别码( Universally Unique Identifier),是指在一台机器上生成的 数字,它保证对在同一时空中的所有机器都是唯一的。通常使用一个16进制字符串表示, 如:BBF2CE53c8B54062B42C3E8423AD9E88。 liNux Linux平台下可以使用 uuidgen命令生成uid,见图17,注意输入时去掉中间的'-'分隔 符。 lecho@ubuntu: rg uuidgen 148e3f58-7d9b-4fa8-9d45-6671216e24ca 图17 Linux下使用 uuidgen命令生成uuid 7.2 Windows Windows平台下可以使用 PDFFactory软件米生成uuid,见图18。 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论