tuy0326 发表于 2011-1-20 17:05:24

T5567卡写卡的问题,几天了,大侠帮帮忙吧!

写了好几天T5567卡了,一直写不好,非常郁闷啊,还请大侠能帮忙看看

我的目的是用T5557卡模拟EM4100的卡
下面是我的问题:
1.EM4100包括起始头+数据+校验等等共计64位,那么如果我要模拟EM4100卡,是否就要用T5567的第0页的第1块和第2块写入这些完整的64位数据呢?
2.如果我要模拟EM4100 就需要配置第0页的第0块数据,请问我这样配置是否正确?
0         0000 0000 0001 0100 1000 0000 0100 0000
锁定位0x 0   0   1   4    8    0    4    0
附图:T5567的0块配置定义:
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_612505E9YROT.jpg
(原文件名:t5567-0b.jpg)
3.数据手册说:正常读模式下一个StartGap进入写模式,那么这个GAP是否就是关闭磁场?
附图:T5567写操作:
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_612507B633U0.jpg
(原文件名:T5567-w.jpg)

4.按照上面那个图,写数据的时候数据位之间是有一个gap,这个gap就是关闭磁场吗?
5.数据0和1的区别就是打开磁场时间的长短,按照上图:
   1 = 48 - 63 FC 125hz一个FC应该是8us?那么就是384us—504us
   0 = 16 - 31 FC 那么就是128us—248us
    Sgap = 10-50 FC 那么就是关闭磁场80us—400us
    wgap = 8-30 FC那么位间隔就是关闭磁场64us—240us

6.可是我按照上面的时序调整的非常精确,还是不行,这是为何呢
这是我的代码,参考了坛子里wxws 马建的代码:
#define           USER_DATA1   0xFF94A003
#define    USER_DATA2   0xD4C494DA
/**
* @briefMain program.
* @paramNone
* @retval None
*/
int main(void)
{

       
        uint32_tconfig =0x00148040;
system_init();
/* Infinite loop */
while (1)
{
          //delay_us(2500);
          t5557_std_write(0,config);
          t5557_std_write(1,USER_DATA1);
          t5557_std_write(2,USER_DATA2);
          read_cardInfo(&g_rfid);

          
}
}

void t5557_std_write(uint8_t block,uint32_t data)
{
       uint32_t Tbit;
       uint32_t i;          
       WRITE_TAG_N(0);       
       Contrl_RF(0,START_GAP);        /*起始间隔,开始写*/
       /*写操作码10,对0页进行操作 */
       Contrl_RF(1,WR_ONE);                /*写1,延时*/
       Contrl_RF(0,W_GAP);                /*写间隙,完成写1bit*/
       Contrl_RF(1,WR_ZERO);      /*写0,延时*/
       Contrl_RF(0,W_GAP);                /*写间隙,完成写1bit*/
       /*块锁信号 0:不锁 */
       Contrl_RF(1,WR_ZERO);    /*写0,延时*/
       Contrl_RF(0,W_GAP);          /*写间隙,完成写1bit*/
       //数据 共32bit 数据
       Tbit=0x80000000;    //1000 0000 0000 0000 0000 0000 0000 0000
       for(i=0;i<32;i++)
       {   
               if(data & Tbit)
               {
                       Contrl_RF(1,WR_ONE);    //1
               }
               else
               {
                       Contrl_RF(1,WR_ZERO);    //0
               }
               Contrl_RF(0,W_GAP);   //数据间隔
               Tbit>>=1;    //右移一位,测下一个bit
       }
       //块地址
       Tbit=0x4;//100
       for(i=0;i<3;i++)
       {
               if(block & Tbit)
               {
                       Contrl_RF(1,WR_ONE);    //1
               }
               else
               {
                       Contrl_RF(1,WR_ZERO);    //0
               }
               Contrl_RF(0,W_GAP);   
               Tbit>>=1;    //右移一位,测下一个bit
       }       
       STOP();
       delay_ms(60000);
}
void Contrl_RF(uint8_t state,uint32_t dtime)
{   
        //控制载波时长开/关,us
        if (state == 0)
        {
                RF_PH_DO_HIGH;
        }
        else
        {
                RF_PH_DO_LOW;
        }       
        delay_us(dtime);      //延时
}

下面附上T5567的完整数据手册,请大侠帮忙,感谢感谢...

点击此处下载 ourdev_612508HE18G1.pdf(文件大小:547K) (原文件名:T5567 AA.pdf)

tuy0326 发表于 2011-1-20 17:11:01

补充一点,这个卡应该是没有密码的,按照数据手册的说法,当卡有密码,那么离开磁场后就会进入休眠模式,当再靠近磁场时仍然不会发送数据,必须用Stap 10 + 密码,唤醒,才能读取数据

而我这张卡,只要靠近磁场就有数据输出,虽然看不懂,示波器抓出来是一个周期256us,我猜测是RF/32的曼码

tuy0326 发表于 2011-1-20 17:34:57

再补充一张配置页0,块1的天线上面的波形配置字:0x00148040 前面三位100 (10,操作码,对0页操作;0不锁定)
Sgap = T1-T2之间的时间

修改原因:忘记上图片


http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_612514R86MUB.jpg
(原文件名:ant.jpg)

tuy0326 发表于 2011-1-20 18:09:50

再顶起来

tuy0326 发表于 2011-1-20 19:18:39

up

omlarn 发表于 2011-2-25 19:36:28

顶起!

yanrz 发表于 2011-4-24 20:54:54

楼主解决问题了没有??
能否共享下解决方法??
谢谢!

yanrz 发表于 2011-5-19 22:36:40

竟然还没解决??
页: [1]
查看完整版本: T5567卡写卡的问题,几天了,大侠帮帮忙吧!