基于STM32的RC522对UID标签写入问题

基于stm32,在rc522中,想着往m1卡 里写数据,通过测试,发现密码识别是错误、写入数据、读取数据也都是错误的,请大家帮忙看看错在哪里,才能使得数据可写入、可读取

我开始怀疑是block块对应的密码不对,可是根据厂家初始控制值来的

主要操作:

图示代码,我是特地将错误作为判断标准,发现程序写入不进去数据。

img

使用的函数

img

img

呈现效果(串口打印)

img

【以下回答由 GPT 生成】

问题解答

经过仔细阅读你提供的问题描述和代码示例,我可以看出你遇到了两个问题:密码识别错误和无法正确写入和读取数据。下面我将针对你的问题分别给出解决方案。

问题一:密码识别错误

密码识别错误可能是由于密码设置错误导致的。你可以尝试以下步骤来解决问题:

  1. 确保你在写入数据之前正确地配置了RC522模块的密码。
  2. 检查密码的长度是否符合要求,并确保密码被正确地存储在数组或变量中。

下面是一个示例代码,用于设置密码和验证密码:

// 设置密码
byte key[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
MFRC522::MIFARE_Key mifareKey;
for (byte i = 0; i < 6; i++) {
    mifareKey.keyByte[i] = key[i];
}

// 验证密码
MFRC522::StatusCode status;
byte buffer[18];
byte size = sizeof(buffer);
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &mifareKey, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
    Serial.println("密码验证失败");
    return;
}

问题二:无法正确写入和读取数据

无法正确写入和读取数据可能是由于操作块编号错误或写入的数据格式错误导致的。你可以尝试以下步骤来解决问题:

  1. 确保你在写入和读取数据之前正确地选择了操作的块编号。
  2. 检查写入数据的格式是否正确,特别是在写入字符串时要注意字符串结尾的'\0'字符。
  3. 确保你在写入数据之后立即执行了写入数据块的操作。

下面是一个示例代码,用于正确写入和读取数据:

// 选择块编号
byte block = 4;

// 写入数据
byte newData[] = "Hello World";
MFRC522::StatusCode status;
status = mfrc522.MIFARE_Write(block, newData, sizeof(newData));
if (status != MFRC522::STATUS_OK) {
    Serial.println("数据写入失败");
    return;
}

// 读取数据
byte readData[18];
byte bytesRead;
status = mfrc522.MIFARE_Read(block, readData, &bytesRead);
if (status != MFRC522::STATUS_OK) {
    Serial.println("数据读取失败");
    return;
}
Serial.print("读取到的数据:");
for (byte i = 0; i < bytesRead; i++) {
    Serial.write(readData[i]);
}
Serial.println();

请仔细检查你的代码中是否存在上述问题,并根据需要进行调整。如果你事先没有厂家提供的初始控制值,你可以尝试使用上述示例中的密码和数据写入代码。

希望这些解决方案能够帮助你解决问题。如果你还有其他疑问,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

看这里:

这个就是你想要的,增删改查的操作。

哇塞,没想到真的回答我了!好的,我看了您的代码,但发现您的是实现了更复杂的功能(数据使用结构体封装,添加状态),对比着看,还是发现不了自己的问题出在哪里。想请您看看我的这份代码,能否就出错的原因指点我一二,真的感谢大佬,希望您能帮我解答,谢谢谢谢谢谢