-
顶顶顶
-
怀念旧网站,新网站就是一个字:慢
-
/* Loop while no Smartcard is detected 没有Smart Card */
while(CardInserted == 0)
{
}
/* Start SC Demo ---------------------------------------------------------*/
/* Wait A2R --------------------------------------------------------------*/
SCState = SC_POWER_ON; //给智能卡上电
SC_ADPU.Header.CLA = 0x00; //
SC_ADPU.Header.INS = SC_GET_A2R;
SC_ADPU.Header.P1 = 0x00;
SC_ADPU.Header.P2 = 0x00;
SC_ADPU.Body.LC = 0x00; //
// 返回应答复位信号
while(SCState != SC_ACTIVE_ON_T0)
{
SC_Handler(&SCState, &SC_ADPU, &SC_Responce); //
} /*识别出的协议是T0协议,则智能卡的状态是活跃的,可对智能卡进行文件操作 */
执行到这里时看了下SC_Responce结构体中的数据缓冲区是0,sw1,sw2全为0;而SC_A2R(SC_ATR)的TS和T0分别为3BT和3E,DATA缓冲区第一个元素是0X95,其他全为0;
SC_PTSConfig();
/* Inserts delay(400ms) for Smartcard clock resynchronisation */
Delay(400);
/* Select MF -------------------------------------------------------------*/
SC_ADPU.Header.CLA = SC_CLA_GSM11;
SC_ADPU.Header.INS = SC_SELECT_FILE;
SC_ADPU.Header.P1 = 0x00;
SC_ADPU.Header.P2 = 0x00;
SC_ADPU.Body.LC = 0x02;
for(i = 0; i < SC_ADPU.Body.LC; i++) // 数据长度
{
SC_ADPU.Body.Data[i] = MasterRoot[i]; // 主机设置
}
while(i < LC_MAX) // 20字节的0
{
SC_ADPU.Body.Data[i++] = 0;
}
SC_ADPU.Body.LE = 0; // 返回为0个字节长度
SC_Handler(&SCState, &SC_ADPU, &SC_Responce);
执行到这里又看了下,SC_Responce结构体中的数据缓冲区第一个数据为0XA4其他全为0,sw1,sw2分别为0X9F和0X16,SC_A2R(SC_ATR)的数据不变。
我感觉到智能卡已经正常复位了,不知各位大侠怎么认为?
/* Get Response on MF ----------------------------------------------------*/
if(SC_Responce.SW1 == SC_DF_SELECTED)
{
SC_ADPU.Header.CLA = SC_CLA_GSM11;
SC_ADPU.Header.INS = SC_GET_RESPONCE;
SC_ADPU.Header.P1 = 0x00;
SC_ADPU.Header.P2 = 0x00;
SC_ADPU.Body.LC = 0x02; // 初始化为0,现更改为2
SC_ADPU.Body.LE = SC_Responce.SW2;
SC_Handler(&SCState, &SC_ADPU, &SC_Responce);
}
/* Select ICCID ----------------------------------------------------------*/
if(((SC_Responce.SW1 << 8) | (SC_Responce.SW2)) == SC_OP_TERMINATED)
{
/* Check if the CHV1 is enabled */
if((SC_Responce.Data[13] & 0x80) == 0x00)
{
CHV1Status = 0x01;
}
/* Send APDU Command for ICCID selection */
SC_ADPU.Header.CLA = SC_CLA_GSM11;
SC_ADPU.Header.INS = SC_SELECT_FILE;
SC_ADPU.Header.P1 = 0x00;
SC_ADPU.Header.P2 = 0x00;
SC_ADPU.Body.LC = 0x02;
for(i = 0; i < SC_ADPU.Body.LC; i++)
{
SC_ADPU.Body.Data[i] = ICCID[i];
}
while(i < LC_MAX)
{
SC_ADPU.Body.Data[i++] = 0;
}
SC_ADPU.Body.LE = 0;
SC_Handler(&SCState, &SC_ADPU, &SC_Responce);
}
程序再向下走就是读回SC_A2R(SC_ATR)的sw1 为0x6e,sw2为0,其他缓冲区全为0了。看了下协议0x6e含义是卡不支持指令类型。
-
太感谢了
-
这些资料应该是买了开发板都会带的
-
1)每次给东西的时候要有老板的签名作为证据,口说无凭。
2)这种事情肯定要告诉公司,否则你自己背黑锅!
-
代码没有问题,你再检查一下你的电路板和你的软件的设置。
-
使用GetOpenFileName函数吧
http://msdn.microsoft.com/en-us/library/ms646927%28VS.85%29.aspx
-
直接调用API吧,呵呵...
-
和你一样,正在惆怅中……
-
謝謝ls的,忘了說了,wait()是一個軟件延時的子程序!
-
无意中看到一个以前的帖子,改软件也可以实现
http://topic.eeworld.net/u/20090222/21/969a39c0-158a-4492-9ad0-486467de414f.html
-
数组不可以不定义长度,这在标准C里面就是不允许的
-
这个和isr里面判断中断源有关.举个例子.
if(int10)
{}
else if(int11)
{}
这种代码,如果两个中断同时来了,INT11就丢了.
会不会有这种现象发生.要不同时来中断,应该都会有响应.
if(int10)
{}
if(int11)
{}
这样判断就不会丢.
-
没有,只是了解到他们的机器都是放到户外。
还是要问工控机的厂商他们的产品工作温度范围。
-
是电路板的问题
如果是电路板的问题,只要在焊接芯片之前检查一下,就可以查出来。
-
内存和显卡拔出来用橡皮擦擦试试
-
重新插拔显卡试试。
-
把校准信息写入platform.reg中,然后把platform.bib中的TouchCalibration.exe那行注释掉就可以,如果OS运行起来校验信息不准,在控制面板里有“笔针”可以重新校验
-
引用 5 楼 flandy1982 的回复:
引用 4 楼 paperhappy 的回复:
引用 3 楼 91program 的回复:
提示SDK不对,具体是什么提示呢?
系统提示如下:
An application targeting a Standard SDK for Windows CE.NET and built for the ARMV4I CPU cannot be run on the Emulator device.In order to run this? application on any CPU other than the Emulator,you will have to install an SDK that is compatible with the Standard SDK for Windows CE.NET,then target a shadow platform pertaining to that SDK.Please see the eVC help documentation for additional details
模拟器是不能运行 ARMV4I内核CPU的SDK的, 只能运行X86的.
我重新建了一个工程,只选了X86,还是不行。。。。提示还是上面的那些