智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 9870|回复: 42
打印 上一主题 下一主题

[咨询] Micro SD卡写扇区操作

  [复制链接]

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
跳转到指定楼层
#
发表于 2013-3-28 19:09:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
100贡献
本帖最后由 一坨飞奔de喵 于 2013-3-28 19:17 编辑
  1. // 初始化SD卡到SPI模式

  2. unsigned char SD_Reset()
  3. {
  4. unsigned char retry,temp;
  5. unsigned char i;
  6. unsigned char CMD0[] = {0x40,0x00,0x00,0x00,0x00,0x95};

  7. SD_CS_SetVal();

  8. for (i=0;i<10;i++)
  9. SD_SPI_SendChar(0xFF); //发送至少74个时钟信号
  10. SD_CS_ClrVal();

  11. //向SD卡发送CMD0
  12. retry=0;
  13. do
  14. {
  15. //为了能够成功写入CMD0,在这里写200次
  16. for(i=0;i<5;i++)
  17. SD_SPI_SendChar(0xFF); //发送至少16个时钟信号
  18. temp=Write_Command_SD(CMD0);
  19. retry++;
  20. if(retry==200)
  21. { //超过200次
  22. return(0x01);//CMD0 Error!
  23. }
  24. }
  25. while(temp!=0x01); //回应01h,停止写入
  26. SD_CS_SetVal();
  27. SD_SPI_SendChar(0xFF);
  28. return 0;
  29. }

  30. unsigned char SD_Init()
  31. {
  32. unsigned char retry,temp;
  33. unsigned char CMD1[] = {0x41,0x00,0x00,0x00,0x00,0xFF};
  34. //发送CMD1到SD卡
  35. SD_CS_ClrVal();

  36. retry=0;
  37. do
  38. { //为了能成功写入CMD1,写100次
  39. temp=Write_Command_SD(CMD1);
  40. retry++;
  41. if(retry==100)
  42. { //超过100次
  43. return(0x02);//CMD1 Error!
  44. }
  45. }
  46. while(temp!=0x00);//回应00h停止写入

  47. SD_CS_SetVal(); //片选无效
  48. SD_SPI_SendChar(0xFF);
  49. return(0); //初始化成功
  50. }

  51. //-----------------------------------------------------------------------------------------------
  52. // 向SD卡中写入命令,并返回回应的第二个字节
  53. //-----------------------------------------------------------------------------------------------
  54. unsigned char Write_Command_SD(unsigned char *CMD)
  55. {
  56. unsigned char *temp=0;
  57. unsigned char retry=0;
  58. unsigned char i;

  59. //禁止SD卡片选
  60. SD_CS_SetVal();
  61. //发送8个时钟信号
  62. SD_SPI_SendChar(0xFF);
  63. //使能SD卡片选
  64. SD_CS_ClrVal();

  65. //向SD卡发送6字节命令
  66. for (i=0;i<6;i++)
  67. {
  68. SD_SPI_SendChar(*CMD++);
  69. }

  70. //获得16位的回应
  71. SD_SPI_RecvChar(temp); //read the first byte,ignore it.

  72. do
  73. { //读取后8位
  74. SD_SPI_RecvChar(temp);
  75. retry++;
  76. }
  77. while((*temp==0xFF)&&(retry<100));
  78. return(*temp);
  79. }

  80. //--------------------------------------------------------------------------------------------
  81. // 写512个字节到SD卡的某一个扇区中去 返回0说明写入成功
  82. //--------------------------------------------------------------------------------------------
  83. unsigned char SD_write_sector(unsigned long addr,unsigned char *Buffer)
  84. {
  85. unsigned char tmp,retry;
  86. unsigned char *temp=0;
  87. unsigned int i;
  88. //命令24
  89. unsigned char CMD24[] = {0x58,0x00,0x00,0x00,0x00,0xFF};
  90. addr = addr << 9; //addr = addr * 512

  91. CMD24[1] = (unsigned char)((addr & 0xFF000000) >>24 );
  92. CMD24[2] = (unsigned char)((addr & 0x00FF0000) >>16 );
  93. CMD24[3] = (unsigned char)((addr & 0x0000FF00) >>8 );

  94. SD_CS_ClrVal();
  95. //写命令24到SD卡中去
  96. retry=0;
  97. do
  98. { //为了可靠写入,写100次
  99. tmp=Write_Command_SD(CMD24);
  100. retry++;
  101. if(retry==100)
  102. {
  103. return(tmp); //send commamd Error!
  104. }
  105. }
  106. while(tmp!=0);

  107. //在写之前先产生100个时钟信号
  108. for (i=0;i<100;i++)
  109. {
  110. SD_SPI_RecvChar(temp);
  111. }

  112. //写入开始字节
  113. //SD_CS_ClrVal();
  114. SD_SPI_SendChar(0xFE);

  115. //现在可以写入512个字节
  116. for (i=0;i<512;i++)
  117. {
  118. SD_SPI_SendChar(Buffer[i]);
  119. }

  120. //CRC-Byte
  121. SD_SPI_SendChar(0xFF); //Dummy CRC
  122. SD_SPI_SendChar(0xFF); //CRC Code

  123. SD_SPI_RecvChar(temp); // read response
  124. if((*temp & 0x1F)!=0x05) // 写入的512个字节是未被接受
  125. {
  126. SD_CS_SetVal();
  127. return(0x03); //Error!
  128. }
  129. //等到SD卡不忙为止
  130. //因为数据被接受后,SD卡在向储存阵列中编程数据
  131. do
  132. {
  133. SD_SPI_RecvChar(temp);
  134. }
  135. while (*temp!=0xFF) ;

  136. //禁止SD卡
  137. SD_CS_SetVal();
  138. SD_SPI_SendChar(0xFF);
  139. return(0);//写入成功
  140. }
复制代码
根据网上的操作改的,用的是DSC系列的芯片,MC56F8013。
没有打算用文件系统,只想简单地把数据写入扇区,可是弄了一周了,完全没有反应。。。
PS:用的winhex查看的,数据一点儿也没有改变。。。
求助各位大神,小弟拜谢了。。。



补充内容 (2013-3-28 20:57):
SPI的配置在八楼,谢谢

3

主题

563

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3808

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

QQ
威望
1710
贡献
906
兑换币
1148
注册时间
2013-8-24
在线时间
596 小时
42#
发表于 2014-2-20 21:55:01 | 只看该作者
:lol楼主还在论坛吗?我们也想用SD卡,,能帮忙吗?SPI驱动的程序有吗??
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
威望
129
贡献
57
兑换币
74
注册时间
2013-7-13
在线时间
29 小时
毕业学校
天津理工大学
41#
发表于 2013-8-5 14:56:03 | 只看该作者
gy810986741 发表于 2013-4-9 16:53
解决了吗?

能否发一个SD卡的驱动程序,1021208069@qq.com

回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
威望
129
贡献
57
兑换币
74
注册时间
2013-7-13
在线时间
29 小时
毕业学校
天津理工大学
40#
发表于 2013-8-5 13:59:51 | 只看该作者
huanyefeng0809 发表于 2013-3-28 23:17
同纠结于SD卡的...

能否发一个SD卡的驱动程序给我,感激不尽,1021208069@qq.com
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
威望
129
贡献
57
兑换币
74
注册时间
2013-7-13
在线时间
29 小时
毕业学校
天津理工大学
39#
发表于 2013-7-21 21:52:38 | 只看该作者
xingyujie 发表于 2013-6-4 18:05
能把代码发给我看看吗?邮箱:
最近也在用SPI配SD,在读函数里就跑死了。。。

能否发一个SD卡的驱动程序,1021208069@qq.com
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
威望
129
贡献
57
兑换币
74
注册时间
2013-7-13
在线时间
29 小时
毕业学校
天津理工大学
38#
发表于 2013-7-21 21:50:10 | 只看该作者
能否发一个SD卡的驱动程序,1021208069@qq.com
回复

使用道具 举报

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
37#
 楼主| 发表于 2013-7-13 16:28:04 | 只看该作者
奇迹在明天 发表于 2013-7-13 14:03
我最近也再用,能把SD驱动程序发过来一份吗?感激不尽  邮箱

已发送
回复

使用道具 举报

1

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
威望
129
贡献
57
兑换币
74
注册时间
2013-7-13
在线时间
29 小时
毕业学校
天津理工大学
36#
发表于 2013-7-13 14:03:40 | 只看该作者
一坨飞奔de喵 发表于 2013-6-4 22:12
已发送

我最近也再用,能把SD驱动程序发过来一份吗?感激不尽  邮箱1021208069@qq.com
回复

使用道具 举报

17

主题

97

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
QQ
威望
1093
贡献
652
兑换币
638
注册时间
2012-12-1
在线时间
232 小时
35#
发表于 2013-6-5 13:39:27 | 只看该作者
收到,谢谢
回复

使用道具 举报

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
34#
 楼主| 发表于 2013-6-4 22:12:58 | 只看该作者
xingyujie 发表于 2013-6-4 18:05
能把代码发给我看看吗?邮箱:
最近也在用SPI配SD,在读函数里就跑死了。。。

已发送
回复

使用道具 举报

17

主题

97

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2209
QQ
威望
1093
贡献
652
兑换币
638
注册时间
2012-12-1
在线时间
232 小时
33#
发表于 2013-6-4 18:05:20 | 只看该作者
能把代码发给我看看吗?邮箱:1149989316@qq.com
最近也在用SPI配SD,在读函数里就跑死了。。。
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-29 03:23 , Processed in 0.059594 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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