Автоматизированы функции
Доделаны(?) 4 базовые самостоятельные функции для общения с флеш: Read, Write, Program, Erase.
This commit is contained in:
@@ -78,6 +78,7 @@ typedef struct
|
||||
|
||||
uint32_t Sector_Address;
|
||||
uint32_t Sector_Size;
|
||||
unsigned fSavePrevoisData:1;
|
||||
}W25_WriteInitTypeDef;
|
||||
|
||||
typedef struct
|
||||
@@ -99,6 +100,9 @@ typedef struct
|
||||
uint16_t SR;
|
||||
SPI_HandleTypeDef hspi;
|
||||
W25_GPIOTypeDef GPIOs;
|
||||
uint32_t hNextAddr;
|
||||
uint16_t hNextPage;
|
||||
uint16_t hNextSector;
|
||||
}W25_HandleTypeDef;
|
||||
extern W25_HandleTypeDef hw25;
|
||||
|
||||
@@ -113,7 +117,7 @@ extern W25_HandleTypeDef hw25;
|
||||
void W25_Base_Init(W25_HandleTypeDef *hw25);
|
||||
|
||||
/**
|
||||
* @brief Read data from external FLASH.
|
||||
* @brief Read external FLASH.
|
||||
* @param hw25 - указатель на хендл flash.
|
||||
* @param FLASH_Address - адресс откуда начинать считывание.
|
||||
* @param pBuff - куда записывать данные из FLASH.
|
||||
@@ -125,7 +129,7 @@ void W25_Base_Init(W25_HandleTypeDef *hw25);
|
||||
HAL_StatusTypeDef W25_FLASH_Read(W25_HandleTypeDef *hw25, uint32_t FLASH_Address, uint8_t *pBuff, uint16_t Size, uint32_t Timeout);
|
||||
|
||||
/**
|
||||
* @brief Write data to area in FLASH.
|
||||
* @brief Write external FLASH.
|
||||
* @param hw25 - указатель на хендл flash.
|
||||
* @param WriteInit - указатель на структуру, определяющую участок памяти для записи.
|
||||
* @param Timeout - время, за которое должно быть осуществлено чтение.
|
||||
@@ -133,34 +137,46 @@ HAL_StatusTypeDef W25_FLASH_Read(W25_HandleTypeDef *hw25, uint32_t FLASH_Address
|
||||
* @note Позволяет перепрограммировать участок памяти. Можно записывать несколько страниц.
|
||||
* Данные в сектора участка, но за пределами участка не сохраняются.
|
||||
*/
|
||||
HAL_StatusTypeDef W25_FLASH_Write_Area(W25_HandleTypeDef *hw25, W25_WriteInitTypeDef *WriteInit, uint32_t Timeout);
|
||||
HAL_StatusTypeDef W25_FLASH_Write(W25_HandleTypeDef *hw25, W25_WriteInitTypeDef *WriteInit, uint32_t Timeout);
|
||||
|
||||
/**
|
||||
* @brief Program area in FLASH.
|
||||
* @brief Program external FLASH.
|
||||
* @param hw25 - указатель на хендл flash.
|
||||
* @param FLASH_Address - адресс куда начинать записывать.
|
||||
* @param pData - откуда брать данные для записи в FLASH.
|
||||
* @param Size - сколько байтов записать.
|
||||
* @param Timeout - время, за которое должно быть осуществлено чтение.
|
||||
* @return HAL status.
|
||||
* @note Позволяет перепрограммировать участок памяти. Можно записывать несколько страниц.
|
||||
* Данные в сектора участка, но за пределами участка не сохраняются.
|
||||
* @note Программирование участка памяти, без ограничений на кол-во байт
|
||||
*/
|
||||
HAL_StatusTypeDef W25_FLASH_Program_Area(W25_HandleTypeDef *hw25, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
HAL_StatusTypeDef W25_FLASH_Program(W25_HandleTypeDef *hw25, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
||||
|
||||
/**
|
||||
* @brief Erase FLASH Sector.
|
||||
* @brief Erase external FLASH.
|
||||
* @param hw25 - указатель на хендл flash.
|
||||
* @param FLASH_Address - адресс где надо данные стереть.
|
||||
* @param Size - сколько байтов стереть.
|
||||
* @param Timeout - время, за которое должно быть осуществлена очистка.
|
||||
* @return HAL status.
|
||||
* @note Т.к. очитска происходит по секторам, Size нужен, чтобы определить сколько секторов очистить
|
||||
* И если начальны адресс будет на Sector 0, а последний байт на Sector 1, то произойдет очистка Sector 0 и Sector 1
|
||||
*/
|
||||
HAL_StatusTypeDef W25_FLASH_Erase(W25_HandleTypeDef *hw25, uint32_t FLASH_Address, uint16_t Size, uint32_t Timeout);
|
||||
|
||||
/**
|
||||
* @brief Erase external FLASH Sector.
|
||||
* @param hw25 - указатель на хендл flash.
|
||||
* @param FLASH_Address - адресс где надо данные стереть.
|
||||
* @param Timeout - время, за которое должно быть осуществлена очистка.
|
||||
* @param tickstart - время, относительно которого надо отсчитывать таймаут.
|
||||
* @return HAL status.
|
||||
* @note При Timeout = 0, функция не будет ожидать окончания очистки (выставления в 0 флагов BUSY и WEL)
|
||||
* @note Микросхема вроде сама высчитывает какой сектор ерейзнуть, в соответствии с заданным адресом.
|
||||
*/
|
||||
HAL_StatusTypeDef W25_FLASH_Erase_Sector(W25_HandleTypeDef *hw25, uint32_t FLASH_Address, uint32_t Timeout);
|
||||
HAL_StatusTypeDef W25_FLASH_Erase_Sector(W25_HandleTypeDef *hw25, uint32_t FLASH_Address, uint32_t Timeout, uint32_t tickstart);
|
||||
|
||||
/**
|
||||
* @brief Program page in FLASH.
|
||||
* @brief Program page in external FLASH.
|
||||
* @param hw25 - указатель на хендл flash.
|
||||
* @param FLASH_Address - адресс куда начинать записывать.
|
||||
* @param pData - откуда брать данные для записи в FLASH.
|
||||
@@ -169,9 +185,10 @@ HAL_StatusTypeDef W25_FLASH_Erase_Sector(W25_HandleTypeDef *hw25, uint32_t FLASH
|
||||
* @param tickstart - время, относительно которого надо отсчитывать таймаут.
|
||||
* @return HAL status.
|
||||
* @note Позволяет перепрограммировать только байты в прелелах одной страницы.
|
||||
Для более гибкого программирования есть функция W25_FLASH_Program_Area, которая программирует участки любой длины (в теории).
|
||||
Для более гибкого программирования есть функция W25_FLASH_Program, которая программирует участки любой длины (в теории).
|
||||
*/
|
||||
HAL_StatusTypeDef W25_FLASH_Program_Page(W25_HandleTypeDef *hw25, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t Timeout, uint32_t tickstart);
|
||||
|
||||
/**
|
||||
* @brief Setting WEL bit until it setted or until timeout.
|
||||
* @param hw25 - указатель на хендл flash.
|
||||
|
||||
Reference in New Issue
Block a user