yc_qspi.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /*
  2. * Copyright (c) 2006-2020, YICHIP Development Team
  3. * @file yc_qspi.h
  4. * @brief This file contains all the functions prototypes for the IFlash library.
  5. *
  6. * Change Logs:
  7. * Date Author Version Notes
  8. * 2021-08-14 wushengyan V1.0.0 the first version
  9. */
  10. #ifndef __YC_QSPI_H__
  11. #define __YC_QSPI_H__
  12. #include "yc3122.h"
  13. #define BOOT_UART_DOWNLOAD_FLAG 0x5a5aa5a5
  14. #define BOOT_USB_DOWNLOAD_FLAG 0xaa5555aa
  15. #define BOOT_AUTO_SELECT_FLAG 0xffffffff
  16. #define ENC_BULK_BUF_SIZE 0x9000
  17. typedef enum {
  18. YC_QFLASH_SIZE_UNKNOW = 0,
  19. YC_QFLASH_SIZE_512KB = 1,
  20. YC_QFLASH_SIZE_1MB = 2,
  21. YC_QFLASH_SIZE_4MB = 3,
  22. } yc_qspi_flash_size_enum;
  23. typedef struct
  24. {
  25. uint16_t is_end;
  26. uint16_t enc_index;
  27. uint8_t enc_buf[ENC_BULK_BUF_SIZE];
  28. } ENC_BulkTypeDef;
  29. /**
  30. * @method qspi_flash_pageerase
  31. * @brief page erase (256byte)
  32. * @param flash_addr
  33. * @retval ERROR,SUCCESS
  34. */
  35. uint8_t qspi_flash_pageerase(uint32_t flash_addr);
  36. /**
  37. * @method qspi_flash_sectorerase
  38. * @brief sector erase (4K)
  39. * @param flash_addr:flash addr (4k Bytes align)
  40. * @retval ERROR,SUCCESS
  41. */
  42. uint8_t qspi_flash_sectorerase(uint32_t flash_addr);
  43. /**
  44. * @method qspi_flash_blockerase32k
  45. * @brief block erase (32K)
  46. * @param flash_addr:flash addr (32k Bytes align)
  47. * @retval ERROR,SUCCESS
  48. */
  49. uint8_t qspi_flash_blockerase32k(uint32_t flash_addr);
  50. /**
  51. * @method qspi_flash_blockerase64k
  52. * @brief block erase (64K)
  53. * @param flash_addr:flash addr (64k Bytes align)
  54. * @retval ERROR,SUCCESS
  55. */
  56. uint8_t qspi_flash_blockerase64k(uint32_t flash_addr);
  57. /**
  58. * @method qspi_flash_write
  59. * @brief write flash
  60. * @param flash_addr:flash addr (when flash_addr%256!=0,256-(flash_addr%256)+len must less than 256)
  61. * @param buf
  62. * @param len
  63. * @retval ERROR,SUCCESS
  64. */
  65. uint8_t qspi_flash_write(uint32_t flash_addr, uint8_t *buf, uint32_t len);
  66. /**
  67. * @method qspi_flash_read
  68. * @brief read flash
  69. * @param flash_addr:flash addr
  70. * @param buf
  71. * @param len
  72. * @retval ERROR,SUCCESS
  73. */
  74. uint8_t qspi_flash_read(uint32_t flash_addr, uint8_t *buf, uint32_t len);
  75. /**
  76. * @method flash_blank_check
  77. * @brief check logical addr data is blank
  78. * @param startaddr:cpu addr
  79. * @param len
  80. * @retval TRUE: blank
  81. * FALSE: not blank
  82. */
  83. Boolean flash_blank_check(uint32_t startaddr, uint32_t len);
  84. /**
  85. * @method enc_write_flash
  86. * @brief write data to flash with enc
  87. * @param flash_addr:cpu addr (must 32 Bytes align)
  88. * @param buf
  89. * @param len:(must 32 Bytes align)
  90. * @retval ERROR,SUCCESS
  91. */
  92. uint8_t enc_write_flash(uint32_t flash_addr, uint8_t *buf, uint32_t len);
  93. /**
  94. * @method enc_read_flash
  95. * @brief read flash data with enc
  96. * @param flash_addr:cpu addr
  97. * @param buf
  98. * @param len
  99. * @retval ERROR,SUCCESS
  100. */
  101. uint8_t enc_read_flash(uint32_t flash_addr, uint8_t *buf, uint32_t len);
  102. /**
  103. * @method enc_read_flash_fast
  104. * @brief enc read flash fast(You must sure that the read area is written by enc)
  105. * @param flash_addr:cpu addr
  106. * @param buf
  107. * @param len
  108. * @return SUCCESS or ERROR
  109. */
  110. uint8_t enc_read_flash_fast(uint32_t flash_addr, uint8_t *buf, uint32_t len);
  111. /**
  112. * @method enc_erase_flash_32byte
  113. * @brief erase 32 Bytes
  114. * @param flash_addr : cpu addr (must 32 Bytes align)
  115. * @retval ERROR,SUCCESS
  116. */
  117. uint8_t enc_erase_flash_32byte(uint32_t flash_addr);
  118. /**
  119. * @method enc_erase_flash_32k
  120. * @brief enc erase 32K Bytes
  121. * @param flash_addr : cpu addr (must 32K Bytes align)
  122. * @retval ERROR,SUCCESS
  123. */
  124. uint8_t enc_erase_flash_32k(uint32_t flash_addr);
  125. /**
  126. * @brief enc erase flash app area
  127. * @param addr:align at 32k for CPU addr
  128. * @param len:erase len
  129. * @return ERROR,SUCCESS
  130. */
  131. uint8_t enc_earse_flash_app_area(uint32_t addr,uint32_t len);
  132. /**
  133. * @brief enc write download flag
  134. * @param addr:BOOT_UART_DOWNLOAD_FLAG,BOOT_USB_DOWNLOAD_FLAG or BOOT_AUTO_SELECT_FLAG
  135. * @return ERROR,SUCCESS
  136. */
  137. uint8_t enc_write_download_flag(uint32_t flag);
  138. /**
  139. * @method enc_write_flash_bulk
  140. * @brief write bulk data to flash with enc
  141. * @param EncBulkStruct:enc buf struct
  142. * @param flash_addr:cpu addr(start addr must 32k Bytes align)
  143. * @param buf
  144. * @param len: Integer multiple of 32 bytes
  145. * @retval ERROR,SUCCESS
  146. */
  147. uint8_t enc_write_flash_bulk(ENC_BulkTypeDef *EncBulkStruct,uint32_t flash_addr, uint8_t *buf, uint32_t len);
  148. /**
  149. * @method prefetch
  150. * @brief fetch code to cache
  151. * @param start_addr: code start addr
  152. * @param end_addr : code end addr
  153. * @retval NULL
  154. */
  155. void prefetch(void *start_addr, void *end_addr);
  156. /**
  157. * @method read_flash_size
  158. * @brief read the chip flash size
  159. * @param NULL
  160. * @retval yc_qspi_flash_size_enum
  161. */
  162. yc_qspi_flash_size_enum read_flash_size(void);
  163. /**
  164. * @method qspi_GetVersion
  165. * @brief get qspi lib version
  166. * @param NULL
  167. * @retval version
  168. */
  169. uint32_t qspi_GetVersion(void);
  170. #endif