179 lines
4.5 KiB
C
179 lines
4.5 KiB
C
|
/*
|
||
|
* This file is part of the Serial Flash Universal Driver Library.
|
||
|
*
|
||
|
* Copyright (c) 2016-2018, Armink, <armink.ztl@gmail.com>
|
||
|
*
|
||
|
* Permission is hereby granted, free of charge, to any person obtaining
|
||
|
* a copy of this software and associated documentation files (the
|
||
|
* 'Software'), to deal in the Software without restriction, including
|
||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
||
|
* permit persons to whom the Software is furnished to do so, subject to
|
||
|
* the following conditions:
|
||
|
*
|
||
|
* The above copyright notice and this permission notice shall be
|
||
|
* included in all copies or substantial portions of the Software.
|
||
|
*
|
||
|
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
|
*
|
||
|
* Function: It is an head file for this library. You can see all of the functions which can be called by user.
|
||
|
* Created on: 2016-04-23
|
||
|
*/
|
||
|
|
||
|
#ifndef _SFUD_H_
|
||
|
#define _SFUD_H_
|
||
|
|
||
|
#include "sfud_def.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* ../src/sfup.c */
|
||
|
/**
|
||
|
* SFUD library initialize.
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_init(void);
|
||
|
|
||
|
/**
|
||
|
* SFUD initialize by flash device
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_device_init(sfud_flash *flash);
|
||
|
|
||
|
/**
|
||
|
* get flash device by its index which in the flash information table
|
||
|
*
|
||
|
* @param index the index which in the flash information table @see flash_table
|
||
|
*
|
||
|
* @return flash device
|
||
|
*/
|
||
|
sfud_flash *sfud_get_device(size_t index);
|
||
|
|
||
|
/**
|
||
|
* get flash device total number on flash device information table @see flash_table
|
||
|
*
|
||
|
* @return flash device total number
|
||
|
*/
|
||
|
size_t sfud_get_device_num(void);
|
||
|
|
||
|
/**
|
||
|
* get flash device information table @see flash_table
|
||
|
*
|
||
|
* @return flash device table pointer
|
||
|
*/
|
||
|
const sfud_flash *sfud_get_device_table(void);
|
||
|
|
||
|
#ifdef SFUD_USING_QSPI
|
||
|
/**
|
||
|
* Enbale the fast read mode in QSPI flash mode. Default read mode is normal SPI mode.
|
||
|
*
|
||
|
* it will find the appropriate fast-read instruction to replace the read instruction(0x03)
|
||
|
* fast-read instruction @see SFUD_FLASH_EXT_INFO_TABLE
|
||
|
*
|
||
|
* @note When Flash is in QSPI mode, the method must be called after sfud_device_init().
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
* @param data_line_width the data lines max width which QSPI bus supported, such as 1, 2, 4
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_qspi_fast_read_enable(sfud_flash *flash, uint8_t data_line_width);
|
||
|
#endif /* SFUD_USING_QSPI */
|
||
|
|
||
|
/**
|
||
|
* read flash data
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
* @param addr start address
|
||
|
* @param size read size
|
||
|
* @param data read data pointer
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_read(const sfud_flash *flash, uint32_t addr, size_t size, uint8_t *data);
|
||
|
|
||
|
/**
|
||
|
* erase flash data
|
||
|
*
|
||
|
* @note It will erase align by erase granularity.
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
* @param addr start address
|
||
|
* @param size erase size
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_erase(const sfud_flash *flash, uint32_t addr, size_t size);
|
||
|
|
||
|
/**
|
||
|
* write flash data (no erase operate)
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
* @param addr start address
|
||
|
* @param data write data
|
||
|
* @param size write size
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_write(const sfud_flash *flash, uint32_t addr, size_t size, const uint8_t *data);
|
||
|
|
||
|
/**
|
||
|
* erase and write flash data
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
* @param addr start address
|
||
|
* @param size write size
|
||
|
* @param data write data
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_erase_write(const sfud_flash *flash, uint32_t addr, size_t size, const uint8_t *data);
|
||
|
|
||
|
/**
|
||
|
* erase all flash data
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_chip_erase(const sfud_flash *flash);
|
||
|
|
||
|
/**
|
||
|
* read flash register status
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
* @param status register status
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_read_status(const sfud_flash *flash, uint8_t *status);
|
||
|
|
||
|
/**
|
||
|
* write status register
|
||
|
*
|
||
|
* @param flash flash device
|
||
|
* @param is_volatile true: volatile mode, false: non-volatile mode
|
||
|
* @param status register status
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
sfud_err sfud_write_status(const sfud_flash *flash, bool is_volatile, uint8_t status);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* _SFUD_H_ */
|