nfctag5  2.0.0.0
nfctag5.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 NFCTAG5_H
29 #define NFCTAG5_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_i2c_master.h"
38 #include "drv_analog_in.h"
39 
60 #define NFCTAG5_REG_SECTOR_SECURITY_0 0x0000
61 #define NFCTAG5_REG_SECTOR_SECURITY_4 0x0004
62 #define NFCTAG5_REG_SECTOR_SECURITY_8 0x0008
63 #define NFCTAG5_REG_SECTOR_SECURITY_12 0x000C
64 #define NFCTAG5_REG_SECTOR_SECURITY_16 0x0010
65 #define NFCTAG5_REG_SECTOR_SECURITY_20 0x0014
66 #define NFCTAG5_REG_SECTOR_SECURITY_24 0x0018
67 #define NFCTAG5_REG_SECTOR_SECURITY_28 0x001C
68 #define NFCTAG5_REG_SECTOR_SECURITY_32 0x0020
69 #define NFCTAG5_REG_SECTOR_SECURITY_36 0x0024
70 #define NFCTAG5_REG_SECTOR_SECURITY_40 0x0028
71 #define NFCTAG5_REG_SECTOR_SECURITY_44 0x002C
72 #define NFCTAG5_REG_SECTOR_SECURITY_48 0x0030
73 #define NFCTAG5_REG_SECTOR_SECURITY_52 0x0034
74 #define NFCTAG5_REG_SECTOR_SECURITY_56 0x0038
75 #define NFCTAG5_REG_SECTOR_SECURITY_60 0x003C
76 #define NFCTAG5_REG_SECTOR_SECURITY_STATUS_LSB 0x0800
77 #define NFCTAG5_REG_SECTOR_SECURITY_STATUS_MSB 0x0804
78 #define NFCTAG5_REG_I2C_PASSWORD 0x0900
79 #define NFCTAG5_REG_RF_PASSWORD_1 0x0904
80 #define NFCTAG5_REG_RF_PASSWORD_2 0x0908
81 #define NFCTAG5_REG_RF_PASSWORD_3 0x090C
82 #define NFCTAG5_REG_CONFIG 0x0910
83 #define NFCTAG5_REG_UID_LSB 0x0914
84 #define NFCTAG5_REG_UID_MSB 0x0918
85 #define NFCTAG5_REG_IC_REF_MEM_SIZE 0x091C
86 #define NFCTAG5_REG_CONTROL 0x0920
87  // nfctag5_reg
89 
104 #define NFCTAG5_CAPABILITY_CONTAINER_ADDRESS 0x0000
105 #define NFCTAG5_CAPABILITY_CONTAINER 0xE1, 0x40, 0x80, 0x01
106 #define NFCTAG5_NDEF_MESSAGE_START_ADDRESS 0x0004
107 #define NFCTAG5_TYPE_NDEF_MESSAGE 0x03
108 #define NFCTAG5_NDEF_RECORD_HEADER 0xD1
109 #define NFCTAG5_NDEF_TYPE_LENGTH 0x01
110 #define NFCTAG5_NDEF_URI_TYPE 'U'
111 #define NFCTAG5_NDEF_MESSAGE_END_MARK 0xFE
112 
117 #define NFCTAG5_URI_PREFIX_0 0x00
118 #define NFCTAG5_URI_PREFIX_1 0x01
119 #define NFCTAG5_URI_PREFIX_2 0x02
120 #define NFCTAG5_URI_PREFIX_3 0x03
121 #define NFCTAG5_URI_PREFIX_4 0x04
122 #define NFCTAG5_URI_PREFIX_5 0x05
123 #define NFCTAG5_URI_PREFIX_6 0x06
124 #define NFCTAG5_URI_PREFIX_7 0x07
125 #define NFCTAG5_URI_PREFIX_8 0x08
126 #define NFCTAG5_URI_PREFIX_9 0x09
127 #define NFCTAG5_URI_PREFIX_10 0x0A
128 #define NFCTAG5_URI_PREFIX_11 0x0B
129 #define NFCTAG5_URI_PREFIX_12 0x0C
130 #define NFCTAG5_URI_PREFIX_13 0x0D
131 #define NFCTAG5_URI_PREFIX_14 0x0E
132 #define NFCTAG5_URI_PREFIX_15 0x0F
133 #define NFCTAG5_URI_PREFIX_16 0x10
134 #define NFCTAG5_URI_PREFIX_17 0x11
135 #define NFCTAG5_URI_PREFIX_18 0x12
136 #define NFCTAG5_URI_PREFIX_19 0x13
137 #define NFCTAG5_URI_PREFIX_20 0x14
138 #define NFCTAG5_URI_PREFIX_21 0x15
139 #define NFCTAG5_URI_PREFIX_22 0x16
140 #define NFCTAG5_URI_PREFIX_23 0x17
141 #define NFCTAG5_URI_PREFIX_24 0x18
142 #define NFCTAG5_URI_PREFIX_25 0x19
143 #define NFCTAG5_URI_PREFIX_26 0x1A
144 #define NFCTAG5_URI_PREFIX_27 0x1B
145 #define NFCTAG5_URI_PREFIX_28 0x1C
146 #define NFCTAG5_URI_PREFIX_29 0x1D
147 #define NFCTAG5_URI_PREFIX_30 0x1E
148 #define NFCTAG5_URI_PREFIX_31 0x1F
149 #define NFCTAG5_URI_PREFIX_32 0x20
150 #define NFCTAG5_URI_PREFIX_33 0x21
151 #define NFCTAG5_URI_PREFIX_34 0x22
152 #define NFCTAG5_URI_PREFIX_35 0x23
158 #define NFCTAG5_USER_MEMORY_ADDRESS_MIN 0x0000
159 #define NFCTAG5_USER_MEMORY_ADDRESS_MAX 0x1FFF
160 #define NFCTAG5_MEMORY_BLOCK_SIZE 4
161 #define NFCTAG5_MEMORY_BLOCK_MASK 0x1FFC
162 
167 #define NFCTAG5_ADDRESS_MODE_CONFIG 0
168 #define NFCTAG5_ADDRESS_MODE_USER_MEMORY 1
169 
174 #define NFCTAG5_VH_VREF_3V3 3.3
175 #define NFCTAG5_VH_VREF_5V 5.0
176 #define NFCTAG5_VH_VREF NFCTAG5_VH_VREF_3V3
177 
183 #define NFCTAG5_DEVICE_ADDRESS_CONFIG 0x57
184 #define NFCTAG5_DEVICE_ADDRESS_USER_MEMORY 0x53
185  // nfctag5_set
187 
202 #define NFCTAG5_MAP_MIKROBUS( cfg, mikrobus ) \
203  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
204  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
205  cfg.vh = MIKROBUS( mikrobus, MIKROBUS_AN ); \
206  cfg.busy = MIKROBUS( mikrobus, MIKROBUS_INT )
207  // nfctag5_map // nfctag5
210 
215 typedef union
216 {
217  uint8_t value_bytes[ 4 ];
218  uint32_t value;
220 
225 typedef struct
226 {
227  // Input pins
228  digital_in_t busy;
230  // Modules
231  i2c_master_t i2c;
232  analog_in_t adc;
234  // I2C slave address
235  uint8_t slave_address;
237 } nfctag5_t;
238 
243 typedef struct
244 {
245  pin_name_t scl;
246  pin_name_t sda;
248  pin_name_t vh;
249  pin_name_t busy;
251  uint32_t i2c_speed;
252  uint8_t i2c_address;
253  analog_in_resolution_t resolution;
254  float vref;
256 } nfctag5_cfg_t;
257 
262 typedef enum
263 {
265  NFCTAG5_ERROR = -1
266 
268 
285 
299 err_t nfctag5_init ( nfctag5_t *ctx, nfctag5_cfg_t *cfg );
300 
314 
327 err_t nfctag5_set_address_mode ( nfctag5_t *ctx, uint8_t mode );
328 
342 err_t nfctag5_write_memory_block ( nfctag5_t *ctx, uint16_t block_addr, nfctag5_block_t *block );
343 
357 err_t nfctag5_read_memory_block ( nfctag5_t *ctx, uint16_t block_addr, nfctag5_block_t *block );
358 
374 err_t nfctag5_write_multiple_memory_block ( nfctag5_t *ctx, uint16_t block_addr,
375  nfctag5_block_t *block, uint8_t num_blocks );
376 
392 err_t nfctag5_read_multiple_memory_block ( nfctag5_t *ctx, uint16_t block_addr,
393  nfctag5_block_t *block, uint8_t num_blocks );
394 
410 err_t nfctag5_write_ndef_uri_record ( nfctag5_t *ctx, uint8_t uri_prefix, uint8_t *uri_data, uint8_t data_len );
411 
423 
438 err_t nfctag5_write_message_to_memory ( nfctag5_t *ctx, uint16_t block_addr, uint8_t *message, uint16_t message_len );
439 
454 err_t nfctag5_read_message_from_memory ( nfctag5_t *ctx, uint16_t block_addr, uint8_t *message, uint16_t message_len );
455 
467 err_t nfctag5_read_vh_pin_value ( nfctag5_t *ctx, uint16_t *data_out );
468 
482 err_t nfctag5_read_vh_pin_voltage ( nfctag5_t *ctx, float *data_out );
483 
493 
494 #ifdef __cplusplus
495 }
496 #endif
497 #endif // NFCTAG5_H
498  // nfctag5
500 
501 // ------------------------------------------------------------------------ END
nfctag5_block_t
NFC Tag 5 Click memory block union definition.
Definition: nfctag5.h:216
nfctag5_write_memory_block
err_t nfctag5_write_memory_block(nfctag5_t *ctx, uint16_t block_addr, nfctag5_block_t *block)
NFC Tag 5 write memory block function.
nfctag5_t::adc
analog_in_t adc
Definition: nfctag5.h:232
NFCTAG5_ERROR
@ NFCTAG5_ERROR
Definition: nfctag5.h:265
NFCTAG5_OK
@ NFCTAG5_OK
Definition: nfctag5.h:264
nfctag5_write_ndef_uri_record
err_t nfctag5_write_ndef_uri_record(nfctag5_t *ctx, uint8_t uri_prefix, uint8_t *uri_data, uint8_t data_len)
NFC Tag 5 write NDEF URI record function.
nfctag5_read_message_from_memory
err_t nfctag5_read_message_from_memory(nfctag5_t *ctx, uint16_t block_addr, uint8_t *message, uint16_t message_len)
NFC Tag 5 read message from memory function.
nfctag5_cfg_setup
void nfctag5_cfg_setup(nfctag5_cfg_t *cfg)
NFC Tag 5 configuration object setup function.
nfctag5_read_vh_pin_value
err_t nfctag5_read_vh_pin_value(nfctag5_t *ctx, uint16_t *data_out)
NFC Tag 5 read AN pin value function.
nfctag5_t::busy
digital_in_t busy
Definition: nfctag5.h:228
nfctag5_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: nfctag5.h:251
nfctag5_cfg_t::vref
float vref
Definition: nfctag5.h:254
nfctag5_write_message_to_memory
err_t nfctag5_write_message_to_memory(nfctag5_t *ctx, uint16_t block_addr, uint8_t *message, uint16_t message_len)
NFC Tag 5 write message to memory function.
nfctag5_cfg_t::vh
pin_name_t vh
Definition: nfctag5.h:248
nfctag5_t
NFC Tag 5 Click context object.
Definition: nfctag5.h:226
nfctag5_cfg_t::sda
pin_name_t sda
Definition: nfctag5.h:246
nfctag5_init
err_t nfctag5_init(nfctag5_t *ctx, nfctag5_cfg_t *cfg)
NFC Tag 5 initialization function.
nfctag5_read_vh_pin_voltage
err_t nfctag5_read_vh_pin_voltage(nfctag5_t *ctx, float *data_out)
NFC Tag 5 read VH pin voltage level function.
nfctag5_default_cfg
err_t nfctag5_default_cfg(nfctag5_t *ctx)
NFC Tag 5 default configuration function.
nfctag5_cfg_t
NFC Tag 5 Click configuration object.
Definition: nfctag5.h:244
nfctag5_read_memory_block
err_t nfctag5_read_memory_block(nfctag5_t *ctx, uint16_t block_addr, nfctag5_block_t *block)
NFC Tag 5 read memory block function.
nfctag5_set_address_mode
err_t nfctag5_set_address_mode(nfctag5_t *ctx, uint8_t mode)
NFC Tag 5 set address mode function.
nfctag5_read_multiple_memory_block
err_t nfctag5_read_multiple_memory_block(nfctag5_t *ctx, uint16_t block_addr, nfctag5_block_t *block, uint8_t num_blocks)
NFC Tag 5 read multiple memory block function.
nfctag5_cfg_t::i2c_address
uint8_t i2c_address
Definition: nfctag5.h:252
nfctag5_format_memory
err_t nfctag5_format_memory(nfctag5_t *ctx)
NFC Tag 5 format memory function.
nfctag5_cfg_t::busy
pin_name_t busy
Definition: nfctag5.h:249
nfctag5_get_busy_pin
uint8_t nfctag5_get_busy_pin(nfctag5_t *ctx)
NFC Tag 5 get busy pin function.
nfctag5_cfg_t::scl
pin_name_t scl
Definition: nfctag5.h:245
nfctag5_block_t::value
uint32_t value
Definition: nfctag5.h:218
nfctag5_t::slave_address
uint8_t slave_address
Definition: nfctag5.h:235
nfctag5_return_value_t
nfctag5_return_value_t
NFC Tag 5 Click return value data.
Definition: nfctag5.h:263
nfctag5_cfg_t::resolution
analog_in_resolution_t resolution
Definition: nfctag5.h:253
nfctag5_t::i2c
i2c_master_t i2c
Definition: nfctag5.h:231
nfctag5_write_multiple_memory_block
err_t nfctag5_write_multiple_memory_block(nfctag5_t *ctx, uint16_t block_addr, nfctag5_block_t *block, uint8_t num_blocks)
NFC Tag 5 write multiple memory block function.