nvsram3 2.0.0.0
nvsram3.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 NVSRAM3_H
29#define NVSRAM3_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_i2c_master.h"
52
74#define NVSRAM3_CONTROL_REG_MEM_CTRL 0x00
75#define NVSRAM3_CONTROL_REG_SERIAL_NUMBER 0x01
76#define NVSRAM3_CONTROL_REG_DEVICE_ID 0x09
77#define NVSRAM3_CONTROL_REG_CMD 0xAA
78
84#define NVSRAM3_RTC_REG_FLAGS 0x00
85#define NVSRAM3_RTC_REG_TIME_KEEPING_CENTURIES 0x01
86#define NVSRAM3_RTC_REG_ALARM_SECONDS 0x02
87#define NVSRAM3_RTC_REG_ALARM_MINUTES 0x03
88#define NVSRAM3_RTC_REG_ALARM_HOURS 0x04
89#define NVSRAM3_RTC_REG_ALARM_DAY 0x05
90#define NVSRAM3_RTC_REG_INTERRUPT_STATUS_CONTROL 0x06
91#define NVSRAM3_RTC_REG_WATCHDOG_TIMER 0x07
92#define NVSRAM3_RTC_REG_CALIBRATION_CONTROL 0x08
93#define NVSRAM3_RTC_REG_TIME_KEEPING_SECONDS 0x09
94#define NVSRAM3_RTC_REG_TIME_KEEPING_MINUTES 0x0A
95#define NVSRAM3_RTC_REG_TIME_KEEPING_HOURS 0x0B
96#define NVSRAM3_RTC_REG_TIME_KEEPING_DAY 0x0C
97#define NVSRAM3_RTC_REG_TIME_KEEPING_DATE 0x0D
98#define NVSRAM3_RTC_REG_TIME_KEEPING_MONTHS 0x0E
99#define NVSRAM3_RTC_REG_TIME_KEEPING_YEARS 0x0F
100
101 // nvsram3_reg
102
117#define NVSRAM3_SERIAL_NUMBER_LOCK 0x40
118#define NVSRAM3_SERIAL_NUMBER_UNLOCK 0x00
119#define NVSRAM3_BLOCK_PROTECT_QUARTER 0x04
120#define NVSRAM3_BLOCK_PROTECT_HALF 0x08
121#define NVSRAM3_BLOCK_PROTECT_FULL 0x0C
122
123#define NVSRAM3_STORE_COMMAND 0x3C
124#define NVSRAM3_RECALL_COMMAND 0x60
125#define NVSRAM3_ASENB_COMMAND 0x59
126#define NVSRAM3_ASDISB_COMMAND 0x19
127#define NVSRAM3_SLEEP_COMMAND 0xB9
128
133#define NVSRAM3_RTC_WRITE_ENABLE 0x02
134#define NVSRAM3_RTC_WRITE_DISABLE 0x00
135#define NVSRAM3_RTC_READ_ENABLE 0x01
136#define NVSRAM3_RTC_READ_DISABLE 0x00
137
143#define NVSRAM3_MEMORY_DEV_ADDR_0 0x50
144#define NVSRAM3_MEMORY_DEV_ADDR_1 0x52
145#define NVSRAM3_MEMORY_DEV_ADDR_2 0x54
146#define NVSRAM3_MEMORY_DEV_ADDR_3 0x56
147
148#define NVSRAM3_RTC_DEV_ADDR_0 0x68
149#define NVSRAM3_RTC_DEV_ADDR_1 0x6A
150#define NVSRAM3_RTC_DEV_ADDR_2 0x6C
151#define NVSRAM3_RTC_DEV_ADDR_3 0x6E
152
153#define NVSRAM3_CONTROL_DEV_ADDR_0 0x18
154#define NVSRAM3_CONTROL_DEV_ADDR_1 0x1A
155#define NVSRAM3_CONTROL_DEV_ADDR_2 0x1C
156#define NVSRAM3_CONTROL_DEV_ADDR_3 0x1E
157
163#define NVSRAM3_HSB_ENABLE 0x00
164#define NVSRAM3_HSB_DISABLE 0x01
165
166#define NVSRAM3_WP_ENABLE 0x00
167#define NVSRAM3_WP_DISABLE 0x01
168
169 // nvsram3_set
170
181#define NVSRAM3_SUCCESS 0
182#define NVSRAM3_ERROR -1
183
184
185 // status
186
201#define NVSRAM3_MAP_MIKROBUS( cfg, mikrobus ) \
202 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
203 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
204 cfg.hsb = MIKROBUS( mikrobus, MIKROBUS_RST ); \
205 cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
206 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
207
208 // nvsram3_map
209 // nvsram3
210
215typedef struct
216{
217 // Output pins
218
219 digital_out_t hsb;
220 digital_out_t wp;
222 // Input pins
223
224 digital_in_t int_pin;
226 // Modules
227
228 i2c_master_t i2c;
230 // I2C slave address
231
234} nvsram3_t;
235
240typedef struct
241{
242 pin_name_t scl;
243 pin_name_t sda;
245 pin_name_t hsb;
246 pin_name_t wp;
247 pin_name_t int_pin;
249 uint32_t i2c_speed;
250 uint8_t i2c_address;
253
254typedef struct
255{
256
257 uint8_t hours;
258 uint8_t min;
259 uint8_t sec;
260
262
263typedef struct
264{
265
266 uint16_t year;
267 uint8_t month;
268 uint8_t day;
269 uint8_t day_of_week;
271
272typedef struct
273{
274
275 uint8_t day;
276 uint8_t hours;
277 uint8_t min;
278 uint8_t sec;
279
281
300
318
335
353err_t nvsram3_generic_write ( nvsram3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
354
372err_t nvsram3_generic_read ( nvsram3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
373
386err_t nvsram3_send_cmd ( nvsram3_t *ctx, uint8_t cmd );
387
403err_t nvsram3_memory_write ( nvsram3_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t n_bytes );
404
420err_t nvsram3_memory_read ( nvsram3_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t n_bytes );
421
432
446err_t nvsram3_rtc_read_reg ( nvsram3_t *ctx, uint8_t rtc_reg, uint8_t *data_out );
447
461err_t nvsram3_rtc_write_reg ( nvsram3_t *ctx, uint8_t rtc_reg, uint8_t data_in ) ;
462
475
489
502
516
529
543
559err_t nvsram3_hardware_store ( nvsram3_t *ctx, uint8_t state );
560
576err_t nvsram3_hw_write_protection ( nvsram3_t *ctx, uint8_t state );
577
578#ifdef __cplusplus
579}
580#endif
581#endif // NVSRAM3_H
582
583 // nvsram3
584
585// ------------------------------------------------------------------------ END
void nvsram3_get_rtc_alarm(nvsram3_t *ctx, nvsram3_rtc_alarm_t *rtc_alarm)
nvSRAM 3 get RTC alarm function.
err_t nvsram3_memory_read(nvsram3_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t n_bytes)
nvSRAM 3 read memory function.
uint32_t nvsram3_get_device_id(nvsram3_t *ctx)
nvSRAM 3 get device ID function.
err_t nvsram3_default_cfg(nvsram3_t *ctx)
nvSRAM 3 default configuration function.
void nvsram3_cfg_setup(nvsram3_cfg_t *cfg)
nvSRAM 3 configuration object setup function.
err_t nvsram3_rtc_read_reg(nvsram3_t *ctx, uint8_t rtc_reg, uint8_t *data_out)
nvSRAM 3 RTC read register function.
err_t nvsram3_init(nvsram3_t *ctx, nvsram3_cfg_t *cfg)
nvSRAM 3 initialization function.
err_t nvsram3_send_cmd(nvsram3_t *ctx, uint8_t cmd)
nvSRAM 3 send command function.
err_t nvsram3_hw_write_protection(nvsram3_t *ctx, uint8_t state)
nvSRAM 3 write protection function.
err_t nvsram3_generic_write(nvsram3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
nvSRAM 3 I2C writing function.
err_t nvsram3_set_rtc_time(nvsram3_t *ctx, nvsram3_rtc_time_t rtc_time)
nvSRAM 3 set RTC time function.
void nvsram3_get_rtc_time(nvsram3_t *ctx, nvsram3_rtc_time_t *rtc_time)
nvSRAM 3 get RTC time function.
err_t nvsram3_set_rtc_date(nvsram3_t *ctx, nvsram3_rtc_date_t rtc_date)
nvSRAM 3 set RTC date function.
void nvsram3_get_rtc_date(nvsram3_t *ctx, nvsram3_rtc_date_t *rtc_date)
nvSRAM 3 get RTC date function.
err_t nvsram3_rtc_write_reg(nvsram3_t *ctx, uint8_t rtc_reg, uint8_t data_in)
nvSRAM 3 RTC write register function.
err_t nvsram3_generic_read(nvsram3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
nvSRAM 3 I2C reading function.
err_t nvsram3_memory_write(nvsram3_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t n_bytes)
nvSRAM 3 write memory function.
err_t nvsram3_hardware_store(nvsram3_t *ctx, uint8_t state)
nvSRAM 3 hardware store function.
err_t nvsram3_set_rtc_alarm(nvsram3_t *ctx, nvsram3_rtc_alarm_t rtc_alarm)
nvSRAM 3 set RTC alarm function.
nvSRAM 3 Click configuration object.
Definition nvsram3.h:241
uint32_t i2c_speed
Definition nvsram3.h:249
pin_name_t wp
Definition nvsram3.h:246
pin_name_t hsb
Definition nvsram3.h:245
pin_name_t scl
Definition nvsram3.h:242
pin_name_t int_pin
Definition nvsram3.h:247
pin_name_t sda
Definition nvsram3.h:243
uint8_t i2c_address
Definition nvsram3.h:250
Definition nvsram3.h:273
uint8_t hours
Definition nvsram3.h:276
uint8_t day
Definition nvsram3.h:275
uint8_t min
Definition nvsram3.h:277
uint8_t sec
Definition nvsram3.h:278
Definition nvsram3.h:264
uint8_t month
Definition nvsram3.h:267
uint16_t year
Definition nvsram3.h:266
uint8_t day
Definition nvsram3.h:268
uint8_t day_of_week
Definition nvsram3.h:269
Definition nvsram3.h:255
uint8_t hours
Definition nvsram3.h:257
uint8_t min
Definition nvsram3.h:258
uint8_t sec
Definition nvsram3.h:259
nvSRAM 3 Click context object.
Definition nvsram3.h:216
digital_in_t int_pin
Definition nvsram3.h:224
i2c_master_t i2c
Definition nvsram3.h:228
digital_out_t hsb
Definition nvsram3.h:219
uint8_t slave_address
Definition nvsram3.h:232
digital_out_t wp
Definition nvsram3.h:220