Shows how to use a display, the onboard SD Card and the onboard SPI Flash. Requires a display module with direct Arduino pinning
Dependencies: DmTftLibrary SDFileSystem mbed
Diff: W25Q16BV.h
- Revision:
- 0:3ecd25651727
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/W25Q16BV.h Tue May 20 10:30:34 2014 +0000 @@ -0,0 +1,87 @@ +// W25Q16BV.h + +#ifndef W25Q16BV_H +#define W25Q16BV_H + +#include "mbed.h" +//#include "BitBangedSPI.h" + +#define SPI_FREQ 1000000 +#define SPI_MODE 0 +#define SPI_NBIT 8 + +#define POWERUP_INST 0xAB +#define STATUS1_INST 0x05 +#define STATUS2_INST 0x35 +#define JDEC_INST 0x9F +#define UNIQUE_INST 0x4B +#define WE_INST 0x06 +#define WD_INST 0x04 +#define R_INST 0x03 +#define W_INST 0x02 +#define S_ERASE_INST 0x20 /* 4KB sector erase */ +#define B_ERASE_INST 0xD8 /* 64KB block erase */ +#define C_ERASE_INST 0x60 + +#define DUMMY_ADDR 0x00 + +#define WAIT_US_TRES1 5 /* Power Up: 3us */ +//#define WAIT_US_TPUW 10000 /* Power Up Write Time: 1-10ms */ +//#define WAIT_US_TBP 50 /* Byte Program Time: 20-50us */ +//#define WAIT_US_TPP 3000 /* Page Program Time: 0.7-3ms */ +//#define WAIT_US_TSE 400000 /* Sector Erase Time: 30-400ms */ +//#define WAIT_US_TBE 1000000 /* 64KB Block Erase Time: 1000ms */ +//#define WAIT_US_TCE 10000000 /* Chip Erase Time: 3-10s */ + +//#define ADDR_BMASK2 0x00ff0000 +//#define ADDR_BMASK1 0x0000ff00 +//#define ADDR_BMASK0 0x000000ff + +//#define ADDR_BSHIFT2 16 +//#define ADDR_BSHIFT1 8 +//#define ADDR_BSHIFT0 0 + +#define PAGE_SIZE 256 +#define SECTOR_SIZE 4096 +#define NUM_SECTORS 512 +#define NUM_64KB_BLOCKS 32 + +#define STATUS_1_BUSY 0x01 + +class W25Q16BV /*: public BitBangedSPI*/ { +public: + W25Q16BV(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 readJEDEC(uint8_t* manId, uint8_t* memType, uint8_t* cap); + uint8_t readStatus1(); + uint8_t readStatus2(); + + 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 + bool blockErase(int startBlock, int num=1); // erase all data in the specified number of 64KB blocks, return false if block number is invalid + bool sectorErase(int startSector, int num=1); // erase all data in the specified number of 4KB sectors, return false if sector number is invalid + +private: + + void exitDeepPowerDown(); + void waitWhileBusy(); + + void writeEnable(); // write enable + void writeDisable(); // write disable + void chipEnable(); // chip enable + void chipDisable(); // chip disable + +// BitBangedSPI _spi; + SPI _spi; + DigitalOut _cs; +}; + +#endif +