175192387 发表于 2011-4-22 10:13:39

关于存储芯片复位应答的问题

时钟部分程序
    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]
查看完整版本: 关于存储芯片复位应答的问题