了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。

今天我要介绍的RH850 bootloader是最近才完成的一款串口bootloader。 它和RL78 bootloader非常相似, 也分两部分, 一部分是RH850 MCU 端boot程序 rh850f1kmBoot,  另一部分是上位机,也就是PC端host 程序 rh850Loader. 他们之间有通信协定, 通信协定如下:

0x6F:     HAND_SHAKE (握手,或叫更新请求)

0x02:     WR_MEM    (Flash 烧写)

0x03:      ER_MEM    (Flash 擦除)

0x04:     VF_MEM     (Flash 验证)

0x1F:    RUN_APP    (跳转到application)

rh850f1kmBoot 的开发环境:

IDE:         CS+  for CC V7.00.00 [13 Jun 2018]

Compiler:    CC-RH V2.00.00

MCU:          RH850 F1KM R7F701684

用到了Renesas官方提供的flash library:  RENESAS_FCL_RH850_T01_V2.12

rh850f1kmBoot memory map (code flash range):   0x0000~0x17FFF;

并且新增了以下ROM sections:

R_FCL_CODE_ROM.text,                    &
                               R_FCL_CONST.const,                      &
                               R_FCL_CODE_USRINT.text,                 &
                               R_FCL_CODE_USR.text,                    &
                               R_FCL_CODE_RAM.text,                    &
                               R_FCL_CODE_ROMRAM.text,                 &
                               R_FCL_CODE_RAM_EX_PROT.text

以及RAM sections:

FCL_RESERVED.bss/FEDE0000,              &

R_FCL_DATA.bss,                         &
                               .stack.bss                      /FEDE8000

以上设置都是参照Renesas flash library pacakge (FCL) 里面的sample来做的。在CS+ 工程的linker option里配置好这些设置就可以了。

配置好了,剩下的就是完成代码了。

if (R_UART1_RcvFlag())
{
if (BTLD_FramePtr == 0)
{
uint8_t sof = R_UART1_FlagedReceive();
if ( sof != 0x02 && sof != 0x03 && sof != 0x04 && sof != 0x1F )
{
;
}
else
{
BTLD_ReceiveFrame[BTLD_FramePtr++] = sof;
}
}
else
{
BTLD_ReceiveFrame[BTLD_FramePtr++] = R_UART1_FlagedReceive();
}
}
if (BTLD_FramePtr == FRAME_BUFF_SIZE)
{
uint8_t cmd = BTLD_ReceiveFrame[CMD_INDEX];
uint8_t addL = BTLD_ReceiveFrame[ADDRL_INDEX];
uint8_t addH = BTLD_ReceiveFrame[ADDRH_INDEX];
uint8_t addU = BTLD_ReceiveFrame[ADDRU_INDEX];
uint8_t addM = BTLD_ReceiveFrame[ADDRM_INDEX];
uint32_t add32 = ((uint32_t)addM << 24)|((uint32_t)addU << 16)|((uint32_t)addH << 8) | addL;
BTLD_FramePtr = 0;
switch (cmd)
{
case ER_MEM:
BTLD_FlashErase(add32);
resetDataBuffer(BTLD_ReceiveFrame, FRAME_BUFF_SIZE);
break;
case WR_MEM:
BTLD_FlashWrite(add32);
resetDataBuffer(BTLD_ReceiveFrame, FRAME_BUFF_SIZE);
break;
case VF_MEM:
BTLD_FlashVerify(add32);
break;
case RUN_APP:
Jump_To_Application(add32);
break;
default:
break;
}
}

以上是芯片端的rh850f1kmBoot的实现。 上位机(PC 端程序) rh850Loader 是用C# 实现的。加载hex后按照协定通过RS232传输地址和数据。
  RS232 的配置如下:19200-8-None-1-None.  (19200bps 是我最常用的UART的Baud Rate 了)。

rh850Loader 带UI 界面:

C语言RH850 F1KM serial bootloader和C#语言bootloader PC端串口通信程序的更多相关文章

  1. C语言PIC16 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新PIC16 Boot ...

  2. C语言RH850 F1L serial bootloader和C#语言bootloader PC端串口通信程序

                   了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程 ...

  3. C语言dsPIC / PIC24 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新dsPIC/PIC2 ...

  4. C语言PIC18 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 新PIC18 Boot ...

  5. C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天介绍下我新完成的为 ...

  6. C语言RL78 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 前段时间完成的hype ...

  7. 自己用C语言写RH850 F1KM serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 手上有块Renesas ...

  8. 自己用C语言写RH850 F1L serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 由于有了RH850 F ...

  9. 自己用C语言写RL78 serial bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 之前用C实现过多款PI ...

随机推荐

  1. NTT 求原根

    使用NTT需要保证模数mod 为质数. 通过以下代码求得一个模数的原根 , 常见的质数的原根  998244353 -> 3    1e9+7 -> 5 #include<bits/ ...

  2. jQuery, 文本框获得焦点后, placeholder提示文字消失

    文本框获得焦点后, 提示文字消失, 基于jQuery, 兼容性: html5 //所有文本框获得焦点后, 提示文字消失 $('body').on('focus', 'input[placeholder ...

  3. git工作中总结

    # .克隆到本地 git clone url git clone -b 分支 url # 注意:克隆完成后,要删除.git隐藏文件夹 # .修改代码 # .生成master git init git ...

  4. python3三元运算

    条件:简单的条件判断语句并且有返回值 作用:简化代码和装X 格式:为True执行的语句 if 判断条件 else 为False执行的语句 例子 def f(a, b): ""&qu ...

  5. ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'问题的解决

    .与limit相关的sql语句作为临时表 select * from 临时表 limit ) as B 缺点:只能查临时表的数据 .可以查原表的数据 select * from test where ...

  6. C入门题目

    37. 反转一个3位整数 反转一个只有3位数的整数. 样例 样例 1: 输入: number = 123 输出: 321 样例 2: 输入: number = 900 输出: 9 注意事项 你可以假设 ...

  7. applyColorMap 在OpenCV中对灰度图进行颜色映射,实现数据的色彩化

    什么是色彩映射: 说直白点就是将各种数据映射成颜色信息,例如:温度,高度,压力,密度,湿度,城市拥堵数据等等 色彩化后更加直观表达 在OpenCV里可以使用 Mat im_gray = imread( ...

  8. Python学习,第八课 - 函数

    本次讲解函数,由于内容比较多,小编列了个大纲,主要有一下内容: 1. 函数基本语法及特性 2. 函数参数 3.局部变量 4. 返回值 5.嵌套函数 6.递归 7.匿名函数 8.高阶函数 9.内置函数 ...

  9. P4语言环境安装(一)前端编译器p4c、后端编译器p4c-bm2-ss

    这个P4安装环境是在2020-2-8安装的,安装环境卡了我好几天,把遇到的问题记录下来,有需要的同学可以参考一下,要是说错了或者有问题的话,评论或mail:guidoahead@163.com联系我都 ...

  10. Docker(三):利用Kubernetes实现容器的弹性伸缩

    一.前言 前两章有的介绍docker与Kubernetes.docker是项目运行的容器,Kubernetes则是随着微服务架构的演变docker容器增多而进行其编排的重要工具.Kubernetes不 ...