9 changed files with 1171 additions and 402 deletions
@ -0,0 +1,96 @@ |
|||
#ifndef __W25QXX_H |
|||
#define __W25QXX_H |
|||
#include "common.h" |
|||
|
|||
/* ===========================================================================
|
|||
* W25QXX 传输层选择宏 |
|||
* --------------------------------------------------------------------------- |
|||
* W25QXX_USE_QSPI -> 使用 STM32H7 QUADSPI 外设(1-Line/SPI 兼容时序) |
|||
* 依赖 CubeMX 生成的 quadspi.c 中全局句柄 hqspi。 |
|||
* W25QXX_USE_SPI -> 使用经典 SPI 外设(原正点原子 F4 驱动), |
|||
* 依赖 bsp 中定义的 W25QXXSPI 与 W25QXX_CS_x。 |
|||
* |
|||
* 若两者均未定义,则根据编译目标自动选择: |
|||
* STM32H7xx / STM32H743xx / STM32H750xx -> W25QXX_USE_QSPI |
|||
* 其余 (F4/F1 等) -> W25QXX_USE_SPI |
|||
* ===========================================================================*/ |
|||
#if !defined(W25QXX_USE_QSPI) && !defined(W25QXX_USE_SPI) |
|||
#if defined(STM32H7xx) || defined(STM32H743xx) || defined(STM32H750xx) |
|||
#define W25QXX_USE_QSPI |
|||
#else |
|||
#define W25QXX_USE_SPI |
|||
#endif |
|||
#endif |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* W25Q 系列芯片型号(W25QXX_ReadID 返回值,Manufact/Device ID 0x90 读法) */ |
|||
#define W25Q80 0xEF13 |
|||
#define W25Q16 0xEF14 |
|||
#define W25Q32 0xEF15 |
|||
#define W25Q64 0xEF16 |
|||
#define W25Q128 0xEF17 |
|||
#define W25Q256 0xEF18 |
|||
|
|||
extern uint16_t W25QXX_TYPE; /* 当前芯片型号 */ |
|||
|
|||
/* 扇区 / 页大小 */ |
|||
#define W25QXX_SECTOR_SIZE 4096 |
|||
#define W25QXX_PAGE_SIZE 256 |
|||
|
|||
/* 指令表 */ |
|||
#define W25X_WriteEnable 0x06 |
|||
#define W25X_WriteDisable 0x04 |
|||
#define W25X_ReadStatusReg1 0x05 |
|||
#define W25X_ReadStatusReg2 0x35 |
|||
#define W25X_ReadStatusReg3 0x15 |
|||
#define W25X_WriteStatusReg1 0x01 |
|||
#define W25X_WriteStatusReg2 0x31 |
|||
#define W25X_WriteStatusReg3 0x11 |
|||
#define W25X_ReadData 0x03 |
|||
#define W25X_FastReadData 0x0B |
|||
#define W25X_FastReadDual 0x3B |
|||
#define W25X_PageProgram 0x02 |
|||
#define W25X_BlockErase 0xD8 |
|||
#define W25X_SectorErase 0x20 |
|||
#define W25X_ChipErase 0xC7 |
|||
#define W25X_PowerDown 0xB9 |
|||
#define W25X_ReleasePowerDown 0xAB |
|||
#define W25X_DeviceID 0xAB |
|||
#define W25X_ManufactDeviceID 0x90 |
|||
#define W25X_JedecDeviceID 0x9F |
|||
#define W25X_Enable4ByteAddr 0xB7 |
|||
#define W25X_Exit4ByteAddr 0xE9 |
|||
#define W25X_ResetEnable 0x66 |
|||
#define W25X_ResetMemory 0x99 |
|||
|
|||
/* SPI 模式下才需要片选信号(H7 QUADSPI 模式下由硬件 CS 管理,无需此宏) */ |
|||
#ifdef W25QXX_USE_SPI |
|||
#define W25QXX_CS(n) (n?HAL_GPIO_WritePin(W25QXX_CS_GPIO_Port,W25QXX_CS_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(W25QXX_CS_GPIO_Port,W25QXX_CS_Pin,GPIO_PIN_RESET)) |
|||
#endif |
|||
|
|||
/* 对外 API(两种传输层共用同一套接口) */ |
|||
void W25QXX_Init(void); |
|||
uint16_t W25QXX_ReadID(void); |
|||
uint8_t W25QXX_ReadSR(uint8_t regno); |
|||
void W25QXX_4ByteAddr_Enable(void); |
|||
void W25QXX_Write_SR(uint8_t regno, uint8_t sr); |
|||
void W25QXX_Write_Enable(void); |
|||
void W25QXX_Write_Disable(void); |
|||
void W25QXX_Write_Page(uint8_t *pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite); |
|||
void W25QXX_Write_NoCheck(uint8_t *pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite); |
|||
void W25QXX_Read(uint8_t *pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead); |
|||
void W25QXX_Write(uint8_t *pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite); |
|||
void W25QXX_Erase_Chip(void); |
|||
void W25QXX_Erase_Sector(uint32_t Dst_Addr); |
|||
void W25QXX_Wait_Busy(void); |
|||
void W25QXX_PowerDown(void); |
|||
void W25QXX_WAKEUP(void); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* __W25QXX_H */ |
|||
File diff suppressed because it is too large
@ -1,77 +0,0 @@ |
|||
#ifndef __W25QXX_H |
|||
#define __W25QXX_H |
|||
#include "common.h" |
|||
//////////////////////////////////////////////////////////////////////////////////
|
|||
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
|
|||
//ALIENTEK STM32F429开发板
|
|||
//W25QXX驱动代码
|
|||
//正点原子@ALIENTEK
|
|||
//技术论坛:www.openedv.com
|
|||
//创建日期:2016/1/16
|
|||
//版本:V1.0
|
|||
//版权所有,盗版必究。
|
|||
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
|
|||
//All rights reserved
|
|||
//////////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
//W25X系列/Q系列芯片列表
|
|||
//W25Q80 ID 0XEF13
|
|||
//W25Q16 ID 0XEF14
|
|||
//W25Q32 ID 0XEF15
|
|||
//W25Q64 ID 0XEF16
|
|||
//W25Q128 ID 0XEF17
|
|||
//W25Q256 ID 0XEF18
|
|||
#define W25Q80 0XEF13 |
|||
#define W25Q16 0XEF14 |
|||
#define W25Q32 0XEF15 |
|||
#define W25Q64 0XEF16 |
|||
#define W25Q128 0XEF17 |
|||
#define W25Q256 0XEF18 |
|||
|
|||
extern uint16_t W25QXX_TYPE; //定义W25QXX芯片型号
|
|||
|
|||
//W25QXX的片选信号
|
|||
#define W25QXX_CS(n) (n?HAL_GPIO_WritePin(W25QXX_CS_GPIO_Port,W25QXX_CS_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(W25QXX_CS_GPIO_Port,W25QXX_CS_Pin,GPIO_PIN_RESET)) |
|||
|
|||
//////////////////////////////////////////////////////////////////////////////////
|
|||
//指令表
|
|||
#define W25X_WriteEnable 0x06 |
|||
#define W25X_WriteDisable 0x04 |
|||
#define W25X_ReadStatusReg1 0x05 |
|||
#define W25X_ReadStatusReg2 0x35 |
|||
#define W25X_ReadStatusReg3 0x15 |
|||
#define W25X_WriteStatusReg1 0x01 |
|||
#define W25X_WriteStatusReg2 0x31 |
|||
#define W25X_WriteStatusReg3 0x11 |
|||
#define W25X_ReadData 0x03 |
|||
#define W25X_FastReadData 0x0B |
|||
#define W25X_FastReadDual 0x3B |
|||
#define W25X_PageProgram 0x02 |
|||
#define W25X_BlockErase 0xD8 |
|||
#define W25X_SectorErase 0x20 |
|||
#define W25X_ChipErase 0xC7 |
|||
#define W25X_PowerDown 0xB9 |
|||
#define W25X_ReleasePowerDown 0xAB |
|||
#define W25X_DeviceID 0xAB |
|||
#define W25X_ManufactDeviceID 0x90 |
|||
#define W25X_JedecDeviceID 0x9F |
|||
#define W25X_Enable4ByteAddr 0xB7 |
|||
#define W25X_Exit4ByteAddr 0xE9 |
|||
|
|||
void W25QXX_Init(void); |
|||
uint16_t W25QXX_ReadID(void); //读取FLASH ID
|
|||
uint8_t W25QXX_ReadSR(uint8_t regno); //读取状态寄存器
|
|||
void W25QXX_4ByteAddr_Enable(void); //使能4字节地址模式
|
|||
void W25QXX_Write_SR(uint8_t regno,uint8_t sr); //写状态寄存器
|
|||
void W25QXX_Write_Enable(void); //写使能
|
|||
void W25QXX_Write_Disable(void); //写保护
|
|||
void W25QXX_Write_NoCheck(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite); |
|||
void W25QXX_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead); //读取flash
|
|||
void W25QXX_Write(uint8_t* pBuffer,uint32_t WriteAddr,uint16_t NumByteToWrite);//写入flash
|
|||
void W25QXX_Erase_Chip(void); //整片擦除
|
|||
void W25QXX_Erase_Sector(uint32_t Dst_Addr); //扇区擦除
|
|||
void W25QXX_Wait_Busy(void); //等待空闲
|
|||
void W25QXX_PowerDown(void); //进入掉电模式
|
|||
void W25QXX_WAKEUP(void); //唤醒
|
|||
|
|||
#endif |
|||
Loading…
Reference in new issue