硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5846|回复: 14
收起左侧

[有问必答] stm32串口接收大数据文件

[复制链接]

14

主题

37

回帖

79

积分

初级会员

积分
79
发表于 2021-11-29 09:49:36 | 显示全部楼层 |阅读模式
如题。目前用stm32F103+ESP8266的片子做一个项目,无线传输文件,stm32通过串口接收,并写入sd卡。出现的问题:接收几兆字节的文件时,会出现误码(使用对比软件对比过),传输几百K,无误码或丢失。

目前使用串口助手+TTL 通过PC与stm32串口相连做测试,目前跳过esp8266这一环。

采用方法:使用stm32 DMA+idle中断+FIFO+DMA传输过半断+DMA传输完成中断(相当于DMA双缓冲)
接收小文件,几百K大小的文件,无误码。波特率115200~1000000都可以。

但是接收文件大小为6Mb后,115200的文件,误码率极小,或者没有误码(但是传输速度极慢,时间很长),为了提升传输时间,提高波特率

波特率越高,误码率,丢失率越高。

测试过PC串口助手一遍发送,STM32 TX+DMA一遍回传,由于串口助手缓存最大5M,所以测试5M的回传,通过对比,没有误码或者丢失

所以怀疑问题是不是SD卡的写入上面


有无坛友做过类似项目,请求指点,讨论一下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
发表于 2021-11-29 14:21:46 | 显示全部楼层
文件小没问题的话,可以考虑分段传输。
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-11-29 14:47:50 | 显示全部楼层
eric2013 发表于 2021-11-29 14:21
文件小没问题的话,可以考虑分段传输。

试过SSCOM5.13的串口助手,里面有选择每256字节延时1ms/10ms/50ms/100ms发送。
试过选择延时100ms,相当于使用256字节作为一帧(空闲中断)数据存储写入SD卡,延时100ms。从接收处理到写完SD卡,整个过程需要10ms,理论上100ms完全够用,虽然整个传输时间更慢了。但是实际测试,传输10MB文件,还是有很多丢失和乱码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
发表于 2021-11-29 16:32:00 | 显示全部楼层
ZMLZML1009 发表于 2021-11-29 14:47
试过SSCOM5.13的串口助手,里面有选择每256字节延时1ms/10ms/50ms/100ms发送。
试过选择延时100ms,相当 ...

你前面说得几百K大小的文件,无误码是怎样一种场景
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-11-29 17:08:16 | 显示全部楼层
eric2013 发表于 2021-11-29 16:32
你前面说得几百K大小的文件,无误码是怎样一种场景

几百K用的TXT文本测试的。里面是正常的文字,数字,字母构成。然后通过串口助手发送,STM32串口接收再写入SD卡,将SD卡内写入的TXT文本,通过beyondcompare对比。差异为0。

几兆字节的文件,是机械行业的G代码文件,里面内容类似:
G1 F2400 X292 Y266.383 E3.44953
G0 F4000 X294.841 Y268

通过接收之后写入SD卡,由对比软件对比,有部分缺失,或者数字混乱。


几百K的也用类似G代码测试过,是ok的。
最后发现的结果是,文件越大,丢失,数字混乱概率越大,同时波特率越高,丢失,数字混乱概率越大。

TTL使用CH340/PL2303都测过,在1Mbps下,满足这两个驱动工作的要求

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117529
QQ
发表于 2021-11-30 09:05:55 | 显示全部楼层
ZMLZML1009 发表于 2021-11-29 17:08
几百K用的TXT文本测试的。里面是正常的文字,数字,字母构成。然后通过串口助手发送,STM32串口接收再写 ...

刚发现我忽略了一个重要环节,你当前是串口线接收的吗? 串口线接收的话,务必加个简单校验,CRC也好,奇偶校验也好,都行。

然后就是串口线一定要用个好使点的。比如FT232。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2021-11-30 15:30:08 | 显示全部楼层
本帖最后由 caicaptain2 于 2021-11-30 15:34 编辑

可能是sd卡的文件系统问题?最好按照文件格式的单元大小写入,而且 sd卡的随机读写4k的速度比较慢。

评分

参与人数 1金币 +15 收起 理由
wangertan + 15 很给力!

查看全部评分

回复

使用道具 举报

85

主题

798

回帖

1053

积分

至尊会员

积分
1053
发表于 2021-11-30 23:17:41 | 显示全部楼层
Xmodem了解一下
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-12-2 09:54:41 | 显示全部楼层
eric2013 发表于 2021-11-30 09:05
刚发现我忽略了一个重要环节,你当前是串口线接收的吗? 串口线接收的话,务必加个简单校验,CRC也好,奇 ...

对的 用的串口线直接连接电脑和stm32的,而且用的CH340和PL2303.后面买一个FT232,以及加上校验试一下
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-12-2 09:58:27 | 显示全部楼层

好的 试一试
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2021-12-2 10:01:55 | 显示全部楼层
caicaptain2 发表于 2021-11-30 15:30
可能是sd卡的文件系统问题?最好按照文件格式的单元大小写入,而且 sd卡的随机读写4k的速度比较慢。

文件格式的单元大小(这个没明白)。FATFS的4096B读写这块确实没测试过速度。
回复

使用道具 举报

44

主题

242

回帖

374

积分

高级会员

积分
374
发表于 2021-12-2 17:55:16 | 显示全部楼层
我看你的实验,像是没有加任何校验,就传数据。这样出错很正常。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-7-18 16:44:23 | 显示全部楼层
请问这个问题解决了吗?
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-7-18 16:44:57 | 显示全部楼层
请问这个问题解决了吗?
回复

使用道具 举报

7

主题

159

回帖

180

积分

初级会员

积分
180
发表于 2024-7-20 10:00:56 | 显示全部楼层
这么大文件不加校验怎么行,最少加个累积校验和吧
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 11:16 , Processed in 0.049389 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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