zoukankan      html  css  js  c++  java
  • 调试升级程序记录

    前阵子,老大说串口升级协议都已经写好了,你们按着协议标准来做就行了,之前的项目都要加上升级功能,最近项目做的差不多了,琢磨着把这功能加上吧,参考这位大牛的博客:片机ISP、IAP和ICP几种烧录方式的区别http://www.eeworld.com.cn/mcu/2014/0819/article_15976.html ,I

    然后开始看那部分的代码,就是串口发升级指令,设备接收到指令之后,进入到升级模式,用了内部的某个协议,来组包发包,这个放下不表。

    大致原理就是 单片机flash 分两个部分一个是LDROM一个是APROM,APROM就是编写应用app.bin存放的地方,LDROM类似引导程序update.bin存放的地方,我没仔细去研究,回头研究清楚了,这部分再改,升级功能做法是将串口升级的部分程序烧写到LDROM中,将写的应用程序烧写到APROM中,应用程序监听串口,串口收到升级指令之后,做如下操作

    void updateprepare(void)
    {
    	uint32_t APROM_SIZE,Flag,SetBaudRate;
             SYS_UnlockReg();
                FMC_Open();
                FMC_ENABLE_AP_UPDATE();
                APROM_SIZE = GetApromSize();
                Flag = APROM_TO_LDROM;
                
                FMC_Write(APROM_SIZE-8,Flag);
                Flag = 0;
                Flag = FMC_Read(APROM_SIZE-8);
                if((Flag & APROM_TO_LDROM_MSK) != APROM_TO_LDROM){
    							return;
                }
                FMC_DISABLE_AP_UPDATE();
    
                FMC_Close();
                SYS_LockReg();
    }
    

      类似使能升级,然后获取大小,将一个标志写到最后(64K最后),然后再把标准读出来,(验证能否读写?),然后RESETCHIP,单片机重启就会自动跳转到升级程序,update.bin中去,电脑把要升级的app.bin发送到串口中去,update.bin就会接收这个文件然后写到APROM中去,

    中间卡住了一段时间,就是升级程序要求生成的ap.bin大小是64K,可实际的的大小只有17K的样子,搞不清楚怎么实现的,看了下代码是在startup_NUC029xAN.s中最后添加了

                    AREA    |.ARM.__AT_0xfffc|, CODE, READONLY
                    DCD    0x55aa5aa5
    

      这两行代码,设定变量或数组到指定的位置,就是在0xfffc后定义一个变量为0x55aa5aa5,然后再编译去发现不能生成app.bin,却生成了app.bin文件夹,里面有两个文件一个是ER$$.ARM.__AT_0xfffc,一个是ER_RO,完全不知道是怎么回事,在网上搜了一下才知道http://bbs.csdn.net/topics/390240567,需要修改编译方式按照前面网页上的说法     “

    fromelf --bincombined --bincombined_base=0x00003000 --output .DebugSAP-2L-JUM.bin .DebugSAP-2L-JUM.axf “

    "上述定义会生成三个bin 文件,分别是RO_CODE, RO_DATA, RW_DATA.
    如果使用 --m32combined 或 --i32combined 选项转换包含多个加载区的 ELF 映像,则 fromelf 会创建一个名为 destination 的输出目录,并为输入映像中的所有加载区生成一个二进制输出文件,然后将该输出文件放置在 destination 目录中。" 

    使用--bincombined 选项就可以生成一个64K的app.bin文件了,至此问题解决了

  • 相关阅读:
    Linux中的MyEclipse配置Hadoop
    C#学习笔记(三)
    关于读博,关于成为一个专家
    C#查找子串在原串中出现次数
    C#学习笔记(二)
    Matlab中sortrows函数解析
    C#学习笔记(一)
    甘特图与网络图
    ubuntu开启SSH服务
    分词错误重点分析这几项
  • 原文地址:https://www.cnblogs.com/yinseyingji/p/8288503.html
Copyright © 2011-2022 走看看