【Makeblock使用】写RC522
接上一篇帖子【Makeblock使用】小试RC522射频模块-Arduino中文社区 http://www.arduino.cn/thread-21478-1-1.html那篇帖子只是测试了一下卡的序列号,接下来写入卡数据S50卡参数
一、 主要指标l容量为8K位EEPROMl分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位l每个扇区有独立的一组密码及访问控制l每张卡有唯一序列号,为32位l具有防冲突机制,支持多卡操作l无电源,自带天线,内含加密控制逻辑和通讯逻辑电路l数据保存期为10年,可改写10万次,读无限次l工作温度:-20℃~50℃(湿度为90%)l工作频率:13.56MHZl通信速率:106 KBPSl读写距离:10 cm以内(与读写器有关)
二、 工作原理卡片的电气部分只由一个天线和ASIC组成。天线:卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中。ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个 8K位EEPROM组成。工作原理:读写器向M1卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,在电磁波的激励下,LC谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到2V时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。
流程图
对数据块的操作 读 (Read):读一个块;写 (Write):写一个块;加(Increment):对数值块进行加值;减(Decrement):对数值块进行减值;存储(Restore):将块中的内容存到数据寄存器中;传输(Transfer):将数据寄存器中的内容写入块中;中止(Halt):将卡置于暂停工作状态;
测试
附程序,中间字符多写了一个“K”,
unsigned char serNum;
//写卡数据
unsigned char writeDate ={'a', 'r', 'd', 'u', 'i', 'n', 'o', '.', 'k', 'c', 'n', 0, 0, 0, 0, 0};
unsigned char sectorKeyA = {
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};
unsigned char sectorNewKeyA = {
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop()
{
unsigned char i,tmp;
unsigned char status;
unsigned char str;
unsigned char RC_size;
unsigned char blockAddr;
rfid.isCard();
if (rfid.readCardSerial())
{
Serial.print("The card's number is: ");
Serial.print(rfid.serNum,HEX);
Serial.print(rfid.serNum,HEX);
Serial.print(rfid.serNum,HEX);
Serial.print(rfid.serNum,HEX);
Serial.print(rfid.serNum,HEX);
Serial.println(" ");
}
rfid.selectTag(rfid.serNum);
blockAddr = 7; //数据块7
if (rfid.auth(PICC_AUTHENT1A, blockAddr, sectorKeyA, rfid.serNum) == MI_OK)//认证
{
status = rfid.write(blockAddr, sectorNewKeyA);
Serial.print("set the new card password, and can modify the data of the Sector: ");
Serial.println(blockAddr/4,DEC);
blockAddr = blockAddr - 3 ;
status = rfid.write(blockAddr, writeDate);
if(status == MI_OK)
{
Serial.println("Write card OK!");
}
}
blockAddr = 7;
status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorNewKeyA, rfid.serNum);
if (status == MI_OK)//认证
{
blockAddr = blockAddr - 3 ;
if( rfid.read(blockAddr, str) == MI_OK)
{
Serial.print("Read from the card ,the data is : ");
Serial.println((char *)str);
}
}
rfid.halt();
}
纠正:RFID rfid(53,5); 程序中没修改过来 好评,有库文件吗? 如何识别多张卡啊我不同的卡都可以控制同一个目标 陈小皮 发表于 2016-6-12 10:58
好评,有库文件吗?
有,怎么给你 liyming 发表于 2016-7-23 14:42
如何识别多张卡啊我不同的卡都可以控制同一个目标
每个卡有唯一的序列号,也有密码,你可以通过读写器烧写密码,然后允许允许的密码控制目标 suoma 发表于 2016-7-24 07:11
有,怎么给你
我已经找到了 ,文件可以打包成压缩包上传 怎么对卡进行加减
页:
[1]