OpenEdv-开源电子网

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

向sd卡写数据导致SD卡格式化问题

[复制链接]

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
发表于 2017-5-26 15:52:28 | 显示全部楼层 |阅读模式
10金钱
我在配套的SD卡实验例程上更改程序,写入一部分数据,导致SD卡需要格式化,尝试了更换几块SD卡都是这种问题

最佳答案

查看完整内容[请看2#楼]

你在跑了文件系统的代码上,随意的调用驱动接口,写数据,把文件系统的参数写坏是很正常的~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 15:52:29 | 显示全部楼层
你在跑了文件系统的代码上,随意的调用驱动接口,写数据,把文件系统的参数写坏是很正常的~
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 16:02:42 | 显示全部楼层
你写入的数据可能吧文件系统搞坏了,所以才需要格式化~
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 16:16:43 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-26 16:02
你写入的数据可能吧文件系统搞坏了,所以才需要格式化~

你有没有写过向sd卡里面写数据的程序,能否分享一下
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 16:33:50 | 显示全部楼层
纯之/wind 发表于 2017-5-26 16:16
你有没有写过向sd卡里面写数据的程序,能否分享一下

你用了文件系统就掉文件系统的接口,不带文件系统就直接调用sd驱动的接口~原子都有代码的
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 16:45:16 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-26 16:33
你用了文件系统就掉文件系统的接口,不带文件系统就直接调用sd驱动的接口~原子都有代码的

void SD_Write_Sectorx(u32 sec)
{
        u8 *buf;
        u16 i;

//        buf=mymalloc(512);                                //
        buf=write;                               
        if(SD_WriteDisk(buf,sec,1)==0)       
        {       
                LCD_ShowString(60,190,200,16,16,"USART1 Sending Data...");
                printf("SECTOR 0 DATA:\r\n");
                for(i=0;i<512;i++)printf("%x ",buf);           
                printf("\r\nDATA ENDED\r\n");
                LCD_ShowString(60,190,200,16,16,"USART1 Send Data Over!");
        }
        myfree(buf);
}
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 16:47:06 | 显示全部楼层
纯之/wind 发表于 2017-5-26 16:45
void SD_Write_Sectorx(u32 sec)
{
        u8 *buf;

这个是sd驱动的代码
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 16:47:21 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-26 16:33
你用了文件系统就掉文件系统的接口,不带文件系统就直接调用sd驱动的接口~原子都有代码的

我把数据都放在了数组write里面,然后通过这个函数写到扇区0中,你看这样对不?
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 16:47:59 | 显示全部楼层
应该是你应用层用了文件系统,你自己写代码反而用了SD驱动,导致文件系统损害了
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 16:50:14 | 显示全部楼层
明显不对。。。 buf=write;    你只是把指针拿过来了,数据还在write里面啊~但是你驱动用的buffer是buf的malloc空间地址~复习下C吧~
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 16:58:15 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-26 16:50
明显不对。。。 buf=write;    你只是把指针拿过来了,数据还在write里面啊~但是你驱动用的buffer是buf的ma ...

奥奥,那我应该用哪个函数把write数组里面的数据写到sd卡中去呢?
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 16:59:39 | 显示全部楼层
纯之/wind 发表于 2017-5-26 16:58
奥奥,那我应该用哪个函数把write数组里面的数据写到sd卡中去呢?

就是这个API,只是你逻辑没搞对~你要把数据放在buf地址里面~
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 17:19:08 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-26 16:59
就是这个API,只是你逻辑没搞对~你要把数据放在buf地址里面~

数据写进去了,能用串口读出来,但是还是格式化的问题不知道怎么解决
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2017-5-26 17:23:27 | 显示全部楼层
纯之/wind 发表于 2017-5-26 17:19
数据写进去了,能用串口读出来,但是还是格式化的问题不知道怎么解决

格式化只针对文件系统。。
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 17:25:49 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-26 17:23
格式化只针对文件系统。。

还是不太懂,谢谢你哈,麻烦一下午
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 18:27:18 | 显示全部楼层
小陀螺爱炒蛋 发表于 2017-5-26 17:26
你在跑了文件系统的代码上,随意的调用驱动接口,写数据,把文件系统的参数写坏是很正常的~

奥奥,那我应该怎么避免这种情况呢
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-5-26 21:31:59 | 显示全部楼层
纯之/wind 发表于 2017-5-26 18:27
奥奥,那我应该怎么避免这种情况呢

分享一个写sd小程序吧,谢谢啦,一直搞不好
回复

使用道具 举报

1

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2017-5-10
在线时间
55 小时
发表于 2017-5-27 00:16:45 来自手机 | 显示全部楼层
纯之/wind 发表于 2017-5-26 21:31
分享一个写sd小程序吧,谢谢啦,一直搞不好

扇区0就是存放文件系统的你往那里面写入必然会导致需要格式化……想保留文件系统就用fatfs,用它新建文件存取数组,这样子你在电脑上还能看到你存了些啥
回复

使用道具 举报

3

主题

31

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-22
在线时间
11 小时
 楼主| 发表于 2017-6-6 21:52:39 | 显示全部楼层
cromarti 发表于 2017-5-27 00:16
扇区0就是存放文件系统的你往那里面写入必然会导致需要格式化……想保留文件系统就用fatfs,用它新建文件 ...

好的,谢谢你
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-6-10
在线时间
0 小时
发表于 2017-6-10 21:09:01 | 显示全部楼层
不要写00扇区,那样肯定需要格式化。如果你一定要用SD驱动写,可以先在电脑上用WIN HEX这类软件打开SD卡,看看文件从哪个扇区开始,偏移多少,再向那个位置写入数据。最好是直接用FATFS文件系统,然后用文件读写函数来写。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-18 15:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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