80 lines
3.3 KiB
C
80 lines
3.3 KiB
C
#ifndef __SPI_FLASH_H
|
|
#define __SPI_FLASH_H
|
|
|
|
#include "stm32f4xx.h"
|
|
|
|
#define sFLASH_CMD_WRITE 0x02 /* Write to Memory instruction */
|
|
#define sFLASH_CMD_WRSR 0x01 /* Write Status Register instruction */
|
|
#define sFLASH_CMD_WREN 0x06 /* Write enable instruction */
|
|
#define sFLASH_CMD_READ 0x03 /* Read from Memory instruction */
|
|
#define sFLASH_CMD_RDSR 0x05 /* Read Status Register instruction */
|
|
#define sFLASH_CMD_RDID 0x9F /* Read identification */
|
|
#define sFLASH_CMD_SE 0x20 /* Sector Erase instruction */
|
|
#define sFLASH_CMD_BE 0xD8 /* Bulk Erase instruction */
|
|
|
|
#define sFLASH_WIP_FLAG 0x01 /* Write In Progress (WIP) flag */
|
|
|
|
#define sFLASH_DUMMY_BYTE 0xA5
|
|
|
|
#define sFLASH_SPI_PAGESIZE 256
|
|
|
|
#define sFLASH_ID 0XEF4017 //W25Q64
|
|
//#define sFLASH_ID 0XEF4018 //W25Q128
|
|
|
|
/* M25P FLASH SPI Interface pins */
|
|
#define sFLASH_SPI SPI1
|
|
#define sFLASH_SPI_CLK RCC_APB2Periph_SPI1
|
|
#define sFLASH_SPI_CLK_INIT RCC_APB2PeriphClockCmd
|
|
|
|
#define sFLASH_SPI_SCK_PIN GPIO_Pin_3
|
|
#define sFLASH_SPI_SCK_GPIO_PORT GPIOB
|
|
#define sFLASH_SPI_SCK_GPIO_CLK RCC_AHB1Periph_GPIOB
|
|
#define sFLASH_SPI_SCK_SOURCE GPIO_PinSource3
|
|
#define sFLASH_SPI_SCK_AF GPIO_AF_SPI1
|
|
|
|
#define sFLASH_SPI_MISO_PIN GPIO_Pin_4
|
|
#define sFLASH_SPI_MISO_GPIO_PORT GPIOB
|
|
#define sFLASH_SPI_MISO_GPIO_CLK RCC_AHB1Periph_GPIOB
|
|
#define sFLASH_SPI_MISO_SOURCE GPIO_PinSource4
|
|
#define sFLASH_SPI_MISO_AF GPIO_AF_SPI1
|
|
|
|
#define sFLASH_SPI_MOSI_PIN GPIO_Pin_5
|
|
#define sFLASH_SPI_MOSI_GPIO_PORT GPIOB
|
|
#define sFLASH_SPI_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOB
|
|
#define sFLASH_SPI_MOSI_SOURCE GPIO_PinSource5
|
|
#define sFLASH_SPI_MOSI_AF GPIO_AF_SPI1
|
|
|
|
#define sFLASH_CS_PIN GPIO_Pin_3
|
|
#define sFLASH_CS_GPIO_PORT GPIOG
|
|
#define sFLASH_CS_GPIO_CLK RCC_AHB1Periph_GPIOG
|
|
|
|
/* Exported macro ------------------------------------------------------------*/
|
|
/* Select sFLASH: Chip Select pin low */
|
|
#define sFLASH_CS_LOW() GPIO_ResetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN)
|
|
/* Deselect sFLASH: Chip Select pin high */
|
|
#define sFLASH_CS_HIGH() GPIO_SetBits(sFLASH_CS_GPIO_PORT, sFLASH_CS_PIN)
|
|
|
|
/* Exported functions ------------------------------------------------------- */
|
|
|
|
/* High layer functions */
|
|
void sFLASH_DeInit(void);
|
|
void sFLASH_Init(void);
|
|
void sFLASH_EraseSector(uint32_t SectorAddr);
|
|
void sFLASH_EraseBulk(void);
|
|
void sFLASH_WritePage(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
|
|
void sFLASH_WriteBuffer(uint8_t* pBuffer, uint32_t WriteAddr, uint32_t NumByteToWrite);
|
|
void sFLASH_ReadBuffer(uint8_t* pBuffer, uint32_t ReadAddr, uint32_t NumByteToRead);
|
|
uint32_t sFLASH_ReadID(void);
|
|
void sFLASH_StartReadSequence(uint32_t ReadAddr);
|
|
|
|
/* Low layer functions */
|
|
uint8_t sFLASH_ReadByte(void);
|
|
uint8_t sFLASH_SendByte(uint8_t byte);
|
|
uint16_t sFLASH_SendHalfWord(uint16_t HalfWord);
|
|
void sFLASH_WriteEnable(void);
|
|
void sFLASH_WaitForWriteEnd(void);
|
|
|
|
#endif /* __SPI_FLASH_H */
|
|
|
|
|