1032|17

48

帖子

0

资源

一粒金砂(中级)

串口一次性发送14k数据,单片机如何接收 [复制链接]

 

各位大神好,最近我在摸索bootloader的编写,卡在串口接收数据这一步了。

单片机是msp430,通过串口接收到文件数据并进行APP升级,文件数据在两个c文件都有处理。之前我测试的时候,LED文件数据只有400个字节,当时使用全局变量数组接收串口数据,这样的处理没问题。后来用日常工作的项目工程文件测试,它生成的txt文件有14k,而我的RAM只有4K,请问该如何接收这14k数据呢(当然也可能有25k的数据)

此帖出自单片机论坛

回复

48

帖子

0

资源

一粒金砂(中级)

小白第一次发帖,希望有人帮帮忙,不管有没有进展,都对各位感激不尽


回复

1797

帖子

0

资源

五彩晶圆(初级)

分段发送和接收,收到一段就烧写一段数据到flash中,直到接收完成后,再对烧录的数据进行校验比对是否数据准确无误


回复

48

帖子

0

资源

一粒金砂(中级)

本帖最后由 luaffy 于 2020-8-13 09:25 编辑
bobde163 发表于 2020-8-13 09:10 分段发送和接收,收到一段就烧写一段数据到flash中,直到接收完成后,再对烧录的数据进行校验比对是否数据 ...

感谢您的指导

但是有一个问题,我没有配套的上位机,用的是传统的串口调试助手,在发送区直接发送数据,帧头帧尾都是要写入的flash地址,没有校验码,如果是分段发送和分段接收,可能容易接收到错误帧,或者说存放在错误的地址

因为是非专业人员操作的升级APP的步骤,按照流程来说,我只需把txt文件给他们,所以最好省略手动添加校验码

点评

没有上位机就自己写一个。没办法。  详情 回复 发表于 2020-8-13 09:26

回复

2673

帖子

1

资源

五彩晶圆(初级)

luaffy 发表于 2020-8-13 09:22 bobde163 发表于 2020-8-13 09:10 分段发送和接收,收到一段就烧写一段数据到flash中,直到接收完成后, ...

没有上位机就自己写一个。没办法。

个人签名人已离开,无事别找,找也找不到。

回复

48

帖子

0

资源

一粒金砂(中级)

freebsder 发表于 2020-8-13 09:26 没有上位机就自己写一个。没办法。

受各位的启发,我想这样行不行——

串口调试助手1000ms循环发送文件数据,我开辟一个1000大小的变量空间,接收满1000个字节后,检测最后一个字符是否结束标志“q”,不是的话就保存当前接收字节长度,关闭串口中断,存入flash后再清空变量并打开中断,下一次接收从上次的接收字节长度开始,将数据录入变量数组,依次循环....虽然肉眼可见的缓慢升级速度

孩子难啊,前辈们在忙别的项目,没有人帮我写上位机

 

点评

可以,麻烦而已  详情 回复 发表于 2020-8-13 12:40
可以用超级终端,用里面得协议就可以做升级,一般YMODE  详情 回复 发表于 2020-8-13 10:46

回复

488

帖子

3

资源

一粒金砂(高级)

luaffy 发表于 2020-8-13 09:39 受各位的启发,我想这样行不行—— 串口调试助手1000ms循环发送文件数据,我开辟一个1000大 ...

可以用超级终端,用里面得协议就可以做升级,一般YMODE


回复

48

帖子

0

资源

一粒金砂(中级)

29447945 发表于 2020-8-13 10:46 可以用超级终端,用里面得协议就可以做升级,一般YMODE

非常感谢

这个还没有尝试过,等会我试试看


回复

1万

帖子

13

资源

版主

可以用超级终端或类似支持XModem/YModem协议的软件,虽然没有专用软件方便。最好有错误处理机制,在数据传输错误时,可以重新传输。


回复

2673

帖子

1

资源

五彩晶圆(初级)

luaffy 发表于 2020-8-13 09:39 受各位的启发,我想这样行不行—— 串口调试助手1000ms循环发送文件数据,我开辟一个1000大 ...

可以,麻烦而已


回复

48

帖子

0

资源

一粒金砂(中级)

dcexpert 发表于 2020-8-13 11:23 可以用超级终端或类似支持XModem/YModem协议的软件,虽然没有专用软件方便。最好有错误处理机制,在数据传 ...

您好,感谢您的建议

我电脑安装不了超级终端,找了一圈找到了章鱼调试助手1.6,先将就着试试看


回复

1万

帖子

143

资源

版主

固件更新必须保证足够的可靠性,而为保证可靠性,不能简单单向直接连续发,那样的话,错一个位,全部固件就废了,甚至会影响到再次更新,导致设备彻底报废,这是绝对不可以的。所以,远程更新固件,数据的可靠性必须保证。如此,必须将固件拆成一系列小包,用协议打包,必须严格校验,用会话机制双向通迅,帧长度限制在系统RAM尺寸以内。非远程升级,在大幅放宽通迅中出错可能性时,可以用串口的9位模式,即按字节发送,奇偶校验,但依然得是会话式的。一个字节编程完后,回一个标志字节,上位机/编程器再发送下一个字节。校验未通过时,则返回特定的标志,然后重新发送,若干次失败则报错提醒。这是远程更新以及所有ISP、IAP编程的通用工艺。

个人签名上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

48

帖子

0

资源

一粒金砂(中级)

chunyang 发表于 2020-8-13 15:12 固件更新必须保证足够的可靠性,而为保证可靠性,不能简单单向直接连续发,那样的话,错一个位,全部固件就 ...

谢谢谢谢,学到了学到了,那我就不在我的方案上浪费时间了

感谢您的指点


回复

3755

帖子

0

资源

版主

把flash划分出两块,升级时写另外一块,以串口速度写flash应该没问题,写完后校验,没问题再切换到新系统。


回复

97

帖子

0

资源

一粒金砂(中级)

python写个上位机小脚本挺简单的,定义个简单的数据帧格式


回复

277

帖子

1

资源

一粒金砂(高级)

参照STM32的boot loader例程和说明里面详细描述了超级终端怎么使用,例程里面有ymodem的CRC算法例程可以直接拿来用

个人签名模电临时工

回复

2673

帖子

1

资源

五彩晶圆(初级)

方向没问题,只不过是上位机自动处理数据分段传输还是你手动处理数据分段。其他乱七八糟的都只是在这之上的保障措施。

个人签名人已离开,无事别找,找也找不到。

回复

48

帖子

0

资源

一粒金砂(中级)

任务接近尾声啦,感谢各位的指导!

左右都得给师傅写份整理文档,也了解到论坛里似乎没怎么讨论到bootloader,故贴出我的文档,希望能给到路人一点帮助

http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=1137234&page=1&extra=#pid3002463

(不会指路,直接贴链接了)


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表