zoukankan      html  css  js  c++  java
  • C语言RH850 F1KM serial bootloader和C#语言bootloader PC端串口通信程序

           了解更多关于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 界面:

     

  • 相关阅读:
    LDA线性判别分析原理及python应用(葡萄酒案例分析)
    运用sklearn进行主成分分析(PCA)代码实现
    主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)
    Eclipse开发Android项目报错解决方案详细教程,最新版一篇就够了!
    深度学习模型调优方法(Deep Learning学习记录)
    mnist手写数字识别——深度学习入门项目(tensorflow+keras+Sequential模型)
    熵、联和熵与条件熵、交叉熵与相对熵是什么呢?详细解读这里有!
    2020 年百度之星程序设计大赛
    2020年百度之星程序设计大赛-初赛二
    Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)
  • 原文地址:https://www.cnblogs.com/geekygeek/p/rh850f1kmbootloader.html
Copyright © 2011-2022 走看看