eric2013 发表于 2022-8-8 13:40:31

BSP视频教程第22期:基于串口的XYZmodem文件传输协议实现,含上位机和下位机全开源,制作了一个Ymodem方式固件更新(2022-08-08)

本期视频教程为大家分享串口专题的XYZmodem的文件传输协议实现,视频中以Ymodem为例,制作了一个Ymodem方式固件更新,为大家介绍Ymodem的上位机和下位机通信实现。

上位机我们直接采用VSCode配合C编译器实现,采用命令终端方式展示信息,会生成一个exe小文件,所以大家只要会C就可以轻松做上位机设计。


视频:

https://www.bilibili.com/video/BV1YB4y1t7pm

https://www.bilibili.com/video/BV1YB4y1t7pm?share_source=copy_web&vd_source=d44616830364cd4a0c9df5e79c9b33df


协议:



参考资料:
1、上位机和下位机例子下载:
链接:https://pan.baidu.com/s/1_Qs-S7qYtTuyAsxS_uhdQw提取码:ezsd

2、msys2安装:
https://www.msys2.org/

3、协议介绍:
http://textfiles.com/programming/ymodem.txt
https://en.wikipedia.org/wiki/YMODEM
https://en.wikipedia.org/wiki/XMODEM

eric2013 发表于 2022-8-8 13:56:54

更新完毕。

morning_enr6U 发表于 2022-8-8 14:18:21

{:34:}{:8:}

弄潮儿 发表于 2022-8-8 14:39:33

收藏:handshake

chaojiwen 发表于 2022-8-8 14:46:30

学习了{:34:}

mexico007 发表于 2022-8-8 18:27:09

硬汉哥,这个可以和下位机做个在线升级工具吧,看能不能拓展一下

eric2013 发表于 2022-8-8 19:18:46

mexico007 发表于 2022-8-8 18:27
硬汉哥,这个可以和下位机做个在线升级工具吧,看能不能拓展一下

可以的,大家可以拓展下。

浴火重生 发表于 2022-8-8 22:38:58

视频通俗易懂,这种上位机适合自己调试的适合用,不能打包生成独立exe供别人用吧

eric2013 发表于 2022-8-9 00:17:55

浴火重生 发表于 2022-8-8 22:38
视频通俗易懂,这种上位机适合自己调试的适合用,不能打包生成独立exe供别人用吧

可以,能生成独立的exe文件。楼主位百度云给大家分享的就是带了一个exe文件。

role_2099 发表于 2022-8-9 10:52:14

硬汉大哥,XYZmodem协议可以用到产品里面吗,看好多人升级都是私有协议,是怕被人给误升级吗

浴火重生 发表于 2022-8-9 13:40:42

eric2013 发表于 2022-8-9 00:17
可以,能生成独立的exe文件。楼主位百度云给大家分享的就是带了一个exe文件。

每次还是要编译,因为包含有bin文件路径,不能直接用

eric2013 发表于 2022-8-9 16:29:13

浴火重生 发表于 2022-8-9 13:40
每次还是要编译,因为包含有bin文件路径,不能直接用
不用,你固定好路径即可,我这里没问题。

eric2013 发表于 2022-8-9 16:30:38

role_2099 发表于 2022-8-9 10:52
硬汉大哥,XYZmodem协议可以用到产品里面吗,看好多人升级都是私有协议,是怕被人给误升级吗

这个没关系,可以对传输文件做AES加密。

jinjinos 发表于 2022-8-10 19:12:06

ymodem协议发送文件的时候,串口不能设置为偶校验吗?

eric2013 发表于 2022-8-11 14:27:27

jinjinos 发表于 2022-8-10 19:12
ymodem协议发送文件的时候,串口不能设置为偶校验吗?

没问题,不过本身已经有CRC16校验了,再做奇偶校验意义不大了

jinjinos 发表于 2022-8-11 21:44:46

eric2013 发表于 2022-8-11 14:27
没问题,不过本身已经有CRC16校验了,再做奇偶校验意义不大了

我的板卡串口设置的是偶校验,移植了ymodem协议之后,使用SecureCRT发送ymodem数据时,secureCRT自动把串口改为无校验了

庄永 发表于 2022-8-11 22:38:30

赞一个

ruboss 发表于 2022-9-17 12:43:53

第1阶段: 同步
    从机给主机发送同步字符 C

这个代码好像没有体现到呀

eric2013 发表于 2022-9-17 16:57:55

ruboss 发表于 2022-9-17 12:43
第1阶段: 同步
    从机给主机发送同步字符 C



对,我把这部分去掉了,不方便展示。

凤梨罐头 发表于 2022-10-18 10:18:17

如果文件大小是1024字节,那它是直接转成字符串放在起始帧中,还是转成它的十六进制0x400再转成字符串放到起始帧中?

eric2013 发表于 2022-10-18 13:03:16

凤梨罐头 发表于 2022-10-18 10:18
如果文件大小是1024字节,那它是直接转成字符串放在起始帧中,还是转成它的十六进制0x400再转成字符串放到 ...

直接原始数据收发的。

ssssssss 发表于 2023-2-24 08:41:23

eric2013 发表于 2022-10-18 13:03
直接原始数据收发的。

这个ymodem协议软件,有界面版本的吗?直接可用的

eric2013 发表于 2023-2-24 09:40:09

ssssssss 发表于 2023-2-24 08:41
这个ymodem协议软件,有界面版本的吗?直接可用的

没做界面方式,就简单做了个命令行的。

tjx0512 发表于 2023-3-19 19:26:16

本帖最后由 tjx0512 于 2023-3-19 19:28 编辑

分享个C#的简易ymodem上位机源码,自己用在自制的SWD简易烧录器上.

1026481385 发表于 2023-7-25 08:11:52

当单片机用ymodem作为发送方时,发送较大文件时,应该怎么准备待发送数据,,,没法申请整个文件大小的内存
C:\Users\win10\Desktop\QQ截图20230725081105.bmp

eric2013 发表于 2023-7-25 08:50:30

tjx0512 发表于 2023-3-19 19:26
分享个C#的简易ymodem上位机源码,自己用在自制的SWD简易烧录器上.

谢谢分享。

eric2013 发表于 2023-7-25 08:50:41

1026481385 发表于 2023-7-25 08:11
当单片机用ymodem作为发送方时,发送较大文件时,应该怎么准备待发送数据,,,没法申请整个文件大小的内存

图片没上传上。

1026481385 发表于 2023-7-26 08:53:19

eric2013 发表于 2023-7-25 08:50
图片没上传上。

就是从一号单片机读内存卡文发送到二号单片机内存卡,,一号该怎么准备待发送数据,看帖子里是一次性提前读完的,

eric2013 发表于 2023-7-27 06:43:16

1026481385 发表于 2023-7-26 08:53
就是从一号单片机读内存卡文发送到二号单片机内存卡,,一号该怎么准备待发送数据,看帖子里是一次性提前读 ...

对,我是一次性全部申请了,电脑的内存足够大,申请个几十MB很方便。所以我这里就直接全部申请了。

zanyu 发表于 2024-3-5 11:10:26

大佬,Zmodem协议资料在哪里能找到啊?

麦克斯韦Maxwell 发表于 2024-3-29 15:09:48

硬汉哥你好,看了你的Ymodem程序,有一点不明白,为何要在改写缓冲区读指针的时候进行临界区保护呢?缓冲区BUFFSIZE大小是固定的,而且中断也只会影响写指针而不会影响读指针,为何要对读指针进行保护呢?

麦克斯韦Maxwell 发表于 2024-3-29 15:13:04

eric2013 发表于 2022-8-8 13:56
更新完毕。

else
        {
                *_pByte = _pUart->pRxBuf;                /* 从串口接收FIFO取1个数据 */

                /* 改写FIFO读索引 */
                DISABLE_INT();
                if (++_pUart->usRxRead >= _pUart->usRxBufSize)
                {
                        _pUart->usRxRead = 0;
                }
                _pUart->usRxCount--;
                ENABLE_INT();
                return 1;

eric2013 发表于 2024-3-30 08:42:18

zanyu 发表于 2024-3-5 11:10
大佬,Zmodem协议资料在哪里能找到啊?

协议介绍:
http://textfiles.com/programming/ymodem.txt
https://en.wikipedia.org/wiki/YMODEM
https://en.wikipedia.org/wiki/XMODEM

eric2013 发表于 2024-3-30 08:42:55

麦克斯韦Maxwell 发表于 2024-3-29 15:13
else
        {
                *_pByte = _pUart->pRxBuf;                /* 从串口接收FIFO取1个数据 */


读的地方,大家可以考虑去掉临界保护。

newbie 发表于 2024-5-9 10:34:42

你好,Ymodem协议传输,软件指定传输地址,传输数据较少可直接放内存操作,数据较大放不下,我想将数据直接写入spi flash, 一遍擦除一边写入可行?

eric2013 发表于 2024-5-10 09:03:59

newbie 发表于 2024-5-9 10:34
你好,Ymodem协议传输,软件指定传输地址,传输数据较少可直接放内存操作,数据较大放不下,我想将数据直接 ...

完全可行。
页: [1]
查看完整版本: BSP视频教程第22期:基于串口的XYZmodem文件传输协议实现,含上位机和下位机全开源,制作了一个Ymodem方式固件更新(2022-08-08)