了解更多关于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. Java入门 - 语言基础 - 06.变量类型

    原文地址:http://www.work100.net/training/java-variable-type.html 更多教程:光束云 - 免费课程 变量类型 序号 文内章节 视频 1 概述 2 ...

  2. 【java基础】妙记进制转换

    一.二进制与十进制 1.正整数十进制转二进制 口诀:除二取余,倒序排列 解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取将除得的余数,即换算为二进制数的结果 例如把5 ...

  3. Docker获取镜像报错docker: Error response from daemon

    docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled ...

  4. php--->查询超大文件(12G)

    今天遇到一个要在一个12G日志中查询数据的需求,手中暂时没有查询这种超大文件的工具,于是自己写了一个程度来读这个超大文件 其整体思路就是一行一行地去读取超大文件中的数据,然后将拿出的一行数据做相应的查 ...

  5. C语言秋季作业4

    本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业连接 我在这个课程的目标是 熟练掌握for循环语句的运用 这个作业在那个具体方面帮助我实现目标 通过作业练习 参考文献 文 ...

  6. Datagrip 快捷键和常用插件持续更新一集一些使用技巧

    快捷键 Ctrl+Enter:执行选中的SQL语句 Ctrl+Shift+左右箭头:调整列宽度(选中行,可以调整所有列的宽度) Ctrl+N / 双击Shift :全局搜索,点击可直接进入表 Ctrl ...

  7. 【学习笔记】Linux基础(零):预备知识

    学习笔记(连载)之Linux系列 Note:本学习笔记源自<鸟哥的Linux私房菜(基础学习篇)>一书,为此书重要内容的摘要和总结,对于一些常识性的知识不再归纳 新型冠状病毒引发的肺炎战& ...

  8. alert弹出窗口,点击确认后关闭页面

    alert("点击确认后,关闭页面"); window.opener=null;window.top.open('','_self','');window.close(this);

  9. 安装jrebel并激活

    1.File-Settings-Plugins搜索jrebel,找到JRebel for IntelliJ ,点击install(我这里已经安装过了,所以显示的是更新) 2.重启idea 3.激活步骤 ...

  10. sass css样式:@for循环、样式变量与#{} 变量插值

    /* sass 可以用写JS的思想来写CSS代码         *   #{}                 用来插值,大括号中填写需要插入的变量         *   @for 变量 from ...