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