msd.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name : msd.h
  3. * Author : MCD Application Team
  4. * Version : V2.1
  5. * Date : 05/30/2008
  6. * Description : Header for msd.c file.
  7. ********************************************************************************
  8. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  9. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  10. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  11. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  12. * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  13. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  14. * FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED
  15. * IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.
  16. *******************************************************************************/
  17. /* Define to prevent recursive inclusion -------------------------------------*/
  18. #ifndef __MSD_H
  19. #define __MSD_H
  20. /* Includes ------------------------------------------------------------------*/
  21. #include <stm32f10x.h>
  22. /* Private define ------------------------------------------------------------*/
  23. /* Block Size */
  24. #define BLOCK_SIZE 512
  25. /* Dummy byte */
  26. #define DUMMY 0xFF
  27. /* Start Data tokens */
  28. /* Tokens (necessary because at nop/idle (and CS active) only 0xff is on the data/command line) */
  29. #define MSD_START_DATA_SINGLE_BLOCK_READ 0xFE /* Data token start byte, Start Single Block Read */
  30. #define MSD_START_DATA_MULTIPLE_BLOCK_READ 0xFE /* Data token start byte, Start Multiple Block Read */
  31. #define MSD_START_DATA_SINGLE_BLOCK_WRITE 0xFE /* Data token start byte, Start Single Block Write */
  32. #define MSD_START_DATA_MULTIPLE_BLOCK_WRITE 0xFD /* Data token start byte, Start Multiple Block Write */
  33. #define MSD_STOP_DATA_MULTIPLE_BLOCK_WRITE 0xFD /* Data toke stop byte, Stop Multiple Block Write */
  34. /* MSD functions return */
  35. #define MSD_SUCCESS 0x00
  36. #define MSD_FAIL 0xFF
  37. /* MSD reponses and error flags */
  38. #define MSD_RESPONSE_NO_ERROR 0x00
  39. #define MSD_IN_IDLE_STATE 0x01
  40. #define MSD_ERASE_RESET 0x02
  41. #define MSD_ILLEGAL_COMMAND 0x04
  42. #define MSD_COM_CRC_ERROR 0x08
  43. #define MSD_ERASE_SEQUENCE_ERROR 0x10
  44. #define MSD_ADDRESS_ERROR 0x20
  45. #define MSD_PARAMETER_ERROR 0x40
  46. #define MSD_RESPONSE_FAILURE 0xFF
  47. /* Data response error */
  48. #define MSD_DATA_OK 0x05
  49. #define MSD_DATA_CRC_ERROR 0x0B
  50. #define MSD_DATA_WRITE_ERROR 0x0D
  51. #define MSD_DATA_OTHER_ERROR 0xFF
  52. /* Commands: CMDxx = CMD-number | 0x40 */
  53. #define MSD_GO_IDLE_STATE 0 /* CMD0=0x40 */
  54. #define MSD_SEND_OP_COND 1 /* CMD1=0x41 */
  55. #define MSD_SEND_CSD 9 /* CMD9=0x49 */
  56. #define MSD_SEND_CID 10 /* CMD10=0x4A */
  57. #define MSD_STOP_TRANSMISSION 12 /* CMD12=0x4C */
  58. #define MSD_SEND_STATUS 13 /* CMD13=0x4D */
  59. #define MSD_SET_BLOCKLEN 16 /* CMD16=0x50 */
  60. #define MSD_READ_SINGLE_BLOCK 17 /* CMD17=0x51 */
  61. #define MSD_READ_MULTIPLE_BLOCK 18 /* CMD18=0x52 */
  62. #define MSD_SET_BLOCK_COUNT 23 /* CMD23=0x57 */
  63. #define MSD_WRITE_BLOCK 24 /* CMD24=0x58 */
  64. #define MSD_WRITE_MULTIPLE_BLOCK 25 /* CMD25=0x59 */
  65. #define MSD_PROGRAM_CSD 27 /* CMD27=0x5B */
  66. #define MSD_SET_WRITE_PROT 28 /* CMD28=0x5C */
  67. #define MSD_CLR_WRITE_PROT 29 /* CMD29=0x5D */
  68. #define MSD_SEND_WRITE_PROT 30 /* CMD30=0x5E */
  69. #define MSD_TAG_SECTOR_START 32 /* CMD32=0x60 */
  70. #define MSD_TAG_SECTOR_END 33 /* CMD33=0x61 */
  71. #define MSD_UNTAG_SECTOR 34 /* CMD34=0x62 */
  72. #define MSD_TAG_ERASE_GROUP_START 35 /* CMD35=0x63 */
  73. #define MSD_TAG_ERASE_GROUP_END 36 /* CMD36=0x64 */
  74. #define MSD_UNTAG_ERASE_GROUP 37 /* CMD37=0x65 */
  75. #define MSD_ERASE 38 /* CMD38=0x66 */
  76. #define MSD_READ_OCR 39 /* CMD39=0x67 */
  77. #define MSD_CRC_ON_OFF 40 /* CMD40=0x68 */
  78. /* Exported types ------------------------------------------------------------*/
  79. /* Private variables ---------------------------------------------------------*/
  80. typedef struct _MSD_CSD /*Card Specific Data*/
  81. {
  82. vu8 CSDStruct; /* CSD structure */
  83. vu8 SysSpecVersion; /* System specification version */
  84. vu8 Reserved1; /* Reserved */
  85. vu8 TAAC; /* Data read access-time 1 */
  86. vu8 NSAC; /* Data read access-time 2 in CLK cycles */
  87. vu8 MaxBusClkFrec; /* Max. bus clock frequency */
  88. vu16 CardComdClasses; /* Card command classes */
  89. vu8 RdBlockLen; /* Max. read data block length */
  90. vu8 PartBlockRead; /* Partial blocks for read allowed */
  91. vu8 WrBlockMisalign; /* Write block misalignment */
  92. vu8 RdBlockMisalign; /* Read block misalignment */
  93. vu8 DSRImpl; /* DSR implemented */
  94. vu8 Reserved2; /* Reserved */
  95. vu16 DeviceSize; /* Device Size */
  96. vu8 MaxRdCurrentVDDMin; /* Max. read current @ VDD min */
  97. vu8 MaxRdCurrentVDDMax; /* Max. read current @ VDD max */
  98. vu8 MaxWrCurrentVDDMin; /* Max. write current @ VDD min */
  99. vu8 MaxWrCurrentVDDMax; /* Max. write current @ VDD max */
  100. vu8 DeviceSizeMul; /* Device size multiplier */
  101. vu8 EraseGrSize; /* Erase group size */
  102. vu8 EraseGrMul; /* Erase group size multiplier */
  103. vu8 WrProtectGrSize; /* Write protect group size */
  104. vu8 WrProtectGrEnable; /* Write protect group enable */
  105. vu8 ManDeflECC; /* Manufacturer default ECC */
  106. vu8 WrSpeedFact; /* Write speed factor */
  107. vu8 MaxWrBlockLen; /* Max. write data block length */
  108. vu8 WriteBlockPaPartial; /* Partial blocks for write allowed */
  109. vu8 Reserved3; /* Reserded */
  110. vu8 ContentProtectAppli; /* Content protection application */
  111. vu8 FileFormatGrouop; /* File format group */
  112. vu8 CopyFlag; /* Copy flag (OTP) */
  113. vu8 PermWrProtect; /* Permanent write protection */
  114. vu8 TempWrProtect; /* Temporary write protection */
  115. vu8 FileFormat; /* File Format */
  116. vu8 ECC; /* ECC code */
  117. vu8 msd_CRC; /* CRC */
  118. vu8 Reserved4; /* always 1*/
  119. }
  120. sMSD_CSD;
  121. typedef struct _MSD_CID /*Card Identification Data*/
  122. {
  123. vu8 ManufacturerID; /* ManufacturerID */
  124. vu16 OEM_AppliID; /* OEM/Application ID */
  125. vu32 ProdName1; /* Product Name part1 */
  126. vu8 ProdName2; /* Product Name part2*/
  127. vu8 ProdRev; /* Product Revision */
  128. vu32 ProdSN; /* Product Serial Number */
  129. vu8 Reserved1; /* Reserved1 */
  130. vu16 ManufactDate; /* Manufacturing Date */
  131. vu8 msd_CRC; /* CRC */
  132. vu8 Reserved2; /* always 1*/
  133. }
  134. sMSD_CID;
  135. /* Exported constants --------------------------------------------------------*/
  136. /* Exported macro ------------------------------------------------------------*/
  137. /* Exported functions ------------------------------------------------------- */
  138. /*----- High layer function -----*/
  139. u8 MSD_Init(void);
  140. u8 MSD_WriteBlock(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite);
  141. u8 MSD_ReadBlock(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);
  142. u8 MSD_WriteBuffer(u8* pBuffer, u32 WriteAddr, u32 NumByteToWrite);
  143. u8 MSD_ReadBuffer(u8* pBuffer, u32 ReadAddr, u32 NumByteToRead);
  144. u8 MSD_GetCSDRegister(sMSD_CSD* MSD_csd);
  145. u8 MSD_GetCIDRegister(sMSD_CID* MSD_cid);
  146. /*----- Medium layer function -----*/
  147. void MSD_SendCmd(u8 Cmd, u32 Arg, u8 Crc);
  148. u8 MSD_GetResponse(u8 Response);
  149. u8 MSD_GetDataResponse(void);
  150. u8 MSD_GoIdleState(void);
  151. u16 MSD_GetStatus(void);
  152. /*----- Low layer function -----*/
  153. u8 MSD_WriteByte(u8 byte);
  154. u8 MSD_ReadByte(void);
  155. #endif /* __MSD_H */
  156. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/