76 lines
5.3 KiB
C
76 lines
5.3 KiB
C
/**
|
||
******************************************************************************
|
||
* @file memspi.h
|
||
* @brief Работа с внешней памятью
|
||
******************************************************************************
|
||
@defgroup MEMSPI API for Memory SPI
|
||
@brief API для работы с внешней памятью
|
||
******************************************************************************
|
||
* @details
|
||
Модуль предоставляет API для удобной работы с FLASH/EEPROM по SPI:
|
||
- @ref MEMSPI_Read_Memory Считывание внешней FLASH/EEPROM
|
||
- @ref MEMSPI_EEPROM_Write Запись данных в внешнюю EEPROM
|
||
- @ref MEMSPI_FLASH_Write Запись данных в внешнюю FLASH (функция сама очищает нужные сектора, и если надо сохраняет выбранные данные)
|
||
- @ref MEMSPI_FLASH_Program Программирование внешней FLASH (выбранный участок FLASH должен быть очищен)
|
||
- @ref MEMSPI_FLASH_Erase Очистка внешней FLASH
|
||
|
||
Также есть ряд вспомогательных функций:
|
||
- @ref MEMSPI_EEPROM_Write_Page Запись страницы в EEPROM *есть более общая функция MEMSPI_EEPROM_Write, которая записывает участки больше страницы
|
||
- @ref MEMSPI_FLASH_Erase_Sector Очистка сектора FLASH. *есть более общая функция MEMSPI_FLASH_Erase, которая может ощичать несколько секторов
|
||
- @ref MEMSPI_FLASH_Program_Page Программирование страницы. *есть более общая функция MEMSPI_FLASH_Program, которая программирует участки больше страницы
|
||
- @ref MEMSPI_WriteEnablingUntilTimeout Разрешение записи, пока не будет ответа или не истек таймаут
|
||
- @ref MEMSPI_WaitOnFlagsUntilTimeout Ожидание флага пока не истек таймаута
|
||
|
||
@section Start Инструкция по подключению
|
||
```c
|
||
MEMSPI_HandleTypeDef hmemspi;
|
||
HAL_StatusTypeDef MEMSPI_RES;
|
||
|
||
hmemspi.CS_GPIOx = GPIOC;
|
||
hmemspi.CS_PIN = GPIO_PIN_4;
|
||
MEMSPI_Base_Init(&hmemspi, &hspi3);
|
||
|
||
MEMSPI_RES = MEMSPI_EEPROM_Write(&hmemspi, mem_adr, write_buff, buff_size, Timeout, 1);
|
||
MEMSPI_RES = MEMSPI_Read_Memory(&hmemspi, mem_adr, read_buff, buff_size, Timeout);
|
||
```
|
||
|
||
******************************************************************************/
|
||
#ifndef __SPI_MEMORY_H_
|
||
#define __SPI_MEMORY_H_
|
||
|
||
#include "memspi_core.h"
|
||
|
||
/////////////////////////////////////////////////////////////////////
|
||
///////////////////////---FUNCTIONS FOR USER---//////////////////////
|
||
/* Initialize SPI and GPIO for MEMSPI FLASH */
|
||
void MEMSPI_Base_Init(MEMSPI_HandleTypeDef *hmemspi, SPI_HandleTypeDef *hspi);
|
||
/* Read external FLASH */
|
||
HAL_StatusTypeDef MEMSPI_Read_Memory(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pBuff, uint16_t Size, uint32_t Timeout);
|
||
/* Write external EEPROM */
|
||
HAL_StatusTypeDef MEMSPI_EEPROM_Write(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t Timeout, uint8_t WaitForEnd);
|
||
/* Write external FLASH */
|
||
HAL_StatusTypeDef MEMSPI_FLASH_Write(MEMSPI_HandleTypeDef *hmemspi, MEMSPI_WriteInitTypeDef *WriteInit, uint32_t Timeout, uint8_t WaitForEnd);
|
||
/* Program external FLASH */
|
||
HAL_StatusTypeDef MEMSPI_FLASH_Program(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t Timeout, uint8_t WaitForEnd);
|
||
/* Erase external FLASH */
|
||
HAL_StatusTypeDef MEMSPI_FLASH_Erase(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint16_t Size, uint32_t Timeout, uint8_t WaitForEnd);
|
||
///////////////////////---FUNCTIONS FOR USER---//////////////////////
|
||
|
||
/////////////////////////////////////////////////////////////////////
|
||
////////////////////////---SERVICE FUNCTIONS---//////////////////////
|
||
/* Write page in external EEPROM */
|
||
HAL_StatusTypeDef MEMSPI_EEPROM_Write_Page(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t *Timeout, uint32_t *tickstart, uint8_t WaitForEnd);
|
||
/* Erase external FLASH Sector */
|
||
HAL_StatusTypeDef MEMSPI_FLASH_Erase_Sector(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint32_t *Timeout, uint32_t *tickstart, uint8_t WaitForEnd);
|
||
/* Program page in external FLASH */
|
||
HAL_StatusTypeDef MEMSPI_FLASH_Program_Page(MEMSPI_HandleTypeDef *hmemspi, uint32_t FLASH_Address, uint8_t *pData, uint16_t Size, uint32_t *Timeout, uint32_t *tickstart, uint8_t WaitForEnd);
|
||
/* Setting WEL bit until it setted or until timeout */
|
||
HAL_StatusTypeDef MEMSPI_WriteEnablingUntilTimeout(MEMSPI_HandleTypeDef *hmemspi, uint32_t *Timeout, uint32_t *tickstart);
|
||
/* Wait for flag until timeout */
|
||
HAL_StatusTypeDef MEMSPI_WaitOnFlagsUntilTimeout(MEMSPI_HandleTypeDef *hmemspi, uint16_t FlagMask, uint16_t FlagStatus, uint32_t *Timeout, uint32_t *tickstart);
|
||
/* Update Timeout variables */
|
||
void MEMSPI_Update_Timeout_Variables(uint32_t *Timeout, uint32_t *tickstart);
|
||
////////////////////////---SERVICE FUNCTIONS---//////////////////////
|
||
|
||
|
||
#endif // __SPI_MEMORY_H_
|