OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4647|回复: 13

如何将一个.bin按照xmodem方式去发送呢,想了好久都不明白

[复制链接]

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
发表于 2016-11-28 11:49:56 | 显示全部楼层 |阅读模式
1金钱
按照道理,如果做成固件,那么生产.bin文件然后通过串口去传递给单片机。
但是为了传送可靠性好点,用xmodem的方式来传,那中间必然要拆分成一个个的小包。
我的迷惑就出现了,这么多个小包,难道都要自己事先一个个的先写上包头序号和后面加上CRC16么?
那如何将这个.bin拆成小包啊??

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

64

帖子

3

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2014-3-11
在线时间
55 小时
发表于 2016-11-28 11:53:41 | 显示全部楼层
官方有YModem的bootloader例程
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-28 12:57:58 | 显示全部楼层
你还可以想到什么其它的更好的办法出来呢?
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-11-28 14:12:16 | 显示全部楼层
操作系统 发表于 2016-11-28 12:57
你还可以想到什么其它的更好的办法出来呢?

如果这样的话,我要拆这个.bin文件,那我也要一个个的数,数到1k的数据,然后切一刀,再慢慢数1k数据再切一刀??这样岂不是很笨拙很麻烦?
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2016-11-28 14:28:49 | 显示全部楼层
不是啊,你这要上位机跟下位机配合协议(如Xmodem)来传输你的bin文件啊,比如上位机要发一个大小为60k的bin文件给下位机(单片机),那么上位机可以先发1k,等待下位机接收完成以后告诉上位机我接收完成了,上位机得知下位机接收完成后,那么上位机再接着从刚才发的位置再发下一包1k的数据,如此循环,直接全部发完为止。
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-11-28 14:56:20 | 显示全部楼层
rindy 发表于 2016-11-28 14:28
不是啊,你这要上位机跟下位机配合协议(如Xmodem)来传输你的bin文件啊,比如上位机要发一个大小为60k的bi ...

我的疑惑是上位机发送的这个1k,是数据,而在这1k的数据前面,还有1个字节的SOH,1个字节的包序,1个字节的包序补码,还有数据最后头的CRC16, 这一些都应该没有在一开始的时候生成.bin文件就自动带上了的吧?
如果没有在一开始就生成.bin文件就带上的话,那不就是要自己数着数据切一刀下去,自己添加上去??如果这样的话不是很笨拙?
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-28 15:03:09 | 显示全部楼层
bin文件也是一个字符流,自己制定通信协议来做就是了,CRC包号通过通信协议来完成组帧
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2016-11-28 15:31:02 | 显示全部楼层
vention 发表于 2016-11-28 14:56
我的疑惑是上位机发送的这个1k,是数据,而在这1k的数据前面,还有1个字节的SOH,1个字节的包序,1个字节 ...

上位机是自动加上你说的这些帧头帧尾的,因为你一开始会选择用什么协议传输
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2016-11-28 15:32:39 | 显示全部楼层
vention 发表于 2016-11-28 14:56
我的疑惑是上位机发送的这个1k,是数据,而在这1k的数据前面,还有1个字节的SOH,1个字节的包序,1个字节 ...

上位机你自己写吗?为什么不用现成的?
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-11-28 16:01:10 | 显示全部楼层
rindy 发表于 2016-11-28 15:32
上位机你自己写吗?为什么不用现成的?

我就说嘛,肯定有软件可以自己生成的,没可能我还要将一个bin文件来拆,拆完再发,这样多笨拙啊。求发一个软件来用用
因为之前没有用过CRC传送,所以我就对这些一知半解,也不知道原来上位机可以自己添加生成
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2016-11-28 16:03:21 | 显示全部楼层
vention 发表于 2016-11-28 16:01
我就说嘛,肯定有软件可以自己生成的,没可能我还要将一个bin文件来拆,拆完再发,这样多笨拙啊。求发一 ...

你可以网上搜一下SecureCRT
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-11-29 09:35:47 | 显示全部楼层
rindy 发表于 2016-11-28 16:03
你可以网上搜一下SecureCRT

我还想问下,第一包的 数据需要写上包数量什么的么?如果需要是自己添加进去还是上位机软件自己添加?
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2016-11-29 09:57:12 | 显示全部楼层
vention 发表于 2016-11-29 09:35
我还想问下,第一包的 数据需要写上包数量什么的么?如果需要是自己添加进去还是上位机软件自己添加?

一旦选择了传输协议,分包,打包,握手是协议本身定义好了,我们只要提供一大块数据流就行了。
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-11-29 14:56:36 | 显示全部楼层
DongInker 发表于 2016-11-29 09:57
一旦选择了传输协议,分包,打包,握手是协议本身定义好了,我们只要提供一大块数据流就行了。

我现在遇到个问题是最后一包数据 是不满xmodem模式的128Byte 的,按道理上位机软件不是该补齐后面没满的数据然后发最后一包么,但是我现在直接最后一包数据没有了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 15:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表