搜索
bottom↓
回复: 16

STM32 SDIO 的一个神奇现象 怪现象

[复制链接]

出0入0汤圆

发表于 2013-3-22 00:49:31 | 显示全部楼层 |阅读模式
对于野火的SDIO并且加了FATFS文件系统的例程,我用来保存一个24位深度的bmp图像。图像大小为320x240。
bmp文件头和bmp正文数据是分开的写入的。先写入54字节的文件头,再写入230400字节的图像数据。
对于FATFS文件系统,先是调用了单块写入的函数,再才是调用多块写入的函数。

野火的例程,可以让我完整的在SD卡中看到我存进去的10张一样的图片。但是我把野火的例程的project重新建成自己的习惯方式之后,编译完全通过,代码完全抄袭。得到的图像,在第512字节的地方重复了两个字节。往后的图像就统统都错了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入0汤圆

 楼主| 发表于 2013-3-22 00:50:50 | 显示全部楼层
可以用的工程文件如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-3-22 00:54:03 | 显示全部楼层
将工程下所有的程序文件复制出来,重新搭建一个工程之后,出来的图像就是上面那样子绿掉的那种。
我自己试过了好多遍,都是那样子,找同学搭建工程试过得到了同样的结果。
工程配置比对过好多遍,一模一样。
附带我配置的工程文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-3-22 00:55:09 | 显示全部楼层
我使用的卡是8G的金士顿SD卡,求遇到过类似问题的大神帮帮回答

出0入0汤圆

发表于 2013-3-22 01:21:05 | 显示全部楼层
一次写512字节就好了。。。

出0入0汤圆

 楼主| 发表于 2013-3-22 01:34:06 | 显示全部楼层
CoolBird007 发表于 2013-3-22 01:21
一次写512字节就好了。。。

一次写512字节是没问题。 关键是我弄这个驱动是为了存摄像头采集的图像。所以bmp文件头需要自己添加,是54个字节,接着才是图像的数据,对于图像的数据是512字节每次的写入。

出0入0汤圆

发表于 2013-3-22 02:19:27 | 显示全部楼层
SDIO,DMA要求4字节对齐,54不是4字节对齐的。

出0入0汤圆

发表于 2013-3-22 07:05:24 | 显示全部楼层
DMA 4字节对齐的问题....求更优秀的解决方案...
BMP头是54字节....Buffer从第二个开始用就可以正确了...
if (f_write(&FileHandle, Buffer + 2, 1440, &Count_Return) != FR_OK)

出0入0汤圆

 楼主| 发表于 2013-3-22 08:28:27 | 显示全部楼层
adce 发表于 2013-3-22 07:05
DMA 4字节对齐的问题....求更优秀的解决方案...
BMP头是54字节....Buffer从第二个开始用就可以正确了...
if ...

7楼 8楼解决了我的问题。8楼的解决方案不可行。
需要修改位图的信息头才行。
改成:
const unsigned char bmpheader[56]=
{
0x42,0x4d,          //偏移量0x0000 文件标识 "BM" ,不需要修改
0x38,0x84,0x03,0x00,//偏移量0x0002 用字节表示整个文件的大小        0x038436 = 230456 = 320*240*3+56
0x00,0x00,0x00,0x00,//偏移量0x0006 保留,必须设置为0,不需要修改
0x38,0x00,0x00,0x00,//偏移量0x000a 文件开始到位图数据之间的偏移量  0x38 = 56
0x28,0x00,0x00,0x00,//偏移量0x000e 位图信息头的长度,一般是0x28,不需要修改
0x40,0x01,0x00,0x00,//偏移量0x0012 位图的宽度 0x0140 = 320
0xF0,0x00,0x00,0x00,//偏移量0x0016 位图的高度 0x00f0 = 240
0x01,0x00,          //偏移量0x001a 位图的位面数,该值总是1,不需要修改
0x18,0x00,          //偏移量0x001c 每个像素的位数 0x18 = 24
0x00,0x00,0x00,0x00,//偏移量0x001e 压缩,0表示不压缩,不需要修改
0x00,0x84,0x03,0x00,//偏移量0x0022 表示位图数据的大小,行必须是4的倍数,否则补零 0x038400 = 320*240*3 = 230400
0xc4,0x0e,0x00,0x00,//偏移量0x0026 用像素/米表示的水平分辨率,参数无关紧要
0xc4,0x0e,0x00,0x00,//偏移量0x002a 用像素/米表示的垂直分辨率,参数无关紧要
0x00,0x00,0x00,0x00,//偏移量0x002e 位图使用的颜色数,不需要修改
0x00,0x00,0x00,0x00,//偏移量0x0032 Important colors,不需要修改
0x00,0x00
};
即可。就是在原来的基础上加上了2个字节。改变编译量为56,文件大小为320x240+56

出0入0汤圆

发表于 2013-3-22 09:17:55 | 显示全部楼层
cpholr1 发表于 2013-3-22 08:28
7楼 8楼解决了我的问题。8楼的解决方案不可行。
需要修改位图的信息头才行。
改成:

解决了就好...
其实是可行的....有一些设备软件不支持偏移值不是54的...

出0入0汤圆

发表于 2013-4-13 14:07:46 | 显示全部楼层
Mark~~学习中

出0入0汤圆

 楼主| 发表于 2013-4-15 08:31:14 | 显示全部楼层
adce 发表于 2013-3-22 09:17
解决了就好...
其实是可行的....有一些设备软件不支持偏移值不是54的...

还有一个通用的办法,就是改DMA传输的时候的参数,将四字节对齐改成Byte,当然只是改了Memory的,不能改peripheral的。

个人调试笔记的一段:

“之前奶茶妹妹写入SD卡的那张图片一直有问题,表现在错位上面,问了阿莫论坛上的大神们,知道了这个是字节未对齐造成的,但是这个问题还是一直很奇葩,在F407上面和F103上面的解决方案不一样。比如在F103上面是错位了2个字节,所以bmpheader改成了56就行了,而在F407上面,却要将bmpheader改成57,才能让图片正常写入在SD卡上面。问题一直放着,没有得到合理的解决。
之前曾经想过将SDIO的每次传入的字节数改为1个字节,但是一直没有去做。现在一做就给试出来了,效果不错,bmpheader仍然是54字节,不用怀疑,字节错位的问题不可能再有了。”

  SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;

出0入0汤圆

发表于 2013-4-15 12:48:10 | 显示全部楼层
cpholr1 发表于 2013-4-15 08:31
还有一个通用的办法,就是改DMA传输的时候的参数,将四字节对齐改成Byte,当然只是改了Memory的,不能改p ...

哦...這樣可以?....下午去試試看...感謝分享...

出0入0汤圆

发表于 2013-5-5 21:52:18 | 显示全部楼层
cpholr1 发表于 2013-4-15 08:31
还有一个通用的办法,就是改DMA传输的时候的参数,将四字节对齐改成Byte,当然只是改了Memory的,不能改p ...

我修改那两行代码,没效果啊!!
我是407的~

出0入0汤圆

发表于 2013-5-10 09:09:22 | 显示全部楼层
Sean_mcu 发表于 2013-5-5 21:52
我修改那两行代码,没效果啊!!
我是407的~

我用的F103的,也不行啊,你解决了没?
还有,有两个DMA的函数
DMA_RxConfig............DMA_TxConfig
这两个函数的Memory的数据宽度都要改么?还是只改一个?

出0入0汤圆

发表于 2013-5-29 15:25:31 | 显示全部楼层
版主,你的stm32f407是自己做的吗?yuv转换成rgb才可以显示在lcd屏上的,你是不是用了视频处理芯片!

出0入0汤圆

发表于 2013-8-14 16:11:37 | 显示全部楼层
我也遇到了一样的问题,只修改Memory的数据宽度不行
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-27 08:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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