OpenEdv-开源电子网

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

STM32 FATFS SDIO 串口接收图片数据写入SD卡问题

[复制链接]

9

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2013-4-10
在线时间
9 小时
发表于 2013-4-10 21:50:29 | 显示全部楼层 |阅读模式
新手求助~ @原子

问题:串口可以完整接收一幅jpg图片(5k左右的),但是将串口接收到的数据写进SD卡内自己创建的jpg文件后,在电脑上以txt方式打开和原jpg文件对比,数据完全不一样,但是大小是一样的,是什么问题??

写入文件的代码如下:

                        f_mount(0, &fs2);  //将文件系统设置到0区 
        if (f_opendir(&dirs, path) == FR_OK)             //读取该磁盘的根目录 
 {
 /* 打开一个文件(不存在则创建),读/写模式(可追加数据) */
f_open(&file2, (const TCHAR*)name , FA_READ | FA_WRITE | FA_OPEN_ALWAYS); //直到创建了可用的文件名
 }
        res1 = f_write(&file2, USART_RX_BUF, applenth, &bw2); /* 往文件里写入USART_RX_BUF里面的applenth个字节的数据 */
f_close(&file2); //关闭文件
if(res1 == FR_OK)
{
USART_OUT(USART1,"\r\n写入文件成功!\r\n\r\n");//串口提示
}else USART_OUT(USART1,"\r\n写入文件失败!\r\n\r\n");//串口提示

解释:串口中断接收到的数据全部在数组USART_RX_BUF里,applenth是串口中断接收到的数据量

应该可以确定是写入文件的问题,但是又不知道问题出在哪里,求助啊~~~~





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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-10 22:14:39 | 显示全部楼层
数据格式的问题吧,你创建的文件,怎么能用txt方式打开?
jpeg数据可不是文本文件啊。你用winhex看比较靠谱吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2013-4-10
在线时间
9 小时
 楼主| 发表于 2013-4-10 22:28:21 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
现在情况是这样的:

/*串口调试助手*/
串口中断接收到的数据如下:/*十进制的*/

255 216 255 224 0 16 74 70 73 70 0 1 2 0 0 1 0 1 0 0 255 225 0 230 69 120 105 102 0 0 73 73 42 0 8 0 0 0 5 0 18 1 3 0 1 0 0 0 1 0 0 0 49 1 2 0 28 0 0 0 74 0 0 0 50 1 2 0 20 0 0 0 102 0 0 0 19 2 3 0 1 0 0 0 1 0 0 0 105 135 4 0 1 0 0 0 122 0 0 0 0 0 0 0 65 67 68 32 83 121 115 116 101 109 115 32 68 105 103 105 116 97 108 32 73 109 97 103 105 110 103 0 50 48 49 49 58 48 50 58 50 55 32 49 57 58 52 53 58 50 51 0 5 0 0 144 7 0 4 0 0 0 48 50 50 48 144 146 2 0 4 0 0 0 50 49 56 0 2 160 4 0 1 0 0 0 200 0 0 0 3 160 4 0 1 0 0 0 229 0 0 0 5 160 4 0 1 0 0 0 188 0 0 0 0 0 0 0 2 0 1 0 2 0 4 0 0 0 82 57 56 0 2 0 7 0 4 0 0 0 48 49 48 48 0 0 0 0 15 0 0 0 255 192 0 17 8 0 229 0 200 3 1 34 0 2 17 1 3 17 1 255 219 0 132 0 20 13 15 17 15 12 20 17 16 17 22 21 20 23 30 50 32 30 27 27 30 61 43 46 36 50 72 63 76 75 71 63 70 68 80 90 115 97 80 85 108 86 68 70 100 136 101 108 118 122 128 130 128 77 96 141 151 140 125 150 115 126 128 123 1 31 33 33 45 39 45 88 48 48 88 185 123 105 123 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 255 196 0 131 0 0 2 3 1 1 1 0 0 0 0 0 0 0 0 0 0 2 3 1 4 5 0 6 7 16 0 1 4 1 3 3 2 3 7 2 5 5 0 0 0 0 1 0 2 3 17 4 18 33 49 5 65 81 19 34 97 113 145 6 20 35 50 66 129 177 82 161 51 98 114 193 225 21 36 52 147 241 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 2 3 4 17 1 1 

返还电脑的数据长度:512 Bytes

**************************************************************************************
/*串口调试助手*/
从自己创建的jpg文件读出的数据如下:

241 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 


---------------------------------------------------------------------------------------------------------------------------
一开始的时候不是全0的,但是问题就是从自己创建的jpg文件读出的数据和写进去的完全不一样,然后后面改了一点程序,然后就变全0了···
夕四.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-10 22:35:23 | 显示全部楼层
回复【3楼】夕四.:
---------------------------------
这个情况,先测试SDIO写数据是否正常。
别搞JPG先,随便搞个测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2013-4-10
在线时间
9 小时
 楼主| 发表于 2013-4-10 23:13:39 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
yes!!!!!
找到问题了,是一次性写入的数据太多了,我一开始将5k左右的数据全部一次写进文件里,结果写进的数据很多错,后面试试写入512字节的数据,果然行了。

串口调试助手的显示结果如下:

文件大小: 4907
波特率 115200bps
需要时间:大约 0 秒
请稍候...
发送完毕!

串口接收数据完成!

串口中断接收到的代码长度:4907 Bytes

串口中断接收jpg文件成功!



写入文件成功!


串口中断接收到的数据如下:

255 216 255 224 0 16 74 70 73 70 0 1 2 0 0 1 0 1 0 0 255 225 0 230 69 120 105 102 0 0 73 73 42 0 8 0 0 0 5 0 18 1 3 0 1 0 0 0 1 0 0 0 49 1 2 0 28 0 0 0 74 0 0 0 50 1 2 0 20 0 0 0 102 0 0 0 19 2 3 0 1 0 0 0 1 0 0 0 105 135 4 0 1 0 0 0 122 0 0 0 0 0 0 0 65 67 68 32 83 121 115 116 101 109 115 32 68 105 103 105 116 97 108 32 73 109 97 103 105 110 103 0 50 48 49 49 58 48 50 58 50 55 32 49 57 58 52 53 58 50 51 0 5 0 0 144 7 0 4 0 0 0 48 50 50 48 144 146 2 0 4 0 0 0 50 49 56 0 2 160 4 0 1 0 0 0 200 0 0 0 3 160 4 0 1 0 0 0 229 0 0 0 5 160 4 0 1 0 0 0 188 0 0 0 0 0 0 0 2 0 1 0 2 0 4 0 0 0 82 57 56 0 2 0 7 0 4 0 0 0 48 49 48 48 0 0 0 0 15 0 0 0 255 192 0 17 8 0 229 0 200 3 1 34 0 2 17 1 3 17 1 255 219 0 132 0 20 13 15 17 15 12 20 17 16 17 22 21 20 23 30 50 32 30 27 27 30 61 43 46 36 50 72 63 76 75 71 63 70 68 80 90 115 97 80 85 108 86 68 70 100 136 101 108 118 122 128 130 128 77 96 141 151 140 125 150 115 126 128 123 1 31 33 33 45 39 45 88 48 48 88 185 123 105 123 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 255 196 0 131 0 0 2 3 1 1 1 0 0 0 0 0 0 0 0 0 0 2 3 1 4 5 0 6 7 16 0 1 4 1 3 3 2 3 7 2 5 5 0 0 0 0 1 0 2 3 17 4 18 33 49 5 65 81 19 34 97 113 145 6 20 35 50 66 129 177 82 161 51 98 114 193 225 21 36 52 147 241 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 2 3 4 17 1 1 

返还电脑的数据长度:512 Bytes


*************************************************************************************



将文件系统设置到0区成功!

打开自己创建的jpg文件成功!

将文件内容读出到数据缓冲区buffer2[]成功!

从自己创建的jpg文件读出的数据如下:

255 216 255 224 0 16 74 70 73 70 0 1 2 0 0 1 0 1 0 0 255 225 0 230 69 120 105 102 0 0 73 73 42 0 8 0 0 0 5 0 18 1 3 0 1 0 0 0 1 0 0 0 49 1 2 0 28 0 0 0 74 0 0 0 50 1 2 0 20 0 0 0 102 0 0 0 19 2 3 0 1 0 0 0 1 0 0 0 105 135 4 0 1 0 0 0 122 0 0 0 0 0 0 0 65 67 68 32 83 121 115 116 101 109 115 32 68 105 103 105 116 97 108 32 73 109 97 103 105 110 103 0 50 48 49 49 58 48 50 58 50 55 32 49 57 58 52 53 58 50 51 0 5 0 0 144 7 0 4 0 0 0 48 50 50 48 144 146 2 0 4 0 0 0 50 49 56 0 2 160 4 0 1 0 0 0 200 0 0 0 3 160 4 0 1 0 0 0 229 0 0 0 5 160 4 0 1 0 0 0 188 0 0 0 0 0 0 0 2 0 1 0 2 0 4 0 0 0 82 57 56 0 2 0 7 0 4 0 0 0 48 49 48 48 0 0 0 0 15 0 0 0 255 192 0 17 8 0 229 0 200 3 1 34 0 2 17 1 3 17 1 255 219 0 132 0 20 13 15 17 15 12 20 17 16 17 22 21 20 23 30 50 32 30 27 27 30 61 43 46 36 50 72 63 76 75 71 63 70 68 80 90 115 97 80 85 108 86 68 70 100 136 101 108 118 122 128 130 128 77 96 141 151 140 125 150 115 126 128 123 1 31 33 33 45 39 45 88 48 48 88 185 123 105 123 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 185 255 196 0 131 0 0 2 3 1 1 1 0 0 0 0 0 0 0 0 0 0 2 3 1 4 5 0 6 7 16 0 1 4 1 3 3 2 3 7 2 5 5 0 0 0 0 1 0 2 3 17 4 18 33 49 5 65 81 19 34 97 113 145 6 20 35 50 66 129 177 82 161 51 98 114 193 225 21 36 52 147 241 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 2 3 4 17 1 1
夕四.
回复 支持 反对

使用道具 举报

9

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2013-4-10
在线时间
9 小时
 楼主| 发表于 2013-4-10 23:19:31 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
不过还是有不了解的地方:

①写入文件一次性最大可以写入多少数据??
②如果分几次写入文件的话应该要用到  f_lseek(&fsrc,fsrc.fsize);  吧??
③如果串口接收的图片数据太大怎么处理,我现在的做法是在串口接收里用一个10k的缓存来接,要是有几十k的图片怎么处理??
夕四.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-10 23:26:05 | 显示全部楼层
回复【6楼】夕四.:
---------------------------------
1,得看你有多大缓存了,理论上任何大小都可以。
2,不需要,FATFS会自动偏移
3,分几次写就是了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2013-4-10
在线时间
9 小时
 楼主| 发表于 2013-4-10 23:42:46 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
串口接收数据可以分几次吗??比如:串口接收一张50k的图片,分10次接收,每接收5k就立刻把这5k写进文件里??
夕四.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-11 00:02:11 | 显示全部楼层
所以你要处理的快,或者做协议
处理完一批再发下一批.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2013-4-10
在线时间
9 小时
 楼主| 发表于 2013-4-11 10:11:28 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
好的~~~~~

非常感谢原子哥能抽空来解答我的问题!
夕四.
回复 支持 反对

使用道具 举报

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2012-11-28
在线时间
0 小时
发表于 2013-4-13 11:12:08 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,怎么在FatFs文件系统下创建的txt存储十六进制数据,在电脑中打开也可以显示,比如1显示0x01。
   另外:我发现往txt文件中写0-512数字时,在电脑上打开时乱码!
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2013-7-21
在线时间
0 小时
发表于 2013-7-21 20:06:03 | 显示全部楼层
回复【楼主位】夕四.:
---------------------------------
亲,您方便把资料发我一下吗?谢谢,FAT系统,都看几天了,还是不明白,伤心死了。。。。。
回复 支持 反对

使用道具 举报

9

主题

55

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
284
金钱
284
注册时间
2013-4-10
在线时间
9 小时
 楼主| 发表于 2013-8-20 09:48:35 | 显示全部楼层
回复【12楼】xy2013:
---------------------------------
不好意思,最近在备战国赛,而且资料现在不在电脑里,后面有时间我会整理一下共享资料的。
夕四.
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2013-12-15
在线时间
0 小时
发表于 2013-12-15 20:41:16 | 显示全部楼层
回复【11楼】总在怀远:
---------------------------------
亲,你向SD卡输入数据乱码的情况解决了吗?我也遇到这样的问题了
回复 支持 反对

使用道具 举报

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2012-11-28
在线时间
0 小时
发表于 2013-12-17 10:46:33 | 显示全部楼层
回复【14楼】dewane:
---------------------------------
我用的是fatfs文件系统,把数据编程字符串格式就可以了。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-8-10
在线时间
0 小时
发表于 2014-8-10 16:57:48 | 显示全部楼层
回复【3楼】夕四.:
------------------------通过串口读取一幅图片数据 具体怎么实现的 还请赐教
回复 支持 反对

使用道具 举报

7

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2014-11-7
在线时间
0 小时
发表于 2014-12-3 08:47:08 | 显示全部楼层
回复【15楼】总在怀远:
---------------------------------
请问一定要变成字符串格式吗?输入整型的不行吗?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 09:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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