请问吧里有懂rc522模块的吗,想改卡的秘钥但读写总是失败
rfid吧
全部回复
仅看楼主
level 2
请问吧里有懂rc522模块的吗,想改卡的秘钥但读写总是失败,不是说默认密码是FF吗 但是验证秘钥0xFFFFFFFFFFFF这个默认密码也验证不通过
使卡休眠应该不会影响读写吧,试过删掉休眠,但还是无法读写,怀疑是不是我读写寄存器的函数有误 帮我看看
我是模块接到板子上直接板子上运行程序的,终端显示内容
#define ReadWriteArea 7
unsigned char SetKey_read[16];
unsigned char DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char ResetKey[6] = {0xAB, 0xCD, 0xEF, 0xFF, 0xFF, 0xFF};
unsigned char SetKey_write[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x07, 0x80, 0x69,
0xAB, 0xCD, 0xEF, 0xFF, 0xFF, 0xFF};
unsigned char Default_write[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x07, 0x80, 0x69,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
------------------------------------------------------------------------------------------------------------------------------------------
这是我修改秘钥的函数
void my_register(void)
{
while(1)
{
int i,j;
HandleConfigMenu('A');//读卡
my_status = PcdSelect(UID);
PcdHalt();
printf("Select:%x\n", my_status);
if(MI_OK != my_status) continue;
my_status = PcdAuthState(0x60 , ReadWriteArea, ResetKey, UID);
if(MI_OK == my_status)
{
printf("The card has been registered!!!\n");
usleep(500000);
break;
}
else
{
PcdRead(ReadWriteArea, SetKey_read);
for(i = 0;i < 16;i++)
{
printf("%x\t", SetKey_read[i]);
}
printf("Check\n");
my_status = PcdWrite(ReadWriteArea, SetKey_write);
printf("PcdWrite: %x\n", my_status);
printf("WRITE ...\n");
if(MI_OK == my_status)
{
my_status = MI_ERR;
printf("Registering...\n");
buzzer_control(DEVICE_BUZZER,BUZZERON);
usleep(500000);
buzzer_control(DEVICE_BUZZER,BUZZEROFF);
printf("!!!!!!!!\n");
printf("\n");
printf("The card register successfully!\n");
printf("\n");
printf("!!!!!!!!\n");
break;
}
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------
验证函数
char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
{
char status;
unsigned int unLen;
unsigned char i,ucComMF522Buf[MAXRLEN];
ucComMF522Buf[0] = auth_mode;
ucComMF522Buf[1] = addr;
for (i=0; i<6; i++)
{ ucComMF522Buf[i+2] = *(pKey+i); }
for (i=0; i<6; i++)
{ ucComMF522Buf[i+8] = *(pSnr+i); }
status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);
if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08)))
{ status = MI_ERR; }
return status;
}
-------------------------------------------------------------------------------------------------------------------------------------------
读卡函数只是寻卡、防冲撞;下面是我初始化,有没有漏掉哪一步的初始化
int init_rc522()
{
int version;
version = PcdReset();
PcdAntennaOff();
usleep(2000);
PcdAntennaOn();
usleep(2000);
M500PcdConfigISOType( 'A' );
return version;
}
-------------------------------------------------------------------------------------------------------------------------------------------
然后是我读写寄存器的函数,和网上的一些基于单片机的历程不一样
int WriteRawRC(int addr, int data)
{
int ret;
int fd = g_SPI_Fd;
unsigned char TxBuf[2];
TxBuf[0] = ((unsigned char)addr << 1)&0x7E;
TxBuf[1] = (unsigned char)data;
ret = write(fd, TxBuf, 2);
if (ret < 0)
printf("spi:SPI Write error\n");
usleep(10);
return ret;
}
unsigned char ReadRawRC(int addr)
{
int ret;
int fd = g_SPI_Fd;
unsigned char ReData;
unsigned char Address;
Address = (unsigned char)addr << 1;
Address |= (1 << 7);
Address &= ~(1 << 0);
ret = write(fd, &Address, 1);
if (ret < 0)
printf("spi:SPI Write error\n");
usleep(100);
ret = read(fd, &ReData, 1);
if (ret < 0)
printf("spi:SPI Read error\n");
return ReData;
}
2020年05月05日 06点05分 1
level 1
楼主现在会搞了吗,如果会,能不能教我一下,我买了这个模块无从下手[惊哭][惊哭]
2020年05月07日 04点05分 2
level 1
同搞rc522
2021年02月14日 06点02分 3
level 1
深圳莱卡科技 专业研发生产 RFID读写器、IC卡读写模块,门禁读头,二维码扫码刷卡器,智能门锁等产品,提供方案及承接项目定制。微信电话同号:
18688797740
傅生
F:https://shop108148763.taobao.com/index.htm?spm=a1z10.3-c-s.w5002-23339845924.2.25fa2d5814IjALLC: https://shop68188692.taobao.com/index.htm?spm=2013.1.w5002-23339277085.2.366b3978UVyiLS
2021年10月14日 09点10分 4
1