Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
求关于RT-Thread中Ymodem的使用方法
发布于 2018-08-08 11:34:27 浏览:6409
订阅该版
有没有大神用过RT-thread中的Ymodem的? 我尝试了论坛早期发的Ymodem使用方法,但是接收不到CCCC,又尝试了ENV中的Ymodem,但是还是不能成功,求指教怎么使用这个功能。。。。。。
查看更多
17
个回答
默认排序
按发布时间排序
armink
2018-08-08
这家伙很懒,什么也没写!
来一段,使用 Ymodem + EasyFlash 完成 IAP 固件下载的代码示例,仅供参考 ``` #include
#include
#include
#include
#include
#include
#include
#include
static size_t update_file_total_size, update_file_cur_size; static uint32_t crc32_checksum = 0; static enum rym_code ymodem_on_begin(struct rym_ctx *ctx, rt_uint8_t *buf, rt_size_t len) { char *file_name, *file_size; /* calculate and store file size */ file_name = (char *) &buf[0]; file_size = (char *) &buf[rt_strlen(file_name) + 1]; update_file_total_size = atol(file_size); /* 4 bytes align */ update_file_total_size = (update_file_total_size + 3) / 4 * 4; update_file_cur_size = 0; crc32_checksum = 0; /* erase backup section */ if (ef_erase_bak_app(update_file_total_size)) { /* if erase fail then end session */ return RYM_CODE_CAN; } return RYM_CODE_ACK; } static enum rym_code ymodem_on_data(struct rym_ctx *ctx, rt_uint8_t *buf, rt_size_t len) { if (update_file_cur_size + len <= update_file_total_size) { crc32_checksum = ef_calc_crc32(crc32_checksum, buf, len); } else { crc32_checksum = ef_calc_crc32(crc32_checksum, buf, update_file_total_size - update_file_cur_size); } /* write data of application to backup section */ if (ef_write_data_to_bak(buf, len, &update_file_cur_size, update_file_total_size)) { /* if write fail then end session */ return RYM_CODE_CAN; } return RYM_CODE_ACK; } void update(uint8_t argc, char **argv) { char new_char[2], c_file_size[11] = { 0 }, c_crc32_checksum[11] = { 0 }; struct rym_ctx rctx; elog_set_output_enabled(false); rt_kprintf("Waring: This operator will not recovery. If you want, press 'Y'.\n"); new_char[0] = getchar(); rt_kprintf("%c", new_char[0]); new_char[1] = getchar(); rt_kprintf("%c", new_char[1]); if ((new_char[0] != 'y') && (new_char[0] != 'Y')) { goto __exit; } rt_kprintf("Please select the application firmware file and use Ymodem to send.\n"); if (!rym_recv_on_device(&rctx, rt_console_get_device(), RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX, ymodem_on_begin, ymodem_on_data, NULL, RT_TICK_PER_SECOND)) { /* wait some time for terminal response finish */ rt_thread_delay(RT_TICK_PER_SECOND); /* save the downloaded firmware crc32 checksum ENV */ ef_set_env("iap_need_crc32_check", "1"); rt_snprintf(c_crc32_checksum, sizeof(c_crc32_checksum), "%ld", crc32_checksum); ef_set_env("iap_crc32_checksum", c_crc32_checksum); /* set need copy application from backup section flag is 1, backup application length */ ef_set_env("iap_need_copy_app", "1"); rt_sprintf(c_file_size, "%ld", update_file_total_size); ef_set_env("iap_copy_app_size", c_file_size); ef_save_env(); rt_kprintf("Download firmware to flash OK.\n"); rt_kprintf("System now will restart...\n"); NVIC_SystemReset(); } else { /* wait some time for terminal response finish */ rt_thread_delay(RT_TICK_PER_SECOND); rt_kprintf("Update firmware fail.\n"); } __exit: elog_set_output_enabled(true); } MSH_CMD_EXPORT(update, Update user application firmware); ```
丿纸飞机巛
2018-08-08
这家伙很懒,什么也没写!
>来一段,使用 Ymodem + EasyFlash 完成 IAP 固件下载的代码示例,仅供参考 --- 谢谢,不过我的应用场景是想通过Ymodem协议发送字库文件到挂载的外部flash上,通过固件库example的tofile.c文件没实现........可能是我使用的方法不对,目前没头绪!
bernard
2018-08-08
这家伙很懒,什么也没写!
你需要传进去,还是传出去?传进去到板子上,是tofile.c,记得有个命令执行下,然后就可以通过串口工具发送文件了。因为是tofile,所以是写到文件系统上,保存为文件的。
armink
2018-08-08
这家伙很懒,什么也没写!
ymodem_on_data 里 ef_write_data_to_bak 就是拷贝接收到的数据到 flash 上的
丿纸飞机巛
2018-08-09
这家伙很懒,什么也没写!
>你需要传进去,还是传出去?传进去到板子上,是tofile.c,记得有个命令执行下,然后就可以通过串口工具发送 ... --- 是的,熊老大,就是传文件到文件系统上,但是我执行命令就死机,不知道什么问题
丿纸飞机巛
2018-08-09
这家伙很懒,什么也没写!
>ymodem_on_data 里 ef_write_data_to_bak 就是拷贝接收到的数据到 flash 上的 --- 嗯,因为有例子,想着实现上传文件就好了,没有注意协议的实现方法,我好好研究一下你这个代码块吧,谢谢!
e_donkey
2019-01-17
这家伙很懒,什么也没写!
有没有办法传文件到上位机?
hnhebing
2019-01-28
这家伙很懒,什么也没写!
rtt+fal+easyflash+ymodem 有完整实例吗? 我用stm32f4 实现rtt+fal+easyflash 可以应用,但是在用到ymodem->rym_recv_on_device()时程序跑飞了!! 环境:env1.10 + rtt4.0
armink
2019-01-28
这家伙很懒,什么也没写!
>rtt+fal+easyflash+ymodem 有完整实例吗? > >我用stm32f4 实现rtt+fal+easyflash 可以应用,但是在用到ymode ... --- 有的呀,你可以参考 IoT Board 里的 Ymodem OTA 例程,都是开源的
hnhebing
2019-02-01
这家伙很懒,什么也没写!
在正点原子stm32f407gz ymodem ota已经正常读写,获取收获把bootloader移到flash高端 0x080c0000位置,最也不担心应用程序破坏bootloader了!
撰写答案
登录
注册新账号
关注者
0
被浏览
6.4k
关于作者
丿纸飞机巛
这家伙很懒,什么也没写!
提问
4
回答
11
被采纳
0
关注TA
发私信
相关问题
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
[学习笔记]Trace agent使用笔记
2
【学习分享】初探RT-Thread系统调度
3
FRDM-MCXN947 Flash实践--W25Q64
4
NXP MCXN947测评(一)开箱+环境配置
5
stm32f103的adc+dma多通道采集数据
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
CAN总线
Hardfault
FinSH
USB
文件系统
RT-Thread
DMA
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
WIZnet_W5500
ota在线升级
cubemx
I2C
flash
UART
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
BSP
ADC
keil_MDK
socket
中断
编译报错
MicroPython
Debug
SDIO总线
GD32
msh
rt_mq_消息队列_msg_queue
ulog
C++_cpp
SFUD
本月问答贡献
xiaorui
20
个答案
3
次被采纳
Juggernaut
12
个答案
3
次被采纳
踩姑娘的小蘑菇
12
个答案
2
次被采纳
小小李sunny
10
个答案
2
次被采纳
crystal266
4
个答案
2
次被采纳
本月文章贡献
ZVML_9668
4
篇文章
6
次点赞
Lu_盼盼
4
篇文章
3
次点赞
Z_Y
3
篇文章
5
次点赞
ThinkCode
2
篇文章
2
次点赞
oxlm
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部