apm32f10x_emmc.h 8.2 KB

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