You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
6.2 KiB
C
148 lines
6.2 KiB
C
/******************************************************************************
|
|
* @file Inc/flash_if.h
|
|
* @author MCD Application Team
|
|
* @version 1.0.0
|
|
* @date 10-Jun-2022
|
|
* @brief This file provides all the headers of the flash_if functions.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* <h2><center>© COPYRIGHT(c) 2019 LandPower</center></h2>
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
******************************************************************************/
|
|
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
#ifndef __FLASH_IF_H
|
|
#define __FLASH_IF_H
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "stm32l4xx_hal.h"
|
|
|
|
/* Exported types ------------------------------------------------------------*/
|
|
/* Exported constants --------------------------------------------------------*/
|
|
/* Error code */
|
|
enum
|
|
{
|
|
FLASHIF_OK = 0,
|
|
FLASHIF_ERASEKO,
|
|
FLASHIF_WRITINGCTRL_ERROR,
|
|
FLASHIF_WRITING_ERROR,
|
|
FLASHIF_PROTECTION_ERRROR
|
|
};
|
|
|
|
/* protection type */
|
|
enum{
|
|
FLASHIF_PROTECTION_NONE = 0,
|
|
FLASHIF_PROTECTION_PCROPENABLED = 0x1,
|
|
FLASHIF_PROTECTION_WRPENABLED = 0x2,
|
|
FLASHIF_PROTECTION_RDPENABLED = 0x4,
|
|
};
|
|
|
|
/* protection update */
|
|
enum {
|
|
FLASHIF_WRP_ENABLE,
|
|
FLASHIF_WRP_DISABLE
|
|
};
|
|
|
|
/* 表示是否升级和配置是否被初始化过的标志位. */
|
|
#define INIT_DONE_MAGIC 0x0F1E2D3C
|
|
#define UPDATE_MAGIC 0x3A6E55D9
|
|
#define UPDATE_OK_MAGIC 0x6D90125B
|
|
#define UPDATE_ERROR_MAGIC 0x9EFC845A
|
|
|
|
/* SPI FLASH 分配示意图. 注意: 以下地址必须是扇区对齐.
|
|
0x0 0x4000 0x8000 0xC000 0x10000 0x18000 0x20000 0x300000 0x1000000
|
|
********************************************************************
|
|
| INFO | INFOB | CONF | CONFB | RECO | RECOB | TFTP IMG | IDLE |
|
|
********************************************************************/
|
|
#define INFO_ADDRESS (uint32_t)0x0
|
|
#define INFO_ADDRESS_BAK (uint32_t)0x4000
|
|
#define RECORD_ADDRESS (uint32_t)0x8000
|
|
#define RECORD_ADDRESS_BAK (uint32_t)0xC000
|
|
#define CONFIG_ADDRESS (uint32_t)0x10000
|
|
#define CONFIG_ADDRESS_BAK (uint32_t)0x18000
|
|
#define TFTP_APP_ADDRESS (uint32_t)0x20000
|
|
#define TFTP_APP_ADDRESS_END (uint32_t)0x300000
|
|
#define SPI_FLASH_END_ADDRESS (uint32_t)0x1000000
|
|
|
|
/* 内部flash分配示意图.
|
|
0x08000000 0x08008000 0x080FFFFF
|
|
********************************************************
|
|
| IAP | APP |
|
|
*******************************************************/
|
|
#define IAP_ADDRESS (uint32_t)0x08000000
|
|
#define APP_ADDRESS (uint32_t)0x08020000
|
|
/* 内部flash结束地址. */
|
|
#define USER_FLASH_END_ADDRESS (uint32_t)0x08100000
|
|
|
|
#define SPI_FLASH_ID_LEN 3
|
|
#define SPI_CMD_HEADER_LEN 4
|
|
|
|
#define SPI_FLASH_PAGE_SIZE 256
|
|
#define SPI_FLASH_SECTOR_SIZE 4096/* 4K */
|
|
#define SPI_FLASH_BLOCK_SIZE 32768/* 32K */
|
|
|
|
#define SPI_BUS_TIMEOUT 1000
|
|
|
|
/* spi flash命令字. */
|
|
#define SPI_CMD_PAGE_WRITE 0x02
|
|
#define SPI_CMD_FLASH_READ 0x03
|
|
#define SPI_CMD_STATE_READ 0x05
|
|
#define SPI_CMD_WRITE_ENABLE 0x06
|
|
#define SPI_CMD_SECTOR_ERASE 0x20
|
|
#define SPI_CMD_BLOCK32_ERASE 0x52
|
|
#define SPI_CMD_CHIP_ERASE 0x60
|
|
#define SPI_CMD_READ_ID 0x9F
|
|
#define SPI_CMD_BLOCK64_ERASE 0xD8
|
|
|
|
/* spi flash状态寄存器bit mask. */
|
|
#define SPI_FLASH_BUSY_MASK 0x01
|
|
#define SPI_FLASH_WEL_MASK 0x02
|
|
|
|
#define SPI_FLASH_CS_ENABLE() HAL_GPIO_WritePin(SPI_FLASH_CS_GPIO_Port, SPI_FLASH_CS_Pin, GPIO_PIN_RESET)
|
|
#define SPI_FLASH_CS_DISABLE() HAL_GPIO_WritePin(SPI_FLASH_CS_GPIO_Port, SPI_FLASH_CS_Pin, GPIO_PIN_SET)
|
|
|
|
|
|
/* Define the user application size */
|
|
#define USER_FLASH_SIZE ((uint32_t)0x00100000) /* Small default template application */
|
|
|
|
/* Exported macro ------------------------------------------------------------*/
|
|
/* Exported functions ------------------------------------------------------- */
|
|
extern void FLASH_If_Init(void);
|
|
extern uint32_t FLASH_If_Erase(uint32_t start);
|
|
extern uint32_t FLASH_If_Write(uint32_t destination, uint32_t *p_source, uint32_t length);
|
|
extern uint32_t FLASH_If_GetWriteProtectionStatus(void);
|
|
extern uint32_t FLASH_If_WriteProtectionConfig(uint32_t modifier);
|
|
|
|
extern uint32_t spi_flash_read_id(void);
|
|
extern HAL_StatusTypeDef spi_flash_erase(uint32_t addr, uint8_t erase_cmd);
|
|
extern HAL_StatusTypeDef spi_flash_erase_chip(void);
|
|
extern HAL_StatusTypeDef spi_flash_read(uint32_t addr, uint8_t* data, uint16_t size);
|
|
extern HAL_StatusTypeDef spi_flash_write(uint32_t addr, uint8_t *data, uint16_t size);
|
|
|
|
#endif /* __FLASH_IF_H */
|
|
|
|
/************************ (C) COPYRIGHT LandPower *****END OF FILE****/
|