[牛人杂谈] SD卡操作

[复制链接]
1446|24
 楼主| 天灵灵地灵灵 发表于 2019-10-21 21:45 | 显示全部楼层
  1. /****************************************
  2. *函数名称:SD_GetCID
  3. *输 入:cid_data
  4. arg 命令参数
  5. crc crc 校验值
  6. *输 出:SD 卡返回的响应
  7. *功 能:获取 SD 卡的 CID 信息,包括制造商信息
  8. ******************************************/
  9. UINT8 SD_GetCID(UINT8 *cid_data)
  10. {
  11. UINT8 r1;
  12. /* 发 CMD10 命令,读 CID */
  13. r1=SD_SendCmd(CMD10,0,0x01);
  14. if(r1==0x00)
  15. {
  16. /* 接收 16 个字节的数据 */
  17. r1=SD_RecvData(cid_data,16);
  18. }
  19. /* 取消片选 */
  20. SD_DisSelect();
  21. if(r1)
  22. {
  23. return 1;
  24. }
  25. return 0;
  26. }
 楼主| 天灵灵地灵灵 发表于 2019-10-21 21:46 | 显示全部楼层
[5]CSD(Card-Specific Data)寄存器提供了读写 SD 卡的一些信息。其中的一些单元可以由用户重新编程,CSD 内容非常的丰富,将 SD 卡的所有信息完全描述出来,包含 SD 卡的扇区大小、最大最小读取电流、最大数据传输速率等,具体的 CSD 结构如下:
737265dadb6b1a20ff.png
 楼主| 天灵灵地灵灵 发表于 2019-10-21 21:46 | 显示全部楼层
  1. /****************************************
  2. *函数名称:SD_GetCSD
  3. *输 入:csd_data 存放 CSD 的内存,至少 16Byte
  4. *输 出:0 NO_ERR
  5. 1 错误
  6. *功 能:获取 SD 卡的 CSD 信息,包括容量和速度信息
  7. ******************************************/
  8. UINT8 SD_GetCSD(UINT8 *csd_data)
  9. {
  10. UINT8 r1;
  11. /* 发 CMD9 命令,读 CSD */
  12. r1=SD_SendCmd(CMD9,0,0x01);
  13. if(r1==0)
  14. {
  15. /* 接收 16 个字节的数据 */
  16. r1=SD_RecvData(csd_data, 16);
  17. }
  18. /* 取消片选 */
  19. SD_DisSelect();
  20. if(r1)
  21. {
  22. return 1;
  23. }
  24. return 0;
  25. }
 楼主| 天灵灵地灵灵 发表于 2019-10-21 21:47 | 显示全部楼层
  1. #include "SmartM_M4.h"
  2. /****************************************
  3. *函数名称:main
  4. *输 入:无
  5. *输 出:无
  6. *功 能:函数主体
  7. ******************************************/
  8. INT32 main(void)
  9. {
  10. UINT8 buf[512]={0};
  11. UINT8 i=0;
  12. PROTECT_REG
  13. (
  14. /* 系统时钟初始化 */
  15. SYS_Init(PLL_CLOCK);
  16. /* 串口 0 初始化 */
  17. UART0_Init(115200);
  18. )
  19. printf("\r\n================================================ \r\n");
  20. printf("\r\n SD Card Test \r\n");
  21. printf("\r\n SD Card Show CID & CSD \r\n");
  22. printf("\r\n================================================ \r\n");
  23. /* SD Card 初始化 */
  24. while(SD_Initialize())
  25. {
  26. Delayms(500);
  27. printf("Please insert SD Card\r\n");
  28. }
  29. /* SD Card 获取 CID */
  30. SD_GetCID(buf);
  31. printf("\r\nSD Card CID is:");
  32. for(i=0;i<16;i++)
  33. {
  34. printf("%02X",buf[i]);
  35. }
  36. printf("\r\n");
  37. /* SD Card 获取 CSD */
  38. SD_GetCSD(buf);
  39. printf("\r\nSD Card CSD is:");
  40. for(i=0;i<16;i++)
  41. {
  42. printf("%02X",buf[i]);
  43. }
  44. printf("\r\n");
  45. while(1);
  46. }
643757107 发表于 2019-10-21 22:06 | 显示全部楼层
很详细,多谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部