eeprom9  2.1.0.0
eeprom9.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 EEPROM9_H
29 #define EEPROM9_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "drv_digital_out.h"
36 #include "drv_digital_in.h"
37 #include "drv_spi_master.h"
38 #include "spi_specifics.h"
39 
60 #define EEPROM9_HOLD_DISABLE 0x00
61 #define EEPROM9_HOLD_ENABLE 0x01
62 #define EEPROM9_WRITE_PROTECT_DISABLE 0x00
63 #define EEPROM9_WRITE_PROTECT_ENABLE 0x01
64 #define EEPROM9_WRITE_ENABLE 0x00
65 #define EEPROM9_WRITE_DISABLE 0x01
66 
71 #define EEPROM9_SRWD_MASK 0x80
72 #define EEPROM9_TB_MASK 0x40
73 #define EEPROM9_BP2_MASK 0x10
74 #define EEPROM9_BP1_MASK 0x08
75 #define EEPROM9_BP0_MASK 0x04
76 #define EEPROM9_WEL_MASK 0x02
77 #define EEPROM9_WIP_MASK 0x01
78 
83 #define EEPROM9_ST_MANUFACTURER_CODE 0x20
84 
89 #define EEPROM9_MEMORY_ADDR_START 0x00000000ul
90 #define EEPROM9_MEMORY_ADDR_END 0x003FFFFFul
91 
96 #define EEPROM9_CMD_WREN 0x06
97 #define EEPROM9_CMD_WRDI 0x04
98 #define EEPROM9_CMD_RDSR 0x05
99 #define EEPROM9_CMD_WRSR 0x01
100 #define EEPROM9_CMD_READ 0x03
101 #define EEPROM9_CMD_FREAD 0x0B
102 #define EEPROM9_CMD_FDREAD 0x3B
103 #define EEPROM9_CMD_FQREAD 0x6B
104 #define EEPROM9_CMD_PGWR 0x02
105 #define EEPROM9_CMD_PGPR 0x0A
106 #define EEPROM9_CMD_PGER 0xDB
107 #define EEPROM9_CMD_SCER 0x20
108 #define EEPROM9_CMD_BKER 0xD8
109 #define EEPROM9_CMD_CHER 0xC7
110 #define EEPROM9_CMD_RDID 0x83
111 #define EEPROM9_CMD_FRDID 0x8B
112 #define EEPROM9_CMD_WRID 0x82
113 #define EEPROM9_CMD_DPD 0xB9
114 #define EEPROM9_CMD_RDPD 0xAB
115 #define EEPROM9_CMD_JEDPC 0x9F
116 #define EEPROM9_CMD_RDCR 0x15
117 #define EEPROM9_CMD_RDVR 0x85
118 #define EEPROM9_CMD_WRVR 0x81
119 #define EEPROM9_CMD_CLRSF 0x50
120 #define EEPROM9_CMD_RDSFDP 0x5A
121 #define EEPROM9_CMD_RSTEN 0x66
122 #define EEPROM9_CMD_RESET 0x99
123 
132 #define EEPROM9_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
133 #define EEPROM9_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
134  // eeprom9_set
136 
151 #define EEPROM9_MAP_MIKROBUS( cfg, mikrobus ) \
152  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
153  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
154  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
155  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
156  cfg.wp = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
157  cfg.hld = MIKROBUS( mikrobus, MIKROBUS_INT )
158  // eeprom9_map // eeprom9
161 
166 typedef struct
167 {
168  // Output pins
169  digital_out_t wp;
170  digital_out_t hld;
172  // Modules
173  spi_master_t spi;
175  pin_name_t chip_select;
177 } eeprom9_t;
178 
183 typedef struct
184 {
185  // Communication gpio pins
186  pin_name_t miso;
187  pin_name_t mosi;
188  pin_name_t sck;
189  pin_name_t cs;
191  // Additional gpio pins
192  pin_name_t wp;
193  pin_name_t hld;
195  // static variable
196  uint32_t spi_speed;
197  spi_master_mode_t spi_mode;
198  spi_master_chip_select_polarity_t cs_polarity;
200 } eeprom9_cfg_t;
201 
206 typedef struct
207 {
208  uint8_t manufact_code;
209  uint8_t spi_code;
210  uint8_t memory_density;
211 } id_data_t;
212 
217 typedef enum
218 {
220  EEPROM9_ERROR = -1
221 
223 
240 
254 err_t eeprom9_init ( eeprom9_t *ctx, eeprom9_cfg_t *cfg );
255 
270 err_t eeprom9_generic_write ( eeprom9_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
271 
286 err_t eeprom9_generic_read ( eeprom9_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
287 
297 void eeprom9_set_hold ( eeprom9_t *ctx, uint8_t en_hold );
298 
308 void eeprom9_set_write_protection ( eeprom9_t *ctx, uint8_t en_wp );
309 
321 err_t eeprom9_send_cmd ( eeprom9_t *ctx, uint8_t cmd );
322 
335 err_t eeprom9_set_write_enable ( eeprom9_t *ctx, uint8_t en_write );
336 
351 err_t eeprom9_read_memory ( eeprom9_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t len );
352 
367 err_t eeprom9_write_memory ( eeprom9_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t len );
368 
380 err_t eeprom5_get_status_reg ( eeprom9_t *ctx, uint8_t *status_data );
381 
393 
405 err_t eeprom9_block_erase ( eeprom9_t *ctx, uint32_t block_addr );
406 
418 err_t eeprom9_sector_erase ( eeprom9_t *ctx, uint32_t sector_addr );
419 
431 err_t eeprom9_page_erase ( eeprom9_t *ctx, uint32_t page_addr );
432 
445 
446 #ifdef __cplusplus
447 }
448 #endif
449 #endif // EEPROM9_H
450  // eeprom9
452 
453 // ------------------------------------------------------------------------ END
eeprom9_cfg_t::sck
pin_name_t sck
Definition: eeprom9.h:188
eeprom9_page_erase
err_t eeprom9_page_erase(eeprom9_t *ctx, uint32_t page_addr)
EEPROM 9 memory page erase function.
eeprom9_chip_erase
err_t eeprom9_chip_erase(eeprom9_t *ctx)
EEPROM 9 chip memory erase function.
id_data_t::spi_code
uint8_t spi_code
Definition: eeprom9.h:209
eeprom9_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: eeprom9.h:197
eeprom9_block_erase
err_t eeprom9_block_erase(eeprom9_t *ctx, uint32_t block_addr)
EEPROM 9 memory block erase function.
eeprom9_cfg_t::hld
pin_name_t hld
Definition: eeprom9.h:193
spi_specifics.h
This file contains SPI specific macros, functions, etc.
id_data_t::manufact_code
uint8_t manufact_code
Definition: eeprom9.h:208
eeprom9_t::hld
digital_out_t hld
Definition: eeprom9.h:170
eeprom9_cfg_t::wp
pin_name_t wp
Definition: eeprom9.h:192
eeprom9_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: eeprom9.h:198
eeprom9_cfg_setup
void eeprom9_cfg_setup(eeprom9_cfg_t *cfg)
EEPROM 9 configuration object setup function.
eeprom9_t::wp
digital_out_t wp
Definition: eeprom9.h:169
eeprom9_read_memory
err_t eeprom9_read_memory(eeprom9_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t len)
EEPROM 9 memory reading function.
eeprom9_generic_write
err_t eeprom9_generic_write(eeprom9_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
EEPROM 9 data writing function.
eeprom9_cfg_t
EEPROM 9 Click configuration object.
Definition: eeprom9.h:184
eeprom9_send_cmd
err_t eeprom9_send_cmd(eeprom9_t *ctx, uint8_t cmd)
EEPROM 9 send command function.
eeprom9_t::spi
spi_master_t spi
Definition: eeprom9.h:173
eeprom9_cfg_t::spi_speed
uint32_t spi_speed
Definition: eeprom9.h:196
EEPROM9_ERROR
@ EEPROM9_ERROR
Definition: eeprom9.h:220
eeprom5_get_status_reg
err_t eeprom5_get_status_reg(eeprom9_t *ctx, uint8_t *status_data)
EEPROM 9 read status function.
id_data_t
EEPROM 9 Click identification data.
Definition: eeprom9.h:207
eeprom9_write_memory
err_t eeprom9_write_memory(eeprom9_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t len)
EEPROM 9 memory writing function.
eeprom9_sector_erase
err_t eeprom9_sector_erase(eeprom9_t *ctx, uint32_t sector_addr)
EEPROM 9 memory sector erase function.
eeprom9_set_hold
void eeprom9_set_hold(eeprom9_t *ctx, uint8_t en_hold)
EEPROM 9 set hold pin state function.
eeprom9_t::chip_select
pin_name_t chip_select
Definition: eeprom9.h:175
eeprom9_init
err_t eeprom9_init(eeprom9_t *ctx, eeprom9_cfg_t *cfg)
EEPROM 9 initialization function.
eeprom9_cfg_t::miso
pin_name_t miso
Definition: eeprom9.h:186
eeprom9_cfg_t::mosi
pin_name_t mosi
Definition: eeprom9.h:187
eeprom9_t
EEPROM 9 Click context object.
Definition: eeprom9.h:167
EEPROM9_OK
@ EEPROM9_OK
Definition: eeprom9.h:219
eeprom9_cfg_t::cs
pin_name_t cs
Definition: eeprom9.h:189
eeprom9_set_write_enable
err_t eeprom9_set_write_enable(eeprom9_t *ctx, uint8_t en_write)
EEPROM 9 enable write function.
eeprom9_generic_read
err_t eeprom9_generic_read(eeprom9_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
EEPROM 9 data reading function.
id_data_t::memory_density
uint8_t memory_density
Definition: eeprom9.h:210
eeprom9_read_identification
err_t eeprom9_read_identification(eeprom9_t *ctx, id_data_t *id_data)
EEPROM 9 read identification function.
eeprom9_set_write_protection
void eeprom9_set_write_protection(eeprom9_t *ctx, uint8_t en_wp)
EEPROM 9 set write protection state function.
eeprom9_return_value_t
eeprom9_return_value_t
EEPROM 9 Click return value data.
Definition: eeprom9.h:218