MX25R6435F Library

Dependents:   Demo_MX25Rxx35F_Serial_NOR_Flash_Testbench mbed-lorawan-pulga mbed-lorawan-pulga-serial_rx mbed-lorawan-pulga-gps-added_shared

Fork of SPI_MX25R by alec cohen

Committer:
Arkadi
Date:
Wed Mar 28 13:17:02 2018 +0000
Revision:
3:b6bb8d236251
Parent:
2:f72110475fec
Modified for page read, n bytes read

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alec1 0:a16ad6f5c788 1 #ifndef _SPI_MX25R_H_
alec1 0:a16ad6f5c788 2 #define _SPI_MX25R_H_
alec1 2:f72110475fec 3
alec1 0:a16ad6f5c788 4 #include "mbed.h"
alec1 2:f72110475fec 5
Arkadi 3:b6bb8d236251 6 /**
Arkadi 3:b6bb8d236251 7 Page Defines, write read based on page size
Arkadi 3:b6bb8d236251 8 */
Arkadi 3:b6bb8d236251 9 #define MX25R_PAGES 0x7FFF // total memory size - Addresses 0x7FFFFF
alec1 2:f72110475fec 10 /**
alec1 2:f72110475fec 11 * Macronix Serial Flash Low Power Memories
alec1 2:f72110475fec 12 * SPI_MX25R Series SPI-Flash Memory
alec1 2:f72110475fec 13 */
alec1 2:f72110475fec 14 #define CS_LOW 0 // SPI CS# (Chip Select) Setting
alec1 2:f72110475fec 15 #define CS_HIGH 1 // SPI CS# (Chip Select) Setting
alec1 2:f72110475fec 16 #define DUMMY 0x00 // Dummy byte which can be changed to any value
alec1 0:a16ad6f5c788 17 /**
alec1 2:f72110475fec 18 * MX25R Series Register Command Table.
alec1 2:f72110475fec 19 * x2 and x4 commands not currently supported with FRDM K64F platform
alec1 0:a16ad6f5c788 20 */
alec1 2:f72110475fec 21 #define CMD_READ 0x03 // x1 Normal Read Data Byte
alec1 2:f72110475fec 22 #define CMD_FREAD 0x0B // x1 Fast Read Data Byte
alec1 2:f72110475fec 23 #define CMD_2READ 0xBB // x2 2READ
alec1 2:f72110475fec 24 #define CMD_DREAD 0x3B // x2 DREAD
alec1 2:f72110475fec 25 #define CMD_4READ 0xEB // x4 4READ
alec1 2:f72110475fec 26 #define CMD_QREAD 0x6B // x4 QREAD
alec1 2:f72110475fec 27 #define CMD_PP 0x02 // Page Program
alec1 2:f72110475fec 28 #define CMD_4PP 0x38 // x4 PP
alec1 2:f72110475fec 29 #define CMD_SE 0x20 // 4KB Sector Erase
alec1 2:f72110475fec 30 #define CMD_32KBE 0x52 // 32KB Block Erase
alec1 2:f72110475fec 31 #define CMD_BE 0xD8 // 64KB Block Erase
alec1 2:f72110475fec 32 #define CMD_CE 0xC7 // Chip Erase
alec1 2:f72110475fec 33 #define CMD_RDSFDP 0x5A // Read SFDP
alec1 2:f72110475fec 34 #define CMD_WREN 0x06 // Write Enable
alec1 2:f72110475fec 35 #define CMD_WRDI 0x04 // Write Disable
alec1 2:f72110475fec 36 #define CMD_RDSR 0x05 // Read Status Register
alec1 2:f72110475fec 37 #define CMD_RDCR 0x15 // Read Configuration Register
alec1 2:f72110475fec 38 #define CMD_WRSR 0x01 // Write Status Register
alec1 2:f72110475fec 39 #define CMD_PESUS 0xB0 // Program/Erase Suspend
alec1 2:f72110475fec 40 #define CMD_PERES 0x30 // Program/Erase Resume
alec1 2:f72110475fec 41 #define CMD_DP 0xB9 // Enter Deep Power Down
alec1 2:f72110475fec 42 #define CMD_SBL 0xC0 // Set Burst Length
alec1 2:f72110475fec 43 #define CMD_RDID 0x9F // Read Manufacturer and JDEC Device ID
alec1 2:f72110475fec 44 #define CMD_REMS 0x90 // Read Electronic Manufacturer and Device ID
alec1 2:f72110475fec 45 #define CMD_RES 0xAB // Read Electronic ID
alec1 2:f72110475fec 46 #define CMD_ENSO 0xB1 // Enter Secure OTP
alec1 2:f72110475fec 47 #define CMD_EXSO 0xC1 // Exit Secure OTP
alec1 2:f72110475fec 48 #define CMD_RDSCUR 0x2B // Read Security Register
alec1 2:f72110475fec 49 #define CMD_WRSCUR 0x2F // Write Security Register
alec1 2:f72110475fec 50 #define CMD_NOP 0x00 // No Operation
alec1 2:f72110475fec 51 #define CMD_RSTEN 0x66 // Reset Enable
alec1 2:f72110475fec 52 #define CMD_RST 0x99 // Reset
alec1 2:f72110475fec 53 #define CMD_RRE 0xFF // Release Read Enhanced Mode
alec1 2:f72110475fec 54
alec1 2:f72110475fec 55
alec1 0:a16ad6f5c788 56 class SPI_MX25R
alec1 0:a16ad6f5c788 57 {
alec1 0:a16ad6f5c788 58 public:
alec1 2:f72110475fec 59 /**
alec1 0:a16ad6f5c788 60 * Macronix MX25R Low Power and Wide Vcc SPI-Flash Memory Family
alec1 0:a16ad6f5c788 61 *
alec1 0:a16ad6f5c788 62 * @param SI/SIO0 SPI_MOSI pin
alec1 0:a16ad6f5c788 63 * @param SO/SI01 SPI_MISO pin
alec1 0:a16ad6f5c788 64 * @param SCLK SPI_CLK pin
alec1 0:a16ad6f5c788 65 * @param CSb SPI_CS pin
alec1 0:a16ad6f5c788 66 */
alec1 0:a16ad6f5c788 67 SPI_MX25R(PinName mosi, PinName miso, PinName sclk, PinName cs) ;
alec1 0:a16ad6f5c788 68
alec1 0:a16ad6f5c788 69 ~SPI_MX25R() ;
alec1 2:f72110475fec 70
alec1 0:a16ad6f5c788 71 SPI m_spi;
alec1 0:a16ad6f5c788 72 DigitalOut m_cs ;
alec1 0:a16ad6f5c788 73 int _mode ;
alec1 0:a16ad6f5c788 74
alec1 0:a16ad6f5c788 75 /// Write Enable
alec1 0:a16ad6f5c788 76 void writeEnable(void) ;
alec1 0:a16ad6f5c788 77
alec1 0:a16ad6f5c788 78 /// Write Disable
alec1 0:a16ad6f5c788 79 void writeDisable(void) ;
alec1 0:a16ad6f5c788 80
alec1 0:a16ad6f5c788 81 /// Reset Enable
alec1 0:a16ad6f5c788 82 void resetEnable(void) ;
alec1 0:a16ad6f5c788 83
alec1 0:a16ad6f5c788 84 /// Reset
alec1 0:a16ad6f5c788 85 void reset(void) ;
alec1 2:f72110475fec 86
alec1 1:8403da5975cb 87 /// Program or Erase Suspend
alec1 1:8403da5975cb 88 void pgmersSuspend(void) ;
alec1 1:8403da5975cb 89
alec1 1:8403da5975cb 90 /// Program or Erase Resume
alec1 1:8403da5975cb 91 void pgmersResume(void) ;
alec1 2:f72110475fec 92
alec1 1:8403da5975cb 93 /// Enter Deep Power Down
alec1 1:8403da5975cb 94 void deepPowerdown(void) ;
alec1 2:f72110475fec 95
alec1 1:8403da5975cb 96 /// Set Burst Length
alec1 1:8403da5975cb 97 void setBurstlength(void) ;
alec1 2:f72110475fec 98
alec1 1:8403da5975cb 99 /// Release from Read Enhanced Mode
alec1 1:8403da5975cb 100 void releaseReadenhaced(void) ;
alec1 2:f72110475fec 101
alec1 1:8403da5975cb 102 /// No Operation
alec1 1:8403da5975cb 103 void noOperation(void) ;
alec1 2:f72110475fec 104
alec1 1:8403da5975cb 105 /// Enter OTP Area
alec1 1:8403da5975cb 106 void enterSecureOTP(void) ;
alec1 1:8403da5975cb 107
alec1 1:8403da5975cb 108 /// Exit OTP Area
alec1 1:8403da5975cb 109 void exitSecureOTP(void) ;
alec1 2:f72110475fec 110
alec1 1:8403da5975cb 111 /// Chip Erase
alec1 1:8403da5975cb 112 void chipErase(void) ;
alec1 0:a16ad6f5c788 113
alec1 1:8403da5975cb 114 /// Write Status and Configuration Reg 1 and 2
alec1 1:8403da5975cb 115 void writeStatusreg(int addr) ;
alec1 0:a16ad6f5c788 116
alec1 2:f72110475fec 117 /// Write Security Reg
alec1 2:f72110475fec 118 void writeSecurityreg(int addr) ;
alec1 2:f72110475fec 119
alec1 0:a16ad6f5c788 120 /** Page Program
alec1 0:a16ad6f5c788 121 *
alec1 0:a16ad6f5c788 122 * @param int addr start address
alec1 0:a16ad6f5c788 123 * @param uint8_t *data data buffer
alec1 0:a16ad6f5c788 124 * @param int numData the number of data to be written
alec1 0:a16ad6f5c788 125 */
alec1 0:a16ad6f5c788 126 void programPage(int addr, uint8_t *data, int numData) ;
alec1 0:a16ad6f5c788 127
alec1 0:a16ad6f5c788 128 /** Sector Erase
alec1 0:a16ad6f5c788 129 *
alec1 0:a16ad6f5c788 130 * @param int addr specify the sector to be erased
alec1 0:a16ad6f5c788 131 */
alec1 0:a16ad6f5c788 132 void sectorErase(int addr) ;
alec1 0:a16ad6f5c788 133
alec1 2:f72110475fec 134 /** Block Erase
alec1 0:a16ad6f5c788 135 *
alec1 0:a16ad6f5c788 136 * @param int addr specify the sector to be erased
alec1 0:a16ad6f5c788 137 */
alec1 0:a16ad6f5c788 138 void blockErase(int addr) ;
alec1 0:a16ad6f5c788 139
alec1 2:f72110475fec 140 /** 32KB Block Erase
alec1 0:a16ad6f5c788 141 *
alec1 0:a16ad6f5c788 142 * @param int addr specify the sector to be erased
alec1 0:a16ad6f5c788 143 */
alec1 0:a16ad6f5c788 144 void blockErase32KB(int addr) ;
alec1 0:a16ad6f5c788 145
alec1 2:f72110475fec 146 /** Read Status Register
alec1 0:a16ad6f5c788 147 *
alec1 0:a16ad6f5c788 148 * @returns uint8_t status register value
alec1 0:a16ad6f5c788 149 */
alec1 0:a16ad6f5c788 150 uint8_t readStatus(void) ;
alec1 0:a16ad6f5c788 151
alec1 2:f72110475fec 152 /** Read Security Register
alec1 2:f72110475fec 153 *
alec1 2:f72110475fec 154 * @returns uint8_t security register value
alec1 2:f72110475fec 155 */
alec1 2:f72110475fec 156 uint8_t readSecurity(void) ;
alec1 2:f72110475fec 157
alec1 2:f72110475fec 158 /** Read Manufacturer and JEDEC Device ID
alec1 0:a16ad6f5c788 159 *
alec1 0:a16ad6f5c788 160 * @returns uint32_t Manufacturer ID, Mem Type, Device ID
alec1 0:a16ad6f5c788 161 */
alec1 0:a16ad6f5c788 162 uint32_t readID(void) ;
alec1 0:a16ad6f5c788 163
alec1 2:f72110475fec 164 /** Read Electronic Manufacturer and Device ID
alec1 2:f72110475fec 165 *
alec1 2:f72110475fec 166 * @returns uint32_t Manufacturer ID, Device ID
alec1 2:f72110475fec 167 */
alec1 2:f72110475fec 168 uint32_t readREMS(void) ;
alec1 2:f72110475fec 169
alec1 2:f72110475fec 170 /** Read Electronic ID
alec1 2:f72110475fec 171 *
alec1 2:f72110475fec 172 * @returns uint8_t Device ID
alec1 2:f72110475fec 173 */
alec1 2:f72110475fec 174 uint8_t readRES(void) ;
alec1 2:f72110475fec 175
alec1 2:f72110475fec 176 /** Read Configuration Register
alec1 0:a16ad6f5c788 177 *
alec1 0:a16ad6f5c788 178 * @returns uint32_t configuration register value
alec1 0:a16ad6f5c788 179 */
alec1 0:a16ad6f5c788 180 uint32_t readConfig(void) ;
alec1 1:8403da5975cb 181 uint8_t readSFDP(int addr) ;
alec1 1:8403da5975cb 182 uint8_t readFREAD(int addr) ;
alec1 0:a16ad6f5c788 183 uint8_t read8(int addr) ;
alec1 0:a16ad6f5c788 184 void write8(int addr, uint8_t data) ;
Arkadi 3:b6bb8d236251 185 // read sequential n bytes
Arkadi 3:b6bb8d236251 186 void readNBytes(int addr, uint8_t *data, int nBytes);
alec1 0:a16ad6f5c788 187 private:
alec1 2:f72110475fec 188
alec1 0:a16ad6f5c788 189 } ;
alec1 0:a16ad6f5c788 190 #endif // _SPI_MX25R_H_