flash12 2.1.0.0
flash12.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
28#ifndef FLASH12_H
29#define FLASH12_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_spi_master.h"
52#include "spi_specifics.h"
53
74#define FLASH12_CMD_READ_ARRAY 0x03
75#define FLASH12_CMD_FAST_READ_ARRAY 0x0B
76
81#define FLASH12_CMD_BYTE_PAGE_PROGRAM 0x02
82#define FLASH12_CMD_PAGE_ERASE 0x81
83#define FLASH12_CMD_BLOCK_ERASE_4KB 0x20
84#define FLASH12_CMD_BLOCK_ERASE_32KB 0x52
85#define FLASH12_CMD_BLOCK_ERASE_64KB 0xD8
86#define FLASH12_CMD_CHIP_ERASE 0x60
87
92#define FLASH12_CMD_ERASE_SECURITY_REG 0x44
93#define FLASH12_CMD_PROGRAM_SECURITY_REG 0x42
94#define FLASH12_CMD_READ_SECURITY_REG 0x48
95#define FLASH12_CMD_READ_SERIAL_FLASH 0x5A
96
101#define FLASH12_CMD_WRITE_ENABLE 0x06
102#define FLASH12_CMD_VOLATILE_STATUS 0x50
103#define FLASH12_CMD_WRITE_DISABLE 0x04
104
109#define FLASH12_CMD_READ_STATUS_1 0x05
110#define FLASH12_CMD_WRITE_STATUS_1 0x01
111#define FLASH12_CMD_READ_STATUS_2 0x35
112#define FLASH12_CMD_ACT_STATUS_INT 0x25
113
118#define FLASH12_CMD_DEEP_POWER_DOWN 0xB9
119#define FLASH12_CMD_RELEASE_PD_ID 0xAB
120#define FLASH12_CMD_MANUFACTURER_ID 0x90
121#define FLASH12_CMD_JEDEC_ID 0x9F
122#define FLASH12_CMD_READ_UNIQUE_ID_NUM 0x4B
123
128#define FLASH12_CMD_ENABLE_RESET 0x66
129#define FLASH12_CMD_RESET_DEVICE 0x99
130
131
132 // flash12_cmd
133
148#define FLASH12_MANUFACTURER_ID 0x1F
149#define FLASH12_DEVICE_ID 0x14
150
155#define FLASH12_STATUS1_SRP0 0x80
156#define FLASH12_STATUS1_BPSIZE 0x40
157#define FLASH12_STATUS1_TB 0x20
158#define FLASH12_STATUS1_WEL 0x02
159#define FLASH12_STATUS1_BSY 0x01
160
165#define FLASH12_MIN_ADDRESS 0x000000ul
166#define FLASH12_MAX_ADDRESS 0x07FFFFul
167#define FLASH12_PAGE_SIZE 256
168#define FLASH12_CMD_MAX_LEN 8
169
178#define FLASH12_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
179#define FLASH12_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
180
181 // flash12_set
182
197#define FLASH12_MAP_MIKROBUS( cfg, mikrobus ) \
198 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
199 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
200 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
201 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
202 cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
203 cfg.hld = MIKROBUS( mikrobus, MIKROBUS_INT )
204
205 // flash12_map
206 // flash12
207
212typedef struct
213{
214 // Output pins
215 digital_out_t wp;
216 digital_out_t hld;
218 // Modules
219 spi_master_t spi;
221 pin_name_t chip_select;
223} flash12_t;
224
229typedef struct
230{
231 // Communication gpio pins
232 pin_name_t miso;
233 pin_name_t mosi;
234 pin_name_t sck;
235 pin_name_t cs;
237 // Additional gpio pins
238 pin_name_t wp;
239 pin_name_t hld;
241 // static variable
242 uint32_t spi_speed;
243 spi_master_mode_t spi_mode;
244 spi_master_chip_select_polarity_t cs_polarity;
247
252typedef enum
253{
255 FLASH12_ERROR = -1
256
258
275
290
304
318
332
346
360
372err_t flash12_write_cmd ( flash12_t *ctx, uint8_t cmd );
373
388err_t flash12_write_cmd_data ( flash12_t *ctx, uint8_t cmd, uint8_t *data_in, uint8_t len );
389
404err_t flash12_read_cmd_data ( flash12_t *ctx, uint8_t cmd, uint8_t *data_out, uint8_t len );
405
421err_t flash12_write_cmd_address_data ( flash12_t *ctx, uint8_t cmd, uint32_t mem_addr, uint8_t *data_in, uint32_t len );
422
438err_t flash12_read_cmd_address_data ( flash12_t *ctx, uint8_t cmd, uint32_t mem_addr, uint8_t *data_out, uint32_t len );
439
455err_t flash12_memory_write ( flash12_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint32_t len );
456
472err_t flash12_memory_read ( flash12_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint32_t len );
473
485
498
511
524err_t flash12_read_status ( flash12_t *ctx, uint8_t reg_num, uint8_t *status );
525
538err_t flash12_write_status ( flash12_t *ctx, uint8_t status );
539
554err_t flash12_erase_memory ( flash12_t *ctx, uint8_t erase_cmd, uint32_t mem_addr );
555
569err_t flash12_get_device_id ( flash12_t *ctx, uint8_t *mfr_id, uint8_t *dev_id );
570
571#ifdef __cplusplus
572}
573#endif
574#endif // FLASH12_H
575
576 // flash12
577
578// ------------------------------------------------------------------------ END
flash12_return_value_t
Flash 12 Click return value data.
Definition flash12.h:253
@ FLASH12_ERROR
Definition flash12.h:255
@ FLASH12_OK
Definition flash12.h:254
err_t flash12_write_cmd(flash12_t *ctx, uint8_t cmd)
Flash 12 command writing function.
err_t flash12_read_cmd_address_data(flash12_t *ctx, uint8_t cmd, uint32_t mem_addr, uint8_t *data_out, uint32_t len)
Flash 12 command address data reading function.
err_t flash12_write_disable(flash12_t *ctx)
Flash 12 write disable function.
void flash12_hold_enable(flash12_t *ctx)
Flash 12 hold enable function.
void flash12_hold_disable(flash12_t *ctx)
Flash 12 hold disable function.
err_t flash12_write_cmd_address_data(flash12_t *ctx, uint8_t cmd, uint32_t mem_addr, uint8_t *data_in, uint32_t len)
Flash 12 command address data writing function.
err_t flash12_default_cfg(flash12_t *ctx)
Flash 12 default configuration function.
err_t flash12_write_enable(flash12_t *ctx)
Flash 12 write enable function.
err_t flash12_memory_read(flash12_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint32_t len)
Flash 12 memory data reading function.
void flash12_hw_write_disable(flash12_t *ctx)
Flash 12 hardware write disable function.
err_t flash12_init(flash12_t *ctx, flash12_cfg_t *cfg)
Flash 12 initialization function.
err_t flash12_get_device_id(flash12_t *ctx, uint8_t *mfr_id, uint8_t *dev_id)
Flash 12 device ID reading function.
err_t flash12_write_cmd_data(flash12_t *ctx, uint8_t cmd, uint8_t *data_in, uint8_t len)
Flash 12 command data writing function.
err_t flash12_read_status(flash12_t *ctx, uint8_t reg_num, uint8_t *status)
Flash 12 status reading function.
err_t flash12_erase_memory(flash12_t *ctx, uint8_t erase_cmd, uint32_t mem_addr)
Flash 12 erase memory function.
void flash12_hw_write_enable(flash12_t *ctx)
Flash 12 hardware write enable function.
void flash12_cfg_setup(flash12_cfg_t *cfg)
Flash 12 configuration object setup function.
err_t flash12_soft_reset(flash12_t *ctx)
Flash 12 soft reset function.
err_t flash12_read_cmd_data(flash12_t *ctx, uint8_t cmd, uint8_t *data_out, uint8_t len)
Flash 12 command data reading function.
err_t flash12_memory_write(flash12_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint32_t len)
Flash 12 memory data writing function.
err_t flash12_write_status(flash12_t *ctx, uint8_t status)
Flash 12 status writing function.
This file contains SPI specific macros, functions, etc.
Flash 12 Click configuration object.
Definition flash12.h:230
pin_name_t hld
Definition flash12.h:239
spi_master_chip_select_polarity_t cs_polarity
Definition flash12.h:244
pin_name_t sck
Definition flash12.h:234
spi_master_mode_t spi_mode
Definition flash12.h:243
pin_name_t mosi
Definition flash12.h:233
uint32_t spi_speed
Definition flash12.h:242
pin_name_t wp
Definition flash12.h:238
pin_name_t miso
Definition flash12.h:232
pin_name_t cs
Definition flash12.h:235
Flash 12 Click context object.
Definition flash12.h:213
digital_out_t hld
Definition flash12.h:216
spi_master_t spi
Definition flash12.h:219
pin_name_t chip_select
Definition flash12.h:221
digital_out_t wp
Definition flash12.h:215