STM32-W25Q-QSPI

所属分类:处理器开发
开发工具:C
文件大小:4810KB
下载次数:2
上传日期:2023-01-13 08:31:29
上 传 者sh-1993
说明:  STM32 Winbond W25Q内存Quad SPI驱动程序
(STM32 Winbond W25Q memory Quad SPI Driver)

文件列表:
Datasheets (0, 2023-01-13)
Datasheets\AN4760-QSPI.pdf (3710002, 2023-01-13)
Datasheets\winbond_w25q256jv.pdf (1697287, 2023-01-13)
LICENSE (1072, 2023-01-13)
Library (0, 2023-01-13)
Library\example.c (1142, 2023-01-13)
Library\libs.h (828, 2023-01-13)
Library\w25q_mem.c (38421, 2023-01-13)
Library\w25q_mem.h (10742, 2023-01-13)
Resources (0, 2023-01-13)
Resources\Example_result.png (155127, 2023-01-13)
Resources\FSize.png (58520, 2023-01-13)
Resources\Poster.png (222334, 2023-01-13)
Resources\Poster_small.png (13217, 2023-01-13)

## W25Qxxx QSPI STM32 Library ### HAL STM32 Driver for Winbond W25Q-series memory, using Quad-SPI interface ![Poster](https://github.com/Resources/Poster.png) ### Features: - Easy applying: ST's HAL functions are used - Uses Quad-SPI interface (4 lines) - Supports *(almost)* all chip commands *(later)* - Simple usage with data types wrapper-functions, or use raw 8-bit data ### Documentation is also available in [doxygen](https://github.comhttps://crazy-geeks.github.io/STM32-W25Q-QSPI/) ### Function reference (from .h file): ```c W25Q_STATE W25Q_Init(void); // Initalize function W25Q_STATE W25Q_ReadStatusReg(u8_t *reg_data, u8_t reg_num); // Read status register to variable W25Q_STATE W25Q_WriteStatusReg(u8_t reg_data, u8_t reg_num); // Write status register from variable W25Q_STATE W25Q_ReadStatusStruct(W25Q_STATUS_REG *status); // Read all status registers to struct W25Q_STATE W25Q_IsBusy(void); // Check chip's busy status W25Q_STATE W25Q_ReadSByte(i8_t *buf, u8_t pageShift, u32_t pageNum); // Read signed 8-bit variable W25Q_STATE W25Q_ReadByte(u8_t *buf, u8_t pageShift, u32_t pageNum); // Read 8-bit variable W25Q_STATE W25Q_ReadSWord(i16_t *buf, u8_t pageShift, u32_t pageNum); // Read signed 16-bit variable W25Q_STATE W25Q_ReadWord(u16_t *buf, u8_t pageShift, u32_t pageNum); // Read 16-bit variable W25Q_STATE W25Q_ReadSLong(i32_t *buf, u8_t pageShift, u32_t pageNum); // Read signed 32-bit variable W25Q_STATE W25Q_ReadLong(u32_t *buf, u8_t pageShift, u32_t pageNum); // Read 32-bit variable W25Q_STATE W25Q_ReadData(u8_t *buf, u16_t len, u8_t pageShift, u32_t pageNum); // Read any 8-bit data W25Q_STATE W25Q_ReadRaw(u8_t *buf, u16_t data_len, u32_t rawAddr); // Read data from raw addr W25Q_STATE W25Q_SingleRead(u8_t *buf, u32_t len, u32_t Addr); // Read data from raw addr by single line W25Q_STATE W25Q_EraseSector(u32_t SectAddr); // Erase 4KB Sector W25Q_STATE W25Q_EraseBlock(u32_t BlockAddr, u8_t size); // Erase 32KB/***KB Sector W25Q_STATE W25Q_EraseChip(void); // Erase all chip W25Q_STATE W25Q_ProgramSByte(i8_t buf, u8_t pageShift, u32_t pageNum); // Program signed 8-bit variable W25Q_STATE W25Q_ProgramByte(u8_t buf, u8_t pageShift, u32_t pageNum); // Program 8-bit variable W25Q_STATE W25Q_ProgramSWord(i16_t buf, u8_t pageShift, u32_t pageNum); // Program signed 16-bit variable W25Q_STATE W25Q_ProgramWord(u16_t buf, u8_t pageShift, u32_t pageNum); // Program 16-bit variable W25Q_STATE W25Q_ProgramSLong(i32_t buf, u8_t pageShift, u32_t pageNum); // Program signed 32-bit variable W25Q_STATE W25Q_ProgramLong(u32_t buf, u8_t pageShift, u32_t pageNum); // Program 32-bit variable W25Q_STATE W25Q_ProgramData(u8_t *buf, u16_t len, u8_t pageShift, u32_t pageNum); // Program any 8-bit data W25Q_STATE W25Q_ProgramRaw(u8_t *buf, u16_t data_len, u32_t rawAddr); // Program data to raw addr W25Q_STATE W25Q_ProgSuspend(void); // Pause Programm/Erase operation W25Q_STATE W25Q_ProgResume(void); // Resume Programm/Erase operation W25Q_STATE W25Q_Sleep(void); // Set low current consumption W25Q_STATE W25Q_WakeUP(void); // Wake the chip up from sleep mode W25Q_STATE W25Q_ReadID(u8_t *buf); // Read chip ID W25Q_STATE W25Q_SwReset(bool force); // Software reset ``` ### Functions that aren't yet ready: ```c W25Q_STATE W25Q_EnableVolatileSR(void); // Make Status Register Volatile W25Q_STATE W25Q_SetBurstWrap(u8_t WrapSize); // Set Burst with Wrap W25Q_STATE W25Q_ReadFullID(u8_t *buf); // Read full chip ID (Manufacturer ID + Device ID) W25Q_STATE W25Q_ReadUID(u8_t *buf); // Read unique chip ID W25Q_STATE W25Q_ReadJEDECID(u8_t *buf); // Read ID by JEDEC Standards W25Q_STATE W25Q_ReadSFDPRegister(u8_t *buf); // Read device descriptor (SFDP Standard) W25Q_STATE W25Q_EraseSecurityRegisters(u8_t numReg); // Erase security register W25Q_STATE W25Q_ProgSecurityRegisters(u8_t *buf, u8_t numReg, u8_t byteAddr); // Program security register W25Q_STATE W25Q_ReadSecurityRegisters(u8_t *buf, u8_t numReg, u8_t byteAddr); // Read security register W25Q_STATE W25Q_BlockReadOnly(u32_t Addr, bool enable); // Individual block/sector read-only lock W25Q_STATE W25Q_BlockReadOnlyCheck(bool *state, u32_t Addr); // Check block's/sector's read-only lock status W25Q_STATE W25Q_GlobalReadOnly(bool enable); // Set read-only param to all chip ``` ### Instructions for use: - Use *CubeMX* to configure *QUADSPI* peripheral reffer to your datasheet - Memory size calculation *([AN4760](https://github.com/Datasheets/AN4760-QSPI.pdf) page 45)*:
2^(N+1) = Mem size in **bytes**
Example: *256 Mbit* = *32 MByte* = *32'768 KByte* = *33'554'432 Byte* = *2^25 Byte* => N = **24**
![Flash size](https://github.com/Resources/FSize.png) - Connect memory to STM reffer to [Datasheet](https://github.com/Datasheets/winbond_w25q256jv.pdf), or your's chip datasheet - Include "w25q_mem.h" to your code - Start with Init function - Enjoy ) **Any questions? Write an issue! Or create pull request.** **Donate:** [PayPal](https://github.comhttps://paypal.me/yasnosos ) / [DonationAlerts](https://github.comhttps://www.donationalerts.com/r/yasnosos )
### Example ![Example](https://github.com/Resources/Example_result.png)

近期下载者

相关文件


收藏者