Driver_MCI.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. /*
  2. * Copyright (c) 2013-2020 ARM Limited. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the License); you may
  7. * not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  14. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. *
  18. * $Date: 31. March 2020
  19. * $Revision: V2.4
  20. *
  21. * Project: MCI (Memory Card Interface) Driver definitions
  22. */
  23. /* History:
  24. * Version 2.4
  25. * Removed volatile from ARM_MCI_STATUS
  26. * Version 2.3
  27. * ARM_MCI_STATUS made volatile
  28. * Version 2.2
  29. * Added timeout and error flags to ARM_MCI_STATUS
  30. * Added support for controlling optional RST_n pin (eMMC)
  31. * Removed explicit Clock Control (ARM_MCI_CONTROL_CLOCK)
  32. * Removed event ARM_MCI_EVENT_BOOT_ACK_TIMEOUT
  33. * Version 2.1
  34. * Decoupled SPI mode from MCI driver
  35. * Replaced function ARM_MCI_CardSwitchRead with ARM_MCI_ReadCD and ARM_MCI_ReadWP
  36. * Version 2.0
  37. * Added support for:
  38. * SD UHS-I (Ultra High Speed)
  39. * SD I/O Interrupt
  40. * Read Wait (SD I/O)
  41. * Suspend/Resume (SD I/O)
  42. * MMC Interrupt
  43. * MMC Boot
  44. * Stream Data transfer (MMC)
  45. * VCCQ Power Supply Control (eMMC)
  46. * Command Completion Signal (CCS) for CE-ATA
  47. * Added ARM_MCI_Control function
  48. * Added ARM_MCI_GetStatus function
  49. * Removed ARM_MCI_BusMode, ARM_MCI_BusDataWidth, ARM_MCI_BusSingaling functions
  50. * (replaced by ARM_MCI_Control)
  51. * Changed ARM_MCI_CardPower function (voltage parameter)
  52. * Changed ARM_MCI_SendCommnad function (flags parameter)
  53. * Changed ARM_MCI_SetupTransfer function (mode parameter)
  54. * Removed ARM_MCI_ReadTransfer and ARM_MCI_WriteTransfer functions
  55. * Changed prefix ARM_DRV -> ARM_DRIVER
  56. * Changed return values of some functions to int32_t
  57. * Version 1.10
  58. * Namespace prefix ARM_ added
  59. * Version 1.00
  60. * Initial release
  61. */
  62. #ifndef DRIVER_MCI_H_
  63. #define DRIVER_MCI_H_
  64. #ifdef __cplusplus
  65. extern "C"
  66. {
  67. #endif
  68. #include "Driver_Common.h"
  69. #define ARM_MCI_API_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(2,4) /* API version */
  70. #define _ARM_Driver_MCI_(n) Driver_MCI##n
  71. #define ARM_Driver_MCI_(n) _ARM_Driver_MCI_(n)
  72. /****** MCI Send Command Flags *****/
  73. #define ARM_MCI_RESPONSE_Pos 0
  74. #define ARM_MCI_RESPONSE_Msk (3UL << ARM_MCI_RESPONSE_Pos)
  75. #define ARM_MCI_RESPONSE_NONE (0UL << ARM_MCI_RESPONSE_Pos) ///< No response expected (default)
  76. #define ARM_MCI_RESPONSE_SHORT (1UL << ARM_MCI_RESPONSE_Pos) ///< Short response (48-bit)
  77. #define ARM_MCI_RESPONSE_SHORT_BUSY (2UL << ARM_MCI_RESPONSE_Pos) ///< Short response with busy signal (48-bit)
  78. #define ARM_MCI_RESPONSE_LONG (3UL << ARM_MCI_RESPONSE_Pos) ///< Long response (136-bit)
  79. #define ARM_MCI_RESPONSE_INDEX (1UL << 2) ///< Check command index in response
  80. #define ARM_MCI_RESPONSE_CRC (1UL << 3) ///< Check CRC in response
  81. #define ARM_MCI_WAIT_BUSY (1UL << 4) ///< Wait until busy before sending the command
  82. #define ARM_MCI_TRANSFER_DATA (1UL << 5) ///< Activate Data transfer
  83. #define ARM_MCI_CARD_INITIALIZE (1UL << 6) ///< Execute Memory Card initialization sequence
  84. #define ARM_MCI_INTERRUPT_COMMAND (1UL << 7) ///< Send Interrupt command (CMD40 - MMC only)
  85. #define ARM_MCI_INTERRUPT_RESPONSE (1UL << 8) ///< Send Interrupt response (CMD40 - MMC only)
  86. #define ARM_MCI_BOOT_OPERATION (1UL << 9) ///< Execute Boot operation (MMC only)
  87. #define ARM_MCI_BOOT_ALTERNATIVE (1UL << 10) ///< Execute Alternative Boot operation (MMC only)
  88. #define ARM_MCI_BOOT_ACK (1UL << 11) ///< Expect Boot Acknowledge (MMC only)
  89. #define ARM_MCI_CCSD (1UL << 12) ///< Send Command Completion Signal Disable (CCSD) for CE-ATA device
  90. #define ARM_MCI_CCS (1UL << 13) ///< Expect Command Completion Signal (CCS) for CE-ATA device
  91. /****** MCI Setup Transfer Mode *****/
  92. #define ARM_MCI_TRANSFER_READ (0UL << 0) ///< Data Read Transfer (from MCI)
  93. #define ARM_MCI_TRANSFER_WRITE (1UL << 0) ///< Data Write Transfer (to MCI)
  94. #define ARM_MCI_TRANSFER_BLOCK (0UL << 1) ///< Block Data transfer (default)
  95. #define ARM_MCI_TRANSFER_STREAM (1UL << 1) ///< Stream Data transfer (MMC only)
  96. /****** MCI Control Codes *****/
  97. #define ARM_MCI_BUS_SPEED (0x01UL) ///< Set Bus Speed; arg = requested speed in bits/s; returns configured speed in bits/s
  98. #define ARM_MCI_BUS_SPEED_MODE (0x02UL) ///< Set Bus Speed Mode as specified with arg
  99. #define ARM_MCI_BUS_CMD_MODE (0x03UL) ///< Set CMD Line Mode as specified with arg
  100. #define ARM_MCI_BUS_DATA_WIDTH (0x04UL) ///< Set Bus Data Width as specified with arg
  101. #define ARM_MCI_DRIVER_STRENGTH (0x05UL) ///< Set SD UHS-I Driver Strength as specified with arg
  102. #define ARM_MCI_CONTROL_RESET (0x06UL) ///< Control optional RST_n Pin (eMMC); arg: 0=inactive, 1=active
  103. #define ARM_MCI_CONTROL_CLOCK_IDLE (0x07UL) ///< Control Clock generation on CLK Pin when idle; arg: 0=disabled, 1=enabled
  104. #define ARM_MCI_UHS_TUNING_OPERATION (0x08UL) ///< Sampling clock Tuning operation (SD UHS-I); arg: 0=reset, 1=execute
  105. #define ARM_MCI_UHS_TUNING_RESULT (0x09UL) ///< Sampling clock Tuning result (SD UHS-I); returns: 0=done, 1=in progress, -1=error
  106. #define ARM_MCI_DATA_TIMEOUT (0x0AUL) ///< Set Data timeout; arg = timeout in bus cycles
  107. #define ARM_MCI_CSS_TIMEOUT (0x0BUL) ///< Set Command Completion Signal (CCS) timeout; arg = timeout in bus cycles
  108. #define ARM_MCI_MONITOR_SDIO_INTERRUPT (0x0CUL) ///< Monitor SD I/O interrupt: arg: 0=disabled, 1=enabled
  109. #define ARM_MCI_CONTROL_READ_WAIT (0x0DUL) ///< Control Read/Wait for SD I/O; arg: 0=disabled, 1=enabled
  110. #define ARM_MCI_SUSPEND_TRANSFER (0x0EUL) ///< Suspend Data transfer (SD I/O); returns number of remaining bytes to transfer
  111. #define ARM_MCI_RESUME_TRANSFER (0x0FUL) ///< Resume Data transfer (SD I/O)
  112. /*----- MCI Bus Speed Mode -----*/
  113. #define ARM_MCI_BUS_DEFAULT_SPEED (0x00UL) ///< SD/MMC: Default Speed mode up to 25/26MHz
  114. #define ARM_MCI_BUS_HIGH_SPEED (0x01UL) ///< SD/MMC: High Speed mode up to 50/52MHz
  115. #define ARM_MCI_BUS_UHS_SDR12 (0x02UL) ///< SD: SDR12 (Single Data Rate) up to 25MHz, 12.5MB/s: UHS-I (Ultra High Speed) 1.8V signaling
  116. #define ARM_MCI_BUS_UHS_SDR25 (0x03UL) ///< SD: SDR25 (Single Data Rate) up to 50MHz, 25 MB/s: UHS-I (Ultra High Speed) 1.8V signaling
  117. #define ARM_MCI_BUS_UHS_SDR50 (0x04UL) ///< SD: SDR50 (Single Data Rate) up to 100MHz, 50 MB/s: UHS-I (Ultra High Speed) 1.8V signaling
  118. #define ARM_MCI_BUS_UHS_SDR104 (0x05UL) ///< SD: SDR104 (Single Data Rate) up to 208MHz, 104 MB/s: UHS-I (Ultra High Speed) 1.8V signaling
  119. #define ARM_MCI_BUS_UHS_DDR50 (0x06UL) ///< SD: DDR50 (Dual Data Rate) up to 50MHz, 50 MB/s: UHS-I (Ultra High Speed) 1.8V signaling
  120. /*----- MCI CMD Line Mode -----*/
  121. #define ARM_MCI_BUS_CMD_PUSH_PULL (0x00UL) ///< Push-Pull CMD line (default)
  122. #define ARM_MCI_BUS_CMD_OPEN_DRAIN (0x01UL) ///< Open Drain CMD line (MMC only)
  123. /*----- MCI Bus Data Width -----*/
  124. #define ARM_MCI_BUS_DATA_WIDTH_1 (0x00UL) ///< Bus data width: 1 bit (default)
  125. #define ARM_MCI_BUS_DATA_WIDTH_4 (0x01UL) ///< Bus data width: 4 bits
  126. #define ARM_MCI_BUS_DATA_WIDTH_8 (0x02UL) ///< Bus data width: 8 bits
  127. #define ARM_MCI_BUS_DATA_WIDTH_4_DDR (0x03UL) ///< Bus data width: 4 bits, DDR (Dual Data Rate) - MMC only
  128. #define ARM_MCI_BUS_DATA_WIDTH_8_DDR (0x04UL) ///< Bus data width: 8 bits, DDR (Dual Data Rate) - MMC only
  129. /*----- MCI Driver Strength -----*/
  130. #define ARM_MCI_DRIVER_TYPE_A (0x01UL) ///< SD UHS-I Driver Type A
  131. #define ARM_MCI_DRIVER_TYPE_B (0x00UL) ///< SD UHS-I Driver Type B (default)
  132. #define ARM_MCI_DRIVER_TYPE_C (0x02UL) ///< SD UHS-I Driver Type C
  133. #define ARM_MCI_DRIVER_TYPE_D (0x03UL) ///< SD UHS-I Driver Type D
  134. /****** MCI Card Power *****/
  135. #define ARM_MCI_POWER_VDD_Pos 0
  136. #define ARM_MCI_POWER_VDD_Msk (0x0FUL << ARM_MCI_POWER_VDD_Pos)
  137. #define ARM_MCI_POWER_VDD_OFF (0x01UL << ARM_MCI_POWER_VDD_Pos) ///< VDD (VCC) turned off
  138. #define ARM_MCI_POWER_VDD_3V3 (0x02UL << ARM_MCI_POWER_VDD_Pos) ///< VDD (VCC) = 3.3V
  139. #define ARM_MCI_POWER_VDD_1V8 (0x03UL << ARM_MCI_POWER_VDD_Pos) ///< VDD (VCC) = 1.8V
  140. #define ARM_MCI_POWER_VCCQ_Pos 4
  141. #define ARM_MCI_POWER_VCCQ_Msk (0x0FUL << ARM_MCI_POWER_VCCQ_Pos)
  142. #define ARM_MCI_POWER_VCCQ_OFF (0x01UL << ARM_MCI_POWER_VCCQ_Pos) ///< eMMC VCCQ turned off
  143. #define ARM_MCI_POWER_VCCQ_3V3 (0x02UL << ARM_MCI_POWER_VCCQ_Pos) ///< eMMC VCCQ = 3.3V
  144. #define ARM_MCI_POWER_VCCQ_1V8 (0x03UL << ARM_MCI_POWER_VCCQ_Pos) ///< eMMC VCCQ = 1.8V
  145. #define ARM_MCI_POWER_VCCQ_1V2 (0x04UL << ARM_MCI_POWER_VCCQ_Pos) ///< eMMC VCCQ = 1.2V
  146. /**
  147. \brief MCI Status
  148. */
  149. typedef struct _ARM_MCI_STATUS {
  150. uint32_t command_active : 1; ///< Command active flag
  151. uint32_t command_timeout : 1; ///< Command timeout flag (cleared on start of next command)
  152. uint32_t command_error : 1; ///< Command error flag (cleared on start of next command)
  153. uint32_t transfer_active : 1; ///< Transfer active flag
  154. uint32_t transfer_timeout : 1; ///< Transfer timeout flag (cleared on start of next command)
  155. uint32_t transfer_error : 1; ///< Transfer error flag (cleared on start of next command)
  156. uint32_t sdio_interrupt : 1; ///< SD I/O Interrupt flag (cleared on start of monitoring)
  157. uint32_t ccs : 1; ///< CCS flag (cleared on start of next command)
  158. uint32_t reserved : 24;
  159. } ARM_MCI_STATUS;
  160. /****** MCI Card Event *****/
  161. #define ARM_MCI_EVENT_CARD_INSERTED (1UL << 0) ///< Memory Card inserted
  162. #define ARM_MCI_EVENT_CARD_REMOVED (1UL << 1) ///< Memory Card removed
  163. #define ARM_MCI_EVENT_COMMAND_COMPLETE (1UL << 2) ///< Command completed
  164. #define ARM_MCI_EVENT_COMMAND_TIMEOUT (1UL << 3) ///< Command timeout
  165. #define ARM_MCI_EVENT_COMMAND_ERROR (1UL << 4) ///< Command response error (CRC error or invalid response)
  166. #define ARM_MCI_EVENT_TRANSFER_COMPLETE (1UL << 5) ///< Data transfer completed
  167. #define ARM_MCI_EVENT_TRANSFER_TIMEOUT (1UL << 6) ///< Data transfer timeout
  168. #define ARM_MCI_EVENT_TRANSFER_ERROR (1UL << 7) ///< Data transfer CRC failed
  169. #define ARM_MCI_EVENT_SDIO_INTERRUPT (1UL << 8) ///< SD I/O Interrupt
  170. #define ARM_MCI_EVENT_CCS (1UL << 9) ///< Command Completion Signal (CCS)
  171. #define ARM_MCI_EVENT_CCS_TIMEOUT (1UL << 10) ///< Command Completion Signal (CCS) Timeout
  172. // Function documentation
  173. /**
  174. \fn ARM_DRIVER_VERSION ARM_MCI_GetVersion (void)
  175. \brief Get driver version.
  176. \return \ref ARM_DRIVER_VERSION
  177. */
  178. /**
  179. \fn ARM_MCI_CAPABILITIES ARM_MCI_GetCapabilities (void)
  180. \brief Get driver capabilities.
  181. \return \ref ARM_MCI_CAPABILITIES
  182. */
  183. /**
  184. \fn int32_t ARM_MCI_Initialize (ARM_MCI_SignalEvent_t cb_event)
  185. \brief Initialize the Memory Card Interface
  186. \param[in] cb_event Pointer to \ref ARM_MCI_SignalEvent
  187. \return \ref execution_status
  188. */
  189. /**
  190. \fn int32_t ARM_MCI_Uninitialize (void)
  191. \brief De-initialize Memory Card Interface.
  192. \return \ref execution_status
  193. */
  194. /**
  195. \fn int32_t ARM_MCI_PowerControl (ARM_POWER_STATE state)
  196. \brief Control Memory Card Interface Power.
  197. \param[in] state Power state \ref ARM_POWER_STATE
  198. \return \ref execution_status
  199. */
  200. /**
  201. \fn int32_t ARM_MCI_CardPower (uint32_t voltage)
  202. \brief Set Memory Card Power supply voltage.
  203. \param[in] voltage Memory Card Power supply voltage
  204. \return \ref execution_status
  205. */
  206. /**
  207. \fn int32_t ARM_MCI_ReadCD (void)
  208. \brief Read Card Detect (CD) state.
  209. \return 1:card detected, 0:card not detected, or error
  210. */
  211. /**
  212. \fn int32_t ARM_MCI_ReadWP (void)
  213. \brief Read Write Protect (WP) state.
  214. \return 1:write protected, 0:not write protected, or error
  215. */
  216. /**
  217. \fn int32_t ARM_MCI_SendCommand (uint32_t cmd,
  218. uint32_t arg,
  219. uint32_t flags,
  220. uint32_t *response)
  221. \brief Send Command to card and get the response.
  222. \param[in] cmd Memory Card command
  223. \param[in] arg Command argument
  224. \param[in] flags Command flags
  225. \param[out] response Pointer to buffer for response
  226. \return \ref execution_status
  227. */
  228. /**
  229. \fn int32_t ARM_MCI_SetupTransfer (uint8_t *data,
  230. uint32_t block_count,
  231. uint32_t block_size,
  232. uint32_t mode)
  233. \brief Setup read or write transfer operation.
  234. \param[in,out] data Pointer to data block(s) to be written or read
  235. \param[in] block_count Number of blocks
  236. \param[in] block_size Size of a block in bytes
  237. \param[in] mode Transfer mode
  238. \return \ref execution_status
  239. */
  240. /**
  241. \fn int32_t ARM_MCI_AbortTransfer (void)
  242. \brief Abort current read/write data transfer.
  243. \return \ref execution_status
  244. */
  245. /**
  246. \fn int32_t ARM_MCI_Control (uint32_t control, uint32_t arg)
  247. \brief Control MCI Interface.
  248. \param[in] control Operation
  249. \param[in] arg Argument of operation (optional)
  250. \return \ref execution_status
  251. */
  252. /**
  253. \fn ARM_MCI_STATUS ARM_MCI_GetStatus (void)
  254. \brief Get MCI status.
  255. \return MCI status \ref ARM_MCI_STATUS
  256. */
  257. /**
  258. \fn void ARM_MCI_SignalEvent (uint32_t event)
  259. \brief Callback function that signals a MCI Card Event.
  260. \param[in] event \ref mci_event_gr
  261. \return none
  262. */
  263. typedef void (*ARM_MCI_SignalEvent_t) (uint32_t event); ///< Pointer to \ref ARM_MCI_SignalEvent : Signal MCI Card Event.
  264. /**
  265. \brief MCI Driver Capabilities.
  266. */
  267. typedef struct _ARM_MCI_CAPABILITIES {
  268. uint32_t cd_state : 1; ///< Card Detect State available
  269. uint32_t cd_event : 1; ///< Signal Card Detect change event
  270. uint32_t wp_state : 1; ///< Write Protect State available
  271. uint32_t vdd : 1; ///< Supports VDD Card Power Supply Control
  272. uint32_t vdd_1v8 : 1; ///< Supports 1.8 VDD Card Power Supply
  273. uint32_t vccq : 1; ///< Supports VCCQ Card Power Supply Control (eMMC)
  274. uint32_t vccq_1v8 : 1; ///< Supports 1.8 VCCQ Card Power Supply (eMMC)
  275. uint32_t vccq_1v2 : 1; ///< Supports 1.2 VCCQ Card Power Supply (eMMC)
  276. uint32_t data_width_4 : 1; ///< Supports 4-bit data
  277. uint32_t data_width_8 : 1; ///< Supports 8-bit data
  278. uint32_t data_width_4_ddr : 1; ///< Supports 4-bit data, DDR (Dual Data Rate) - MMC only
  279. uint32_t data_width_8_ddr : 1; ///< Supports 8-bit data, DDR (Dual Data Rate) - MMC only
  280. uint32_t high_speed : 1; ///< Supports SD/MMC High Speed Mode
  281. uint32_t uhs_signaling : 1; ///< Supports SD UHS-I (Ultra High Speed) 1.8V signaling
  282. uint32_t uhs_tuning : 1; ///< Supports SD UHS-I tuning
  283. uint32_t uhs_sdr50 : 1; ///< Supports SD UHS-I SDR50 (Single Data Rate) up to 50MB/s
  284. uint32_t uhs_sdr104 : 1; ///< Supports SD UHS-I SDR104 (Single Data Rate) up to 104MB/s
  285. uint32_t uhs_ddr50 : 1; ///< Supports SD UHS-I DDR50 (Dual Data Rate) up to 50MB/s
  286. uint32_t uhs_driver_type_a : 1; ///< Supports SD UHS-I Driver Type A
  287. uint32_t uhs_driver_type_c : 1; ///< Supports SD UHS-I Driver Type C
  288. uint32_t uhs_driver_type_d : 1; ///< Supports SD UHS-I Driver Type D
  289. uint32_t sdio_interrupt : 1; ///< Supports SD I/O Interrupt
  290. uint32_t read_wait : 1; ///< Supports Read Wait (SD I/O)
  291. uint32_t suspend_resume : 1; ///< Supports Suspend/Resume (SD I/O)
  292. uint32_t mmc_interrupt : 1; ///< Supports MMC Interrupt
  293. uint32_t mmc_boot : 1; ///< Supports MMC Boot
  294. uint32_t rst_n : 1; ///< Supports RST_n Pin Control (eMMC)
  295. uint32_t ccs : 1; ///< Supports Command Completion Signal (CCS) for CE-ATA
  296. uint32_t ccs_timeout : 1; ///< Supports Command Completion Signal (CCS) timeout for CE-ATA
  297. uint32_t reserved : 3; ///< Reserved (must be zero)
  298. } ARM_MCI_CAPABILITIES;
  299. /**
  300. \brief Access structure of the MCI Driver.
  301. */
  302. typedef struct _ARM_DRIVER_MCI {
  303. ARM_DRIVER_VERSION (*GetVersion) (void); ///< Pointer to \ref ARM_MCI_GetVersion : Get driver version.
  304. ARM_MCI_CAPABILITIES (*GetCapabilities)(void); ///< Pointer to \ref ARM_MCI_GetCapabilities : Get driver capabilities.
  305. int32_t (*Initialize) (ARM_MCI_SignalEvent_t cb_event); ///< Pointer to \ref ARM_MCI_Initialize : Initialize MCI Interface.
  306. int32_t (*Uninitialize) (void); ///< Pointer to \ref ARM_MCI_Uninitialize : De-initialize MCI Interface.
  307. int32_t (*PowerControl) (ARM_POWER_STATE state); ///< Pointer to \ref ARM_MCI_PowerControl : Control MCI Interface Power.
  308. int32_t (*CardPower) (uint32_t voltage); ///< Pointer to \ref ARM_MCI_CardPower : Set card power supply voltage.
  309. int32_t (*ReadCD) (void); ///< Pointer to \ref ARM_MCI_ReadCD : Read Card Detect (CD) state.
  310. int32_t (*ReadWP) (void); ///< Pointer to \ref ARM_MCI_ReadWP : Read Write Protect (WP) state.
  311. int32_t (*SendCommand) (uint32_t cmd,
  312. uint32_t arg,
  313. uint32_t flags,
  314. uint32_t *response); ///< Pointer to \ref ARM_MCI_SendCommand : Send Command to card and get the response.
  315. int32_t (*SetupTransfer) (uint8_t *data,
  316. uint32_t block_count,
  317. uint32_t block_size,
  318. uint32_t mode); ///< Pointer to \ref ARM_MCI_SetupTransfer : Setup data transfer operation.
  319. int32_t (*AbortTransfer) (void); ///< Pointer to \ref ARM_MCI_AbortTransfer : Abort current data transfer.
  320. int32_t (*Control) (uint32_t control, uint32_t arg); ///< Pointer to \ref ARM_MCI_Control : Control MCI Interface.
  321. ARM_MCI_STATUS (*GetStatus) (void); ///< Pointer to \ref ARM_MCI_GetStatus : Get MCI status.
  322. } const ARM_DRIVER_MCI;
  323. #ifdef __cplusplus
  324. }
  325. #endif
  326. #endif /* DRIVER_MCI_H_ */