安信可 Flash示例
======
.. raw:: html
--------------
=========
Flash Example
=========
This example for write/read data to a row address/partitoin on a Flash, If you want to save data in the form of key-value pairs, you can refer to the [easyflash](../easyflash/) demo.
Example Output
>>>>>>>>>
Starts a FreeRTOS task to print "flash write/read demo". As you run the example, you will see the log :
::
--------flash write/read demo--------
INFO (5)[main.c: 125] --------flash write/read demo--------
[MTD] >>>>>> Hanlde info Dump >>>>>>
name DATA
id 0
offset 0x001f3000(2043904)
size 0x00005000(20Kbytes)
xip_addr 0x00000000
[MTD] <<<<<< Hanlde info End <<<<<<
INFO (26)[main.c: 45] partition name : DATA
INFO (31)[main.c: 46] partition start address: 0x001f3000
INFO (37)[main.c: 47] partition length : 20480
INFO (73)[main.c: 77] hal flash partition data R/W successful!
INFO (78)[main.c: 116] hal flash addr R/W successful!
API
>>>>>>>>>
.. code-block:: c
/**
* @brief Open a flash partition device
*
* @param[in] name flash partition name
* @param[in] flags flash flags
* - HOSAL_FLASH_FLAG_ADDR_0
* - HOSAL_FLASH_FLAG_ADDR_1
* - HOSAL_FLASH_FLAG_BUSADDR
*
* @return
* - NULL flash open error
* - otherwise is flash partition device
*/
hosal_flash_dev_t *hosal_flash_open(const char *name, unsigned int flags);
.. code-block:: c
/**
* @brief Get the information of the specified flash area
*
* @param[in] p_dev The target flash logical partition device
* @param[out] partition The buffer to store partition info
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_info_get(hosal_flash_dev_t *p_dev, hosal_logic_partition_t *partition);
.. code-block:: c
/**
* @brief Erase an area on a Flash logical partition
*
* @note Erase on an address will erase all data on a sector that the
* address is belonged to, this function does not save data that
* beyond the address area but in the affected sector, the data
* will be lost.
*
* @param[in] p_dev The target flash logical partition which should be erased
* @param[in] off_set Start address of the erased flash area
* @param[in] size Size of the erased flash area
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_erase(hosal_flash_dev_t *p_dev, uint32_t off_set, uint32_t size);
.. code-block:: c
/**
* @brief Write data to an area on a flash logical partition without erase
*
* @param[in] p_dev The target flash logical partition which should be read which should be written
* @param[in/out] off_set Point to the start address that the data is written to, and
* point to the last unwritten address after this function is
* returned, so you can call this function serval times without
* update this start address.
* @param[in] in_buf point to the data buffer that will be written to flash
* @param[in] in_buf_size The size of the buffer
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_write(hosal_flash_dev_t *p_dev, uint32_t *off_set,
const void *in_buf, uint32_t in_buf_size);
.. code-block:: c
/**
* @brief Write data to an area on a flash logical partition with erase first
*
* @param[in] p_dev The target flash logical partition which should be read which should be written
* @param[in/out] off_set Point to the start address that the data is written to, and
* point to the last unwritten address after this function is
* returned, so you can call this function serval times without
* update this start address.
* @param[in] in_buf point to the data buffer that will be written to flash
* @param[in] in_buf_size The length of the buffer
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_erase_write(hosal_flash_dev_t *p_dev, uint32_t *off_set,
const void *in_buf, uint32_t in_buf_size);
.. code-block:: c
/**
* @brief Read data from an area on a Flash to data buffer in RAM
*
* @param[in] p_dev The target flash logical partition which should be read
* @param[in/out] off_set Point to the start address that the data is read, and
* point to the last unread address after this function is
* returned, so you can call this function serval times without
* update this start address.
* @param[in] out_buf Point to the data buffer that stores the data read from flash
* @param[in] out_buf_size The length of the buffer
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_read(hosal_flash_dev_t *p_dev, uint32_t *off_set,
void *out_buf, uint32_t out_buf_size);
.. code-block:: c
/**
* @brief Close a flash partition device
*
* @param[in] p_dev flash partition device
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_close(hosal_flash_dev_t *p_dev);
.. code-block:: c
/**
* @brief Read data from a row address on a Flash to data buffer in RAM
*
* @param[in] buffer Point to the data buffer that stores the data read from flash
* @param[in] address Address on flash to read from
* @param[in] length Length (in bytes) of data to read
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_raw_read(void *buffer, uint32_t address, uint32_t length);
.. code-block:: c
/**
* @brief Write data to a row address on a Flash
*
* @param[in] buffer Point to the data buffer that will be written to flash
* @param[in] address Address on flash to write to
* @param[in] length Length (in bytes) of data to write
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_raw_write(void *buffer, uint32_t address, uint32_t length);
.. code-block:: c
/**
* @brief Erase a region of the flash
*
* @param[in] start_addr Address to start erasing flash.
* @param[in] length Length of region to erase.
*
* @return
* - 0 On success
* - otherwise is error
*/
int hosal_flash_raw_erase(uint32_t start_addr, uint32_t length);
Troubleshooting
:::::::::::
For any technical queries, please open an [issue](https://github.com/Ai-Thinker-Open/Ai-Thinker-WB2/issues) on GitHub. We will get back to you soon.