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