mmc_sd.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef _MMC_SD_H_
  2. #define _MMC_SD_H_
  3. #include "sys.h"
  4. #include "STM32F10X.h"
  5. //////////////////////////////////////////////////////////////////////////////////
  6. //本程序只供学习使用,未经作者许可,不得用于其它任何用途
  7. //ALIENTEK战舰STM32开发板
  8. //SD卡 驱动代码
  9. //正点原子@ALIENTEK
  10. //技术论坛:www.openedv.com
  11. //修改日期:2012/9/17
  12. //版本:V1.0
  13. //版权所有,盗版必究。
  14. //Copyright(C) 广州市星翼电子科技有限公司 2009-2019
  15. //All rights reserved
  16. //////////////////////////////////////////////////////////////////////////////////
  17. // SD卡类型定义
  18. #define SD_TYPE_ERR 0X00
  19. #define SD_TYPE_MMC 0X01
  20. #define SD_TYPE_V1 0X02
  21. #define SD_TYPE_V2 0X04
  22. #define SD_TYPE_V2HC 0X06
  23. // SD卡指令表
  24. #define CMD0 0 //卡复位
  25. #define CMD1 1
  26. #define CMD8 8 //命令8 ,SEND_IF_COND
  27. #define CMD9 9 //命令9 ,读CSD数据
  28. #define CMD10 10 //命令10,读CID数据
  29. #define CMD12 12 //命令12,停止数据传输
  30. #define CMD16 16 //命令16,设置SectorSize 应返回0x00
  31. #define CMD17 17 //命令17,读sector
  32. #define CMD18 18 //命令18,读Multi sector
  33. #define CMD23 23 //命令23,设置多sector写入前预先擦除N个block
  34. #define CMD24 24 //命令24,写sector
  35. #define CMD25 25 //命令25,写Multi sector
  36. #define CMD41 41 //命令41,应返回0x00
  37. #define CMD55 55 //命令55,应返回0x01
  38. #define CMD58 58 //命令58,读OCR信息
  39. #define CMD59 59 //命令59,使能/禁止CRC,应返回0x00
  40. //数据写入回应字意义
  41. #define MSD_DATA_OK 0x05
  42. #define MSD_DATA_CRC_ERROR 0x0B
  43. #define MSD_DATA_WRITE_ERROR 0x0D
  44. #define MSD_DATA_OTHER_ERROR 0xFF
  45. //SD卡回应标记字
  46. #define MSD_RESPONSE_NO_ERROR 0x00
  47. #define MSD_IN_IDLE_STATE 0x01
  48. #define MSD_ERASE_RESET 0x02
  49. #define MSD_ILLEGAL_COMMAND 0x04
  50. #define MSD_COM_CRC_ERROR 0x08
  51. #define MSD_ERASE_SEQUENCE_ERROR 0x10
  52. #define MSD_ADDRESS_ERROR 0x20
  53. #define MSD_PARAMETER_ERROR 0x40
  54. #define MSD_RESPONSE_FAILURE 0xFF
  55. //这部分应根据具体的连线来修改!
  56. //战舰STM32开发板使用的是PD2作为SD卡的CS脚.
  57. #define SD_CS PBout(12) //SD卡片选引脚
  58. extern u8 SD_Type;//SD卡的类型
  59. //函数申明区
  60. u8 SD_SPI_ReadWriteByte(u8 data);
  61. void SD_SPI_SpeedLow(void);
  62. void SD_SPI_SpeedHigh(void);
  63. u8 SD_WaitReady(void); //等待SD卡准备
  64. u8 SD_GetResponse(u8 Response); //获得相应
  65. u8 SD_Initialize(void); //初始化
  66. u8 SD_ReadDisk(u8*buf,u32 sector,u8 cnt); //读块
  67. u8 SD_WriteDisk(u8*buf,u32 sector,u8 cnt); //写块
  68. u32 SD_GetSectorCount(void); //读扇区数
  69. u8 SD_GetCID(u8 *cid_data); //读SD卡CID
  70. u8 SD_GetCSD(u8 *csd_data); //读SD卡CSD
  71. extern u8 SD_OK;
  72. #endif