当前位置: 首页 > news >正文

使用Y modem协议进行瑞萨RX MCU OTA数据传输

一、Y modem协议
X modem是较早的文件传输协议。Y modem是X modem的改良版,有传输快速稳定优势,通常所说的Y modem一般指YModem-1K。

Y modem协议帧


二者核心差异可概括为下表:



二、基于X modem的OTA代码修改
目前瑞萨官网提供的OTA代码基于X modem协议(例如r20an0640ej样例程序的System_BootLoader工程),改为Y modem协议需修改协议相关的传输逻辑、校验逻辑、帧处理逻辑等部分。

01 握手信号调整
X modem握手:通常接收方可能以简单ACK或特定字符(如有些实现中接收方发‘C’表示用CRC16校验)启动,逻辑相对简单。
Y modem握手:必须由接收方发起YMODEM_C(字符‘C’,ASCII码0x43),发送方收到后才开始传输起始帧(含文件名、文件大)。

修改点:新增函数void ymodem_send_c(void),用于发送Ymodem协议必需的0x43(‘C’)握手信号,通知发送方传输起始帧。

02 起始帧结构与处理
X modem起始帧:一般直接传输数据块,无文件信息。
Y modem起始帧:需将文件名、文件大小放入起始帧(以SOH133字节长度帧传输,包号固定0x00,包号反码0xff)。

Y modem起始帧


修改点:
   定义Y modem起始帧结构体ymodem_start_frame_t
   修改帧校验函数uint8_t xmodem_check_frame (uint8_t* const p_xmodem_buff),增加对起始帧格式的校验逻辑。

03 数据帧接收处理
X modem数据帧:帧头为SOH(128字节块)或STX(部分衍生版1024字节块),现有代码帧头为SOH(128字节块)。
Y modem数据帧:帧头以SOH(128字节信息块)、STX(1024字节信息块)区分,传输时需按规则填充数据。SOH帧如最后一包不足128字节时的填充0x1A处理,最后一帧长度仍为133字节;STX帧最后一包数据小于等于128字节以133字节帧长度发送,大于128字节小于等于1024字节,以1029长度帧发送,无效数据填充0x1A。

Y modem数据帧


修改点:修改uint8_t xmodem_check_frame (uint8_t* const p_xmodem_buff),修改数据帧的接收处理。

04 结束帧处理
X modem结束帧:一般发送EOT(0x04)字符,接收方回ACK即结束。
Y modem结束帧:采用SOH133字节空包(数据区、校验等填0x00)作为结束帧,需构建对应结束帧发送逻辑:

Y modem结束帧


修改点:修改uint8_t xmodem_rx_frame (uint8_t* p_xmodem_buff),对结束帧进行判断,响应两次EOT,分别回复NACK和ACK。

05 校验机制升级
X modem校验:使用校验和或CRC16,目前X modem例程使用校验和。
Y modem校验:Y modem强制规范使用CRC16校验,且计算范围明确为信息块数据(不含帧头、包号等)。需确保CRC16计算函数精准,修改原X modem可能存在的简易校验逻辑。

修改点:
   新增static uint16_t CRC16_check (unsigned char *q,int len)函数,对数据进行CRC16校验。
   移除Xmodem校验和逻辑,强制使用CRC16校验。

06 数据缓冲区配置
X modem数据缓冲配置:
   XModem数据包会被送入一个由buffer.c控制的缓冲区。该缓冲区为循环缓冲区,即当到达缓冲区末尾时,会回环至起始位置。由于数据帧接收的数组从132字节变成1029字节,RAM开销变大。
   XModem例程里,每个packet132bytes(128数据+3header+1校验),代码中的XMODEM_FRAME_SIZE是132U。
Y modem数据缓冲配置:
   YModem例程里,定义YMODEM_FRAME_SIZE_1024为1029U,YMODEM_FRAME_SIZE_128为133U。
   定义环形存储的BUFFER_SIZE定义为1542,保持原有配置,数据的解析正常。

修改点:可根据实际测试结果增加BUFFER_SIZE。

07 硬件驱动与配置适配
瑞萨RX系列需确保串口驱动适配Y modem的波特率、数据位、停止位等配置,可以使用smart configurator进行驱动配置(如常见的波特率 115200bps、8数据位、1停止位、无校验等)。

08 多文件传输适配
若OTA需传输多个文件,需在代码中添加多文件遍历、逐个构建起始帧+数据帧+结束帧的逻辑。由于客户只要求传输单个文件,不涉及相关修改。


三、实测结果

01 测试环境搭建


02 功能测试
   ● MCU执行bootloader升级程序,串口输出"Please start file send using YModem protocol...";
   ● Teraterm选择Ymodem协议发送固件文件;
   ● 传输过程中通过Bus Hound抓取帧序列,验证:
         起始帧(文件名/大小正确);
         数据帧(1024字节块与CRC16校验正确);
         结束帧(判定正确)。
   ● 升级完成后,MCU自动跳转至新固件,功能验证通过。
 

文章来源:RA生态工作室 瑞萨MCU/MPU中文网站_生态社区_资料下载_样片申请_方案介绍

http://www.dtcms.com/a/304330.html

相关文章:

  • vim的`:q!` 与 `ZQ` 笔记250729
  • 数据结构之时间复杂度
  • 【绘制图像轮廓】——图像预处理(OpenCV)
  • 互联网医院系统包含哪些优势?
  • taro+react重新给userInfo赋值后,获取的用户信息还是老用户信息
  • 搭建一个自定义的 React 图标库
  • 设计模式---单例
  • 测试用例的编写:让测试用例的编写条理起来
  • Redis学习09-AOF-混合持久化
  • iPhone 神级功能,3D Touch 回归!!!
  • 对象的创建过程
  • c++-list
  • Python 程序设计讲义(29):字符串的处理方法——大小写转换
  • 【C++算法】83.BFS解决最短路径问题_最短路径问题简介
  • Redis学习07-Redis的过期策略
  • (1-7-5) Mysql 对 数据的基本操作
  • MC0241防火墙
  • Object.freeze() 深度解析:不可变性的实现与实战指南
  • 道路坑洞检测数据集介绍8300张图片-智能道路巡检系统 车载安全监测设备 城市基础设施管理
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章评论量分析实现
  • 从零到一:Django图书管理系统完整开发实战指南
  • 开源数据库PostgreSQL专家技术
  • 从视觉到现实:掌握计算机视觉技术学习路线的十大步骤
  • 在 PolkaVM 上用 Rust 实现 ERC20 合约的全流程开发指南
  • 三维扫描相机:工业自动化的智慧之眼——迁移科技赋能智能制造新纪元
  • Element Plus常见基础组件(一)
  • 白玩 一 记录retrofit+okhttp+flow 及 kts的全局配置
  • Javaweb - 13 - AJAX
  • 《P5960 【模板】差分约束》
  • LeetCode Hot 100:11. 盛最多水的容器