1. 钱柜娱乐官网
  2. 论坛
  3. 外包
  4. 下载
  5. Datasheet
  6. 公开课
  7. 更多

ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
打印

[STM32F1] 智能卡(CPU卡)接受不到过程字节。

[复制链接]
263|19
跳转到指定楼层
楼主
本帖最后由 qq5782098 于 2018-1-15 15:47 编辑

智能卡(CPU卡)接受不到过程字节。

有一张CPU卡发送选择文件命令  00  A4  00  00  02  3F  00接到不到过程字节和任何数据

但是发送随机数命令  00  84  00  00  02可以正常获取并得到随机数。


代码
unsigned int ICC_IsoCommand(int p_iInLength, unsigned char *p_abSentData, unsigned char *p_iOutLen, unsigned char *p_abResponse)
{
        // Local variable declaration
        unsigned char ACK = 0;
        unsigned int l_wStatus = 0;
        int i; //for counter
    unsigned char p_bIsoType = 0;
    unsigned char Status = 0;   //调试完去掉

    //ICC_ChangeSlot(Slot);

   //USART_DMACmd(SC_USART, USART_DMAReq_Rx, ENABLE);
        // Send command


    if(USART_GetFlagStatus(CPU_USARTx, USART_FLAG_RXNE) == SET)     //经调试需要在此家一个  读操作来过滤上电的一个字节  复位同理
    {
        USART_ReceiveData(CPU_USARTx);
    }
        WritesamData(&p_abSentData[CMD_CLA]);
        WritesamData(&p_abSentData[CMD_INS]);
        WritesamData(&p_abSentData[CMD_P1]);
        WritesamData(&p_abSentData[CMD_P2]);
        WritesamData(&p_abSentData[CMD_P3]);

        Status = USART_ReceiveData(CPU_USARTx);     
        
    if(p_iInLength==0x05)
    {

            p_bIsoType=ISO_OUT;         //case 2
            p_iOutLen[0]=p_abSentData[CMD_P3];

    }
    else
    {
            p_bIsoType=ISO_IN;              //case 3
            p_iOutLen[0]=0x00;
    }
        
ReceiveGoOn:        


        if(ReadPsamData(&ACK, SC_Receive_Timeout)==0)
        {
                return 0x6fff;
        }
        if (ACK == 0x60)
        {
                goto ReceiveGoOn;
        }        
        if (ACK != p_abSentData[CMD_INS])
        {
                l_wStatus = (ACK<<8);
                        if(ReadPsamData(&ACK, SC_Receive_Timeout)==0)
                        {
               //p_iOutLen[0]=0x00;
                           return 0x6fff;

                        }                        
                l_wStatus = l_wStatus | ACK;
                return l_wStatus;
        }
        
        switch (p_bIsoType)
        {
        
                case ISO_IN :       //case 3

                        CardDelay_ms(1);
                        
                        // Send buffer data
                        for (i = 0; i < (p_iInLength-5) ; i++)
                        {
                                WritesamData(&p_abSentData[i+5]);
                        }
               
                        (void)USART_ReceiveData(CPU_USARTx);
                        
                        l_wStatus = GetStatus();
                        
                        return l_wStatus;

                case ISO_OUT :          //case 2
                        
                        for (i = 0; i < p_iOutLen[0]; i++)
                        {
                                        if(ReadPsamData(&ACK,SC_Receive_Timeout)==0)
                                        {

                        //p_iOutLen[0]=0x00;
                                           return 0x6fff;

                                        }                        
                                p_abResponse
= ACK;
                        }

                        l_wStatus = GetStatus();
                        
                        return l_wStatus;


                default :   //p_iOutLen[0]=0x00;
                    return(0x6fff);
               
               
        }
}










来自 2楼
 楼主 | 2018-1-19 17:45 | 只看该作者
问题已解决,将停止位从官方例程的1.5位改为1位便正常了。具体什么原因尚且未知。
板凳
| 2018-1-10 15:27 | 只看该作者
看不懂……。
地板
 楼主 | 2018-1-11 11:36 | 只看该作者
自顶
5
| 2018-1-11 12:37 | 只看该作者
我以为是STM32 CPU卡了,接受不到过程字节
6
| 2018-1-11 14:36 | 只看该作者
首先确认该应用下,有此文件,另外CPU卡会返回错误码吧
没看你的程序,注意也要收数据且分析错误码
7
| 2018-1-11 16:15 | 只看该作者
这个是什么CPU?
8
| 2018-1-11 16:15 | 只看该作者
波特率对吗
9
| 2018-1-11 16:16 | 只看该作者
楼主配置的串口硬件的问题
10
| 2018-1-11 16:16 | 只看该作者
降低波特率
11
| 2018-1-11 16:17 | 只看该作者
是发送的数据和接受的数据不一致吗
12
| 2018-1-11 16:17 | 只看该作者
看不懂了。
13
| 2018-1-11 16:17 | 只看该作者
是串口发送的吧。
14
| 2018-1-11 16:17 | 只看该作者
串口需要共地处理才行。
15
| 2018-1-11 16:17 | 只看该作者
是硬件的问题。
16
| 2018-1-11 16:17 | 只看该作者
波特率过高,可能信号有干扰。
17
 楼主 | 2018-1-11 17:07 | 只看该作者
springvirus 发表于 2018-1-11 14:36
首先确认该应用下,有此文件,另外CPU卡会返回错误码吧
没看你的程序,注意也要收数据且分析错误码 ...

就是没有返回任何数据呀。状态字节都没有返回  还有别的可能?
18
| 2018-1-12 08:35 | 只看该作者
本帖最后由 springvirus 于 2018-1-12 16:50 编辑
qq5782098 发表于 2018-1-11 17:07
就是没有返回任何数据呀。状态字节都没有返回  还有别的可能?

换其他指令串试试吧,没遇见过这种不回数据的情况
19
| 2018-1-12 10:51 | 只看该作者
这个电脑卡,以前是好的吗????如果以前好的,那就是固件有点问题,命令部分执行
20
| 2018-1-16 15:46 | 只看该作者
还是好好看看7816协议吧
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册 手机登录
本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册 手机登录
高级模式

论坛热帖

  1. N76E003学习点亮一个LED灯,可是就是不亮咋回事?
  2. 没有这么多money,我就不干,,,
  3. 为什么我给的脉冲驱动不了IRF840 MOS管?
  4. 问题求教
  5. 采用DSP的图像处理在车牌识别中的设计应用
  6. 三种破解MCU 技术
  7. MOS管一上电就烧
  8. DSP的光伏电池最大功率点跟踪系统
  9. 否是内置电容为外置晶振进行匹配?
  10. 我的年终终结(苦练十全武功)
分享 快速回复 返回顶部 返回列表
钱柜娱乐官网