1967|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

28335 程序自动升级的方案 [复制链接]

     看了官方的的bootloader但ti官方的bootloader是固化死的,不能修改,它的引导是根据单片机特殊硬件引脚上电的状态来执行引导,我们需要一个纯软件的引导,因此还需自己制作,翻阅了ti的很多资料以及网上各位大神的点化搞了一个星期终于完全搞定了,现将走的曲折记录下来,有遇到相同问题的友友可以少走一点弯路。

    一,将.out转换为txt文本的数据流


1.编写out2hex1.cmd文件,内容如下

Uboot.out 
-map upgrade.map
-a
-boot
-sci8
-o upgrade.txt

2.编写Buit.bat内容如下

hex2000.exe out2hex1.cmd

3.将hex2000.exe, out2hex1.cmd、Buit.bat放在同一个目录(我就放在debug目录里)

4.运行Buit.bat会生成upgrade.map和upgrade.txt

二,对照TI文档解析数据流

具体意义及HEX2000的参数请自己研读,这里不再赘述。

三,移植Flash28335_API_V210的库文件

ti的所有帮助都在controlSUITE安装包里边,请安装。

flash的操作要在RAM中运行,关闭全局中断,修改CMD文件

ubootfuncs: 
    {
        -lFlash28335_API_V210.lib(.econst)
        -lFlash28335_API_V210.lib(.text)
    }                     LOAD = UBOOT_RAM, 
                         RUN = RAML7, 
                         LOAD_START(_BootRamLoadStart),
                          LOAD_END(_BootRamLoadEnd),
                          RUN_START(_BootRamRunStart),
                          PAGE = 1
    ubootrom            :> UBOOT_ROM     PAGE = 1
    ubootdata           :> RAML7     PAGE = 1

四,升级的整体方案

笔者一开始的想法是把bootloader和应用程序合为一个程序,因为这样程序维护方便,不用两个程序的折腾,思路就是把bootloader的.txt 段,.ebss段等所有段定位与应用程序分开,到最后遇到一个问题,就是全局变量的初始化上一旦应用程序被擦除,bootloader受影响,这个问题当然可以解决,可以在上电初始化全局变量的过程中做些文章,但考虑到程序的后续维护者,估计维护起来很吃力,就放弃了,采用传统的两个程序,一个bootloaer和一个应用程序,两者利用CMD文件在ROM段分开即可,实现简单的,但要两个程序,上电时两个程序的跳转可通过#define CALL_FUNC(pfun)  (*((void(*)(void))(pfun)))() 其实是一个函数指针的绝对地址跳转。另外笔者说一点就是报文解析,也是很有学问的,笔者第一次看到一个高手对报文解析的程序,很是佩服,最主要的亮点就是回溯思想,史工威武。

两个月的dsp学习从0基础到现在,有一点点成就感,接下来的岁月继续搞linux应用了,呵呵,linux应用的水还是很深的,努力。

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表