reram  2.0.0.0
reram.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef _RERAM_H_
36 #define _RERAM_H_
37 
42 #ifdef PREINIT_SUPPORTED
43 #include "preinit.h"
44 #endif
45 
46 #ifdef MikroCCoreVersion
47  #if MikroCCoreVersion >= 1
48  #include "delays.h"
49  #endif
50 #endif
51 
52 #include "drv_digital_out.h"
53 #include "drv_spi_master.h"
54 
55 
56 // -------------------------------------------------------------- PUBLIC MACROS
62 #define RERAM_ID_DATA 0x047FC903
63 
68 #define RERAM_CMD_WREN 0x6
69 #define RERAM_CMD_WRDI 0x4
70 #define RERAM_CMD_SLEEP 0xB9
71 
82 #define RERAM_BLOCK_PROT_NONE 0x0
83 #define RERAM_BLOCK_PROT_UPPER_1_4 0x4
84 #define RERAM_BLOCK_PROT_UPPER_1_2 0x8
85 #define RERAM_BLOCK_PROT_ALL 0xC
86 #define RERAM_BLOCK_PROT_MASK 0xC
87 
93 #define RERAM_WP_STAT_EN 0x80
94 #define RERAM_WP_STAT_DIS 0x0
95 #define RERAM_WP_STAT_MASK 0x80
96  // End write_protect_set group
99 
104 #define RERAM_FLAG_MASK_WEL 0x2
105 #define RERAM_FLAG_MASK_WIP 0x1
106 
112 #define RERAM_MEM_ADDR_START 0x0
113 #define RERAM_MEM_ADDR_END 0x7FFFF
114 #define RERAM_TRANSFER_BYTES_MIN 1
115 #define RERAM_TRANSFER_BYTES_MAX 256
116 
122 #define RERAM_MAP_MIKROBUS( cfg, mikrobus ) \
123  cfg.ho = MIKROBUS( mikrobus, MIKROBUS_RST ); \
124  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
125  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
126  cfg.sdo = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
127  cfg.sdi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
128  cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM )
129  // End macros group
132 // --------------------------------------------------------------- PUBLIC TYPES
138 //typedef spi_master_data_t uint8_t;
139 
143 typedef enum
144 {
145  RERAM_OK = 0,
150 
152 
156 typedef enum
157 {
160 
162 
166 typedef struct
167 {
168  digital_out_t cs;
169 
170  // Control pins.
171  digital_out_t wp;
172  digital_out_t ho;
173 
174  // Module.
175  spi_master_t spi;
176  pin_name_t chip_select;
177 
178 } reram_t;
179 
183 typedef struct
184 {
185  // Used mikrobus pins.
186  pin_name_t ho;
187  pin_name_t cs;
188  pin_name_t sck;
189  pin_name_t sdo;
190  pin_name_t sdi;
191  pin_name_t wp;
192 
193  uint32_t spi_speed;
194  spi_master_mode_t spi_mode;
195  spi_master_chip_select_polarity_t cs_polarity;
196 
197 } reram_cfg_t;
198  // End types group
200 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
206 #ifdef __cplusplus
207 extern "C"{
208 #endif
209 
217 void
219 
233 
241 void
243 
256 reram_send_cmd( reram_t *ctx, uint8_t cmd_code );
257 
267 uint8_t
269 
278 void
279 reram_write_status( reram_t *ctx, uint8_t data_in );
280 
295 reram_read_memory( reram_t *ctx, uint32_t mem_addr,
296  uint8_t *data_out, uint16_t n_bytes );
297 
312 reram_write_memory( reram_t *ctx, uint32_t mem_addr,
313  uint8_t *data_in, uint16_t n_bytes );
314 
324 uint32_t
326 
335 void
337 
346 void
348 
356 void
358 
359 #ifdef __cplusplus
360 }
361 #endif
362 #endif // _RERAM_H_
363  // End public_function group
366 
367 // ------------------------------------------------------------------------ END
reram_cfg_t::sdi
pin_name_t sdi
Definition: reram.h:190
RERAM_ERR_DRV_INIT
@ RERAM_ERR_DRV_INIT
Definition: reram.h:146
reram_read_memory
reram_err_t reram_read_memory(reram_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint16_t n_bytes)
Memory Read function.
reram_read_status
uint8_t reram_read_status(reram_t *ctx)
Status Read function.
reram_t::cs
digital_out_t cs
Definition: reram.h:168
RERAM_PIN_STATE_HIGH
@ RERAM_PIN_STATE_HIGH
Definition: reram.h:159
reram_write_memory
reram_err_t reram_write_memory(reram_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint16_t n_bytes)
Memory Write function.
reram_cfg_t::spi_speed
uint32_t spi_speed
Definition: reram.h:193
RERAM_ERR_MEM_ADDR
@ RERAM_ERR_MEM_ADDR
Definition: reram.h:148
reram_cfg_t::sck
pin_name_t sck
Definition: reram.h:188
reram_t
Click context object definition.
Definition: reram.h:167
reram_read_id
uint32_t reram_read_id(reram_t *ctx)
ID Read function.
reram_t::ho
digital_out_t ho
Definition: reram.h:172
reram_t::spi
spi_master_t spi
Definition: reram.h:175
reram_send_cmd
reram_err_t reram_send_cmd(reram_t *ctx, uint8_t cmd_code)
Command Send function.
reram_err_t
reram_err_t
Click error code.
Definition: reram.h:144
reram_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: reram.h:194
reram_cfg_setup
void reram_cfg_setup(reram_cfg_t *cfg)
Configuration Object Setup function.
RERAM_OK
@ RERAM_OK
Definition: reram.h:145
reram_set_write_protect_pin
void reram_set_write_protect_pin(reram_t *ctx, reram_pin_state_t state)
Write Protect Pin Set function.
RERAM_ERR_NBYTES
@ RERAM_ERR_NBYTES
Definition: reram.h:149
RERAM_ERR_CMD
@ RERAM_ERR_CMD
Definition: reram.h:147
reram_cfg_t::sdo
pin_name_t sdo
Definition: reram.h:189
reram_cfg_t::cs
pin_name_t cs
Definition: reram.h:187
reram_write_status
void reram_write_status(reram_t *ctx, uint8_t data_in)
Status Write function.
reram_wake_up
void reram_wake_up(reram_t *ctx)
Wake Up function.
reram_cfg_t
Click configuration structure definition.
Definition: reram.h:184
RERAM_PIN_STATE_LOW
@ RERAM_PIN_STATE_LOW
Definition: reram.h:158
reram_t::wp
digital_out_t wp
Definition: reram.h:171
reram_set_hold_pin
void reram_set_hold_pin(reram_t *ctx, reram_pin_state_t state)
Hold Pin Set function.
reram_init
reram_err_t reram_init(reram_t *ctx, reram_cfg_t *cfg)
Click Initialization function.
reram_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: reram.h:195
reram_t::chip_select
pin_name_t chip_select
Definition: reram.h:176
reram_cfg_t::wp
pin_name_t wp
Definition: reram.h:191
reram_pin_state_t
reram_pin_state_t
Click pin state.
Definition: reram.h:157
reram_default_cfg
void reram_default_cfg(reram_t *ctx)
Click Default Configuration function.
reram_cfg_t::ho
pin_name_t ho
Definition: reram.h:186