apm32f10x_emmc.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. /*!
  2. * @file apm32f10x_emmc.h
  3. *
  4. * @brief This file contains all the functions prototypes for the EMMC firmware library
  5. *
  6. * @version V1.0.2
  7. *
  8. * @date 2022-01-05
  9. *
  10. * @attention
  11. *
  12. * Copyright (C) 2020-2022 Geehy Semiconductor
  13. *
  14. * You may not use this file except in compliance with the
  15. * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
  16. *
  17. * The program is only for reference, which is distributed in the hope
  18. * that it will be usefull and instructional for customers to develop
  19. * their software. Unless required by applicable law or agreed to in
  20. * writing, the program is distributed on an "AS IS" BASIS, WITHOUT
  21. * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
  22. * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
  23. * and limitations under the License.
  24. */
  25. #ifndef __APM32F10X_EMMC_H
  26. #define __APM32F10X_EMMC_H
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. #include "apm32f10x.h"
  31. /** @addtogroup Peripherals_Library Standard Peripheral Library
  32. @{
  33. */
  34. /** @addtogroup EMMC_Driver EMMC Driver
  35. @{
  36. */
  37. /** @addtogroup EMMC_Enumerations Enumerations
  38. @{
  39. */
  40. /**
  41. * @brief EMMC NORSRAM_Bank
  42. */
  43. typedef enum
  44. {
  45. EMMC_BANK1_NORSRAM_1 = 0x00000000,
  46. EMMC_BANK1_NORSRAM_2 = 0x00000002,
  47. EMMC_BANK1_NORSRAM_3 = 0x00000004,
  48. EMMC_BANK1_NORSRAM_4 = 0x00000006
  49. } EMMC_BANK1_NORSRAM_T;
  50. /**
  51. * @brief EMMC NAND and PC Card Bank
  52. */
  53. typedef enum
  54. {
  55. EMMC_BANK2_NAND = 0x00000010,
  56. EMMC_BANK3_NAND = 0x00000100,
  57. EMMC_BANK4_PCCARD = 0x00001000
  58. } EMMC_BANK_NAND_T;
  59. /**
  60. * @brief EMMC_Data_Address_Bus_Multiplexing
  61. */
  62. typedef enum
  63. {
  64. EMMC_DATA_ADDRESS_MUX_DISABLE = 0x00000000,
  65. EMMC_DATA_ADDRESS_MUX_ENABLE = 0x00000002
  66. } EMMC_DATA_ADDRESS_MUX_T;
  67. /**
  68. * @brief EMMC_Memory_Type
  69. */
  70. typedef enum
  71. {
  72. EMMC_MEMORY_TYPE_SRAM = 0x00000000,
  73. EMMC_MEMORY_TYPE_PSRAM = 0x00000004,
  74. EMMC_MEMORY_TYPE_NOR = 0x00000008
  75. } EMMC_MEMORY_TYPE_T;
  76. /**
  77. * @brief EMMC_Data_Width
  78. */
  79. typedef enum
  80. {
  81. EMMC_MEMORY_DATA_WIDTH_8BIT = 0x00000000,
  82. EMMC_MEMORY_DATA_WIDTH_16BIT = 0x00000010
  83. } EMMC_MEMORY_DATA_WIDTH_T;
  84. /**
  85. * @brief EMMC_Burst_Access_Mode
  86. */
  87. typedef enum
  88. {
  89. EMMC_BURST_ACCESS_MODE_DISABLE = 0x00000000,
  90. EMMC_BURST_ACCESS_MODE_ENABLE = 0x00000100
  91. } EMMC_BURST_ACCESS_MODE_T;
  92. /**
  93. * @brief EMMC_AsynchronousWait
  94. */
  95. typedef enum
  96. {
  97. EMMC_ASYNCHRONOUS_WAIT_DISABLE = 0x00000000,
  98. EMMC_ASYNCHRONOUS_WAIT_ENABLE = 0x00008000
  99. } EMMC_ASYNCHRONOUS_WAIT_T;
  100. /**
  101. * @brief EMMC_Wait_Signal_Polarity
  102. */
  103. typedef enum
  104. {
  105. EMMC_WAIT_SIGNAL_POLARITY_LOW = 0x00000000,
  106. EMMC_WAIT_SIGNAL_POLARITY_HIGH = 0x00000200
  107. } EMMC_WAIT_SIGNAL_POLARITY_T;
  108. /**
  109. * @brief EMMC_Wrap_Mode
  110. */
  111. typedef enum
  112. {
  113. EMMC_WRAP_MODE_DISABLE = 0x00000000,
  114. EMMC_WRAP_MODE_ENABLE = 0x00000400
  115. } EMMC_WRAP_MODE_T;
  116. /**
  117. * @brief EMMC_Wait_Timing
  118. */
  119. typedef enum
  120. {
  121. EMMC_WAIT_SIGNAL_ACTIVE_BEFORE_WAIT = 0x00000000,
  122. EMMC_WAIT_SIGNAL_ACTIVE_DURING_WAIT = 0x00000800
  123. } EMMC_WAIT_SIGNAL_ACTIVE_T;
  124. /**
  125. * @brief EMMC_Write_Operation
  126. */
  127. typedef enum
  128. {
  129. EMMC_WRITE_OPERATION_DISABLE = 0x00000000,
  130. EMMC_WRITE_OPERATION_ENABLE = 0x00001000
  131. } EMMC_WRITE_OPERATION_T;
  132. /**
  133. * @brief EMMC_Wait_Signal
  134. */
  135. typedef enum
  136. {
  137. EMMC_WAITE_SIGNAL_DISABLE = 0x00000000,
  138. EMMC_WAITE_SIGNAL_ENABLE = 0x00002000
  139. } EMMC_WAITE_SIGNAL_T;
  140. /**
  141. * @brief EMMC_Extended_Mode
  142. */
  143. typedef enum
  144. {
  145. EMMC_EXTENDEN_MODE_DISABLE = 0x00000000,
  146. EMMC_EXTENDEN_MODE_ENABLE = 0x00004000
  147. } EMMC_EXTENDEN_MODE_T;
  148. /**
  149. * @brief EMMC_Write_Burst
  150. */
  151. typedef enum
  152. {
  153. EMMC_WRITE_BURST_DISABLE = 0x00000000,
  154. EMMC_WRITE_BURST_ENABLE = 0x00080000
  155. } EMMC_WRITE_BURST_T;
  156. /**
  157. * @brief EMMC_WAIT_FEATURE
  158. */
  159. typedef enum
  160. {
  161. EMMC_WAIT_FEATURE_DISABLE = 0x00000000,
  162. EMMC_WAIT_FEATURE_ENABLE = 0x00000002
  163. } EMMC_WAIT_FEATURE_T;
  164. /**
  165. * @brief EMMC_ECC
  166. */
  167. typedef enum
  168. {
  169. EMMC_ECC_DISABLE = 0x00000000,
  170. EMMC_ECC_ENABLE = 0x00000040
  171. } EMMC_ECC_T;
  172. /**
  173. * @brief EMMC_ECC_Page_Size
  174. */
  175. typedef enum
  176. {
  177. EMMC_ECC_PAGE_SIZE_BYTE_256 = 0x00000000,
  178. EMMC_ECC_PAGE_SIZE_BYTE_512 = 0x00020000,
  179. EMMC_ECC_PAGE_SIZE_BYTE_1024 = 0x00040000,
  180. EMMC_ECC_PAGE_SIZE_BYTE_2048 = 0x00060000,
  181. EMMC_ECC_PAGE_SIZE_BYTE_4096 = 0x00080000,
  182. EMMC_ECC_PAGE_SIZE_BYTE_8192 = 0x000A0000
  183. } EMMC_ECC_PAGE_SIZE_BYTE_T;
  184. /**
  185. * @brief EMMC_Access_Mode
  186. */
  187. typedef enum
  188. {
  189. EMMC_ACCESS_MODE_A = 0x00000000,
  190. EMMC_ACCESS_MODE_B = 0x10000000,
  191. EMMC_ACCESS_MODE_C = 0x20000000,
  192. EMMC_ACCESS_MODE_D = 0x30000000
  193. } EMMC_ACCESS_MODE_T;
  194. /**
  195. * @brief EMMC_Interrupt_sources
  196. */
  197. typedef enum
  198. {
  199. EMMC_INT_EDGE_RISING = 0x00000008,
  200. EMMC_INT_LEVEL_HIGH = 0x00000010,
  201. EMMC_INT_EDGE_FALLING = 0x00000020
  202. } EMMC_INT_T;
  203. /**
  204. * @brief EMMC_Flags
  205. */
  206. typedef enum
  207. {
  208. EMMC_FLAG_EDGE_RISING = 0x00000001,
  209. EMMC_FLAG_LEVEL_HIGH = 0x00000002,
  210. EMMC_FLAG_EDGE_FALLING = 0x00000004,
  211. EMMC_FLAG_FIFO_EMPTY = 0x00000040
  212. } EMMC_FLAG_T;
  213. /**@} end of group EMMC_Enumerations*/
  214. /** @addtogroup EMMC_Structure Data Structure
  215. @{
  216. */
  217. /**
  218. * @brief Timing parameters for NOR/SRAM Banks
  219. */
  220. typedef struct
  221. {
  222. uint32_t addressSetupTime;
  223. uint32_t addressHodeTime;
  224. uint32_t dataSetupTime;
  225. uint32_t busTurnaroundTime;
  226. uint32_t clockDivision;
  227. uint32_t dataLatency;
  228. EMMC_ACCESS_MODE_T accessMode;
  229. } EMMC_NORSRAMTimingConfig_T;
  230. /**
  231. * @brief EMMC NOR/SRAM Config structure
  232. */
  233. typedef struct
  234. {
  235. EMMC_BANK1_NORSRAM_T bank;
  236. EMMC_DATA_ADDRESS_MUX_T dataAddressMux;
  237. EMMC_MEMORY_TYPE_T memoryType;
  238. EMMC_MEMORY_DATA_WIDTH_T memoryDataWidth;
  239. EMMC_BURST_ACCESS_MODE_T burstAcceesMode;
  240. EMMC_ASYNCHRONOUS_WAIT_T asynchronousWait;
  241. EMMC_WAIT_SIGNAL_POLARITY_T waitSignalPolarity;
  242. EMMC_WRAP_MODE_T wrapMode;
  243. EMMC_WAIT_SIGNAL_ACTIVE_T waitSignalActive;
  244. EMMC_WRITE_OPERATION_T writeOperation;
  245. EMMC_WAITE_SIGNAL_T waiteSignal;
  246. EMMC_EXTENDEN_MODE_T extendedMode;
  247. EMMC_WRITE_BURST_T writeBurst;
  248. EMMC_NORSRAMTimingConfig_T* readWriteTimingStruct;
  249. EMMC_NORSRAMTimingConfig_T* writeTimingStruct;
  250. } EMMC_NORSRAMConfig_T;
  251. /**
  252. * @brief Timing parameters for NAND and PCCARD Banks
  253. */
  254. typedef struct
  255. {
  256. uint32_t setupTime;
  257. uint32_t waitSetupTime;
  258. uint32_t holdSetupTime;
  259. uint32_t HiZSetupTime;
  260. } EMMC_NAND_PCCARDTimingConfig_T;
  261. /**
  262. * @brief EMMC NAND Config structure
  263. */
  264. typedef struct
  265. {
  266. EMMC_BANK_NAND_T bank;
  267. EMMC_WAIT_FEATURE_T waitFeature;
  268. EMMC_MEMORY_DATA_WIDTH_T memoryDataWidth;
  269. EMMC_ECC_T ECC;
  270. EMMC_ECC_PAGE_SIZE_BYTE_T ECCPageSize;
  271. uint32_t TCLRSetupTime;
  272. uint32_t TARSetupTime;
  273. EMMC_NAND_PCCARDTimingConfig_T* commonSpaceTimingStruct;
  274. EMMC_NAND_PCCARDTimingConfig_T* attributeSpaceTimingStruct;
  275. } EMMC_NANDConfig_T;
  276. /**
  277. * @brief EMMC PCCARD Config structure
  278. */
  279. typedef struct
  280. {
  281. EMMC_WAIT_FEATURE_T waitFeature;
  282. uint32_t TCLRSetupTime;
  283. uint32_t TARSetupTime;
  284. EMMC_NAND_PCCARDTimingConfig_T* commonSpaceTimingStruct;
  285. EMMC_NAND_PCCARDTimingConfig_T* attributeSpaceTimingStruct;
  286. EMMC_NAND_PCCARDTimingConfig_T* IOSpaceTimingStruct;
  287. } EMMC_PCCARDConfig_T;
  288. /**@} end of group EMMC_Structure*/
  289. /** @addtogroup EMMC_Fuctions Fuctions
  290. @{
  291. */
  292. /** EMMC reset */
  293. void EMMC_ResetNORSRAM(EMMC_BANK1_NORSRAM_T bank);
  294. void EMMC_ResetNAND(EMMC_BANK_NAND_T bank);
  295. void EMMC_ResetPCCard(void);
  296. /** EMMC Configuration */
  297. void EMMC_ConfigNORSRAM(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig);
  298. void EMMC_ConfigNAND(EMMC_NANDConfig_T* emmcNANDConfig);
  299. void EMMC_ConfigPCCard(EMMC_PCCARDConfig_T* emmcPCCardConfig);
  300. void EMMC_ConfigNORSRAMStructInit(EMMC_NORSRAMConfig_T* emmcNORSRAMConfig);
  301. void EMMC_ConfigNANDStructInit(EMMC_NANDConfig_T* emmcNANDConfig);
  302. void EMMC_ConfigPCCardStructInit(EMMC_PCCARDConfig_T* emmcPCCardConfig);
  303. /** EMMC bank control */
  304. void EMMC_EnableNORSRAM(EMMC_BANK1_NORSRAM_T bank);
  305. void EMMC_DisableNORSRAM(EMMC_BANK1_NORSRAM_T bank);
  306. void EMMC_EnableNAND(EMMC_BANK_NAND_T bank);
  307. void EMMC_DisableNAND(EMMC_BANK_NAND_T bank);
  308. void EMMC_EnablePCCARD(void);
  309. void EMMC_DisablePCCARD(void);
  310. void EMMC_EnableNANDECC(EMMC_BANK_NAND_T bank);
  311. void EMMC_DisableNANDECC(EMMC_BANK_NAND_T bank);
  312. uint32_t EMMC_ReadECC(EMMC_BANK_NAND_T bank);
  313. /** Interrupt and flag */
  314. void EMMC_EnableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt);
  315. void EMMC_DisableInterrupt(EMMC_BANK_NAND_T bank, uint32_t interrupt);
  316. uint8_t EMMC_ReadStatusFlag(EMMC_BANK_NAND_T bank, EMMC_FLAG_T flag);
  317. void EMMC_ClearStatusFlag(EMMC_BANK_NAND_T bank, uint32_t flag);
  318. uint8_t EMMC_ReadIntFlag(EMMC_BANK_NAND_T bank, EMMC_INT_T flag);
  319. void EMMC_ClearIntFlag(EMMC_BANK_NAND_T bank, uint32_t flag);
  320. /**@} end of group EMMC_Fuctions*/
  321. /**@} end of group EMMC_Driver*/
  322. /**@} end of group Peripherals_Library*/
  323. #ifdef __cplusplus
  324. }
  325. #endif
  326. #endif /* __APM32F10X_EMMC_H */