xref: /nrf52832-nimble/rt-thread/components/drivers/spi/sfud/inc/sfud.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * This file is part of the Serial Flash Universal Driver Library.
3*10465441SEvalZero  *
4*10465441SEvalZero  * Copyright (c) 2016-2018, Armink, <[email protected]>
5*10465441SEvalZero  *
6*10465441SEvalZero  * Permission is hereby granted, free of charge, to any person obtaining
7*10465441SEvalZero  * a copy of this software and associated documentation files (the
8*10465441SEvalZero  * 'Software'), to deal in the Software without restriction, including
9*10465441SEvalZero  * without limitation the rights to use, copy, modify, merge, publish,
10*10465441SEvalZero  * distribute, sublicense, and/or sell copies of the Software, and to
11*10465441SEvalZero  * permit persons to whom the Software is furnished to do so, subject to
12*10465441SEvalZero  * the following conditions:
13*10465441SEvalZero  *
14*10465441SEvalZero  * The above copyright notice and this permission notice shall be
15*10465441SEvalZero  * included in all copies or substantial portions of the Software.
16*10465441SEvalZero  *
17*10465441SEvalZero  * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18*10465441SEvalZero  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19*10465441SEvalZero  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20*10465441SEvalZero  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21*10465441SEvalZero  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22*10465441SEvalZero  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23*10465441SEvalZero  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24*10465441SEvalZero  *
25*10465441SEvalZero  * Function: It is an head file for this library. You can see all of the functions which can be called by user.
26*10465441SEvalZero  * Created on: 2016-04-23
27*10465441SEvalZero  */
28*10465441SEvalZero 
29*10465441SEvalZero #ifndef _SFUD_H_
30*10465441SEvalZero #define _SFUD_H_
31*10465441SEvalZero 
32*10465441SEvalZero #include "sfud_def.h"
33*10465441SEvalZero 
34*10465441SEvalZero #ifdef __cplusplus
35*10465441SEvalZero extern "C" {
36*10465441SEvalZero #endif
37*10465441SEvalZero 
38*10465441SEvalZero /* ../src/sfup.c */
39*10465441SEvalZero /**
40*10465441SEvalZero  * SFUD library initialize.
41*10465441SEvalZero  *
42*10465441SEvalZero  * @return result
43*10465441SEvalZero  */
44*10465441SEvalZero sfud_err sfud_init(void);
45*10465441SEvalZero 
46*10465441SEvalZero /**
47*10465441SEvalZero  * SFUD initialize by flash device
48*10465441SEvalZero  *
49*10465441SEvalZero  * @param flash flash device
50*10465441SEvalZero  *
51*10465441SEvalZero  * @return result
52*10465441SEvalZero  */
53*10465441SEvalZero sfud_err sfud_device_init(sfud_flash *flash);
54*10465441SEvalZero 
55*10465441SEvalZero /**
56*10465441SEvalZero  * get flash device by its index which in the flash information table
57*10465441SEvalZero  *
58*10465441SEvalZero  * @param index the index which in the flash information table  @see flash_table
59*10465441SEvalZero  *
60*10465441SEvalZero  * @return flash device
61*10465441SEvalZero  */
62*10465441SEvalZero sfud_flash *sfud_get_device(size_t index);
63*10465441SEvalZero 
64*10465441SEvalZero /**
65*10465441SEvalZero  * get flash device total number on flash device information table  @see flash_table
66*10465441SEvalZero  *
67*10465441SEvalZero  * @return flash device total number
68*10465441SEvalZero  */
69*10465441SEvalZero size_t sfud_get_device_num(void);
70*10465441SEvalZero 
71*10465441SEvalZero /**
72*10465441SEvalZero  * get flash device information table  @see flash_table
73*10465441SEvalZero  *
74*10465441SEvalZero  * @return flash device table pointer
75*10465441SEvalZero  */
76*10465441SEvalZero const sfud_flash *sfud_get_device_table(void);
77*10465441SEvalZero 
78*10465441SEvalZero #ifdef SFUD_USING_QSPI
79*10465441SEvalZero /**
80*10465441SEvalZero  * Enbale the fast read mode in QSPI flash mode. Default read mode is normal SPI mode.
81*10465441SEvalZero  *
82*10465441SEvalZero  * it will find the appropriate fast-read instruction to replace the read instruction(0x03)
83*10465441SEvalZero  * fast-read instruction @see SFUD_FLASH_EXT_INFO_TABLE
84*10465441SEvalZero  *
85*10465441SEvalZero  * @note When Flash is in QSPI mode, the method must be called after sfud_device_init().
86*10465441SEvalZero  *
87*10465441SEvalZero  * @param flash flash device
88*10465441SEvalZero  * @param data_line_width the data lines max width which QSPI bus supported, such as 1, 2, 4
89*10465441SEvalZero  *
90*10465441SEvalZero  * @return result
91*10465441SEvalZero  */
92*10465441SEvalZero sfud_err sfud_qspi_fast_read_enable(sfud_flash *flash, uint8_t data_line_width);
93*10465441SEvalZero #endif /* SFUD_USING_QSPI */
94*10465441SEvalZero 
95*10465441SEvalZero /**
96*10465441SEvalZero  * read flash data
97*10465441SEvalZero  *
98*10465441SEvalZero  * @param flash flash device
99*10465441SEvalZero  * @param addr start address
100*10465441SEvalZero  * @param size read size
101*10465441SEvalZero  * @param data read data pointer
102*10465441SEvalZero  *
103*10465441SEvalZero  * @return result
104*10465441SEvalZero  */
105*10465441SEvalZero sfud_err sfud_read(const sfud_flash *flash, uint32_t addr, size_t size, uint8_t *data);
106*10465441SEvalZero 
107*10465441SEvalZero /**
108*10465441SEvalZero  * erase flash data
109*10465441SEvalZero  *
110*10465441SEvalZero  * @note It will erase align by erase granularity.
111*10465441SEvalZero  *
112*10465441SEvalZero  * @param flash flash device
113*10465441SEvalZero  * @param addr start address
114*10465441SEvalZero  * @param size erase size
115*10465441SEvalZero  *
116*10465441SEvalZero  * @return result
117*10465441SEvalZero  */
118*10465441SEvalZero sfud_err sfud_erase(const sfud_flash *flash, uint32_t addr, size_t size);
119*10465441SEvalZero 
120*10465441SEvalZero /**
121*10465441SEvalZero  * write flash data (no erase operate)
122*10465441SEvalZero  *
123*10465441SEvalZero  * @param flash flash device
124*10465441SEvalZero  * @param addr start address
125*10465441SEvalZero  * @param data write data
126*10465441SEvalZero  * @param size write size
127*10465441SEvalZero  *
128*10465441SEvalZero  * @return result
129*10465441SEvalZero  */
130*10465441SEvalZero sfud_err sfud_write(const sfud_flash *flash, uint32_t addr, size_t size, const uint8_t *data);
131*10465441SEvalZero 
132*10465441SEvalZero /**
133*10465441SEvalZero  * erase and write flash data
134*10465441SEvalZero  *
135*10465441SEvalZero  * @param flash flash device
136*10465441SEvalZero  * @param addr start address
137*10465441SEvalZero  * @param size write size
138*10465441SEvalZero  * @param data write data
139*10465441SEvalZero  *
140*10465441SEvalZero  * @return result
141*10465441SEvalZero  */
142*10465441SEvalZero sfud_err sfud_erase_write(const sfud_flash *flash, uint32_t addr, size_t size, const uint8_t *data);
143*10465441SEvalZero 
144*10465441SEvalZero /**
145*10465441SEvalZero  * erase all flash data
146*10465441SEvalZero  *
147*10465441SEvalZero  * @param flash flash device
148*10465441SEvalZero  *
149*10465441SEvalZero  * @return result
150*10465441SEvalZero  */
151*10465441SEvalZero sfud_err sfud_chip_erase(const sfud_flash *flash);
152*10465441SEvalZero 
153*10465441SEvalZero /**
154*10465441SEvalZero  * read flash register status
155*10465441SEvalZero  *
156*10465441SEvalZero  * @param flash flash device
157*10465441SEvalZero  * @param status register status
158*10465441SEvalZero  *
159*10465441SEvalZero  * @return result
160*10465441SEvalZero  */
161*10465441SEvalZero sfud_err sfud_read_status(const sfud_flash *flash, uint8_t *status);
162*10465441SEvalZero 
163*10465441SEvalZero /**
164*10465441SEvalZero  * write status register
165*10465441SEvalZero  *
166*10465441SEvalZero  * @param flash flash device
167*10465441SEvalZero  * @param is_volatile true: volatile mode, false: non-volatile mode
168*10465441SEvalZero  * @param status register status
169*10465441SEvalZero  *
170*10465441SEvalZero  * @return result
171*10465441SEvalZero  */
172*10465441SEvalZero sfud_err sfud_write_status(const sfud_flash *flash, bool is_volatile, uint8_t status);
173*10465441SEvalZero 
174*10465441SEvalZero #ifdef __cplusplus
175*10465441SEvalZero }
176*10465441SEvalZero #endif
177*10465441SEvalZero 
178*10465441SEvalZero #endif /* _SFUD_H_ */
179