极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12109|回复: 6

求解释Mifare S50 sector trailor结构

[复制链接]
发表于 2015-4-26 21:31:24 | 显示全部楼层 |阅读模式
本帖最后由 Gwei 于 2015-4-28 11:08 编辑

为什么KeyA={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}可以用来读取数据,这说明你sector trailor keyA位置存储了KeyA,可是为啥读出来的数据是{0x00,0x00,0x00,0x00,0x00,0x00}求助呀
代码是改这位朋友的特此鸣谢 bg1lsy
连接:
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=4719&highlight=rfid

自己的代码
[pre lang="arduino" line="1" file="read.cpp"]#include <SPI.h>
#include <RFID.h>

RFID rfid(10,5);    //D10--读卡器MOSI引脚、D5--读卡器RST引脚

//4字节卡序列号,第5字节为校验字节
unsigned char serNum[5];
//原扇区A密码,16个扇区,每个扇区密码6Byte
unsigned char sectorKeyA[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
        
int serial_putc( char c, struct __file * )
{
  Serial.write( c );
  return c;
}
void printf_begin(void)
{
  fdevopen( &serial_putc, 0 );
}

void setup()
{
  Serial.begin(9600);
  printf_begin();
  SPI.begin();
  rfid.init();
}

void loop()
{
  unsigned char i,tmp;
  unsigned char status;
  unsigned char str[MAX_LEN];
  unsigned char RC_size;
  unsigned char blockAddr;        //选择操作的块地址0~63

  //找卡
  rfid.isCard();
  //读取卡序列号
  if (rfid.readCardSerial())
  {
    Serial.print("The card's number is  : ");
    Serial.print(rfid.serNum[0],HEX);
    Serial.print(rfid.serNum[1],HEX);
    Serial.print(rfid.serNum[2],HEX);
    Serial.print(rfid.serNum[3],HEX);
    Serial.print(rfid.serNum[4],HEX);
    Serial.println(" ");
  }

  //选卡,返回卡容量(锁定卡片,防止多次读写)
  rfid.selectTag(rfid.serNum);

  //读卡
  for(int j=0,k=1;j<64;j++,k++){
        blockAddr = j;                //数据块7
        status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorKeyA, rfid.serNum);
        if (status == MI_OK)  //认证
        {
          //读数据
          //blockAddr = blockAddr - 3 ; //数据块4
          if( rfid.read(blockAddr, str) == MI_OK)
          {
            printf("Block %d the data is : ",j%4);
            for(int i=0;i<16;i++){
                  printf("%.2x ",str);
                  }
                  Serial.println();
            if(k%4==0){
              printf("up is sector %d\n",k/4-1);
              Serial.println();
            }
          }
        }
  }
  rfid.halt();
}[/code]
tip:只能实现S50,S70有点问题,随后补上S70的代码。
回复

使用道具 举报

 楼主| 发表于 2015-4-26 21:33:41 | 显示全部楼层
RFID的库文件在
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=4719&highlight=rfid
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-26 21:53:12 | 显示全部楼层
效果图~其实我自己还有一个疑问
官方文档说:每个分区的最后一块也就是说所谓的sector trailer
它的结构是KeyA 0~5byte access 6~9byte KeyB 10~15
可是我读出来的KeyA是00 00 00 00 00 00 是不是我哪里弄错了!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-27 12:25:42 | 显示全部楼层
本帖最后由 Gwei 于 2015-4-27 12:40 编辑

数据分析
sector 0的block 0(也叫“block 0”)中的0~3byte是Serial Number of the card而4byte为校验位
即:93=17(Xor)41(Xor)90(Xor)55 4byte处存放了0~3byte的异或校验位 Xor是异或操作也叫模二加

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-4-27 14:11:52 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

发表于 2015-4-27 17:30:05 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-28 11:03:19 | 显示全部楼层
S50官方文档。PS:求大神帮解释sector trailer的结构。怎么跟官方文档解释的不一样。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 07:38 , Processed in 0.048991 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表