You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用RC522+STM32F103C8T6读取MIFARE 1K卡数据并实现USB HID输出

问题解答

1. 读取MIFARE 1K卡上的特定数据

MIFARE 1K卡采用扇区-块结构存储数据,要读取你写入的;1234567?格式数据,需完成以下步骤:

  • 确定数据存储位置:原厂商大概率将数据写入了非UID所在的块(UID固定在扇区0的块0),优先尝试扇区1的块4、扇区2的块8这类常用存储块,或遍历所有可读写块测试。
  • 实现MIFARE密钥认证:MIFARE卡每个扇区都有A、B两组密钥,读写数据块前必须通过密钥认证。原厂商可能使用默认密钥FFFFFFFFFFFF,可先以此测试。核心代码示例:
    // 认证扇区1的块4,使用A密钥
    uint8_t keyA[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
    MFRC522_Auth(MFRC522_AUTH_KEY_A, 4, keyA, &uid); // uid为已读取的卡UID
    
  • 读取数据块并解析:认证通过后读取对应块的16字节数据,将字节转换为ASCII字符串(因写入的是ASCII格式),过滤末尾填充0即可得到目标数据。示例:
    uint8_t blockData[16];
    MFRC522_Read(4, blockData); // 读取块4的数据
    // 转换为ASCII字符串,遇到填充0停止
    char targetData[17] = {0};
    for(int i=0; i<16; i++){
        if(blockData[i] == 0) break;
        targetData[i] = (char)blockData[i];
    }
    

2. 实现USB HID键盘输出至记事本

STM32F103C8T6可通过USB HID设备类模拟键盘输入,步骤如下:

  • CubeMX配置:开启USB外设,选择HID设备类型,在HID配置中设置Descriptor Type为Keyboard,报告长度设为8(标准HID键盘报告格式:1字节修饰键 + 6字节按键码)。
  • 实现HID键盘发送逻辑:将读取到的ASCII字符串转换为对应HID键盘扫描码,逐个发送按键按下+释放的报告。核心代码示例:
    // ASCII转HID扫描码映射表(简化版)
    uint8_t ascii_to_hid[] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x2A, 0x2B, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x2D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, // '1'-'7'对应0x1E-0x24
        0x25, 0x26, 0x27, 0x28, 0x29, 0x2D, 0x2E, 0x2F,
        0x33, // ';'对应0x33
        0x38  // '?'对应0x38
    };
    
    // 发送单个字符
    void HID_Send_Char(char c){
        uint8_t report[8] = {0};
        report[2] = ascii_to_hid[(uint8_t)c]; // 填充按键码
        USBD_HID_SendReport(&hUsbDeviceFS, report, 8);
        HAL_Delay(10);
        // 发送按键释放报告
        memset(report, 0, 8);
        USBD_HID_SendReport(&hUsbDeviceFS, report, 8);
        HAL_Delay(10);
    }
    
    // 发送完整字符串
    void HID_Send_String(char* str){
        while(*str){
            HID_Send_Char(*str);
            str++;
        }
    }
    
  • 触发输入:成功读取到卡的目标数据后,调用HID_Send_String(targetData)即可将数据输出到当前光标所在的记事本窗口。

3. 当前配置缺失的关键环节

  • MIFARE数据块访问逻辑缺失:现有代码仅实现UID读取,未包含密钥认证、数据块读取及ASCII解析的完整逻辑。
  • USB HID设备配置与实现不足:未在CubeMX中配置USB为HID键盘类型,也未编写HID报告发送的代码。
  • 卡数据存储信息不明确:未确定原厂商写入数据的具体扇区/块、使用的密钥,导致无法正确定位和读取数据。
  • RC522通信完整性验证:可能未确保RC522与STM32的SPI通信参数(时钟速度、引脚电平)完全匹配,导致数据读取失败。

内容的提问来源于stack exchange,提问作者user29444496

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:55:18