一个RL78 bootloader样例程序.
MCU: RL78G13, R5F100LE, 64K ROM,
IDE: CS+ for CCRL.
通讯口为UART, Xmodem, 发送bin文件
Boot : 0000 - 1FFFH, Boot的_start 在0xd8,
APP: 2000 - FFFFH, 其中2000开始的FLASH_TABLE是虚拟向量表( ftable.asm), 通过向量表映射实现中断访问, APP的程序入口地址(_start)在2200H
对于不同的ROM size移植, 只要将App的地址作相应的平移.
样例程序 4150.OTA_Test_0319.zip
硬件手册 https://www.renesas.cn/us/zh/document/man/rl78g13-users-manual-hardware?r=1054286
和资源分配表https://www.renesas.cn/us/zh/document/mat/rl78-family-self-ram-list-flash-self-programming-library-rev305
请认真参照样例程序(section定义, 和其他build option设置 ) 和 硬件手册, 资源分配表构建自己的bootloader. 如果编译和调试过程中发生错误, 再仔细看看自己的工程和样例之间的差异(asm文件和初始生成不一样, 有改动, 请参考修改).
cstart.asm只是做了基本的堆栈初始化, 段的配置等操作, 不设计用户IO, timer的初始化, 所以hdwinit就是预留一个接口做这件事的,
你是什么单位看看是不是需要给你们安排线下支持. 私信给我han.huang.yk@renesas.com
黄工,向您请教几个问题,您方便解答一下吗?
屏蔽了的是没有用到, 不要去考虑.
.db, .db2, .db4 分别定义1byte, 2byte, 4byte, 这里是构建的App的(虚拟)向量表
0xfffffff, 相当于没有中断
BR是汇编无条件跳转指令
BR !!Function_name, 是跳转到中断服务程序, 这里是和boot的build tool里面的设置相对应的, 如下图.
此样例程序, boot不使用中断, 把中断向量表留给了App使用, 因为只有一个硬件的中断向量在boot区(0-7F), 所以中断发生后, 从0-7fH某一地址, 指向到 0x2000+offset, 再从这个地址跳转(BR 汇编指令)到Function_name(中断服务程序), 也就是这里做了一个虚拟的中断向量表.
如果你要用某一个中断, 就参考RL78/G13 HM中断一章节的中断向量表, 然后把上面的表对应的地址改成 BR !!function_name
BR !!Function_name 一共占用4byte, 所以这个虚拟向量表每一个中断对应4byte. 你可以通过simulator, 在debug状态下, 参照memory, 结合程序, 加深对这部分的理解.
黄工,也就是说我要将boot部分移植到F14,extern_ftable.asm没啥用,不用管这个文件?
请问需要修改的地方除了uart驱动(G13和F14某些寄存器不同导致uart驱动配置不同),user_def.h(RL78G13, R5F100LE和RL78F14, R5F100pgg存储空间大小不同),还有别的地方需要修改或者注意的吗?
是的, 你先把这个程序吃透, 可能F14 和G13的中断向量表不是一一对应的(肯定是不一样的), 所以你要按照F14的HM 中断一章节修改ftable.asm,
这里是把原理告诉你, 至于你怎么拓展, 根据你的应用需要.
黄工您好,请问这些内存分配应该参考什么资料来设置呢?什么名字分配什么地址,我应该去哪里查资料呢?
https://www2.renesas.cn/cn/zh/document/mat/cc-rl-compiler-users-manual
参考编译器手册
https://www2.renesas.cn/cn/en/document/mat/rl78-family-self-ram-list-flash-self-programming-library-rev305?language=en&r=488891
RL78 Family Flash Self Programming Library Type01 User's Manual Rev.1.05
黄工,请问只向板子烧录boot工程,可以实现串口升级功能吗?
在生产或开发过程中, 可以是用RFP https://www2.renesas.cn/cn/zh/software-tool/renesas-flash-programmer-programming-gui 把boot的程序, 烧写进MCU.
一般在生产阶段出厂时, 会把boot + App整合成一个hex/mot文件, 一起烧写进 MCU. 烧写进去以后, boot就具有串口升级功能.(因为boot的功能就是实现flash的擦写 和 通过串口接收数据), 详细的过程和结构可以仔细研究一下样例程序.
,请问,左边已经是一个发送函数了,右边那个发送函数的作用什么呢?
而且app程序中并没有用到uart1的中断吧,app的中断向量表为什么会需要这两句
BR !!_r_uart1_interrupt_send ; BR !!_r_uart1_interrupt_receive ;
仔细看boot 和 app工程, app是没有用到, 这个是示例, 告知中断怎么设置不可以吗, 不然你怎么知道中断怎么用.
请问这些配置函数前面加上boot是因为subproject的原因(防止和app里面的函数名冲突)还是因为是boot工程,需要这么写?
subproject 之间的文件名, 和 Function 都不能相同.
想问下有单片机寄存器自检的例程么