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
32 extern "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  // 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  // nvsram3_set
170 
181 #define NVSRAM3_SUCCESS 0
182 #define NVSRAM3_ERROR -1
183 
184  // 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  // nvsram3_map // nvsram3
210 
215 typedef 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 
232  uint8_t slave_address;
234 } nvsram3_t;
235 
240 typedef 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;
252 } nvsram3_cfg_t;
253 
254 typedef struct
255 {
256 
257  uint8_t hours;
258  uint8_t min;
259  uint8_t sec;
260 
262 
263 typedef struct
264 {
265 
266  uint16_t year;
267  uint8_t month;
268  uint8_t day;
269  uint8_t day_of_week;
271 
272 typedef struct
273 {
274 
275  uint8_t day;
276  uint8_t hours;
277  uint8_t min;
278  uint8_t sec;
279 
281 
300 
317 err_t nvsram3_init ( nvsram3_t *ctx, nvsram3_cfg_t *cfg );
318 
335 
353 err_t nvsram3_generic_write ( nvsram3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
354 
372 err_t nvsram3_generic_read ( nvsram3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
373 
386 err_t nvsram3_send_cmd ( nvsram3_t *ctx, uint8_t cmd );
387 
403 err_t nvsram3_memory_write ( nvsram3_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t n_bytes );
404 
420 err_t nvsram3_memory_read ( nvsram3_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t n_bytes );
421 
432 
446 err_t nvsram3_rtc_read_reg ( nvsram3_t *ctx, uint8_t rtc_reg, uint8_t *data_out );
447 
461 err_t nvsram3_rtc_write_reg ( nvsram3_t *ctx, uint8_t rtc_reg, uint8_t data_in ) ;
462 
475 
489 
502 
516 
529 
543 
559 err_t nvsram3_hardware_store ( nvsram3_t *ctx, uint8_t state );
560 
576 err_t nvsram3_hw_write_protection ( nvsram3_t *ctx, uint8_t state );
577 
578 #ifdef __cplusplus
579 }
580 #endif
581 #endif // NVSRAM3_H
582  // nvsram3
584 
585 // ------------------------------------------------------------------------ END
nvsram3_set_rtc_alarm
err_t nvsram3_set_rtc_alarm(nvsram3_t *ctx, nvsram3_rtc_alarm_t rtc_alarm)
nvSRAM 3 set RTC alarm function.
nvsram3_hw_write_protection
err_t nvsram3_hw_write_protection(nvsram3_t *ctx, uint8_t state)
nvSRAM 3 write protection function.
nvsram3_send_cmd
err_t nvsram3_send_cmd(nvsram3_t *ctx, uint8_t cmd)
nvSRAM 3 send command function.
nvsram3_cfg_t::sda
pin_name_t sda
Definition: nvsram3.h:243
nvsram3_get_rtc_time
void nvsram3_get_rtc_time(nvsram3_t *ctx, nvsram3_rtc_time_t *rtc_time)
nvSRAM 3 get RTC time function.
nvsram3_init
err_t nvsram3_init(nvsram3_t *ctx, nvsram3_cfg_t *cfg)
nvSRAM 3 initialization function.
nvsram3_rtc_alarm_t::min
uint8_t min
Definition: nvsram3.h:277
nvsram3_default_cfg
err_t nvsram3_default_cfg(nvsram3_t *ctx)
nvSRAM 3 default configuration function.
nvsram3_t::wp
digital_out_t wp
Definition: nvsram3.h:220
nvsram3_rtc_time_t::min
uint8_t min
Definition: nvsram3.h:258
nvsram3_rtc_read_reg
err_t nvsram3_rtc_read_reg(nvsram3_t *ctx, uint8_t rtc_reg, uint8_t *data_out)
nvSRAM 3 RTC read register function.
nvsram3_memory_write
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.
nvsram3_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: nvsram3.h:249
nvsram3_rtc_time_t
Definition: nvsram3.h:255
nvsram3_rtc_write_reg
err_t nvsram3_rtc_write_reg(nvsram3_t *ctx, uint8_t rtc_reg, uint8_t data_in)
nvSRAM 3 RTC write register function.
nvsram3_rtc_date_t::day
uint8_t day
Definition: nvsram3.h:268
nvsram3_t
nvSRAM 3 Click context object.
Definition: nvsram3.h:216
nvsram3_rtc_alarm_t
Definition: nvsram3.h:273
nvsram3_t::hsb
digital_out_t hsb
Definition: nvsram3.h:219
nvsram3_t::slave_address
uint8_t slave_address
Definition: nvsram3.h:232
nvsram3_memory_read
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.
nvsram3_rtc_alarm_t::hours
uint8_t hours
Definition: nvsram3.h:276
nvsram3_rtc_date_t::year
uint16_t year
Definition: nvsram3.h:266
nvsram3_get_rtc_date
void nvsram3_get_rtc_date(nvsram3_t *ctx, nvsram3_rtc_date_t *rtc_date)
nvSRAM 3 get RTC date function.
nvsram3_set_rtc_date
err_t nvsram3_set_rtc_date(nvsram3_t *ctx, nvsram3_rtc_date_t rtc_date)
nvSRAM 3 set RTC date function.
nvsram3_rtc_date_t::day_of_week
uint8_t day_of_week
Definition: nvsram3.h:269
nvsram3_cfg_setup
void nvsram3_cfg_setup(nvsram3_cfg_t *cfg)
nvSRAM 3 configuration object setup function.
nvsram3_rtc_time_t::sec
uint8_t sec
Definition: nvsram3.h:259
nvsram3_cfg_t
nvSRAM 3 Click configuration object.
Definition: nvsram3.h:241
nvsram3_set_rtc_time
err_t nvsram3_set_rtc_time(nvsram3_t *ctx, nvsram3_rtc_time_t rtc_time)
nvSRAM 3 set RTC time function.
nvsram3_cfg_t::scl
pin_name_t scl
Definition: nvsram3.h:242
nvsram3_get_device_id
uint32_t nvsram3_get_device_id(nvsram3_t *ctx)
nvSRAM 3 get device ID function.
nvsram3_rtc_date_t::month
uint8_t month
Definition: nvsram3.h:267
nvsram3_cfg_t::i2c_address
uint8_t i2c_address
Definition: nvsram3.h:250
nvsram3_cfg_t::int_pin
pin_name_t int_pin
Definition: nvsram3.h:247
nvsram3_generic_write
err_t nvsram3_generic_write(nvsram3_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
nvSRAM 3 I2C writing function.
nvsram3_cfg_t::wp
pin_name_t wp
Definition: nvsram3.h:246
nvsram3_rtc_time_t::hours
uint8_t hours
Definition: nvsram3.h:257
nvsram3_t::i2c
i2c_master_t i2c
Definition: nvsram3.h:228
nvsram3_t::int_pin
digital_in_t int_pin
Definition: nvsram3.h:224
nvsram3_get_rtc_alarm
void nvsram3_get_rtc_alarm(nvsram3_t *ctx, nvsram3_rtc_alarm_t *rtc_alarm)
nvSRAM 3 get RTC alarm function.
nvsram3_rtc_alarm_t::sec
uint8_t sec
Definition: nvsram3.h:278
nvsram3_hardware_store
err_t nvsram3_hardware_store(nvsram3_t *ctx, uint8_t state)
nvSRAM 3 hardware store function.
nvsram3_rtc_alarm_t::day
uint8_t day
Definition: nvsram3.h:275
nvsram3_rtc_date_t
Definition: nvsram3.h:264
nvsram3_generic_read
err_t nvsram3_generic_read(nvsram3_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
nvSRAM 3 I2C reading function.
nvsram3_cfg_t::hsb
pin_name_t hsb
Definition: nvsram3.h:245