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