• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > RC531调试CPU卡出现问题。

RC531调试CPU卡出现问题。

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了rc531,瑞斯康达rc531,光收发器rc531求购,光纤收发器rc531求购,mf rc531等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:RC531调试CPU卡出现问题。
描述:

RC531调试CPU卡出现问题。单片机cpu调试

大家好,最近在调试CPU卡消费。
CPU卡---是已经初始话好的卡,我现在只需要做消费。消费需要用到的PSAM卡也已经调试完毕,具体的消费指令流程也知道了。
读卡芯片--RC531芯片。现在可以实现对M1卡进行减值,写值操作。应该来说我的读卡硬件是没问题。
控制器用的是C8051F系列的一款单片机。
现在的问题是,用我的读卡电路可以寻到卡,选中CPU卡片,然后我发送了RATS命令,卡片也有回复。当发送一条选MF命令时,提示我出错。
RATS命令:
MSndBuffer[0] = 0xE0; //
    MSndBuffer[1] = 0x10;
    MInfo.nBytesToSend = 2;   //    
    status = M500PcdCmd(PCD_TRANSCEIVE,MSndBuffer,MRcvBuffer,&MInfo); 
RATS回复:
status =0;----代表成功
收到的数据:12 78 B3 B1 02 00 81 4D 22 08 86 60 12  22 26 20 00 01
发送选择MF命令:
MSndBuffer[0]=0x0a;
MSndBuffer[1]=0x01;
MSndBuffer[2]=0x00;
MSndBuffer[3]=0xA4;
MSndBuffer[4]=0x00;
MSndBuffer[5]=0x00;
MSndBuffer[6]=0x02;
MSndBuffer[7]=0x3f;
MSndBuffer[8]=0x01;
    
    MInfo.nBytesToSend = 9;   //    
    status = M500PcdCmd(PCD_TRANSCEIVE,MSndBuffer,MRcvBuffer,&MInfo); 
此时:status=0xff------无卡的意思。
下面是选择MF子函数
unsigned char select_mf(unsigned char *buf)
{
   char idata status = MI_OK;
   
    M500PcdSetTmo(3); 
    WriteIO(RegChannelRedundancy,0x0F); 
    ClearBitMask(RegControl,0x08); 
    ResetInfo(MInfo); //  
MSndBuffer[0]=0x0a;
MSndBuffer[1]=0x01;
MSndBuffer[2]=0x00;
MSndBuffer[3]=0xA4;
MSndBuffer[4]=0x00;
MSndBuffer[5]=0x00;
MSndBuffer[6]=0x02;
MSndBuffer[7]=0x3f;
MSndBuffer[8]=0x01;    
    MInfo.nBytesToSend = 9;   //    
    status = M500PcdCmd(PCD_TRANSCEIVE,MSndBuffer,MRcvBuffer,&MInfo); 
    if (status)     
    {
        *buf = 0;
    } 
    else
    {
        if (MInfo.nBytesReceived == 0)
        {
            *buf = 0;
            status = MI_EMPTY;
        }
        else 
        {
            status = MI_OK; 
            memcpy(buf,MRcvBuffer,MInfo.nBytesReceived);
        }
    }
    return status; 
}
M500PCBcommand 用的RC531原厂库函数
//////////////////////////////////////////////////////////////////////
//       W R I T E   A   P C D   C O M M A N D 
///////////////////////////////////////////////////////////////////////
char  M500PcdCmd(unsigned char cmd,
               volatile unsigned char* send, 
               volatile unsigned char* rcv,
               volatile MfCmdInfo *info)
{     
   char          data status    = MI_OK;
   char          data tmpStatus ;
   unsigned char data lastBits;
   unsigned char data irqEn     = 0x00;
   unsigned char data waitFor   = 0x00;
   unsigned char data timerCtl  = 0x00;
   WriteIO(RegInterruptEn,0x7F); // disable all interrupts
   WriteIO(RegInterruptRq,0x7F); // reset interrupt requests
   WriteIO(RegCommand,PCD_IDLE); // terminate probably running command
   FlushFIFO();            // flush FIFO buffer
   // save info structures to module pointers
   MpIsrInfo = info;  
   MpIsrOut  = send;
   MpIsrIn   = rcv;
   info->irqSource = 0x0; // reset interrupt flags
   // depending on the command code, appropriate interrupts are enabled (irqEn)
   // and the commit interrupt is choosen (waitFor).
   switch(cmd)
   {
      case PCD_IDLE:                   // nothing else required
         irqEn = 0x00;
         waitFor = 0x00;
         break;
      case PCD_WRITEE2:                // LoAlert and TxIRq
         irqEn = 0x11;
         waitFor = 0x10;
         break;
      case PCD_READE2:                 // HiAlert, LoAlert and IdleIRq
         irqEn = 0x07;
         waitFor = 0x04;
         break;
      case PC
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • RC531调试CPU卡出现问题。
  • 发现长时间运行时,RC531无法寻到卡,测试发现其他都正常
  • RC531程序跑一段时间,就无法寻到卡

相关文章

  • 2017-06-05 这样的设备需要驱动吗?
  • 2017-06-05 你知道GSP2e/LP-7451吗
  • 2017-06-05 单片机C语言中标志位结构的运用是怎么样的
  • 2017-06-05 MajorFunction[IRP_MJ_SYSTEM_CONTROL]例程如何调用的
  • 2017-06-05 急求!arm开发板串口读写
  • 2017-06-05 WINCE60+3G模块系统自带的拨号程序,拨号成功后不会自动休眠现象
  • 2017-06-05 编译zlib-123出错
  • 2017-06-05 i2c死锁!i2c总线恢复问题?
  • 2017-06-05 请教高手并口问题,多谢关注
  • 2017-06-05 vxworksbin格式映像文件加载问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 点名系统使用什么蓝牙?
    • 有关VxWorks下套接字编程
    • Zigbee串口通信
    • 如何建立某个DNSZone的CNAME镜像?
    • 请教大家一个问题啊,如何在调试时动态的装载驱动程序呢!跪求
    • 如果ip地址为1931132,子网地址为/28,则子网掩码为多少
    • 求助:嵌入式操作系统的课题
    • 菜鸟求助I2C,V4L2,找不到设备
    • sim900aGPRS链接服务器,次数越多越出问题
    • XilinxNetFPGA-1G-CMLKintex-7FPGA板子做视频传输系统,求大神指点!!!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有