mram4 2.1.0.0
mram4.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 MRAM4_H
29#define MRAM4_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 MRAM4_CMD_RESET_ENABLE 0x66
75#define MRAM4_CMD_RESET_MEMORY 0x99
76#define MRAM4_CMD_READ_ID 0x9E
77#define MRAM4_CMD_READ_ID_MIO 0xAF
78#define MRAM4_CMD_READ 0x03
79#define MRAM4_CMD_READ_FAST_XIP 0x0B
80#define MRAM4_CMD_READ_FAST_DUAL_OUTPUT 0x3B
81#define MRAM4_CMD_READ_FAST_DUAL_IO 0xBB
82#define MRAM4_CMD_READ_FAST_QUAD_OUTPUT 0x6B
83#define MRAM4_CMD_READ_FAST_QUAD_IO 0xEB
84#define MRAM4_CMD_READ_FAST_DTR 0x0D
85#define MRAM4_CMD_READ_FAST_DUAL_OUTPUT_DTR 0x3D
86#define MRAM4_CMD_READ_FAST_DUAL_IO_DTR 0xBD
87#define MRAM4_CMD_READ_FAST_QUAD_OUTPUT_DTR 0x6D
88#define MRAM4_CMD_READ_FAST_QUAD_IO_DTR 0xED
89#define MRAM4_CMD_READ_WORD_QUAD_IO 0xE7
90#define MRAM4_CMD_READ_FAST_OCTAL_OUTPUT 0x8B
91#define MRAM4_CMD_READ_FAST_OCTAL_IO 0xCB
92#define MRAM4_CMD_READ_FAST_OCTAL_OUTPUT_DTR 0x9D
93#define MRAM4_CMD_READ_FAST_OCTAL_IO_DTR 0xFD
94#define MRAM4_CMD_READ_4BYTE_ADDR 0x13
95#define MRAM4_CMD_READ_FAST_4BYTE_ADDR 0x0C
96#define MRAM4_CMD_READ_FAST_DUAL_OUTPUT_4BYTE_ADDR 0x3C
97#define MRAM4_CMD_READ_FAST_DUAL_IO_4BYTE_ADDR 0xBC
98#define MRAM4_CMD_READ_FAST_QUAD_OUTPUT_4BYTE_ADDR 0x6C
99#define MRAM4_CMD_READ_FAST_QUAD_IO_4BYTE_ADDR 0xEC
100#define MRAM4_CMD_READ_FAST_DTR_4BYTE_ADDR 0x0E
101#define MRAM4_CMD_READ_FAST_DUAL_IO_DTR_4BYTE_ADDR 0xBE
102#define MRAM4_CMD_READ_FAST_QUAD_IO_DTR_4BYTE_ADDR 0xEE
103#define MRAM4_CMD_READ_FAST_OCTAL_OUTPUT_4BYTE_ADDR 0x7C
104#define MRAM4_CMD_READ_FAST_OCTAL_IO_4BYTE_ADDR 0xCC
105#define MRAM4_CMD_WRITE_ENABLE 0x06
106#define MRAM4_CMD_WRITE_DISABLE 0x04
107#define MRAM4_CMD_READ_STATUS_REG 0x05
108#define MRAM4_CMD_READ_FLAG_STATUS_REG 0x70
109#define MRAM4_CMD_READ_NVOL_CFG_REG 0xB5
110#define MRAM4_CMD_READ_VOL_CFG_REG 0x85
111#define MRAM4_CMD_READ_GENERAL_PURPOSE_READ_REG 0x96
112#define MRAM4_CMD_WRITE_STATUS_REG 0x01
113#define MRAM4_CMD_WRITE_NVOL_CFG_REG 0xB1
114#define MRAM4_CMD_WRITE_VOL_CFG_REG 0x81
115#define MRAM4_CMD_CLEAR_FLAG_STATUS_REG 0x50
116#define MRAM4_CMD_WRITE_PR_PAGE 0x02
117#define MRAM4_CMD_WRITE_PR_FAST_DUAL_INPUT 0xA2
118#define MRAM4_CMD_WRITE_PR_FAST_DUAL_INPUT_EXT 0xD2
119#define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT 0x32
120#define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT_EXT 0x38
121#define MRAM4_CMD_WRITE_PR_FAST_OCTAL_INPUT 0x82
122#define MRAM4_CMD_WRITE_PR_FAST_OCTAL_INPUT_EXT 0xC2
123#define MRAM4_CMD_WRITE_PR_4BYTE_ADDRESS 0x12
124#define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT_4BYTE 0x34
125#define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT_EXT_4BYTE 0x3E
126#define MRAM4_CMD_WRITE_PR_FAST_OCTAL_INPUT_4BYTE 0x84
127#define MRAM4_CMD_WRITE_FAST_OCTAL_INPUT_EXT_4BYTE 0x8E
128#define MRAM4_CMD_ERASE_32KB 0x52
129#define MRAM4_CMD_ERASE_4KB 0x20
130#define MRAM4_CMD_ERASE_SECTOR 0xD8
131#define MRAM4_CMD_ERASE_BULK_CHIP 0xC7
132#define MRAM4_CMD_ERASE_CHIP 0x60
133#define MRAM4_CMD_ERASE_SECTOR_4BYTE_ADDRESS 0xDC
134#define MRAM4_CMD_ERASE_4KB_4_BYTE_ADDRESS 0x21
135#define MRAM4_CMD_ERASE_32KB_4BYTE_ADDRESS 0x5C
136#define MRAM4_CMD_OTP_READ 0x4B
137#define MRAM4_CMD_OTP_WRITE 0x42
138#define MRAM4_CMD_4BYTE_ADDRESS_MODE_ENTER 0xB7
139#define MRAM4_CMD_4BYTE_ADDRESS_MODE_EXIT 0xE9
140#define MRAM4_CMD_DEEP_POWER_DOWN_ENTER 0xB9
141#define MRAM4_CMD_DEEP_POWER_DOWN_EXIT 0xAB
142#define MRAM4_CMD_INTERFACE_ACTIVATION_CRC 0x9B
143#define MRAM4_CMD_TDP_WRITE 0xF0
144#define MRAM4_CMD_TDP_READ 0xF1
145#define MRAM4_CMD_TDP_READ_DTR 0xF2
146
147 // mram4_cmd
148
163#define MRAM4_MEMORY_ADDRESS_MIN 0x000000ul
164#define MRAM4_MEMORY_ADDRESS_MAX 0x3FFFFFul
165#define MRAM4_PAGE_SIZE 256
166
171#define MRAM4_WRITE_PROTECT_ENABLE 0
172#define MRAM4_WRITE_PROTECT_DISABLE 1
173#define MRAM4_HOLD_ENABLE 0
174#define MRAM4_HOLD_DISABLE 1
175
180#define MRAM4_STATUS_WP_BIT_MASK 0x80
181#define MRAM4_STATUS_BP3_BIT_MASK 0x40
182#define MRAM4_STATUS_TOP_BOTTOM_BIT_MASK 0x20
183#define MRAM4_STATUS_BP2_BIT_MASK 0x10
184#define MRAM4_STATUS_BP1_BIT_MASK 0x08
185#define MRAM4_STATUS_BP0_BIT_MASK 0x04
186#define MRAM4_STATUS_WEL_BIT_MASK 0x02
187#define MRAM4_STATUS_WIP_BIT_MASK 0x01
188#define MRAM4_STATUS_WEL_SET 0x02
189#define MRAM4_STATUS_WEL_CLR 0x00
190
199#define MRAM4_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
200#define MRAM4_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
201
202 // mram4_set
203
218#define MRAM4_MAP_MIKROBUS( cfg, mikrobus ) \
219 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
220 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
221 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
222 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
223 cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
224 cfg.hld = MIKROBUS( mikrobus, MIKROBUS_INT )
225
226 // mram4_map
227 // mram4
228
233typedef struct
234{
235 // Output pins
236 digital_out_t wp;
237 digital_out_t hld;
239 // Modules
240 spi_master_t spi;
242 pin_name_t chip_select;
244} mram4_t;
245
250typedef struct
251{
252 // Communication gpio pins
253 pin_name_t miso;
254 pin_name_t mosi;
255 pin_name_t sck;
256 pin_name_t cs;
258 // Additional gpio pins
259 pin_name_t wp;
260 pin_name_t hld;
262 // static variable
263 uint32_t spi_speed;
264 spi_master_mode_t spi_mode;
265 spi_master_chip_select_polarity_t cs_polarity;
268
273typedef enum
274{
276 MRAM4_ERROR = -1
277
279
296
310err_t mram4_init ( mram4_t *ctx, mram4_cfg_t *cfg );
311
325
340err_t mram4_generic_write ( mram4_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
341
356err_t mram4_generic_read ( mram4_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
357
375err_t mram4_write_cmd_addr_data ( mram4_t *ctx, uint8_t cmd, uint32_t addr, uint8_t *data_in, uint32_t len );
376
394err_t mram4_read_cmd_addr_data ( mram4_t *ctx, uint8_t cmd, uint32_t addr, uint8_t *data_out, uint32_t len );
395
412err_t mram4_memory_write ( mram4_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t len );
413
430err_t mram4_memory_read ( mram4_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t len );
431
445
459err_t mram4_set_command ( mram4_t *ctx, uint8_t cmd );
460
475
490
506err_t mram4_block_erase ( mram4_t *ctx, uint8_t cmd_block_erase, uint32_t mem_addr );
507
521
536err_t mram4_set_status ( mram4_t *ctx, uint8_t st_reg, uint8_t status );
537
551err_t mram4_get_status ( mram4_t *ctx, uint8_t *status );
552
564void mram4_hw_write_protect ( mram4_t *ctx, uint8_t en_wp );
565
577void mram4_set_hold ( mram4_t *ctx, uint8_t en_hld );
578
579#ifdef __cplusplus
580}
581#endif
582#endif // MRAM4_H
583
584 // mram4
585
586// ------------------------------------------------------------------------ END
err_t mram4_memory_read(mram4_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t len)
MRAM 4 memory read function.
err_t mram4_write_cmd_addr_data(mram4_t *ctx, uint8_t cmd, uint32_t addr, uint8_t *data_in, uint32_t len)
MRAM 4 write command adress data function.
void mram4_cfg_setup(mram4_cfg_t *cfg)
MRAM 4 configuration object setup function.
err_t mram4_chip_erase(mram4_t *ctx)
MRAM 4 chip erase function.
err_t mram4_write_disable(mram4_t *ctx)
MRAM 4 write disable function.
err_t mram4_set_command(mram4_t *ctx, uint8_t cmd)
MRAM 4 set the command function.
err_t mram4_generic_read(mram4_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
MRAM 4 data reading function.
err_t mram4_get_status(mram4_t *ctx, uint8_t *status)
MRAM 4 get the status function.
err_t mram4_block_erase(mram4_t *ctx, uint8_t cmd_block_erase, uint32_t mem_addr)
MRAM 4 block erase function.
err_t mram4_set_status(mram4_t *ctx, uint8_t st_reg, uint8_t status)
MRAM 4 set status function.
err_t mram4_memory_write(mram4_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t len)
MRAM 4 memory write function.
err_t mram4_read_cmd_addr_data(mram4_t *ctx, uint8_t cmd, uint32_t addr, uint8_t *data_out, uint32_t len)
MRAM 4 read command adress data function.
err_t mram4_write_enable(mram4_t *ctx)
MRAM 4 write enable function.
err_t mram4_memory_reset(mram4_t *ctx)
MRAM 4 memory reset function.
err_t mram4_default_cfg(mram4_t *ctx)
MRAM 4 default configuration function.
err_t mram4_generic_write(mram4_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
MRAM 4 data writing function.
err_t mram4_init(mram4_t *ctx, mram4_cfg_t *cfg)
MRAM 4 initialization function.
void mram4_set_hold(mram4_t *ctx, uint8_t en_hld)
MRAM 4 set hold function.
void mram4_hw_write_protect(mram4_t *ctx, uint8_t en_wp)
MRAM 4 hardware write protect function.
mram4_return_value_t
MRAM 4 Click return value data.
Definition mram4.h:274
@ MRAM4_ERROR
Definition mram4.h:276
@ MRAM4_OK
Definition mram4.h:275
This file contains SPI specific macros, functions, etc.
MRAM 4 Click configuration object.
Definition mram4.h:251
pin_name_t hld
Definition mram4.h:260
spi_master_chip_select_polarity_t cs_polarity
Definition mram4.h:265
pin_name_t sck
Definition mram4.h:255
spi_master_mode_t spi_mode
Definition mram4.h:264
pin_name_t mosi
Definition mram4.h:254
uint32_t spi_speed
Definition mram4.h:263
pin_name_t wp
Definition mram4.h:259
pin_name_t miso
Definition mram4.h:253
pin_name_t cs
Definition mram4.h:256
MRAM 4 Click context object.
Definition mram4.h:234
digital_out_t hld
Definition mram4.h:237
spi_master_t spi
Definition mram4.h:240
pin_name_t chip_select
Definition mram4.h:242
digital_out_t wp
Definition mram4.h:236