RC522 源码枚举解读

6/20/2024 9:01:09 PM
346
0
enum StatusCode : byte {
		STATUS_OK				,	// 成功
		STATUS_ERROR			,	// 通信错误
		STATUS_COLLISION		,	// 碰撞
		STATUS_TIMEOUT			,	// 通信超时
		STATUS_NO_ROOM			,	// 没有足够缓冲区
		STATUS_INTERNAL_ERROR	,	// 内部错误,意外的;-)
		STATUS_INVALID			,	// 参数无效.
		STATUS_CRC_WRONG		,	// CRC校验不匹配
		STATUS_MIFARE_NACK		= 0xff	//  PICC回应了NAK。
	};
	
enum PCD_Command : byte {
		PCD_Idle				= 0x00,		// 无动作,取消当前的命令执行
		PCD_Mem					= 0x01,		// 在内部缓冲区中存储25个字节
		PCD_GenerateRandomID	= 0x02,		// 生成一个10字节的随机ID号
		PCD_CalcCRC				= 0x03,		// 激活CRC协处理器或执行自检
		PCD_Transmit			= 0x04,		// 从FIFO缓冲区传输数据
		PCD_NoCmdChange			= 0x07,		//没有命令更改,可以在不影响命令的情况下修改CommandReg寄存器位,例如PowerDown位
		PCD_Receive				= 0x08,		// 激活接收器电路
		PCD_Transceive 			= 0x0C,		// 将数据从FIFO缓冲区传输到天线,并在传输后自动激活接收器
		PCD_MFAuthent 			= 0x0E,		// 作为读取器执行MIFARE标准身份验证
		PCD_SoftReset			= 0x0F		// 重启RC522
	};
// MFRC522 RxGain[2:0]掩码,定义接收器的信号电压增益因子(在PCD上)。
// 在数据手册的第9.3.3.6节/表98中描述,网址为http://www.nxp.com/documents/data_sheet/MFRC522.pdf
enum PCD_RxGain: byte {
	RxGain_18dB	= 0x00 << 4,	// 000b - 18 dB,最小值
	RxGain_23dB	= 0x01 << 4,	// 001b - 23 dB
	RxGain_18dB_2 = 0x02 << 4,	// 010b - 18 dB,010b似乎是000b的重复
	RxGain_23dB_2 = 0x03 << 4,	// 011b - 23 dB,011b似乎是001b的重复
	RxGain_33dB	= 0x04 << 4,	// 100b - 33 dB,平均值,典型默认值
	RxGain_38dB	= 0x05 << 4,	// 101b - 38 dB
	RxGain_43dB	= 0x06 << 4,	// 110b - 43 dB
	RxGain_48dB	= 0x07 << 4,	// 111b - 48 dB,最大值
	RxGain_min	= 0x00 << 4,	// 000b - 18 dB,最小值,RxGain_18dB的便利方式
	RxGain_avg	= 0x04 << 4,	// 100b - 33 dB,平均值,RxGain_33dB的便利方式
	RxGain_max	= 0x07 << 4	// 111b - 48 dB,最大值,RxGain_48dB的便利方式
};
// 发送给PICC的命令
enum PICC_Command : byte {
    // PCD用于管理与多个PICC通信的命令(ISO 14443-3,类型A,第6.4节)
    PICC_CMD_REQA          = 0x26,     // 请求命令,类型A。邀请处于空闲状态的PICC进入就绪状态并准备进行防碰撞或选择。7位帧。
    PICC_CMD_WUPA          = 0x52,     // 唤醒命令,类型A。邀请处于空闲和停止状态的PICC进入就绪状态并准备进行防碰撞或选择。7位帧。
    PICC_CMD_CT            = 0x88,     // 级联标签。实际上不是一个命令,但在防碰撞过程中使用。
    PICC_CMD_SEL_CL1       = 0x93,     // 防碰撞/选择,级联等级1
    PICC_CMD_SEL_CL2       = 0x95,     // 防碰撞/选择,级联等级2
    PICC_CMD_SEL_CL3       = 0x97,     // 防碰撞/选择,级联等级3
    PICC_CMD_HLTA          = 0x50,     // 停止命令,类型A。指示一个活动的PICC进入停止状态。
    PICC_CMD_RATS          = 0xE0,     // 请求重置响应命令。
    // 用于MIFARE Classic的命令(来自http://www.mouser.com/ds/2/302/MF1S503x-89574.pdf,第9节)
    // 使用PCD_MFAuthent认证对扇区的访问,然后使用这些命令读取/写入/修改扇区上的块。
    // 读取/写入命令也可以用于MIFARE Ultralight。
    PICC_CMD_MF_AUTH_KEY_A = 0x60,     // 使用密钥A进行认证
    PICC_CMD_MF_AUTH_KEY_B = 0x61,     // 使用密钥B进行认证
    PICC_CMD_MF_READ       = 0x30,     // 从PICC认证的扇区读取一个16字节的块。也用于MIFARE Ultralight。
    PICC_CMD_MF_WRITE      = 0xA0,     // 向PICC认证的扇区写入一个16字节的块。对于MIFARE Ultralight称为“兼容写入”。
    PICC_CMD_MF_DECREMENT  = 0xC0,     // 减少一个块的内容,并将结果存储在内部数据寄存器中。
    PICC_CMD_MF_INCREMENT  = 0xC1,     // 增加一个块的内容,并将结果存储在内部数据寄存器中。
    PICC_CMD_MF_RESTORE    = 0xC2,     // 将一个块的内容读入内部数据寄存器。
    PICC_CMD_MF_TRANSFER   = 0xB0,     // 将内部数据寄存器的内容写入一个块。
    // 用于MIFARE Ultralight的命令(来自http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf,第8.6节)
    // PICC_CMD_MF_READ和PICC_CMD_MF_WRITE也可以用于MIFARE Ultralight。
    PICC_CMD_UL_WRITE      = 0xA2      // 向PICC写入一个4字节的页面。
};
// MIFARE常量不适合其他任何地方
enum MIFARE_Misc {
	MF_ACK				= 0xA,		// MIFARE Classic使用4位的ACK/NAK。0xA以外的值为NAK。
	MF_KEY_SIZE			= 6			// 一个Mifare Crypto1密钥是6个字节。
};

 

// 我们可以检测到的PICC类型。如果增加更多类型,记得更新PICC_GetTypeName()。
// 最后一个值设置为0xff,这样编译器似乎会使用更少的RAM,某些优化被触发。
enum PICC_Type : byte {
    PICC_TYPE_UNKNOWN       ,   // 未知的PICC类型
    PICC_TYPE_ISO_14443_4   ,   // 符合ISO/IEC 14443-4标准的PICC
    PICC_TYPE_ISO_18092     ,   // 符合ISO/IEC 18092标准的PICC(NFC)
    PICC_TYPE_MIFARE_MINI   ,   // MIFARE Classic协议,320字节
    PICC_TYPE_MIFARE_1K     ,   // MIFARE Classic协议,1KB
    PICC_TYPE_MIFARE_4K     ,   // MIFARE Classic协议,4KB
    PICC_TYPE_MIFARE_UL     ,   // MIFARE Ultralight或Ultralight C
    PICC_TYPE_MIFARE_PLUS   ,   // MIFARE Plus
    PICC_TYPE_MIFARE_DESFIRE,   // MIFARE DESFire
    PICC_TYPE_TNP3XXX       ,   // 仅在NXP AN 10833 MIFARE类型识别程序中提到
    PICC_TYPE_NOT_COMPLETE  = 0xff // SAK表明UID不完整
};

RC522的寄存器

	enum PCD_Register : byte {
		// 页面 0:命令和状态
		//					0x00			// 未来使用保留
		CommandReg				= 0x01 << 1,	// 启动和停止命令执行
		ComIEnReg				= 0x02 << 1,	// 启用和禁用中断请求控制位
		DivIEnReg				= 0x03 << 1,	// 启用和禁用中断请求控制位
		ComIrqReg				= 0x04 << 1,	// 中断请求位
		DivIrqReg				= 0x05 << 1,	// 中断请求位
		ErrorReg				= 0x06 << 1,	// 错误位,显示上次执行命令的错误状态
		Status1Reg				= 0x07 << 1,	// 通信状态位
		Status2Reg				= 0x08 << 1,	// 接收器和发射器状态位
		FIFODataReg				= 0x09 << 1,	// 64字节FIFO缓冲区的输入和输出
		FIFOLevelReg			= 0x0A << 1,	// 存储在FIFO缓冲区中的字节数
		WaterLevelReg			= 0x0B << 1,	// FIFO欠流和溢流警告级别
		ControlReg				= 0x0C << 1,	// 杂项控制寄存器
		BitFramingReg			= 0x0D << 1,	// 位导向帧的调整
		CollReg					= 0x0E << 1,	// 在RF接口上检测到的第一个位冲突的位位置
		//						  0x0F			// 未来使用保留

		
		// 页面 1:命令
		// 						  0x10			// 未来使用保留
		ModeReg					= 0x11 << 1,	// 定义发送和接收的一般模式
		TxModeReg				= 0x12 << 1,	// 定义传输数据速率和帧格式
		RxModeReg				= 0x13 << 1,	// 定义接收数据速率和帧格式
		TxControlReg			= 0x14 << 1,	// 控制天线驱动引脚TX1和TX2的逻辑行为
		TxASKReg				= 0x15 << 1,	// 控制传输调制的设置
		TxSelReg				= 0x16 << 1,	// 选择天线驱动器的内部源
		RxSelReg				= 0x17 << 1,	// 选择内部接收器设置
		RxThresholdReg			= 0x18 << 1,	// 选择位解码器的阈值
		DemodReg				= 0x19 << 1,	// 定义解调器设置
		// 						0x1A			// 未来使用保留
		// 						0x1B			// 未来使用保留
		MfTxReg					= 0x1C << 1,	// 控制一些MIFARE通信传输参数
		MfRxReg					= 0x1D << 1,	// 控制一些MIFARE通信接收参数
		// 						0x1E			// 未来使用保留
		SerialSpeedReg			= 0x1F << 1,	// 选择串行UART接口的速度

		// 页面 2:配置
		// 						0x20			// 未来使用保留
		CRCResultRegH			= 0x21 << 1,	// 显示CRC计算的MSB和LSB值
		CRCResultRegL			= 0x22 << 1,
		// 						0x23			// 未来使用保留
		ModWidthReg				= 0x24 << 1,	// 控制调制宽度设置
		// 						0x25			// 未来使用保留
		RFCfgReg				= 0x26 << 1,	// 配置接收器增益
		GsNReg					= 0x27 << 1,	// 选择天线驱动引脚TX1和TX2的导电率用于调制 
		CWGsPReg				= 0x28 << 1,	// 定义在无调制期间p驱动器输出的导电率
		ModGsPReg				= 0x29 << 1,	// 定义在调制期间p驱动器输出的导电率
		TModeReg				= 0x2A << 1,	// 定义内部定时器的设置
		TPrescalerReg			= 0x2B << 1,	// TPrescaler值的低8位。高4位在TModeReg中。
		TReloadRegH				= 0x2C << 1,	// 定义16位定时器重载值
		TReloadRegL				= 0x2D << 1,
		TCounterValueRegH		= 0x2E << 1,	// 显示16位定时器值
		TCounterValueRegL		= 0x2F << 1,

		// 页面 3:测试寄存器
		//						0x30			// 未来使用保留
		TestSel1Reg				= 0x31 << 1,	// 通用测试信号配置
		TestSel2Reg				= 0x32 << 1,	// 通用测试信号配置
		TestPinEnReg			= 0x33 << 1,	// 在引脚 D1 到 D7 上启用引脚输出驱动器
		TestPinValueReg			= 0x34 << 1,	// 当 D1 到 D7 用作 I/O 总线时定义它们的值
		TestBusReg				= 0x35 << 1,	// 显示内部测试总线的状态
		AutoTestReg				= 0x36 << 1,	// 控制数字自检
		VersionReg				= 0x37 << 1,	// 显示软件版本
		AnalogTestReg			= 0x38 << 1,	// 控制引脚 AUX1 和 AUX2
		TestDAC1Reg				= 0x39 << 1,	// 定义 TestDAC1 的测试值
		TestDAC2Reg				= 0x3A << 1,	// 定义 TestDAC2 的测试值
		TestADCReg				= 0x3B << 1		// 显示 ADC I 和 Q 通道的值
		// 						  0x3C			// 生产测试保留
		// 						  0x3D			// 生产测试保留
		// 						  0x3E			// 生产测试保留
		// 						  0x3F			// 生产测试保留

		

	};
	
	 	
	
	 
 
	

 

全部评论



提问