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 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_spi_master.h"
50 
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
58 #define RERAM_ID_DATA 0x047FC903
59 
64 #define RERAM_CMD_WREN 0x6
65 #define RERAM_CMD_WRDI 0x4
66 #define RERAM_CMD_SLEEP 0xB9
67 
78 #define RERAM_BLOCK_PROT_NONE 0x0
79 #define RERAM_BLOCK_PROT_UPPER_1_4 0x4
80 #define RERAM_BLOCK_PROT_UPPER_1_2 0x8
81 #define RERAM_BLOCK_PROT_ALL 0xC
82 #define RERAM_BLOCK_PROT_MASK 0xC
83 
89 #define RERAM_WP_STAT_EN 0x80
90 #define RERAM_WP_STAT_DIS 0x0
91 #define RERAM_WP_STAT_MASK 0x80
92  // End write_protect_set group
95 
100 #define RERAM_FLAG_MASK_WEL 0x2
101 #define RERAM_FLAG_MASK_WIP 0x1
102 
108 #define RERAM_MEM_ADDR_START 0x0
109 #define RERAM_MEM_ADDR_END 0x7FFFF
110 #define RERAM_TRANSFER_BYTES_MIN 1
111 #define RERAM_TRANSFER_BYTES_MAX 256
112 
118 #define RERAM_MAP_MIKROBUS( cfg, mikrobus ) \
119  cfg.ho = MIKROBUS( mikrobus, MIKROBUS_RST ); \
120  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
121  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
122  cfg.sdo = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
123  cfg.sdi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
124  cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM )
125  // End macros group
128 // --------------------------------------------------------------- PUBLIC TYPES
134 //typedef spi_master_data_t uint8_t;
135 
139 typedef enum
140 {
141  RERAM_OK = 0,
146 
148 
152 typedef enum
153 {
156 
158 
162 typedef struct
163 {
164  digital_out_t cs;
165 
166  // Control pins.
167  digital_out_t wp;
168  digital_out_t ho;
169 
170  // Module.
171  spi_master_t spi;
172  pin_name_t chip_select;
173 
174 } reram_t;
175 
179 typedef struct
180 {
181  // Used mikrobus pins.
182  pin_name_t ho;
183  pin_name_t cs;
184  pin_name_t sck;
185  pin_name_t sdo;
186  pin_name_t sdi;
187  pin_name_t wp;
188 
189  uint32_t spi_speed;
190  spi_master_mode_t spi_mode;
191  spi_master_chip_select_polarity_t cs_polarity;
192 
193 } reram_cfg_t;
194  // End types group
196 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
202 #ifdef __cplusplus
203 extern "C"{
204 #endif
205 
213 void
215 
229 
237 void
239 
252 reram_send_cmd( reram_t *ctx, uint8_t cmd_code );
253 
263 uint8_t
265 
274 void
275 reram_write_status( reram_t *ctx, uint8_t data_in );
276 
291 reram_read_memory( reram_t *ctx, uint32_t mem_addr,
292  uint8_t *data_out, uint16_t n_bytes );
293 
308 reram_write_memory( reram_t *ctx, uint32_t mem_addr,
309  uint8_t *data_in, uint16_t n_bytes );
310 
320 uint32_t
322 
331 void
333 
342 void
344 
352 void
354 
355 #ifdef __cplusplus
356 }
357 #endif
358 #endif // _RERAM_H_
359  // End public_function group
362 
363 // ------------------------------------------------------------------------ END
reram_cfg_t::sdi
pin_name_t sdi
Definition: reram.h:186
RERAM_ERR_DRV_INIT
@ RERAM_ERR_DRV_INIT
Definition: reram.h:142
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:164
RERAM_PIN_STATE_HIGH
@ RERAM_PIN_STATE_HIGH
Definition: reram.h:155
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:189
RERAM_ERR_MEM_ADDR
@ RERAM_ERR_MEM_ADDR
Definition: reram.h:144
reram_cfg_t::sck
pin_name_t sck
Definition: reram.h:184
reram_t
Click context object definition.
Definition: reram.h:163
reram_read_id
uint32_t reram_read_id(reram_t *ctx)
ID Read function.
reram_t::ho
digital_out_t ho
Definition: reram.h:168
reram_t::spi
spi_master_t spi
Definition: reram.h:171
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:140
reram_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: reram.h:190
reram_cfg_setup
void reram_cfg_setup(reram_cfg_t *cfg)
Configuration Object Setup function.
RERAM_OK
@ RERAM_OK
Definition: reram.h:141
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:145
RERAM_ERR_CMD
@ RERAM_ERR_CMD
Definition: reram.h:143
reram_cfg_t::sdo
pin_name_t sdo
Definition: reram.h:185
reram_cfg_t::cs
pin_name_t cs
Definition: reram.h:183
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:180
RERAM_PIN_STATE_LOW
@ RERAM_PIN_STATE_LOW
Definition: reram.h:154
reram_t::wp
digital_out_t wp
Definition: reram.h:167
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:191
reram_t::chip_select
pin_name_t chip_select
Definition: reram.h:172
reram_cfg_t::wp
pin_name_t wp
Definition: reram.h:187
reram_pin_state_t
reram_pin_state_t
Click pin state.
Definition: reram.h:153
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:182