打印
[热门应用]

Chipon bootloader代码开发方案概述

[复制链接]
918|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ylslib|  楼主 | 2019-2-28 09:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

沙发
ylslib|  楼主 | 2019-2-28 09:38 | 只看该作者
一、概述
        ChipON芯片存在型号支持Flash自写,该特性可将部分空间作为数据存贮空间。另一方面可通过编写引导程序实现bootloader模式下程序的更新。该应用方案描述这类应用实现的思路。

使用特权

评论回复
板凳
ylslib|  楼主 | 2019-2-28 09:38 | 只看该作者

使用特权

评论回复
地板
ylslib|  楼主 | 2019-2-28 09:39 | 只看该作者

使用特权

评论回复
5
ylslib|  楼主 | 2019-2-28 09:39 | 只看该作者
(3)通用数据EE空间
        存在型号支持EE空间和编程,这里的应用代码项目和bootloader代码项目根据需要操作对应的空间即可。
        可以根据代码检查初值为原始,并完成初始化系统应用值。也可以通过IDE工具的项目属性的视图生成,生成文件为eeprom.ee,需要说明的是,应用代码和bootloader无法对EE初始值分开分别赋值(无法做到项目相关性)。故建议EE空间分配给应用代码项目。Bootloader一般不需要EE存贮数据,如果需要可以占用自写的Flash区间实现数据存贮。

使用特权

评论回复
6
ylslib|  楼主 | 2019-2-28 09:40 | 只看该作者

使用特权

评论回复
7
ylslib|  楼主 | 2019-2-28 09:40 | 只看该作者
三、应用实现思路
(1)程序选择运行设计
          根据需要可自行进行设计,参考设计如下:
        A、基于公共变量做标记,程序运行从起始地址(划分为bootloader程序)运行,即0x0000地址,识别公共变量具有特定值,即应用程序自定义接口做标志的转入的功能切换。需要注意的是,因为RAM上电具有随机值,故该特定值应该避免随机匹配,可以设计2个以上字节变量,如long型变量4字节特定值设计(0xAA55A55A)。此应用应该引入看门狗系统,条件满足时置标志并看门狗等待复位。从而使bootloader程序引导选择执行。
        B、利用芯片的外部复位(不局限于此),设计bootloader进入条件,如P02启动时开启上拉,检测到低电平为需要进入bootloader。(bootloader需要完成程序的自写编程,因此可以检测是否具有应用程序,这里应有bootloader代码完成读取应用程序空间,判断有代码识别)。此应用应该选择设计特性上不影响功能的脚,该脚支持上拉或外部上拉实现请求检测。
        注:实现该方案下:bootloader程序可以给应用程序贡献函数,同样应用程序也可以给bootloader贡献函数。功能实现转换下,需要知道对方的入口,故需要特别的入口引导,而在C开发中不支持指定函数的地址。因此引入配置项目,并将配置项目的输出引入到对应的应用程序或bootloader程序中。具体见样例说明。

使用特权

评论回复
8
ylslib|  楼主 | 2019-2-28 09:40 | 只看该作者
(2) RAM资源划分实现
        根据需要,我们可以分配应用程序和Bootloader程序各自具有自己的RAM空间。但因为程序的分开运行,也可以不做区分。存在例外:如软件切换的标志变量,如工具链传递参数的堆栈机制。即两套程序的这些例外地址空间应该一致。
因C变量编译后的变量增加了前缀“_”,因此即使通过__at(0x80)公用了0x80~0x8X,但unsigned char __at(0x080) STK00定义的结果变量是“_STK00”,不是函数传参的STK00变量。
因此需要汇编定义STKxx变量,Bootloader程序和应用程序程序需要将编译的库,即o文件链接到自身的项目中。这里命名对应stk.asm和stk.o。

        RAM空间划分实现:项目下分别添加occupancy.txt。当设计分别具有的RAM空间时,实现举例:
        假定256个RAM空间的2个分区的举例应用,0x80~0x8C为stk变量空间,0x180~0x18F为复用的同意义参数传递。
bootloader程序内容添加:
        data 0x190  0x1FF   :注释,空间占用,使不分配使用给bootloader程序,根据如上空间差异示例的gprx,分别将对应段的空间是否不使用给应用程序进行排除。

应用程序内容添加:
        date 0x8D  0x0FF    :注释,空间占用,使不分配使用该应用程序,如上说明。
举例中,针对0x180~0x18F空间,假定bootloader和应用程序复用,应该具有一样的意义【独立运行不需要各自分配空间除外】,空间均需要定义满变量,即显式地址分配。考虑单独编译关系分析不完整,复用变量需加volatile修饰。复用变量不做在stk库中,应该由各自的程序中建立并使用,如下示例。
                volatile unsigned char                 __at(0x180) var1;
                volatile unsigned int                 __at(0x181) var2;
        volatile unsigned char                 __at(0x183) arr[13];
涉及到RAM的初始化问题,Bootloader过程赋值后调用User时,User的初始化程序会被调用执行完成该变量进行初始。因此在程序运行上运行逻辑需要做调整。
考虑不同RAM区域需要切区,我们建议公共STK变量和复用变量定义放置在BANK1区。Bootloader的专用变量放置在较后面的BANK区域。即尽量应用程序的变量在BANK0区和BANK1区,这样操作SFR时可减少切区的代码量,增加空间的使用效率。
另外需要说明的是,调试占用固定入口地址0x0E00的约255个地址的程序空间,同时占用0x0F3~0x0FF的RAM地址空间。调试建议在正常型号的开发下验证。针对该方案的设计不支持进行调试。

使用特权

评论回复
9
ylslib|  楼主 | 2019-2-28 09:41 | 只看该作者
(3) 程序空间资源划分实现
                支持Flash自写的型号,一般具有2级中断,运行由Bootloader程序转入应用程序执行,中断存在高低2个优先级,片内中断入口固定在0x04和0x14,需要使用共享RAM区定义的变量标记或设计的外部条件区分当前运行在那种模式,并调用模式自身的中断处理函数。因此需要引入引导库。Bootloader程序和应用程序库定义和声明内容不同,因此需2个独立的库文件,但入口要统一规划设置。
        空间分配仍然使用occupancy.txt文件,该文件除了声明RAM占用,也支持进行Flash空间的占用声明。
        因此occupancy.txt中除了RAM的占用分配外,添加程序空间的划分。同时因为支持C开发bootloader程序,空间可能不会用完,故不支持将bootloader库引入到应用程序项目而编译生成1个hex文件。这需要后期的hex合并功能,或仅下载bootloader,应用功能通过设计实现自写Flash接口完成下载到芯片中。【可后期工具或手动完成hex代码合并】。
bootloader程序内容:这里假定bootloader程序占用2K工作空间,举例KF8L23Z20型号添加内容如下:
        code  0x0800  0x0FFF   :注释,每4K分页的页1部分划分
        code  0x1000  0x1FFF   :注释,每4K分页的页2部分划分
        code  0x2000  0x27F5   :注释,每4K分页的页3部分划分,不包括ID的校验和需求空间
        红字标明的部分,根据需要可以进行调整,这里0x800表示User的起始程序,对bootloader来说,上述地址空间给给予代码空间分配,即设计容量前2K。
应用程序内容:
        code  0x0000  0x07FF   :注释,bootloader空间,不分配使用给应用程序。
        …………………………   :注释,因为页概念,可以根据应用程序空间需要屏蔽多余的空间,从而实现hex代码集中靠前放置,如仅需要2K空间,可以屏蔽页2和页3。如果小于6K,可以屏蔽页3。

使用特权

评论回复
10
ylslib|  楼主 | 2019-2-28 09:41 | 只看该作者
(4) 开发实现
                需要建立3个项目进行管理。
                        全局化声明、引导。如建立函数传参的通用全局变量,公共RAM变量。
                        Bootloader开发项目,分配空间下代码编译,hex。
                        应用开发项目,分配空间下代码编译,hex。

使用特权

评论回复
11
ylslib|  楼主 | 2019-2-28 09:41 | 只看该作者
(5) 编程下载
                 ChipON工具可直接实现Bootloader程序的下载,即使用编程器的下载。应用程序可以开发应用软件进行代码更新,这里不再考虑,首次可以组合完整hex进行下载。       

使用特权

评论回复
12
wakayi| | 2019-3-3 13:57 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
13
wowu| | 2019-3-3 14:17 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
14
bvbgbhbn| | 2019-3-29 16:24 | 只看该作者
非常感谢楼主分享!很好的资料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

230

帖子

1

粉丝