智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

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

  [复制链接]

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
跳转到指定楼层
1#
发表于 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的配置在八楼,谢谢

最佳答案

查看完整内容

用winhex看看又没有数据写进去,我很久之前写的,找个程序给你看看,128的

31

主题

619

帖子

0

精华

跨届大侠

大神经常病

Rank: 10Rank: 10Rank: 10

积分
8900

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

威望
4214
贡献
2736
兑换币
2252
注册时间
2012-2-15
在线时间
975 小时
2#
发表于 2013-3-28 19:09:06 | 只看该作者
用winhex看看又没有数据写进去,我很久之前写的,找个程序给你看看,128的

本帖子中包含更多资源

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

x
回复

使用道具 举报

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
3#
 楼主| 发表于 2013-3-28 19:11:50 | 只看该作者
搞了这么多天,都没信心了,谁来帮帮我吧。。。谢谢了。。。
回复

使用道具 举报

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
4#
 楼主| 发表于 2013-3-28 19:47:56 | 只看该作者
帮帮忙呗。。。帮忙顶个贴也行哈~谢谢各位了
回复

使用道具 举报

1

主题

2067

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5124

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

威望
2752
贡献
898
兑换币
59
注册时间
2012-12-8
在线时间
737 小时
5#
发表于 2013-3-28 20:04:16 | 只看该作者
不懂,帮顶
回复

使用道具 举报

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
6#
 楼主| 发表于 2013-3-28 20:07:42 | 只看该作者
exiao 发表于 2013-3-28 20:04
不懂,帮顶

谢谢帮顶
回复

使用道具 举报

13

主题

197

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3560
威望
1655
贡献
937
兑换币
410
注册时间
2011-12-30
在线时间
484 小时
7#
发表于 2013-3-28 20:38:35 | 只看该作者
好好,查查,看看是不是你的SPI底层配置错了
回复

使用道具 举报

41

主题

525

帖子

0

精华

常驻嘉宾

镜花水月

Rank: 8Rank: 8

积分
4910

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

QQ
威望
2394
贡献
1464
兑换币
1115
注册时间
2012-10-23
在线时间
526 小时
8#
发表于 2013-3-28 20:40:21 | 只看该作者
不懂,顶顶
回复

使用道具 举报

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
9#
 楼主| 发表于 2013-3-28 20:56:06 | 只看该作者
颠覆理论 发表于 2013-3-28 20:38
好好,查查,看看是不是你的SPI底层配置错了


谢谢提醒~我查了查,好像没有什么问题吧,这是我的配置,能帮我看看么?或者推荐一下怎么配置,谢谢啦

本帖子中包含更多资源

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

x
回复

使用道具 举报

12

主题

158

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2140
威望
1099
贡献
575
兑换币
204
注册时间
2012-7-29
在线时间
233 小时
10#
 楼主| 发表于 2013-3-28 20:56:30 | 只看该作者
cxn5127111 发表于 2013-3-28 20:40
不懂,顶顶

谢谢帮顶
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 11:35 , Processed in 0.062341 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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