sdcmd.h
上传用户:pudewen666
上传日期:2007-06-08
资源大小:75k
文件大小:9k
源码类别:

微处理器开发

开发平台:

Windows_Unix

  1. /****************************************Copyright (c)**************************************************
  2. **                               Guangzhou ZLG-MCU Development Co.,LTD.
  3. **                                      graduate school
  4. **                                 http://www.zlgmcu.com
  5. **
  6. **--------------File Info-------------------------------------------------------------------------------
  7. ** File name: sddriver.c
  8. ** Last modified Date: 2005-1-6
  9. ** Last Version: V1.0
  10. ** Descriptions: sd 卡驱动软件包: SD卡物理层 ---- SD卡SPI模式支持的命令(头文件) 
  11. ** Soft Packet of SD Card Driver: commands that sd card supported in spi mode(header file)
  12. **
  13. **------------------------------------------------------------------------------------------------------
  14. ** Created by: Ming Yuan Zheng
  15. ** Created date: 2005-1-6
  16. ** Version: V1.0
  17. ** Descriptions: The original version
  18. **
  19. **------------------------------------------------------------------------------------------------------
  20. ** Modified by:
  21. ** Modified date:
  22. ** Version:
  23. ** Descriptions:
  24. **
  25. **------------------------------------------------------------------------------------------------------
  26. ** Modified by: 
  27. ** Modified date:
  28. ** Version:
  29. ** Descriptions: 
  30. **
  31. ********************************************************************************************************/
  32. /*
  33.  *******************************************************
  34. SD 卡的相关命令与响应宏定义
  35.  *******************************************************
  36. */
  37. /* 命令响应定义 define command's response */
  38. #define R1 1
  39. #define R1B 2
  40. #define R2 3
  41. #define R3 4
  42. /* R1和R2高字节错误码 R1 and upper byte of R2 error code */
  43. #define MSK_IDLE             0x01
  44. #define MSK_ERASE_RST        0x02
  45. #define MSK_ILL_CMD          0x04
  46. #define MSK_CRC_ERR          0x08
  47. #define MSK_ERASE_SEQ_ERR    0x10
  48. #define MSK_ADDR_ERR         0x20
  49. #define MSK_PARAM_ERR        0x40
  50. /* R2低字节错误码 lower byte of R2 error code */
  51. #define MSK_TOK_ERROR             0x01
  52. #define MSK_TOK_CC_ERROR          0x02
  53. #define MSK_TOK_ECC_FAILED        0x04
  54. #define MSK_TOK_CC_OUTOFRANGE     0x08
  55. #define MSK_TOK_CC_LOCKED         0x10
  56. /* 数据令牌 Data Tokens */
  57. #define SD_TOK_READ_STARTBLOCK    0xFE
  58. #define SD_TOK_WRITE_STARTBLOCK   0xFE
  59. #define SD_TOK_READ_STARTBLOCK_M  0xFE
  60. #define SD_TOK_WRITE_STARTBLOCK_M 0xFC
  61. #define SD_TOK_STOP_MULTI         0xFD
  62. /* 数据响应令牌 Data Response Tokens */
  63. #define SD_RESP_DATA_MSK   0x0F //数据响应掩码
  64. #define SD_RESP_DATA_ACCETPTED   0x05 //数据被接受
  65. #define SD_RESP_DATA_REJECT_CRC   0x0B      //由于CRC错误而被拒绝
  66. #define SD_RESP_DATA_REJECT_WRITE 0x0D //由于写错误而被拒绝
  67. /* 等待类型 Wait Type */
  68. #define SD_WAIT_READ   0x00 //读等待
  69. #define SD_WAIT_WRITE   0x01 //写等待
  70. #define SD_WAIT_ERASE     0x02 //擦除等待
  71. #define SD_READREG_TIMEOUT   8
  72. /*
  73. *********************************************
  74.      SD卡SPI模式下命令集
  75. *********************************************
  76. */
  77. /******************************** 基本命令集 Basic command set **************************/
  78. /* 复位SD 卡 Reset cards to idle state */
  79. #define CMD0 0
  80. #define CMD0_R R1
  81. /* 读OCR寄存器 Read the OCR (MMC mode, do not use for SD cards) */
  82. #define CMD1 1
  83. #define CMD1_R R1
  84. /* 读CSD寄存器 Card sends the CSD */
  85. #define CMD9 9
  86. #define CMD9_R R1
  87. /* 读CID寄存器 Card sends CID */
  88. #define CMD10 10
  89. #define CMD10_R R1
  90. /* 停止读多块时的数据传输 Stop a multiple block (stream) read/write operation */
  91. #define CMD12 12
  92. #define CMD12_R R1B
  93. /* 读 Card_Status 寄存器 Get the addressed card's status register */
  94. #define CMD13 13
  95. #define CMD13_R R2
  96. /***************************** 块读命令集 Block read commands **************************/
  97. /* 设置块的长度 Set the block length */
  98. #define CMD16 16
  99. #define CMD16_R R1
  100. /* 读单块 Read a single block */
  101. #define CMD17 17
  102. #define CMD17_R R1
  103. /* 读多块,直至主机发送CMD12为止 Read multiple blocks until a CMD12 */
  104. #define CMD18 18
  105. #define CMD18_R R1
  106. /***************************** 块写命令集 Block write commands *************************/
  107. /* 写单块 Write a block of the size selected with CMD16 */
  108. #define CMD24 24
  109. #define CMD24_R R1
  110. /* 写多块 Multiple block write until a CMD12 */
  111. #define CMD25 25
  112. #define CMD25_R R1
  113. /* 写CSD寄存器 Program the programmable bits of the CSD */
  114. #define CMD27 27
  115. #define CMD27_R R1
  116. /***************************** 写保护 Write protection *****************************/
  117. /* Set the write protection bit of the addressed group */
  118. #define CMD28 28
  119. #define CMD28_R R1B
  120. /* Clear the write protection bit of the addressed group */
  121. #define CMD29 29
  122. #define CMD29_R R1B
  123. /* Ask the card for the status of the write protection bits */
  124. #define CMD30 30
  125. #define CMD30_R R1
  126. /***************************** 擦除命令 Erase commands *******************************/
  127. /* 设置擦除块的起始地址 Set the address of the first write block to be erased */
  128. #define CMD32 32
  129. #define CMD32_R R1
  130. /* 设置擦除块的终止地址 Set the address of the last write block to be erased */
  131. #define CMD33 33
  132. #define CMD33_R R1
  133. /* 擦除所选择的块 Erase the selected write blocks */
  134. #define CMD38 38
  135. #define CMD38_R R1B
  136. /***************************** 锁卡命令 Lock Card commands ***************************/
  137. /* 设置/复位密码或上锁/解锁卡 Set/reset the password or lock/unlock the card */
  138. #define CMD42 42
  139. #define CMD42_R R1B
  140. /* Commands from 42 to 54, not defined here */
  141. /***************************** 应用命令 Application-specific commands ****************/
  142. /* 禁止下一个命令为应用命令  Flag that the next command is application-specific */
  143. #define CMD55 55
  144. #define CMD55_R R1
  145. /* 应用命令的通用I/O  General purpose I/O for application-specific commands */
  146. #define CMD56 56
  147. #define CMD56_R R1
  148. /* 读OCR寄存器  Read the OCR (SPI mode only) */
  149. #define CMD58 58
  150. #define CMD58_R R3
  151. /* 使能或禁止 CRC Turn CRC on or off */
  152. #define CMD59 59
  153. #define CMD59_R R1
  154. /***************************** 应用命令 Application-specific commands ***************/
  155. /* 获取 SD Status寄存器 Get the SD card's status */
  156. #define ACMD13 13
  157. #define ACMD13_R R2
  158. /* 得到已写入卡中的块的个数 Get the number of written write blocks (Minus errors ) */
  159. #define ACMD22 22
  160. #define ACMD22_R R1
  161. /* 在写之前,设置预先擦除的块的个数 Set the number of write blocks to be pre-erased before writing */
  162. #define ACMD23 23
  163. #define ACMD23_R R1
  164. /* 读取OCR寄存器 Get the card's OCR (SD mode) */
  165. #define ACMD41 41
  166. #define ACMD41_R R1
  167. /* 连接/断开CD/DATA[3]引脚上的上拉电阻 Connect or disconnect the 50kOhm internal pull-up on CD/DAT[3] */
  168. #define ACMD42 42
  169. #define ACMD42_R R1
  170. /* 读取SCR寄存器 Get the SD configuration register */
  171. #define ACMD51 51
  172. #define ACMD51_R R1
  173. INT8U SD_SendCmd(INT8U cmd, INT8U *param, INT8U resptype, INT8U *resp);  // 一个SPI命令 
  174. void SD_PackParam(INT8U *parameter, INT32U value);  // 封装参数
  175. INT8U SD_BlockCommand(INT8U cmd, INT8U resptype, INT32U parameter);  // 块命令 
  176. INT8U SD_ResetSD(void); // 复位SD卡
  177. INT8U SD_ReadCSD(INT8U csdlen, INT8U *recbuf); // 读CSD  read CSD register
  178. INT8U SD_ReadCID(INT8U cidlen, INT8U *recbuf); // 读CID read CID register
  179. INT8U SD_StopTransmission(void); // 停止传输
  180. INT8U SD_ReadCard_Status(INT8U len, INT8U *buffer); // 读Card Status read Card Status register
  181. INT8U SD_SetBlockLen(INT32U length); // 设置块长度
  182. INT8U SD_ReadSingleBlock(INT32U blockaddr); // 读单块
  183. INT8U SD_ReadMultipleBlock(INT32U blockaddr); // 读多块
  184. INT8U SD_WriteSingleBlock(INT32U blockaddr); // 写单块
  185. INT8U SD_WriteMultipleBlock(INT32U blockaddr); // 写多块 
  186. INT8U SD_ProgramCSD(INT8U len, INT8U *buff); // 写CSD寄存器   write CSD register 
  187. INT8U SD_EraseStartBlock(INT32U startblock); // 擦块起始地址
  188. INT8U SD_EraseEndBlock(INT32U endblock); // 擦块终止地址
  189. INT8U SD_EraseSelectedBlock(void); // 擦除所选的块
  190. INT8U SD_ReadOCR(INT8U ocrlen,INT8U *recbuf); // 读OCR read OCR register
  191. INT8U SD_EnableCRC(INT8U bEnable); // 使能CRC校验 enable CRC
  192. // 特殊应用命令
  193. INT8U SD_ReadSD_Status(INT8U sdslen, INT8U *recbuf); // 读SD_Status  read SD_Status 
  194. INT8U SD_GetNumWRBlcoks(INT32U *blocknum); // 得到正确写入块数
  195. INT8U SD_ReadSCR(INT8U scrlen, INT8U *recbuf); // 读SCR  read SCR register
  196. // 数据流函数
  197. INT8U SD_ReadRegister(INT32U len, INT8U *recbuf); // 读数据
  198. INT8U SD_ReadBlockData(INT32U len, INT8U *recbuf); // 读块数据
  199. INT8U SD_WriteBlockData(INT8U bmulti, INT32U len, INT8U *sendbuf); // 写块数据
  200. // 其它函数
  201. void SD_StopMultiToken(void); // 停止多块写令牌
  202. INT8U SD_WaitBusy(INT8U waittype); // 忙
  203. void SD_SPIDelay(INT8U value); // 发生SPI时钟