45 #define EX_M25Q_VERSION "1.0.0" 50 #define EX_M25Q_MAJOR 1 55 #define EX_M25Q_MINOR 0 60 #define EX_M25Q_PATCH 0 67 #define M25Q_CMD_RESET_ENABLE 0x66 68 #define M25Q_CMD_RESET_MEMORY 0x99 69 #define M25Q_CMD_READ_ID 0x9F 70 #define M25Q_CMD_MULTIPLE_IO_READ_ID 0xAF 71 #define M25Q_CMD_READ_DISCOVERY_PARAMETER 0x5A 72 #define M25Q_CMD_READ 0x03 73 #define M25Q_CMD_FAST_READ 0x0B 74 #define M25Q_CMD_WRITE_ENABLE 0x06 75 #define M25Q_CMD_WRITE_DISABLE 0x04 76 #define M25Q_CMD_READ_STATUS_REGISTER 0x05 77 #define M25Q_CMD_WRITE_STATUS_REGISTER 0x01 78 #define M25Q_CMD_READ_LOCK_REGISTER 0xE8 79 #define M25Q_CMD_WRITE_LOCK_REGISTER 0xE5 80 #define M25Q_CMD_READ_FLAG_STATUS_REGISTER 0x70 81 #define M25Q_CMD_CLEAR_FLAG_STATUS_REGISTER 0x50 82 #define M25Q_CMD_READ_NV_CONFIGURATION_REGISTER 0xB5 83 #define M25Q_CMD_WRITE_NV_CONFIGURATION_REGISTER 0xB1 84 #define M25Q_CMD_READ_V_CONF_REGISTER 0x85 85 #define M25Q_CMD_WRITE_V_CONF_REGISTER 0x81 86 #define M25Q_CMD_READ_ENHANCED_V_CONF_REGISTER 0x65 87 #define M25Q_CMD_WRITE_ENHANCED_V_CONF_REGISTER 0x61 88 #define M25Q_CMD_PAGE_PROGRAM 0x02 89 #define M25Q_CMD_SUBSECTOR_ERASE 0x20 90 #define M25Q_CMD_SECTOR_ERASE 0xD8 91 #define M25Q_CMD_BULK_ERASE 0xC7 92 #define M25Q_CMD_PROGRAM_ERASE_RESUME 0x7A 93 #define M25Q_CMD_PROGRAM_ERASE_SUSPEND 0x75 94 #define M25Q_CMD_READ_OTP_ARRAY 0x4B 95 #define M25Q_CMD_PROGRAM_OTP_ARRAY 0x42 102 #define M25Q_FLAGS_PROGRAM_ERASE 0x80U 103 #define M25Q_FLAGS_ERASE_SUSPEND 0x40U 104 #define M25Q_FLAGS_ERASE_ERROR 0x20U 105 #define M25Q_FLAGS_PROGRAM_ERROR 0x10U 106 #define M25Q_FLAGS_VPP_ERROR 0x08U 107 #define M25Q_FLAGS_PROGRAM_SUSPEND 0x04U 108 #define M25Q_FLAGS_PROTECTION_ERROR 0x02U 109 #define M25Q_FLAGS_RESERVED 0x01U 110 #define M25Q_FLAGS_ALL_ERRORS (M25Q_FLAGS_ERASE_ERROR | \ 111 M25Q_FLAGS_PROGRAM_ERROR | \ 112 M25Q_FLAGS_VPP_ERROR | \ 113 M25Q_FLAGS_PROTECTION_ERROR) 129 #if !defined(M25Q_READ_DUMMY_CYCLES) || defined(__DOXYGEN__) 130 #define M25Q_READ_DUMMY_CYCLES 8 141 #if !defined(M25Q_SWITCH_WIDTH) || defined(__DOXYGEN__) 142 #define M25Q_SWITCH_WIDTH TRUE 151 #if !defined(M25Q_NICE_WAITING) || defined(__DOXYGEN__) 152 #define M25Q_NICE_WAITING TRUE 158 #if !defined(M25Q_USE_SUB_SECTORS) || defined(__DOXYGEN__) 159 #define M25Q_USE_SUB_SECTORS FALSE 165 #if !defined(M25Q_SUPPORTED_MANUFACTURE_IDS) || defined(__DOXYGEN__) 166 #define M25Q_SUPPORTED_MANUFACTURE_IDS {0x20} 172 #if !defined(M25Q_SUPPORTED_MEMORY_TYPE_IDS) || defined(__DOXYGEN__) 173 #define M25Q_SUPPORTED_MEMORY_TYPE_IDS {0xBA, 0xBB} 183 #if !defined(M25Q_COMPARE_BUFFER_SIZE) || defined(__DOXYGEN__) 184 #define M25Q_COMPARE_BUFFER_SIZE 32 192 #if (M25Q_READ_DUMMY_CYCLES < 1) || (M25Q_READ_DUMMY_CYCLES > 15) 193 #error "invalid M25Q_READ_DUMMY_CYCLES value (1..15)" 196 #if (M25Q_COMPARE_BUFFER_SIZE & (M25Q_COMPARE_BUFFER_SIZE - 1)) != 0 197 #error "invalid M25Q_COMPARE_BUFFER_SIZE value" 214 #define _m25q_methods \ 215 _jesd216_flash_methods 244 uint8_t device_id[20];
261 #if (JESD216_BUS_MODE != JESD216_BUS_MODE_SPI) || defined(__DOXYGEN__) 262 #if (QSPI_SUPPORTS_MEMMAP == TRUE) || defined(__DOXYGEN__) void m25qMemoryMap(M25QDriver *devp, uint8_t **addrp)
Enters the memory Mapping mode.
void m25qObjectInit(M25QDriver *devp)
Initializes an instance.
const struct M25QDriverVMT * vmt
M25QDriver Virtual Methods Table.
JESD216 compliant flash driver class header.
void m25qStart(M25QDriver *devp, const M25QConfig *config)
Configures and activates N25Q128 driver.
#define _m25q_methods
M25Q specific methods.
#define _jesd216_flash_data
JESD215Flash specific data.
Type of M25Q flash class.
void m25qStop(M25QDriver *devp)
Deactivates the N25Q128 driver.
M25Q virtual methods table.
_jesd216_flash_data const M25QConfig * config
Current configuration data.
void m25qMemoryUnmap(M25QDriver *devp)
Leaves the memory Mapping mode.
Type of a M25Q configuration structure.