[ FORK ] SPI flash memory control library forked from jyam/W25X40BV

Dependents:   11u35_usbLocalFilesystem

Fork of W25X40BV by Johnny Yam

Committer:
k4zuki
Date:
Fri Aug 12 06:35:57 2016 +0000
Revision:
8:f14f239ae400
Parent:
7:0811e70f6fc7
change WAIT_TIME

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 4:b422cdc9d751 1 /** W25X40BV.h
k4zuki 4:b422cdc9d751 2 */
jyam 1:cd41b8e3fdad 3
jyam 1:cd41b8e3fdad 4 #ifndef W25X40BV_H
jyam 1:cd41b8e3fdad 5 #define W25X40BV_H
jyam 1:cd41b8e3fdad 6
jyam 1:cd41b8e3fdad 7 #include "mbed.h"
k4zuki 4:b422cdc9d751 8 #include "SWSPI.h"
jyam 1:cd41b8e3fdad 9
k4zuki 7:0811e70f6fc7 10 #define SPI_FREQ 10000000
jyam 1:cd41b8e3fdad 11 #define SPI_MODE 0
jyam 1:cd41b8e3fdad 12 #define SPI_NBIT 8
jyam 1:cd41b8e3fdad 13
jyam 1:cd41b8e3fdad 14 #define WE_INST 0x06
jyam 1:cd41b8e3fdad 15 #define WD_INST 0x04
jyam 1:cd41b8e3fdad 16 #define R_INST 0x03
jyam 1:cd41b8e3fdad 17 #define W_INST 0x02
jyam 1:cd41b8e3fdad 18 #define C_ERASE_INST 0x60
k4zuki 4:b422cdc9d751 19 #define P_ERASE_INST 0x81
k4zuki 4:b422cdc9d751 20 #define B4K_ERASE_INST 0x20
k4zuki 4:b422cdc9d751 21 #define B32K_ERASE_INST 0x52
jyam 1:cd41b8e3fdad 22
k4zuki 7:0811e70f6fc7 23 #define DUMMY_ADDR 0xAA
k4zuki 8:f14f239ae400 24 #define WAIT_TIME 2
jyam 1:cd41b8e3fdad 25
k4zuki 4:b422cdc9d751 26 #define ADDR_BMASK2 0x001f0000
jyam 1:cd41b8e3fdad 27 #define ADDR_BMASK1 0x0000ff00
jyam 1:cd41b8e3fdad 28 #define ADDR_BMASK0 0x000000ff
jyam 1:cd41b8e3fdad 29
jyam 1:cd41b8e3fdad 30 #define ADDR_BSHIFT2 16
jyam 1:cd41b8e3fdad 31 #define ADDR_BSHIFT1 8
jyam 1:cd41b8e3fdad 32 #define ADDR_BSHIFT0 0
jyam 1:cd41b8e3fdad 33
k4zuki 4:b422cdc9d751 34 /**
k4zuki 4:b422cdc9d751 35 W25X40BV
k4zuki 4:b422cdc9d751 36 */
k4zuki 4:b422cdc9d751 37 class W25X40BV: public SWSPI {
jyam 1:cd41b8e3fdad 38 public:
jyam 1:cd41b8e3fdad 39 W25X40BV(PinName mosi, PinName miso, PinName sclk, PinName cs);
jyam 1:cd41b8e3fdad 40
k4zuki 4:b422cdc9d751 41 //! takes a 24-bit (3 bytes) address and returns the data (1 byte) at that location
k4zuki 4:b422cdc9d751 42 uint32_t readByte(uint32_t addr);
k4zuki 4:b422cdc9d751 43 //! takes the address in 3 separate bytes A[23,16], A[15,8], A[7,0]
k4zuki 4:b422cdc9d751 44 uint32_t readByte(uint32_t a2, uint32_t a1,uint32_t a0);
k4zuki 4:b422cdc9d751 45 //! takes a 24-bit address, reads count bytes, and stores results in buf
k4zuki 4:b422cdc9d751 46 void readStream(uint32_t addr, uint8_t* buf, uint32_t count);
k4zuki 4:b422cdc9d751 47
k4zuki 4:b422cdc9d751 48 //! takes a 24-bit (3 bytes) address and a byte of data to write at that location
k4zuki 4:b422cdc9d751 49 void writeByte(uint32_t addr, uint32_t data);
k4zuki 4:b422cdc9d751 50 //! takes the address in 3 separate bytes A[23,16], A[15,8], A[7,0]
k4zuki 4:b422cdc9d751 51 void writeByte(uint32_t a2, uint32_t a1, uint32_t a0, uint32_t data);
k4zuki 4:b422cdc9d751 52 /** write count bytes of data from buf to memory, starting at addr
k4zuki 4:b422cdc9d751 53 * addr is expected to be 256 byte alignment: 0x000000,0x000100,...,0x01FF00
k4zuki 4:b422cdc9d751 54 * even if not, it works anyway. but should care count and 256byte edge:
k4zuki 4:b422cdc9d751 55 * if count=3 while addr=0x????FE, 3rd byte will be written in 0x????00
k4zuki 4:b422cdc9d751 56 * @param addr 24 bit address
k4zuki 4:b422cdc9d751 57 * @param buf data buffer
k4zuki 4:b422cdc9d751 58 * @param count data count in byte
k4zuki 4:b422cdc9d751 59 */
k4zuki 4:b422cdc9d751 60 void writeStream(uint32_t addr, uint8_t* buf, uint32_t count);
jyam 1:cd41b8e3fdad 61
k4zuki 4:b422cdc9d751 62 //! erase a page data(256bytes) on chip
k4zuki 6:11e271d4fbc5 63 void pageErase(uint16_t page);
k4zuki 4:b422cdc9d751 64
k4zuki 4:b422cdc9d751 65 /** erase a block data(4Kbytes) on chip
k4zuki 4:b422cdc9d751 66 * @param block block number 0x0000 - 0x001F
k4zuki 4:b422cdc9d751 67 * block number will be left-shifted by 4 bits: 0x0000 - 0x01F0
k4zuki 4:b422cdc9d751 68 * and a dummy address byte (0x00) will be added
k4zuki 4:b422cdc9d751 69 */
k4zuki 4:b422cdc9d751 70 void block4Erase(uint16_t block);
jyam 1:cd41b8e3fdad 71
k4zuki 4:b422cdc9d751 72 /** erase a block data(32Kbytes) on chip
k4zuki 4:b422cdc9d751 73 * @param block number 0x00 - 0x03
k4zuki 4:b422cdc9d751 74 * block number will be left-shifted by 3 bits: 0x00 - 0x18
k4zuki 4:b422cdc9d751 75 * and two dummy address bytes (0x0000) will be added
k4zuki 4:b422cdc9d751 76 */
k4zuki 4:b422cdc9d751 77 void block32Erase(uint8_t block);
k4zuki 4:b422cdc9d751 78 void chipErase(); //! erase all data on chip
jyam 1:cd41b8e3fdad 79
jyam 1:cd41b8e3fdad 80 private:
k4zuki 4:b422cdc9d751 81 void writeEnable(); //! write enable
k4zuki 4:b422cdc9d751 82 void writeDisable(); //! write disable
k4zuki 4:b422cdc9d751 83 void chipEnable(); //! chip enable
k4zuki 4:b422cdc9d751 84 void chipDisable(); //! chip disable
jyam 1:cd41b8e3fdad 85
k4zuki 4:b422cdc9d751 86 //! SPI _spi;
k4zuki 7:0811e70f6fc7 87 DigitalInOut _cs;
jyam 1:cd41b8e3fdad 88 };
jyam 1:cd41b8e3fdad 89
k4zuki 4:b422cdc9d751 90 #endif