Winbond W25Q32 SPI library. Tested on Winbond W74M32 embedded on Hani-IoT. Based on https://os.mbed.com/users/perezalvarezhi/code/W25Q80BV/

W25Q32.h

Committer:
Pawel Zarembski
Date:
2020-01-08
Revision:
1:d3928deefb53
Parent:
0:cc8118fdcc22

File content as of revision 1:d3928deefb53:

#ifndef W25Q32_H
#define W25Q32_H

#include "mbed.h"

#define SPI_FREQ        1000000
#define SPI_MODE        0
#define SPI_NBIT        8

#define WRITE_ENABLE    0x06
#define WRITE_DISABLE   0x04
#define READ_DATA       0x03
#define WRITE_DATA      0x02
#define CHIP_ERASE      0x60
#define DEV_ID          0x90

#define DUMMY_ADDR      0x00
#define WAIT_TIME       1000

#define ADDR_BMASK2     0x00ff0000
#define ADDR_BMASK1     0x0000ff00
#define ADDR_BMASK0     0x000000ff

#define ADDR_BSHIFT2    16
#define ADDR_BSHIFT1    8
#define ADDR_BSHIFT0    0

class W25Q32 {
public:
	W25Q32(PinName mosi, PinName miso, PinName sclk, PinName cs);
	
    int     readByte(int addr);                             // takes a 24-bit (3 bytes) address and returns the data (1 byte) at that location
    int     readByte(int a2, int a1, int a0);               // takes the address in 3 separate bytes A[23,16], A[15,8], A[7,0]
    void    readStream(int addr, char* buf, int count);     // takes a 24-bit address, reads count bytes, and stores results in buf
    
    void    writeByte(int addr, int data);                  // takes a 24-bit (3 bytes) address and a byte of data to write at that location
    void    writeByte(int a2, int a1, int a0, int data);    // takes the address in 3 separate bytes A[23,16], A[15,8], A[7,0]
    void    writeStream(int addr, char* buf, int count);    // write count bytes of data from buf to memory, starting at addr  
    
    void    chipErase();                                    // erase all data on chip
    int     getMID();                                     // get the manufacturer ID
    
private:
    void    writeEnable();                                  // write enable
    void    writeDisable();                                 // write disable
    void    chipEnable();                                   // chip enable
    void    chipDisable();                                  // chip disable
    int     writeSPI(int data);                             // software SPI write
    
    // SPI inputs/outputs
    DigitalOut  _cs;
    DigitalOut  _mosi;
    DigitalIn   _miso;
    DigitalOut  _sclk;
};

#endif