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 // 生产测试保留
};
本文链接:https://blog.nnwk.net/article/1553
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论