mfrc522_regs.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2021 Freie Universität Berlin
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
24 #include "bitarithm.h"
25 
26 #ifdef __cplusplus
27 extern "C"
28 {
29 #endif
30 
35 typedef enum {
36  /* Command and status register definitions (page 36, table 20) */
52  /* Command register definitions (page 36, table 20) */
66  /* Configuration register definitions (page 36-37, table 20) */
81  /* Test register definitions (page 37, table 20) */
100 typedef enum {
101  /* Command codes (page 70, table 149) */
119 typedef enum {
120  /* Receiver gain definition (page 70, table 149) */
139 typedef enum {
140  /* Commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4) */
149  /* Commands used for MIFARE Classic EV1 (https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf, page 13, table 9) */
161  /* Commands used for MIFARE Ultralight (https://www.nxp.com/docs/en/data-sheet/MF0ICU1.pdf, Section 7.6) */
171 #define MFRC522_FIFO_BUF_SIZE 64
172 
176 # define MFRC522_PICC_CASCADE_TAG 0x88
177 
181 #define MFRC522_BIT_COMMAND_RCV_OFF BIT5
182 
191 #define MFRC522_BIT_COMMAND_POWER_DOWN BIT4
192 
200 #define MFRC522_BITMASK_COMMAND_POWER_DOWN 0x0F
201 
210 #define MFRC522_BIT_COML_EN_IRQ_INV BIT7
211 
216 #define MFRC522_BIT_COML_EN_TX_I_EN BIT6
217 
222 #define MFRC522_BIT_COML_EN_RX_I_EN BIT5
223 
228 #define MFRC522_BIT_COML_EN_IDLE_I_EN BIT4
229 
234 #define MFRC522_BIT_COML_EN_HI_ALERT_I_EN BIT3
235 
240 #define MFRC522_BIT_COML_EN_LO_ALERT_I_EN BIT2
241 
246 #define MFRC522_BIT_COML_EN_ERR_I_EN BIT1
247 
252 #define MFRC522_BIT_COML_EN_TIMER_I_EN BIT0
253 
258 #define MFRC522_BIT_DIVL_EN_IRQ_PUSH_PULL BIT7
259 
263 #define MFRC522_BIT_DIVL_EN_MFIN_ACT_I_EN BIT4
264 
269 #define MFRC522_BIT_DIVL_EN_CRC_I_EN BIT2
270 
276 #define MFRC522_BIT_COM_IRQ_SET_1 BIT7
277 
282 #define MFRC522_BIT_COM_IRQ_TX_IRQ BIT6
283 
289 #define MFRC522_BIT_COM_IRQ_RX_IRQ BIT5
290 
299 #define MFRC522_BIT_COM_IRQ_IDLE_IRQ BIT4
300 
306 #define MFRC522_BIT_COM_IRQ_HI_ALERT_IRQ BIT3
307 
313 #define MFRC522_BIT_COM_IRQ_LO_ALERT_IRQ BIT2
314 
318 #define MFRC522_BIT_COM_IRQ_ERR_IRQ BIT1
319 
323 #define MFRC522_BIT_COM_IRQ_TIMER_IRQ BIT0
324 
329 #define MFRC522_BIT_DIV_IRQ_SET_2 BIT7
330 
335 #define MFRC522_BIT_DIV_IRQ_MFIN_ACT_IRQ BIT4
336 
340 #define MFRC522_BIT_DIV_IRQ_CRC_IRQ BIT2
341 
348 #define MFRC522_BIT_ERROR_WR_ERR BIT7
349 
354 #define MFRC522_BIT_ERROR_TEMP_ERR BIT6
355 
360 #define MFRC522_BIT_ERROR_BUFFER_OVFL BIT4
361 
368 #define MFRC522_BIT_ERROR_COLL_ERR BIT3
369 
375 #define MFRC522_BIT_ERROR_CRC_ERR BIT2
376 
382 #define MFRC522_BIT_ERROR_PARITY_ERR BIT1
383 
391 #define MFRC522_BIT_ERROR_PROTOCOL_ERR BIT0
392 
400 #define MFRC522_BIT_STATUS_1_CRC_OK BIT6
401 
406 #define MFRC522_BIT_STATUS_1_CRC_READY BIT5
407 
413 #define MFRC522_BIT_STATUS_1_IRQ BIT4
414 
422 #define MFRC522_BIT_STATUS_1_T_RUNNING BIT3
423 
431 #define MFRC522_BIT_STATUS_1_HI_ALERT BIT1
432 
440 #define MFRC522_BIT_STATUS_1_LO_ALERT BIT0
441 
446 #define MFRC522_BIT_STATUS_2_TEMP_SENS_CLEAR BIT7
447 
454 #define MFRC522_BIT_STATUS_2_I2C_FORCE_HS BIT6
455 
463 #define MFRC522_BIT_STATUS_2_MF_CRYPTO_1_ON BIT3
464 
482 #define MFRC522_BITMASK_STATUS_2_MODEM_STATE_2 0x07
483 
491 #define MFRC522_BITMASK_FIFO_DATA 0xFF
492 
498 #define MFRC522_BIT_FIFO_LEVEL_FLUSH_BUFFER BIT7
499 
507 #define MFRC522_BITMASK_FIFO_LEVEL_FIFO_LEVEL 0x7F
508 
521 #define MFRC522_BITMASK_WATER_LEVEL_WATER_LEVEL 0x3F
522 
527 #define MFRC522_BIT_CONTROL_T_STOP_NOW BIT7
528 
533 #define MFRC522_BIT_CONTROL_T_START_NOW BIT6
534 
541 #define MFRC522_BITMASK_CONTROL_RX_LAST_BITS 0x07
542 
547 #define MFRC522_BIT_BIT_FRAMING_START_SEND BIT7
548 
565 #define MFRC522_BITMASK_BIT_FRAMING_RX_ALIGN 0x70
566 
574 #define MFRC522_BIT_BIT_FRAMING_TX_LAST_BITS 0x07
575 
580 #define MFRC522_BIT_COLL_VALUES_AFTER_COLL BIT7
581 
586 #define MFRC522_BIT_COLL_COLL_POS_NOT_VALID BIT5
587 
600 #define MFRC522_BITMASK_COLL_COLL_POS 0x1F
601 
608 #define MFRC522_BIT_MODE_MSB_FIRST BIT7
609 
613 #define MFRC522_BIT_MODE_TX_WAIT_RF BIT5
614 
622 #define MFRC522_BIT_MODE_POL_MFIN BIT3
623 
637 #define MFRC522_BITMASK_MODE_CRC_PRESET 0x03
638 
643 #define MFRC522_BIT_TX_MODE_TX_CRC_EN BIT7
644 
656 #define MFRC522_BITMASK_TX_MODE_TX_SPEED 0x70
657 
661 #define MFRC522_BIT_TX_MODE_INV_MOD BIT3
662 
667 #define MFRC522_BIT_RX_MODE_RX_CRC_EN BIT7
668 
680 #define MFRC522_BITMASK_RX_MODE_RX_SPEED 0x70
681 
686 #define MFRC522_BIT_RX_MODE_RX_NO_ERR BIT3
687 
703 #define MFRC522_BIT_RX_MODE_RX_MULTIPLE BIT2
704 
708 #define MFRC522_BIT_TX_CONTROL_INV_TX2_RF_ON BIT7
709 
713 #define MFRC522_BIT_TX_CONTROL_INV_TX1_RF_ON BIT6
714 
718 #define MFRC522_BIT_TX_CONTROL_INV_TX2_RF_OFF BIT5
719 
723 #define MFRC522_BIT_TX_CONTROL_INV_TX1_RF_OFF BIT4
724 
730 #define MFRC522_BIT_TX_CONTROL_TX2_CW BIT3
731 
736 #define MFRC522_BIT_TX_CONTROL_TX2_RF_EN BIT1
737 
742 #define MFRC522_BIT_TX_CONTROL_TX1_RF_EN BIT0
743 
748 #define MFRC522_BIT_TX_ASK_FORCE_100_ASK BIT6
749 
763 #define MFRC522_BITMASK_TX_SEL_DRIVER_SEL 0x30
764 
782 #define MFRC522_BITMASK_TX_SEL_MF_OUT_SEL 0x0F
783 
795 #define MFRC522_BITMASK_RX_SEL_UART_SEL 0xC0
796 
806 #define MFRC522_BITMASK_RX_SEL_RX_WAIT 0x3F
807 
815 #define MFRC522_BITMASK_RX_THRESHHOLD_MIN_LEVEL 0xF0
816 
825 #define MFRC522_BITMASK_RX_THRESHHOLD_COLL_LEVEL 0x07
826 
837 #define MFRC522_BITMASK_DEMOD_ADD_IQ 0xC0
838 
843 #define MFRC522_BIT_DEMOD_FIX_IQ BIT5
844 
858 #define MFRC522_BIT_DEMOD_T_PRESCAL_EVEN BIT4
859 
866 #define MFRC522_BITMASK_DEMOD_TAU_RCV 0x0C
867 
873 #define MFRC522_BITMASK_DEMOD_TAU_SYNC 0x03
874 
881 #define MFRC522_BITMASK_MF_TX_TX_WAIT 0x03
882 
888 #define MFRC522_BIT_MF_RX_PARITY_DISABLE BIT4
889 
896 #define MFRC522_BITMASK_SERIAL_SPEED_BR_T0 0xE0
897 
904 #define MFRC522_BITMASK_SERIAL_SPEED_BR_T1 0x1F
905 
912 #define MFRC522_BITMASK_CRC_RESULT_MSB_CRC_RESULT_MSB 0xFF
913 
921 #define MFRC522_BITMASK_CRC_RESULT_LSB_CRC_RESULT_LSB 0xFF
922 
930 #define MFRC522_BITMASK_MOD_WIDTH 0xFF
931 
948 #define MFRC522_BITMASK_RF_CFG_RX_GAIN 0x70
949 
960 #define MFRC522_BITMASK_GS_N_CW_GS_N 0xF0
961 
971 #define MFRC522_BITMASK_GS_N_MOD_GS_N 0x0F
972 
981 #define MFRC522_BITMASK_CW_GS_P_CW_GS_P 0x3F
982 
992 #define MFRC522_BITMASK_MOD_GS_P_MOD_GS_P 0x3F
993 
1004 #define MFRC522_BIT_T_MODE_T_AUTO BIT7
1005 
1018 #define MFRC522_BITMASK_T_MODE_T_GATED 0x60
1019 
1026 #define MFRC522_BIT_T_MODE_T_AUTO_RESTART BIT4
1027 
1044 #define MFRC522_BITMASK_T_MODE_T_PRESCALER_HI 0x0F
1045 
1061 #define MFRC522_BITMASK_T_PRESCALER_T_PRESCALER_LO 0xFF
1062 
1070 #define MFRC522_BITMASK_T_RELOAD_MSB_T_RELOAD_VAL_HI 0xFF
1071 
1079 #define MFRC522_BITMASK_T_RELOAD_LSB_T_RELOAD_VAL_LO 0xFF
1080 
1086 #define MFRC522_BITMASK_T_COUNTER_VAL_MSB_T_COUNTER_VAL_HI 0xFF
1087 
1093 #define MFRC522_BITMASK_T_COUNTER_VAL_LSB_T_COUNTER_VAL_LO 0xFF
1094 
1095 #ifdef __cplusplus
1096 }
1097 #endif
1098 
Helper functions for bit arithmetic.
mfrc522_pcd_command_t
Command definitions.
Definition: mfrc522_regs.h:100
@ MFRC522_CMD_MEM
Stores 25 bytes into the internal buffer.
Definition: mfrc522_regs.h:103
@ MFRC522_CMD_NO_CMD_CHANGE
No command change, can be used to modify the CommandReg register bits without affecting the command,...
Definition: mfrc522_regs.h:107
@ MFRC522_CMD_MF_AUTHENT
Performs the MIFARE standard authentication as a reader.
Definition: mfrc522_regs.h:110
@ MFRC522_CMD_TRANSMIT
Transmits data from the FIFO buffer.
Definition: mfrc522_regs.h:106
@ MFRC522_CMD_CALC_CRC
Activates the CRC coprocessor or performs a self test.
Definition: mfrc522_regs.h:105
@ MFRC522_CMD_RECEIVE
Activates the receiver circuits.
Definition: mfrc522_regs.h:108
@ MFRC522_CMD_SOFT_RESET
Resets the MFRC522.
Definition: mfrc522_regs.h:111
@ MFRC522_CMD_TRANSCEIVE
Transmits data from FIFO buffer to antenna and automatically activates the receiver after transmissio...
Definition: mfrc522_regs.h:109
@ MFRC522_CMD_GENERATE_RANDOM_ID
Generates a 10-byte random ID number.
Definition: mfrc522_regs.h:104
@ MFRC522_CMD_IDLE
No action, cancels current command execution.
Definition: mfrc522_regs.h:102
mfrc522_picc_command_t
PICC command definitions.
Definition: mfrc522_regs.h:139
@ MFRC522_PICC_CMD_MF_PERS_UID_USAGE
Set anti-collision, selection and authentication behaviour.
Definition: mfrc522_regs.h:152
@ MFRC522_PICC_CMD_MF_AUTH_KEY_B
Authentication with Key B.
Definition: mfrc522_regs.h:151
@ MFRC522_PICC_CMD_ISO_14443_SEL_CL1
Anti collision/Select, Cascade Level 1.
Definition: mfrc522_regs.h:143
@ MFRC522_PICC_CMD_MF_UL_READ
Read one block of 16 bytes.
Definition: mfrc522_regs.h:163
@ MFRC522_PICC_CMD_MF_UL_WRITE
Transfers 16 bytes, but only writes least significant 4 bytes.
Definition: mfrc522_regs.h:162
@ MFRC522_PICC_CMD_MF_SET_MOD_TYPE
Set load modulation strength.
Definition: mfrc522_regs.h:153
@ MFRC522_PICC_CMD_ISO_14443_HLTA
HLTA command, Type A.
Definition: mfrc522_regs.h:146
@ MFRC522_PICC_CMD_ISO_14443_WUPA
Wake-UP command, Type A.
Definition: mfrc522_regs.h:142
@ MFRC522_PICC_CMD_ISO_14443_REQA
REQuest command, Type A.
Definition: mfrc522_regs.h:141
@ MFRC522_PICC_CMD_MF_TRANSFER
Write the value from the Transfer Buffer into destination block.
Definition: mfrc522_regs.h:159
@ MFRC522_PICC_CMD_MF_WRITE
Write one block of 16 bytes.
Definition: mfrc522_regs.h:155
@ MFRC522_PICC_CMD_ISO_14443_SEL_CL3
Anti collision/Select, Cascade Level 3.
Definition: mfrc522_regs.h:145
@ MFRC522_PICC_CMD_MF_READ
Read one block of 16 bytes.
Definition: mfrc522_regs.h:154
@ MFRC522_PICC_CMD_ISO_14443_RATS
Request command for Answer To Reset.
Definition: mfrc522_regs.h:147
@ MFRC522_PICC_CMD_ISO_14443_SEL_CL2
Anti collision/Select, Cascade Level 2.
Definition: mfrc522_regs.h:144
@ MFRC522_PICC_CMD_MF_INCREMENT
Increment: Adds the operand to the value of the addressed block, and stores the result in the Transfe...
Definition: mfrc522_regs.h:157
@ MFRC522_PICC_CMD_MF_UL_COMPAT_WRITE
Write one block of 16 bytes.
Definition: mfrc522_regs.h:164
@ MFRC522_PICC_CMD_MF_DECREMENT
Decrement: Subtracts the operand from the value of the addressed block, and stores the result in the ...
Definition: mfrc522_regs.h:156
@ MFRC522_PICC_CMD_MF_AUTH_KEY_A
Authentication with Key A.
Definition: mfrc522_regs.h:150
@ MFRC522_PICC_CMD_MF_RESTORE
Restore: Copies the value of the addressed block into the Transfer Buffer.
Definition: mfrc522_regs.h:158
mfrc522_pcd_register_t
Register definitions.
Definition: mfrc522_regs.h:35
@ MFRC522_REG_RF_CFG
Configures the receiver gain.
Definition: mfrc522_regs.h:70
@ MFRC522_REG_DIV_IRQ
Interrupt request bits.
Definition: mfrc522_regs.h:41
@ MFRC522_REG_CRC_RESULT_LSB
Shows the lower 8 bits of the CRC calculation.
Definition: mfrc522_regs.h:68
@ MFRC522_REG_T_MODE
Defines settings for the internal timer.
Definition: mfrc522_regs.h:74
@ MFRC522_REG_TEST_PIN_EN
Enables pin output driver on pins D1 to D7.
Definition: mfrc522_regs.h:84
@ MFRC522_REG_TEST_PIN_VALUE
Defines the values for D1 to D7 when it is used as an I/O bus.
Definition: mfrc522_regs.h:85
@ MFRC522_REG_DEMOD
Defines demodulator settings.
Definition: mfrc522_regs.h:61
@ MFRC522_REG_T_RELOAD_MSB
Defines the higher 8 bits of 16-bit timer reload value.
Definition: mfrc522_regs.h:76
@ MFRC522_REG_TX_ASK
Controls the setting of the transmission modulation.
Definition: mfrc522_regs.h:57
@ MFRC522_REG_ERROR
Error bits showing the error status of the last command executed.
Definition: mfrc522_regs.h:42
@ MFRC522_REG_T_COUNTER_VAL_MSB
Shows the higher 8 bits of 16-bit timer value.
Definition: mfrc522_regs.h:78
@ MFRC522_REG_COMMAND
Starts and stops command execution.
Definition: mfrc522_regs.h:37
@ MFRC522_REG_ANALOG_TEST
Controls the pins AUX1 and AUX2.
Definition: mfrc522_regs.h:89
@ MFRC522_REG_COM_IRQ
Interrupt request bits.
Definition: mfrc522_regs.h:40
@ MFRC522_REG_RX_THRESHHOLD
Selects thresholds for the bit decoder.
Definition: mfrc522_regs.h:60
@ MFRC522_REG_BIT_FRAMING
Adjustments for bit-oriented frames.
Definition: mfrc522_regs.h:49
@ MFRC522_REG_TEST_BUS
Shows the status of the internal test bus.
Definition: mfrc522_regs.h:86
@ MFRC522_REG_TX_SEL
Selects the internal sources for the antenna driver.
Definition: mfrc522_regs.h:58
@ MFRC522_REG_STATUS_2
Receiver and transmitter status bits.
Definition: mfrc522_regs.h:44
@ MFRC522_REG_MF_TX
Controls some MIFARE communication transmit parameters.
Definition: mfrc522_regs.h:62
@ MFRC522_REG_SERIAL_SPEED
Selects the speed of the serial UART interface.
Definition: mfrc522_regs.h:64
@ MFRC522_REG_T_PRESCALER
Defines settings for the internal timer.
Definition: mfrc522_regs.h:75
@ MFRC522_REG_CRC_RESULT_MSB
Shows the higher 8 bits of the CRC calculation.
Definition: mfrc522_regs.h:67
@ MFRC522_REG_TEST_SEL_1
General test signal configuration.
Definition: mfrc522_regs.h:82
@ MFRC522_REG_RX_MODE
Defines reception data rate and framing.
Definition: mfrc522_regs.h:55
@ MFRC522_REG_RX_SEL
Selects internal receiver settings.
Definition: mfrc522_regs.h:59
@ MFRC522_REG_TX_MODE
Defines transmission data rate and framing.
Definition: mfrc522_regs.h:54
@ MFRC522_REG_GS_N
Selects the conductance of the antenna driver pins TX1 and TX2 for modulation.
Definition: mfrc522_regs.h:71
@ MFRC522_REG_VERSION
Shows the software version.
Definition: mfrc522_regs.h:88
@ MFRC522_REG_STATUS_1
Communication status bits.
Definition: mfrc522_regs.h:43
@ MFRC522_REG_TEST_DAC2
Defines the test value for TestDAC2.
Definition: mfrc522_regs.h:91
@ MFRC522_REG_T_COUNTER_VAL_LSB
Shows the lower 8 bits of 16-bit timer value.
Definition: mfrc522_regs.h:79
@ MFRC522_REG_CONTROL
Miscellaneous control registers.
Definition: mfrc522_regs.h:48
@ MFRC522_REG_TEST_ADC
Shows the value of ADC I and Q channels.
Definition: mfrc522_regs.h:92
@ MFRC522_REG_CW_GS_P
Defines the conductance of the p-driver output during periods of no modulation.
Definition: mfrc522_regs.h:72
@ MFRC522_REG_FIFO_DATA
Input and output of 64 byte FIFO buffer.
Definition: mfrc522_regs.h:45
@ MFRC522_REG_TEST_DAC_1
Defines the test value for TestDAC1.
Definition: mfrc522_regs.h:90
@ MFRC522_REG_TX_CONTROL
Controls the logical behavior of the antenna driver pins TX1 and TX2.
Definition: mfrc522_regs.h:56
@ MFRC522_REG_WATER_LEVEL
Level for FIFO underflow and overflow warning.
Definition: mfrc522_regs.h:47
@ MFRC522_REG_MODE
Defines general modes for transmitting and receiving.
Definition: mfrc522_regs.h:53
@ MFRC522_REG_AUTO_TEST
Controls the digital self test.
Definition: mfrc522_regs.h:87
@ MFRC522_REG_T_RELOAD_LSB
Defines the lower 8 bits of 16-bit timer reload value.
Definition: mfrc522_regs.h:77
@ MFRC522_REG_MOD_WIDTH
Controls the ModWidth setting.
Definition: mfrc522_regs.h:69
@ MFRC522_REG_COLL
Bit position of the first bit-collision detected on the RF interface.
Definition: mfrc522_regs.h:50
@ MFRC522_REG_MF_RX
Controls some MIFARE communication receive parameters.
Definition: mfrc522_regs.h:63
@ MFRC522_REG_MOD_GS_P
Defines the conductance of the p-driver output during periods of modulation.
Definition: mfrc522_regs.h:73
@ MFRC522_REG_FIFO_LEVEL
Number of bytes stored in the FIFO buffer.
Definition: mfrc522_regs.h:46
@ MFRC522_REG_DIVL_EN
Enable and disable interrupt request control bits.
Definition: mfrc522_regs.h:39
@ MFRC522_REG_COML_EN
Enable and disable interrupt request control bits.
Definition: mfrc522_regs.h:38
@ MFRC522_REG_TEST_SEL_2
General test signal configuration and PRBS control.
Definition: mfrc522_regs.h:83
mfrc522_pcd_rx_gain_t
Receiver gain definitions.
Definition: mfrc522_regs.h:119
@ MFRC522_RXGAIN_MIN
18 dB, minimum, convenience for MFRC522_RXGAIN_18_DB
Definition: mfrc522_regs.h:129
@ MFRC522_RXGAIN_AVG
33 dB, average, convenience for MFRC522_RXGAIN_33_DB
Definition: mfrc522_regs.h:130
@ MFRC522_RXGAIN_33_DB
33 dB, average, and typical default
Definition: mfrc522_regs.h:125
@ MFRC522_RXGAIN_48_DB
48 dB, maximum
Definition: mfrc522_regs.h:128
@ MFRC522_RXGAIN_43_DB
43 dB
Definition: mfrc522_regs.h:127
@ MFRC522_RXGAIN_38_DB
38 dB
Definition: mfrc522_regs.h:126
@ MFRC522_RXGAIN_23_DB
23 dB
Definition: mfrc522_regs.h:122
@ MFRC522_RXGAIN_23_DB_2
23 dB, duplicate for MFRC522_RXGAIN_23_DB
Definition: mfrc522_regs.h:124
@ MFRC522_RXGAIN_18_DB
18 dB, minimum
Definition: mfrc522_regs.h:121
@ MFRC522_RXGAIN_MAX
48 dB, maximum, convenience for MFRC522_RXGAIN_48_DB
Definition: mfrc522_regs.h:131
@ MFRC522_RXGAIN_18_DB_2
18 dB, duplicate for MFRC522_RXGAIN_18_DB
Definition: mfrc522_regs.h:123