关于存储芯片复位应答的问题
时钟部分程序SCFQCTL = 31; //MCLK=32*ACLK=1024KHz,DCO+=0
SCFI0=0;
FLL_CTL0 |= XCAP18PF;
void ICCard_RST( void )
{
IC_VCC_DIR |= IC_VCC_BIT;
IC_VCC_OUT &=~ IC_VCC_BIT;
IC_RST_OUT |= IC_RST_BIT;
_NOP();
_NOP();
_NOP();
_NOP();
IC_CLK_OUT |= IC_CLK_BIT;
_NOP();
_NOP();
IC_CLK_OUT &=~IC_CLK_BIT;
_NOP();
_NOP();
IC_RST_OUT &=~IC_RST_BIT;
_NOP();
}
关键是这部分程序,我都需要执行两次,才能复位成功;
//******************************************************************************
// [ Anser To Read ] mode 复位应答
//检验该卡是不是1608卡,0x2c,0xaa,0x55,0xa0是证明该卡的口令是否正确
//首先复位,其次读数据(SDA—OUT),验证卡是否正确
//******************************************************************************
unsigned char ICCard_ATR(void)
{
unsigned char i,j;
unsigned char rFlag=0;
unsigned char common;
ICCard_RST();
IC_DATA_DIR &=~ IC_DATA_BIT;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
IC_CLK_OUT &=~IC_CLK_BIT;
_NOP();
common=(common>>1);
if((IC_DATA_IN & IC_DATA_BIT)==IC_DATA_BIT)
common |= 0x80;
IC_CLK_OUT |=IC_CLK_BIT;
_NOP();
}
}
IC_CLK_OUT &=~IC_CLK_BIT;
_NOP();
IC_DATA_DIR |= IC_DATA_BIT;
IC_DATA_OUT |= IC_DATA_BIT;
_NOP();
if((common==0x2c)&&(common==0xaa)&&(common==0x55)&&(common==0xa0))
rFlag=1;
return(rFlag);
}
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632664C31S2P.JPG
时序图 (原文件名:1.JPG)
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632665PWJC88.JPG
相关时间 (原文件名:2.JPG)
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632666LZN4L4.JPG
相关时间 (原文件名:3.JPG)
页:
[1]