#include <SPI.h>
#include <MFRC522.h>#define RST_PIN         9
#define SS_PIN          10MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;void setup() {Serial.begin(9600);while (!Serial);    // 等待串口打开SPI.begin();mfrc522.PCD_Init();// 出厂默认使用FF FF FF FF FF FF作为密码A和Bfor (byte i = 0; i < 6; i++) {key.keyByte[i] = 0xFF;}Serial.println(F("开始扫描卡进行读写..."));Serial.print(F("使用密码:"));dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE);Serial.println();Serial.println(F("数据将被写入到#1扇区"));
}void loop() {//寻找新卡if ( ! mfrc522.PICC_IsNewCardPresent())return;//验证UID是否可读if ( ! mfrc522.PICC_ReadCardSerial())return;//显示卡信息Serial.print(F("卡 UID:"));dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);Serial.println();Serial.print(F("卡类型: "));MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);Serial.println(mfrc522.PICC_GetTypeName(piccType));// 检查是否MIFARE卡类型if (    piccType != MFRC522::PICC_TYPE_MIFARE_MINI&&  piccType != MFRC522::PICC_TYPE_MIFARE_1K&&  piccType != MFRC522::PICC_TYPE_MIFARE_4K) {Serial.println(F("不支持读取此卡类型"));return;}// 操作扇区1// 扇区1包括:块4~块7byte sector         = 1;byte blockAddr      = 4;byte dataBlock[]    = {0x01, 0x02, 0x03, 0x04,0x05, 0x06, 0x07, 0x08,0x09, 0x0A, 0x0B, 0x0C,0x0D, 0x0E, 0x0F, 0x10};//要写入的数据byte trailerBlock   = 7;MFRC522::StatusCode status;byte buffer[18];byte size = sizeof(buffer);// 使用密码A进行身份认证Serial.println(F("使用密码A进行身份认证..."));status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));if (status != MFRC522::STATUS_OK) {Serial.print(F("身份认证失败 "));Serial.println(mfrc522.GetStatusCodeName(status));return;}// 显示当前扇区数据Serial.println(F("当前扇区数据:"));mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);Serial.println();// 读取写入前块数据Serial.print(F("读取写入前块")); Serial.print(blockAddr);Serial.println(F("数据..."));status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);if (status != MFRC522::STATUS_OK) {Serial.print(F("读取失败 "));Serial.println(mfrc522.GetStatusCodeName(status));}Serial.print(F("块")); Serial.print(blockAddr); Serial.println(F("数据:"));dump_byte_array(buffer, 16); Serial.println();Serial.println();// 使用密码B进行身份认证Serial.println(F("使用密码B进行身份认证..."));status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));if (status != MFRC522::STATUS_OK) {Serial.print(F("身份认证失败 "));Serial.println(mfrc522.GetStatusCodeName(status));return;}//写入数据Serial.print(F("写数据到块")); Serial.print(blockAddr);Serial.println(F("..."));dump_byte_array(dataBlock, 16); Serial.println();status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);if (status != MFRC522::STATUS_OK) {Serial.print(F("写入失败 "));Serial.println(mfrc522.GetStatusCodeName(status));}Serial.println();//读取写入后块数据Serial.print(F("读取写入后块")); Serial.print(blockAddr);Serial.println(F("数据..."));status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);if (status != MFRC522::STATUS_OK) {Serial.print(F("读取失败 "));Serial.println(mfrc522.GetStatusCodeName(status));}Serial.print(F("块")); Serial.print(blockAddr); Serial.println(F("块:"));dump_byte_array(buffer, 16); Serial.println();// 显示当前扇区数据Serial.println(F("当前扇区数据:"));mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);Serial.println();//使放置在读卡区的IC卡进入休眠状态,不再重复读卡mfrc522.PICC_HaltA();// 停止读卡模块编码mfrc522.PCD_StopCrypto1();
}// 十六进制输出
void dump_byte_array(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 0x10 ? " 0" : " ");Serial.print(buffer[i], HEX);}
}

17 RFID卡的读写相关推荐

  1. rfid卡的读写c语言,RFID超高频桌面式USB发卡器

    RFID超高频桌面式USB接口发卡器UR5002是一款高性能的UHF频段EPCglobal UHF Class 1 Gen 2 / ISO 18000-6C ISO 18000-6B协议电子标签读写器 ...

  2. requestPermissions读写手机存储权限_单片机实例分享,RFID卡读写器的设计

    RFID(Radio Frequency Identification,射频识别)技术是一种非接触自动识别技术,利用射频信号通过空间耦合(电感或电磁耦合)实现无接触信息传递,并通过所传递的信息达到识别 ...

  3. EMID|FDX-B格式134.2KHZ低频RFID标签编码器读写器CK-A05性能与写卡操作说明

    EMID|FDX-B格式134.2KHZ低频RFID标签编码器读写器CK-A05是基于USB2.0技术开发的低频读写器,可支持对RFID地感标签的读写操作,同时支持EMID,FDX-B两种数据格式.读 ...

  4. 用c语言做RFID读卡程序,2.STM32读卡号读写数据代码示例3.0(C语言)

    文件名大小更新时间 2.STM32读卡号读写数据代码示例3.0(C语言)\HFRFID.uvgui.WEIZAI736912016-07-15 2.STM32读卡号读写数据代码示例3.0(C语言)\H ...

  5. nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)

    from: http://wszf.net/archives/2012/11/07/80510.html 一般来说,给予MifareClassic的射频卡,一般内存大小有3种: 1K: 16个分区(s ...

  6. Arduino + RFID 读取 IC 卡 Arduino uno中获得RFID的UID 并通过串口转发RFID卡号

    RFID简介:射频识别即RFID(Radio Frequency IDentification)技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定 ...

  7. Linux下读取RFID卡号(C串口编程)

    由于项目需要用到RFID.GPRS.摄像头等模块所以便看了一下,整理了一下学习思路,本篇先是整理一下串口读取RFID卡号的程序思路,后面还会更其他的 RFID模块: 本次采用的是125K的RFID读卡 ...

  8. 常用的RFID卡 14443A/B, 15693

    常用的RFID卡分布在高频和超高频. 高频卡目前的频率主要是13.56MHz.有几种标准:ISO-14443-A.ISO-14443-B.ISO-15693.ISO-18000-3: 超高频的有ISO ...

  9. 桌面式FDX-B格式工业级低频RFID标签编码器|读写器CK-TR05-US读写卡操作流程

    桌面式工业级低频RFID标签编码器|读写器CK-TR05-US支持125KHZ.134.2KHZ频段ID卡读写,支持FDX-B格式数据读写,本文将重点介绍桌面式FDX-B格式工业级低频RFID标签编码 ...

最新文章

  1. IOS7原生API进行二维码条形码的扫描
  2. QuickFlow之任务代理-TaskDelegation
  3. Processing入门教程-Processing的“前世今生”
  4. 【Boost】boost库中智能指针——scoped_ptr
  5. 【Error-Android Studio】clang++: error: no such file or directory
  6. 可添加至收藏夹并在浏览器地址栏运行的JS代码
  7. 我的2020(年终总结)
  8. 简洁UI好玩的文字转换emoji表情微信小程序支持句子词语转换_源码
  9. dmp导入数据 oracle_一文看懂oracle12c数据库跨小版本迁移
  10. SAP ABAP 系列丛书推荐:ABAP开发类标准培训课程
  11. 优雅的备份博客内的外链图片
  12. 计算机内存条能装几个,4G内存条和2G内存条能不能装到一个电脑上?
  13. 浅谈加密算法 aes
  14. eplan 电箱布局_Eplan D布局步骤
  15. 个人博客系统源码 溯雪Sxlog轻博客源码 PHP开源 简洁干净轻博客源码
  16. 新绝代双骄三常见问题解答(不同于网上那片)
  17. 心脏病最新研究进展2021年4月
  18. 6个方面全面了解科学注塑成型理论,你看得懂几个?
  19. 数学图形(2.25)三维悬链线与悬链面
  20. Glyphicon 字体图标

热门文章

  1. clamav的unrar解压模块加载
  2. 反向传播不香了?解读 Hinton 大佬的 Forward-Forward 算法
  3. 安装TypeScript
  4. 数据库综合查询与视图操作
  5. ps aux 中rss的单位
  6. office picture manger图片处理工具下载与安装教程
  7. 全国宣传思想工作会议 讲话_会议一周后,我的思想得到了满足
  8. 精准控制的开关电脉冲表征GST薄膜的相变行为(2121.8.29,cyy)
  9. Windows 局域网中文件进行自动同步备份通过synctoy和计划任务实现
  10. 启动定时器t0的工作指令是_80c51单片机定时器t0工作于方式1定时时间1ms当晶振为6mhz时求计数初值为多少...