先贴程序,这是官方的一个智能卡接口的demo,问题在程序下面,望大神指点
int main(void)
{
****************一堆初始化
while(1)
{
/* Loop while no Smartcard is detected */
while(CardInserted == 0)
{
}
/* 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);
//delay_ms(40);//不加延时仅仅显示发送给USART1的数据//不加延时就无法完成U3发送
}
/* Apply the Procedure Type Selection (PTS) */
SC_PTSConfig();
/* Inserts delay(400ms) for Smartcard clock resynchronisation */
delay_ms(400);
……………………………………
}
问题出现在红 {MOD}注释那里 //delay_ms(40);//不加延时仅仅显示发送给USART1的数据//不加延时就无法完成U3发送
如果不加延时的话,后面的给智能卡的信息交互就无法进行,通过单步调试问题出现在
SC_PTSConfig();这个函数里面
USART_SendData(USART3, SCData);
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET)
{
}
死在这个循环里了,但是此时可以读出ATR(复位应答)
如果加上延时,就可以正常进行交互,但是ATR只有第一字节有信息,其他全为零
希望做过智能卡相关的大神指点一下,不胜感激!
新人实在没啥悬赏金了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>