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
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_spi_master.h"
48 #include "spi_specifics.h"
49 
70 #define MRAM4_CMD_RESET_ENABLE 0x66
71 #define MRAM4_CMD_RESET_MEMORY 0x99
72 #define MRAM4_CMD_READ_ID 0x9E
73 #define MRAM4_CMD_READ_ID_MIO 0xAF
74 #define MRAM4_CMD_READ 0x03
75 #define MRAM4_CMD_READ_FAST_XIP 0x0B
76 #define MRAM4_CMD_READ_FAST_DUAL_OUTPUT 0x3B
77 #define MRAM4_CMD_READ_FAST_DUAL_IO 0xBB
78 #define MRAM4_CMD_READ_FAST_QUAD_OUTPUT 0x6B
79 #define MRAM4_CMD_READ_FAST_QUAD_IO 0xEB
80 #define MRAM4_CMD_READ_FAST_DTR 0x0D
81 #define MRAM4_CMD_READ_FAST_DUAL_OUTPUT_DTR 0x3D
82 #define MRAM4_CMD_READ_FAST_DUAL_IO_DTR 0xBD
83 #define MRAM4_CMD_READ_FAST_QUAD_OUTPUT_DTR 0x6D
84 #define MRAM4_CMD_READ_FAST_QUAD_IO_DTR 0xED
85 #define MRAM4_CMD_READ_WORD_QUAD_IO 0xE7
86 #define MRAM4_CMD_READ_FAST_OCTAL_OUTPUT 0x8B
87 #define MRAM4_CMD_READ_FAST_OCTAL_IO 0xCB
88 #define MRAM4_CMD_READ_FAST_OCTAL_OUTPUT_DTR 0x9D
89 #define MRAM4_CMD_READ_FAST_OCTAL_IO_DTR 0xFD
90 #define MRAM4_CMD_READ_4BYTE_ADDR 0x13
91 #define MRAM4_CMD_READ_FAST_4BYTE_ADDR 0x0C
92 #define MRAM4_CMD_READ_FAST_DUAL_OUTPUT_4BYTE_ADDR 0x3C
93 #define MRAM4_CMD_READ_FAST_DUAL_IO_4BYTE_ADDR 0xBC
94 #define MRAM4_CMD_READ_FAST_QUAD_OUTPUT_4BYTE_ADDR 0x6C
95 #define MRAM4_CMD_READ_FAST_QUAD_IO_4BYTE_ADDR 0xEC
96 #define MRAM4_CMD_READ_FAST_DTR_4BYTE_ADDR 0x0E
97 #define MRAM4_CMD_READ_FAST_DUAL_IO_DTR_4BYTE_ADDR 0xBE
98 #define MRAM4_CMD_READ_FAST_QUAD_IO_DTR_4BYTE_ADDR 0xEE
99 #define MRAM4_CMD_READ_FAST_OCTAL_OUTPUT_4BYTE_ADDR 0x7C
100 #define MRAM4_CMD_READ_FAST_OCTAL_IO_4BYTE_ADDR 0xCC
101 #define MRAM4_CMD_WRITE_ENABLE 0x06
102 #define MRAM4_CMD_WRITE_DISABLE 0x04
103 #define MRAM4_CMD_READ_STATUS_REG 0x05
104 #define MRAM4_CMD_READ_FLAG_STATUS_REG 0x70
105 #define MRAM4_CMD_READ_NVOL_CFG_REG 0xB5
106 #define MRAM4_CMD_READ_VOL_CFG_REG 0x85
107 #define MRAM4_CMD_READ_GENERAL_PURPOSE_READ_REG 0x96
108 #define MRAM4_CMD_WRITE_STATUS_REG 0x01
109 #define MRAM4_CMD_WRITE_NVOL_CFG_REG 0xB1
110 #define MRAM4_CMD_WRITE_VOL_CFG_REG 0x81
111 #define MRAM4_CMD_CLEAR_FLAG_STATUS_REG 0x50
112 #define MRAM4_CMD_WRITE_PR_PAGE 0x02
113 #define MRAM4_CMD_WRITE_PR_FAST_DUAL_INPUT 0xA2
114 #define MRAM4_CMD_WRITE_PR_FAST_DUAL_INPUT_EXT 0xD2
115 #define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT 0x32
116 #define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT_EXT 0x38
117 #define MRAM4_CMD_WRITE_PR_FAST_OCTAL_INPUT 0x82
118 #define MRAM4_CMD_WRITE_PR_FAST_OCTAL_INPUT_EXT 0xC2
119 #define MRAM4_CMD_WRITE_PR_4BYTE_ADDRESS 0x12
120 #define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT_4BYTE 0x34
121 #define MRAM4_CMD_WRITE_PR_FAST_QUAD_INPUT_EXT_4BYTE 0x3E
122 #define MRAM4_CMD_WRITE_PR_FAST_OCTAL_INPUT_4BYTE 0x84
123 #define MRAM4_CMD_WRITE_FAST_OCTAL_INPUT_EXT_4BYTE 0x8E
124 #define MRAM4_CMD_ERASE_32KB 0x52
125 #define MRAM4_CMD_ERASE_4KB 0x20
126 #define MRAM4_CMD_ERASE_SECTOR 0xD8
127 #define MRAM4_CMD_ERASE_BULK_CHIP 0xC7
128 #define MRAM4_CMD_ERASE_CHIP 0x60
129 #define MRAM4_CMD_ERASE_SECTOR_4BYTE_ADDRESS 0xDC
130 #define MRAM4_CMD_ERASE_4KB_4_BYTE_ADDRESS 0x21
131 #define MRAM4_CMD_ERASE_32KB_4BYTE_ADDRESS 0x5C
132 #define MRAM4_CMD_OTP_READ 0x4B
133 #define MRAM4_CMD_OTP_WRITE 0x42
134 #define MRAM4_CMD_4BYTE_ADDRESS_MODE_ENTER 0xB7
135 #define MRAM4_CMD_4BYTE_ADDRESS_MODE_EXIT 0xE9
136 #define MRAM4_CMD_DEEP_POWER_DOWN_ENTER 0xB9
137 #define MRAM4_CMD_DEEP_POWER_DOWN_EXIT 0xAB
138 #define MRAM4_CMD_INTERFACE_ACTIVATION_CRC 0x9B
139 #define MRAM4_CMD_TDP_WRITE 0xF0
140 #define MRAM4_CMD_TDP_READ 0xF1
141 #define MRAM4_CMD_TDP_READ_DTR 0xF2
142  // mram4_cmd
144 
159 #define MRAM4_MEMORY_ADDRESS_MIN 0x000000ul
160 #define MRAM4_MEMORY_ADDRESS_MAX 0x3FFFFFul
161 #define MRAM4_PAGE_SIZE 256
162 
167 #define MRAM4_WRITE_PROTECT_ENABLE 0
168 #define MRAM4_WRITE_PROTECT_DISABLE 1
169 #define MRAM4_HOLD_ENABLE 0
170 #define MRAM4_HOLD_DISABLE 1
171 
176 #define MRAM4_STATUS_WP_BIT_MASK 0x80
177 #define MRAM4_STATUS_BP3_BIT_MASK 0x40
178 #define MRAM4_STATUS_TOP_BOTTOM_BIT_MASK 0x20
179 #define MRAM4_STATUS_BP2_BIT_MASK 0x10
180 #define MRAM4_STATUS_BP1_BIT_MASK 0x08
181 #define MRAM4_STATUS_BP0_BIT_MASK 0x04
182 #define MRAM4_STATUS_WEL_BIT_MASK 0x02
183 #define MRAM4_STATUS_WIP_BIT_MASK 0x01
184 #define MRAM4_STATUS_WEL_SET 0x02
185 #define MRAM4_STATUS_WEL_CLR 0x00
186 
195 #define MRAM4_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
196 #define MRAM4_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
197  // mram4_set
199 
214 #define MRAM4_MAP_MIKROBUS( cfg, mikrobus ) \
215  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
216  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
217  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
218  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
219  cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
220  cfg.hld = MIKROBUS( mikrobus, MIKROBUS_INT )
221  // mram4_map // mram4
224 
229 typedef struct
230 {
231  // Output pins
232  digital_out_t wp;
233  digital_out_t hld;
235  // Modules
236  spi_master_t spi;
238  pin_name_t chip_select;
240 } mram4_t;
241 
246 typedef struct
247 {
248  // Communication gpio pins
249  pin_name_t miso;
250  pin_name_t mosi;
251  pin_name_t sck;
252  pin_name_t cs;
254  // Additional gpio pins
255  pin_name_t wp;
256  pin_name_t hld;
258  // static variable
259  uint32_t spi_speed;
260  spi_master_mode_t spi_mode;
261  spi_master_chip_select_polarity_t cs_polarity;
263 } mram4_cfg_t;
264 
269 typedef enum
270 {
271  MRAM4_OK = 0,
272  MRAM4_ERROR = -1
273 
275 
292 
306 err_t mram4_init ( mram4_t *ctx, mram4_cfg_t *cfg );
307 
320 err_t mram4_default_cfg ( mram4_t *ctx );
321 
336 err_t mram4_generic_write ( mram4_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
337 
352 err_t mram4_generic_read ( mram4_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
353 
371 err_t mram4_write_cmd_addr_data ( mram4_t *ctx, uint8_t cmd, uint32_t addr, uint8_t *data_in, uint32_t len );
372 
390 err_t mram4_read_cmd_addr_data ( mram4_t *ctx, uint8_t cmd, uint32_t addr, uint8_t *data_out, uint32_t len );
391 
408 err_t mram4_memory_write ( mram4_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t len );
409 
426 err_t mram4_memory_read ( mram4_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t len );
427 
441 
455 err_t mram4_set_command ( mram4_t *ctx, uint8_t cmd );
456 
471 
486 
502 err_t mram4_block_erase ( mram4_t *ctx, uint8_t cmd_block_erase, uint32_t mem_addr );
503 
516 err_t mram4_chip_erase ( mram4_t *ctx );
517 
532 err_t mram4_set_status ( mram4_t *ctx, uint8_t st_reg, uint8_t status );
533 
547 err_t mram4_get_status ( mram4_t *ctx, uint8_t *status );
548 
560 void mram4_hw_write_protect ( mram4_t *ctx, uint8_t en_wp );
561 
573 void mram4_set_hold ( mram4_t *ctx, uint8_t en_hld );
574 
575 #ifdef __cplusplus
576 }
577 #endif
578 #endif // MRAM4_H
579  // mram4
581 
582 // ------------------------------------------------------------------------ END
mram4_read_cmd_addr_data
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.
mram4_set_hold
void mram4_set_hold(mram4_t *ctx, uint8_t en_hld)
MRAM 4 set hold function.
MRAM4_OK
@ MRAM4_OK
Definition: mram4.h:271
mram4_t::hld
digital_out_t hld
Definition: mram4.h:233
spi_specifics.h
This file contains SPI specific macros, functions, etc.
mram4_t::spi
spi_master_t spi
Definition: mram4.h:236
mram4_cfg_t
MRAM 4 Click configuration object.
Definition: mram4.h:247
mram4_cfg_t::mosi
pin_name_t mosi
Definition: mram4.h:250
mram4_hw_write_protect
void mram4_hw_write_protect(mram4_t *ctx, uint8_t en_wp)
MRAM 4 hardware write protect function.
mram4_init
err_t mram4_init(mram4_t *ctx, mram4_cfg_t *cfg)
MRAM 4 initialization function.
mram4_block_erase
err_t mram4_block_erase(mram4_t *ctx, uint8_t cmd_block_erase, uint32_t mem_addr)
MRAM 4 block erase function.
mram4_memory_read
err_t mram4_memory_read(mram4_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t len)
MRAM 4 memory read function.
mram4_set_command
err_t mram4_set_command(mram4_t *ctx, uint8_t cmd)
MRAM 4 set the command function.
mram4_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: mram4.h:260
mram4_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: mram4.h:261
mram4_generic_read
err_t mram4_generic_read(mram4_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
MRAM 4 data reading function.
mram4_memory_write
err_t mram4_memory_write(mram4_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t len)
MRAM 4 memory write function.
mram4_get_status
err_t mram4_get_status(mram4_t *ctx, uint8_t *status)
MRAM 4 get the status function.
mram4_cfg_t::hld
pin_name_t hld
Definition: mram4.h:256
mram4_set_status
err_t mram4_set_status(mram4_t *ctx, uint8_t st_reg, uint8_t status)
MRAM 4 set status function.
mram4_t
MRAM 4 Click context object.
Definition: mram4.h:230
mram4_cfg_t::cs
pin_name_t cs
Definition: mram4.h:252
mram4_generic_write
err_t mram4_generic_write(mram4_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
MRAM 4 data writing function.
mram4_cfg_t::wp
pin_name_t wp
Definition: mram4.h:255
mram4_write_cmd_addr_data
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.
mram4_cfg_setup
void mram4_cfg_setup(mram4_cfg_t *cfg)
MRAM 4 configuration object setup function.
mram4_write_disable
err_t mram4_write_disable(mram4_t *ctx)
MRAM 4 write disable function.
mram4_t::chip_select
pin_name_t chip_select
Definition: mram4.h:238
mram4_t::wp
digital_out_t wp
Definition: mram4.h:232
mram4_write_enable
err_t mram4_write_enable(mram4_t *ctx)
MRAM 4 write enable function.
mram4_default_cfg
err_t mram4_default_cfg(mram4_t *ctx)
MRAM 4 default configuration function.
mram4_memory_reset
err_t mram4_memory_reset(mram4_t *ctx)
MRAM 4 memory reset function.
mram4_cfg_t::sck
pin_name_t sck
Definition: mram4.h:251
MRAM4_ERROR
@ MRAM4_ERROR
Definition: mram4.h:272
mram4_cfg_t::miso
pin_name_t miso
Definition: mram4.h:249
mram4_cfg_t::spi_speed
uint32_t spi_speed
Definition: mram4.h:259
mram4_return_value_t
mram4_return_value_t
MRAM 4 Click return value data.
Definition: mram4.h:270
mram4_chip_erase
err_t mram4_chip_erase(mram4_t *ctx)
MRAM 4 chip erase function.