10#ifndef M5_UNIT_NFC_ST25R3916_DEFINITION_HPP
11#define M5_UNIT_NFC_ST25R3916_DEFINITION_HPP
65constexpr uint8_t REG_IO_CONFIGURATION_1{0x00};
66constexpr uint8_t REG_IO_CONFIGURATION_2{0x01};
68constexpr uint8_t REG_OPERATION_CONTROL{0x02};
69constexpr uint8_t REG_MODE_DEFINITION{0x03};
70constexpr uint8_t REG_BITRATE_DEFINITION{0x04};
72constexpr uint8_t REG_ISO14443A_SETTINGS{0x05};
73constexpr uint8_t REG_ISO14443B_SETTINGS{0x06};
74constexpr uint8_t REG_FELICA_SETTINGS{0x07};
75constexpr uint8_t REG_NFCIP_1_PASSIVE_TARGET_DEFINITION{0x08};
76constexpr uint8_t REG_STREAM_MODE_DEFINITION{0x09};
77constexpr uint8_t REG_AUXILIARY_DEFINITION{0x0A};
79constexpr uint8_t REG_RECEIVER_CONFIGURATION_1{0x0B};
80constexpr uint8_t REG_RECEIVER_CONFIGURATION_2{0x0C};
81constexpr uint8_t REG_RECEIVER_CONFIGURATION_3{0x0D};
82constexpr uint8_t REG_RECEIVER_CONFIGURATION_4{0x0E};
84constexpr uint8_t REG_MASK_RECEIVER_TIMER{0x0F};
85constexpr uint8_t REG_NO_RESPONSE_TIMER_1{0x10};
86constexpr uint8_t REG_NO_RESPONSE_TIMER_2{0x11};
87constexpr uint8_t REG_TIMER_AND_EMV_CONTROL{0x12};
88constexpr uint8_t REG_GENERAL_PURPOSE_TIMER_1{0x13};
89constexpr uint8_t REG_GENERAL_PURPOSE_TIMER_2{0x14};
90constexpr uint8_t REG_PPON2_FIELD_WAITING{0x15};
92constexpr uint8_t REG_MASK_MAIN_INTERRUPT{0x16};
93constexpr uint8_t REG_MASK_TIMER_AND_NFC_INTERRUPT{0x17};
94constexpr uint8_t REG_MASK_ERROR_AND_WAKEUP_INTERRUPT{0x18};
95constexpr uint8_t REG_MASK_PASSIVE_TARGET_INTERRUPT{0x19};
96constexpr uint8_t REG_MAIN_INTERRUPT{0x1A};
97constexpr uint8_t REG_TIMER_AND_NFC_INTERRUPT{0x1B};
98constexpr uint8_t REG_ERROR_AND_WAKEUP_INTERRUPT{0x1C};
99constexpr uint8_t REG_PASSIVE_TARGET_INTERRUPT{0x1D};
100constexpr uint8_t REG_FIFO_STATUS_1{0x1E};
101constexpr uint8_t REG_FIFO_STATUS_2{0x1F};
102constexpr uint8_t REG_COLLISION_DISPLAY{0x20};
103constexpr uint8_t REG_PASSIVE_TARGET_DISPLAY{0x21};
105constexpr uint8_t REG_NUMBER_OF_TRANSMITTED_BYTES_1{0x22};
106constexpr uint8_t REG_NUMBER_OF_TRANSMITTED_BYTES_2{0x23};
107constexpr uint8_t REG_BITRATE_DETECTION_DISPLAY{0x24};
109constexpr uint8_t REG_AD_CONVERTER_OUTPUT{0x25};
111constexpr uint8_t REG_ANTENNA_TUNING_CONTROL_1{0x26};
112constexpr uint8_t REG_ANTENNA_TUNING_CONTROL_2{0x27};
114constexpr uint8_t REG_TX_DRIVER{0x28};
115constexpr uint8_t REG_PASSIVE_TARGET_MODULATION{0x29};
117constexpr uint8_t REG_EXTERNAL_FIELD_DETECTOR_ACTIVATION_THRESHOLD{0x2A};
118constexpr uint8_t REG_EXTERNAL_FIELD_DETECTOR_DEACTIVATION_THRESHOLD{0x2B};
120constexpr uint8_t REG_REGULATOR_VOLTAGE_CONTROL{0x2C};
122constexpr uint8_t REG_RSSI_DISPLAY{0x2D};
123constexpr uint8_t REG_GAIN_REDUCTION_STATE{0x2E};
125constexpr uint8_t REG_CAPACITIVE_SENSOR_CONTROL{0x2F};
126constexpr uint8_t REG_CAPACITIVE_SENSOR_DISPLAY{0x30};
128constexpr uint8_t REG_AUXILIARY_DISPLAY{0x31};
130constexpr uint8_t REG_WAKEUP_TIMER_CONTROL{0x32};
131constexpr uint8_t REG_AMPLITUDE_MEASUREMENT_CONFIGURATION{0x33};
132constexpr uint8_t REG_AMPLITUDE_MEASUREMENT_REFERENCE{0x34};
133constexpr uint8_t REG_AMPLITUDE_MEASUREMENT_AUTO_AVERAGING_DISPLAY{0x35};
134constexpr uint8_t REG_AMPLITUDE_MEASUREMENT_DISPLAY{0x36};
135constexpr uint8_t REG_PHASE_MEASUREMENT_CONFIGURATION{0x37};
136constexpr uint8_t REG_PHASE_MEASUREMENT_REFERENCE{0x38};
137constexpr uint8_t REG_PHASE_MEASUREMENT_AUTO_AVERAGING_DISPLAY{0x39};
138constexpr uint8_t REG_PHASE_MEASUREMENT_DISPLAY{0x3A};
139constexpr uint8_t REG_CAPACITANCE_MEASUREMENT_CONFIGURATION{0x3B};
140constexpr uint8_t REG_CAPACITANCE_MEASUREMENT_REFERENCE{0x3C};
141constexpr uint8_t REG_CAPACITANCE_MEASUREMENT_AUTO_AVERAGING_DISPLAY{0x3D};
142constexpr uint8_t REG_CAPACITANCE_MEASUREMENT_DISPLAY{0x3E};
144constexpr uint8_t REG_IC_IDENTITY{0x3F};
148constexpr uint16_t REG_EMD_SUPPRESSION_CONFIGURATION{0x0005};
149constexpr uint16_t REG_SUBCARRIER_START_TIMER{0x0006};
151constexpr uint16_t REG_P2P_RECEIVER_CONFIGURATION{0x000B};
152constexpr uint16_t REG_CORRELATOR_CONFIGURATION_1{0x000C};
153constexpr uint16_t REG_CORRELATOR_CONFIGURATION_2{0x000D};
155constexpr uint16_t REG_SQUELCH_TIMER{0x000F};
156constexpr uint16_t REG_NFC_FIELD_ON_GUARD_TIMER{0x0015};
158constexpr uint16_t REG_AUXILIARY_MODULATION_SETTING{0x0028};
159constexpr uint16_t REG_TX_DRIVER_TIMING{0x0029};
161constexpr uint16_t REG_RESISTIVE_AM_MODULATION{0x002A};
162constexpr uint16_t REG_TX_DRIVER_TIMING_DISPLAY{0x002B};
164constexpr uint16_t REG_REGULATOR_DISPLAY{0x002C};
166constexpr uint16_t REG_OVERSHOOT_PROTECTION_CONFIGURATION_1{0x0030};
167constexpr uint16_t REG_OVERSHOOT_PROTECTION_CONFIGURATION_2{0x0031};
168constexpr uint16_t REG_UNDERSHOOT_PROTECTION_CONFIGURATION_1{0x0032};
169constexpr uint16_t REG_UNDERSHOOT_PROTECTION_CONFIGURATION_2{0x0033};
172constexpr uint8_t CMD_SET_DEFAULT{0xC1};
173constexpr uint8_t CMD_STOP_ALL_ACTIVITIES{0xC2};
174constexpr uint8_t CMD_TRANSMIT_WITH_CRC{0xC4};
175constexpr uint8_t CMD_TRANSMIT_WITHOUT_CRC{0xC5};
176constexpr uint8_t CMD_TRANSMIT_REQA{0xC6};
177constexpr uint8_t CMD_TRANSMIT_WUPA{0xC7};
178constexpr uint8_t CMD_NFC_INITIAL_FIELD_ON{0xC8};
179constexpr uint8_t CMD_NFC_RESPONSE_FIELD_ON{0xC9};
181constexpr uint8_t CMD_GO_TO_SENSE{0xCD};
182constexpr uint8_t CMD_GO_TO_SLEEP{0xCE};
183constexpr uint8_t CMD_MASK_RECEIVE_DATA{0xD0};
184constexpr uint8_t CMD_UNMASK_RECEIVE_DATA{0xD1};
185constexpr uint8_t CMD_CHANGE_AM_MODULATION_STATE{0xD2};
186constexpr uint8_t CMD_MEASURE_AMPLITUDE{0xD3};
187constexpr uint8_t CMD_RESET_RX_GAIN{0xD5};
188constexpr uint8_t CMD_ADJUST_REGULATORS{0xD6};
190constexpr uint8_t CMD_CALIBRATE_DRIVER_TIMING{0xD8};
191constexpr uint8_t CMD_MEASURE_PHASE{0xD9};
192constexpr uint8_t CMD_CLEAR_RSSI{0xDA};
193constexpr uint8_t CMD_CLEAR_FIFO{0xDB};
194constexpr uint8_t CMD_ENTER_TRANSPARENT_MODE{0xDC};
195constexpr uint8_t CMD_CALIBRATE_CAPACITIVE_SENSOR{0xDD};
196constexpr uint8_t CMD_MEASURE_CAPACITANCE{0xDE};
197constexpr uint8_t CMD_MEASURE_POWER_SUPPLY{0xDF};
198constexpr uint8_t CMD_START_GENERAL_PURPOSE_TIMER{0xE0};
199constexpr uint8_t CMD_START_WAKEUP_TIMER{0xE1};
200constexpr uint8_t CMD_START_MASK_RECEIVE_TIMER{0xE2};
201constexpr uint8_t CMD_Start_NO_RESPONSE_TIMER{0xE3};
202constexpr uint8_t CMD_START_PPON2_TIMER{0xE4};
203constexpr uint8_t CMD_STOP_NO_RESPONSE_TIMER{0xE8};
204constexpr uint8_t CMD_REGISTER_SPACEB_ACCESS{0xFB};
205constexpr uint8_t CMD_TEST_ACCESS{0xFC};
209constexpr uint8_t VALID_IDENTIFY_TYPE{0x05};
211constexpr uint16_t PREFIX_SPACE_B{(uint16_t)command::CMD_REGISTER_SPACEB_ACCESS << 8};
214constexpr uint8_t OP_TRAILER_MASK{0x3F};
215constexpr uint8_t OP_WRITE_REGISTER{0x00};
216constexpr uint8_t OP_READ_REGISTER{0x40};
217constexpr uint8_t OP_LOAD_FIFO{0x80};
218constexpr uint8_t OP_LOAD_PT_MEMORY_A_CONFIG{0xA0};
219constexpr uint8_t OP_LOAD_PT_MEMORY_F_CONFIG{0xA8};
220constexpr uint8_t OP_LOAD_PT_MEMORY_TSN_DATA{0xAC};
221constexpr uint8_t OP_READ_PT_MEMORY{0xBF};
222constexpr uint8_t OP_READ_FIFO{0x9F};
223constexpr uint8_t OP_DIRECT_COMMAND{0xC0};
232constexpr uint8_t i2c_thd1{0x20};
233constexpr uint8_t i2c_thd0{0x10};
235constexpr uint16_t i2c_thd116{0x2000};
236constexpr uint16_t i2c_thd016{0x1000};
239constexpr uint8_t sup3v{0x80};
240constexpr uint8_t aat_en{0x20};
241constexpr uint8_t io_drv_lvl{0x04};
242constexpr uint8_t miso_pd1{0x08};
243constexpr uint8_t miso_pd2{0x10};
246constexpr uint8_t en{0x80};
247constexpr uint8_t rx_en{0x40};
248constexpr uint8_t tx_en{0x08};
249constexpr uint8_t wu{0x04};
250constexpr uint8_t en_fd_c1{0x02};
251constexpr uint8_t en_fd_c0{0x01};
253constexpr uint8_t en_fd_mask{0x03};
254constexpr uint8_t en_fd_off{0x00};
255constexpr uint8_t en_fd_manual_ca{0x01};
256constexpr uint8_t en_fd_manual_pdt{0x02};
257constexpr uint8_t en_fd_manual_auto{0x03};
260constexpr uint8_t targ{0x80};
261constexpr uint8_t tr_am{0x04};
262constexpr uint8_t nfc_ar0{0x01};
263constexpr uint8_t nfc_ar1{0x02};
265constexpr uint8_t nfc_ar8_off{0x00};
266constexpr uint8_t nfc_ar8_auto{0x01};
267constexpr uint8_t nfc_ar8_always{0x02};
268constexpr uint8_t nfc_ar8_RFI{0x03};
271constexpr uint8_t no_tx_par{0x80};
272constexpr uint8_t no_rx_par{0x40};
273constexpr uint8_t nfc_f0{0x20};
274constexpr uint8_t antcl{0x01};
277constexpr uint8_t d_ac_ap2p{0x08};
278constexpr uint8_t d_212_424_1r{0x04};
279constexpr uint8_t d_106_ac_a{0x01};
282constexpr uint8_t no_crc_rx{0x80};
283constexpr uint8_t dis_corr{0x04};
284constexpr uint8_t nfc_n1{0x02};
285constexpr uint8_t nfc_n0{0x01};
287constexpr uint8_t nfc_n_mask{0x03};
290constexpr uint8_t ch_sel{0x80};
291constexpr uint8_t z_600k{0x08};
292constexpr uint8_t h200{0x04};
293constexpr uint8_t h80{0x02};
294constexpr uint8_t z12k{0x01};
297constexpr uint8_t sqm_dyn{0x20};
298constexpr uint8_t puz_61{0x10};
299constexpr uint8_t agc_en{0x08};
300constexpr uint8_t agc_m{0x04};
301constexpr uint8_t agc6_3{0x01};
304constexpr uint8_t mrt_step{0x08};
305constexpr uint8_t nrt_nfc{0x04};
306constexpr uint8_t nrt_emv{0x02};
307constexpr uint8_t nrt_step{0x01};
309constexpr uint8_t nrt_gptc_none{0x00};
310constexpr uint8_t nrt_gptc_erx{0x01 << 5};
311constexpr uint8_t nrt_gptc_srx{0x02 << 5};
312constexpr uint8_t nrt_gptc_etx{0x03 << 5};
315constexpr uint8_t I_osc{0x80};
316constexpr uint8_t I_wl{0x40};
317constexpr uint8_t I_rxs{0x20};
318constexpr uint8_t I_rxe{0x10};
319constexpr uint8_t I_txe{0x08};
320constexpr uint8_t I_col{0x04};
321constexpr uint8_t I_rx_rest{0x02};
322constexpr uint8_t I_RFU1{0x01};
324constexpr uint32_t I_osc32 = ((uint32_t)I_osc << 24);
325constexpr uint32_t I_wl32 = ((uint32_t)I_wl << 24);
326constexpr uint32_t I_rxs32 = ((uint32_t)I_rxs << 24);
327constexpr uint32_t I_rxe32 = ((uint32_t)I_rxe << 24);
328constexpr uint32_t I_txe32 = ((uint32_t)I_txe << 24);
329constexpr uint32_t I_col32 = ((uint32_t)I_col << 24);
330constexpr uint32_t I_rx_rest32 = ((uint32_t)I_rx_rest << 24);
333constexpr uint8_t I_dct{0x80};
334constexpr uint8_t I_nre{0x40};
335constexpr uint8_t I_gpe{0x20};
336constexpr uint8_t I_eon{0x10};
337constexpr uint8_t I_eof{0x08};
338constexpr uint8_t I_cac{0x04};
339constexpr uint8_t I_cat{0x02};
340constexpr uint8_t I_nfct{0x01};
342constexpr uint32_t I_nre32 = ((uint32_t)I_nre << 16);
343constexpr uint32_t I_eon32 = ((uint32_t)I_eon << 16);
344constexpr uint32_t I_eof32 = ((uint32_t)I_eof << 16);
345constexpr uint32_t I_cac32 = ((uint32_t)I_cac << 16);
346constexpr uint32_t I_cat32 = ((uint32_t)I_cat << 16);
347constexpr uint32_t I_nfct32 = ((uint32_t)I_nfct << 16);
350constexpr uint8_t I_crc{0x80};
351constexpr uint8_t I_par{0x40};
352constexpr uint8_t I_err2{0x20};
353constexpr uint8_t I_err1{0x10};
354constexpr uint8_t I_wt{0x08};
355constexpr uint8_t I_wam{0x04};
356constexpr uint8_t I_wph{0x02};
357constexpr uint8_t I_wcap{0x01};
359constexpr uint32_t I_crc32 = ((uint32_t)I_crc << 8);
360constexpr uint32_t I_par32 = ((uint32_t)I_par << 8);
361constexpr uint32_t I_err232 = ((uint32_t)I_err2 << 8);
362constexpr uint32_t I_err132 = ((uint32_t)I_err1 << 8);
365constexpr uint8_t I_ppon2{0x80};
366constexpr uint8_t I_sl_wl{0x40};
367constexpr uint8_t I_apon{0x20};
368constexpr uint8_t I_rxe_pta{0x10};
369constexpr uint8_t I_wu_f{0x08};
370constexpr uint8_t I_RFU4{0x04};
371constexpr uint8_t I_wu_ax{0x02};
372constexpr uint8_t I_wu_a{0x01};
374constexpr uint32_t I_apon32 = I_apon;
375constexpr uint32_t I_rxe_pta32 = I_rxe_pta;
376constexpr uint32_t I_wu_f32 = I_wu_f;
377constexpr uint32_t I_wu_ax32 = I_wu_ax;
378constexpr uint32_t I_wu_a32 = I_wu_a;
381constexpr uint8_t pta_state_power_off{0x00};
382constexpr uint8_t pta_state_idle{0x01};
383constexpr uint8_t pta_state_ready_l1{0x02};
384constexpr uint8_t pta_state_ready_l2{0x03};
385constexpr uint8_t pta_state_active{0x05};
386constexpr uint8_t pta_state_halt{0x09};
387constexpr uint8_t pta_state_ready_l1_x{0x0A};
388constexpr uint8_t pta_state_ready_l2_x{0x0B};
389constexpr uint8_t pta_state_active_x{0x0D};
392constexpr uint8_t a_cha{0x80};
393constexpr uint8_t efd_o{0x40};
394constexpr uint8_t tx_on{0x20};
395constexpr uint8_t osc_ok{0x10};
396constexpr uint8_t rx_on{0x08};
397constexpr uint8_t rx_act{0x04};
398constexpr uint8_t en_peer{0x02};
399constexpr uint8_t en_ac{0x01};
404inline bool has_irq32_error(
const uint32_t irq32)
406 return irq32 & 0x0000FF00;
409inline bool is_irq32_timeout(
const uint32_t irq32)
411 return irq32 & regval::I_nre32;
414inline bool is_irq32_rxe(
const uint32_t irq32)
416 return irq32 & regval::I_rxe32;
419inline bool is_irq32_rxs(
const uint32_t irq32)
421 return irq32 & regval::I_rxs32;
424inline bool is_irq32_txe(
const uint32_t irq32)
426 return irq32 & regval::I_txe32;
429inline bool is_irq32_collision(
const uint32_t irq32)
431 return irq32 & regval::I_col32;
434uint8_t calculate_mrt(
const uint32_t us,
const bool mrt_step );
435uint16_t calculate_nrt(
const uint32_t ms,
const bool nrt_step );
436inline uint8_t calculate_fdt(
const uint32_t us);
constexpr uint16_t MAX_FIFO_DEPTH
Maximum FIFO depth.
Definition ST25R3916_definition.hpp:210
constexpr uint32_t PT_MEMORY_F_LENGTH
F-config length.
Definition ST25R3916_definition.hpp:56
constexpr uint32_t PT_MEMORY_A_LENGTH
A-config length.
Definition ST25R3916_definition.hpp:55
InitiatorOperationMode
Initiator operation modes.
Definition ST25R3916_definition.hpp:29
@ SubCarrierStream
Sub-carrier stream mode.
@ NFCForumType1
NFC Forum Type 1 tag (Topaz)
@ NFCIP1
NFCIP-1 active communication.
@ BPSKStream
BPSK stream mode.
TargetOperationMode
Target operation modes.
Definition ST25R3916_definition.hpp:44
@ FelicaBitrate
FeliCa bit rate detection mode.
@ ISO14443ABitrate
ISO14443A bit rate detection mode.
@ Felica
FeliCa™ passive target mode.
constexpr uint32_t PT_MEMORY_LENGTH
all length
Definition ST25R3916_definition.hpp:58
constexpr uint32_t PT_MEMORY_TSN_LENGTH
TSN data length.
Definition ST25R3916_definition.hpp:57
Top level namespace of M5stack.