⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sle4442.c

📁 SLE4442卡的底层驱动函数
💻 C
📖 第 1 页 / 共 2 页
字号:
//******************************************************************************//
//**模块名:SLE4442.C
//**模块说明:此库是读写SLE4442的驱动函数;读主存储区函数中的数据存放是以字的形式存放,
//**          拼装方式如下:
//**                word 0                        word 1
//**      __________________________  ___________________________    
//**      |    byt1    |   byte0    |,|    byte3    |   byte2    |.............
//**      --------------------------  ----------------------------
//**         
//**模块修改记录:
//**
//**
//**编写:王鲲 2007-11-23  wangkun@yifengcom.com
//**版权:江苏怡丰通信设备有限公司开发部
//******************************************************************************//
#include "..\Include\Include.h"

/*******************************************************************************
*                             interface routines                    
*******************************************************************************/

/*******************************************************************************  
*函 数 名: SLE4442_Card_Init()
*功    能: SLE4442卡初始化
*说    明: 
*调    用: 
*入口参数: 无
*返 回 值: 无
********************************************************************************/
void SLE4442_Card_Init(void)
{
	MEMO_CTL_dir = OUTPUT;
	MEMO_CTL = 1;
	IC_CLK_dir = OUTPUT;
    IC_RST_dir = OUTPUT;
    IC_RST = RES_LOW;
}
void SLE4442_Card_End(void)
{
	MEMO_CTL_dir = OUTPUT;
	MEMO_CTL = 0;
	IC_RST = RES_LOW;
}


/*******************************************************************************  
*函 数 名: StartComm()
*功    能: 开始命令模式
*说    明:             ____________
*          CLK  ______/    
*               ___________
*          IO              \_______
*调    用: 
*入口参数: 无
*返 回 值: 无
*******************************************************************************/
void StartComm(void)
{
    IC_IO_dir = OUTPUT;
    IC_CLK = 0;
    IC_IO  = 1;
    Delay10us();
    IC_CLK = 1;
    Delay5us();
    IC_IO  = 0;
    Delay5us();
    IC_CLK = 0;
}

/*******************************************************************************  
*函 数 名: StopComm()
*功    能: 结束命令模式
*说    明:              _____________
*          Clk   ______/
*                             _______
*          IO   _____________/
*调    用: 
*入口参数: 无
*返 回 值: 无
*******************************************************************************/
void StopComm(void)
{
    IC_IO_dir = OUTPUT;
    IC_CLK = 0;
    IC_IO  = 0;
    Delay5us();
    IC_CLK = 1;        
    Delay5us();
    IC_IO  = 1;        
    Delay10us();
}

/*******************************************************************************  
*函 数 名: ResetCard()
*功    能: 卡复位和复位应答
*说    明: 复位和复位应答时序      空读 32Bit (4Byte)
*                ___                                      
*          RST _|   |______________________________       
*                 _   _        __   __                   
*          CLK __|0|_|1|_ ..._|31|_|32|____________          
*              _  __  __           ___  ___________       
*               \/  \/D0\ ...    \/D31\/             
*          I/O _/\__/\__/        /\___/             
*调    用: ReadByte(),Delay10us(),Delay5us()
*入口参数: 无
*返 回 值: 无
*******************************************************************************/
U16 ResetCard(void)
{
    U16 temp[4]={0};
    
    IC_IO_dir = INPUT;
    Delay10us();    
    IC_RST = RES_LOW;        
    IC_CLK = 0;     
//    IC_IO  = 1;    
    Delay10us();  
    
    IC_RST = RST_HIGH;
    Delay5us();
    IC_CLK = 1;
    Delay10us();
    Delay10us();
    Delay10us();
    Delay10us();
    IC_CLK = 0;
    Delay5us();
    IC_RST = RES_LOW;          //复位和复位应答时序
//    Delay5us();         
    
    temp[0] = ReadByte();
    temp[1] = ReadByte();
    temp[2] = ReadByte();
    temp[3] = ReadByte();   //空读 32Bit (4Byte)
    	
    IC_CLK = 0;         
    Delay10us();  
    return (temp[0]+temp[1]+temp[2]+temp[3]);                                       
}

/*******************************************************************************  
*函 数 名: BreakOperate()
*功    能: SLE4442 IC卡操作中止
*说    明: 
*调    用: Delay10us()
*入口参数: 无
*返 回 值: 无
********************************************************************************/
void BreakOperate(void)
{     
     IC_IO_dir = OUTPUT;
     IC_CLK = 0;
     IC_RST = RES_LOW;
     IC_IO  = 0;
     Delay10us();
     IC_RST = RST_HIGH;
     IC_IO  = 1;
     Delay10us();
     IC_RST = 0;
     Delay10us();
}

/********************************************************************************  
*函 数 名: ReadByte()
*功    能: 从SLE4442读一个字节
*说    明: 
*调    用: Delay10us()
*入口参数: 无
*返 回 值: Rdata:读出的数据
*********************************************************************************/
U16 ReadByte(void)
{
    U16 i,Rdata;
    Gen_Type_Def  data;
    
    data.Word = 0;
    IC_IO_dir = INPUT;

    for (i = 0; i < 8; i++)
    {
        IC_CLK = 0;
        data.Word = data.Word >> 1;           //从低位读起 
        data.Bits.bit7 = IC_IO;
        Delay10us();
        IC_CLK = 1;
        Delay10us();
    }
    IC_CLK = 0;
    Rdata = data.Word;
    return Rdata;
}

/*********************************************************************************  
*函 数 名: WriteByte()
*功    能: 往SLE4442写一个字节
*说    明: 
*调    用: Delay10us(),Delay5us()
*入口参数: Wdata:写入的数据
*返 回 值: 无
**********************************************************************************/
void WriteByte(U16 Wdata)
{
    U16 i;
    Gen_Type_Def  data;
    
	data.Word = Wdata;
	IC_IO_dir = OUTPUT;
	
    for(i = 0; i < 8; i++)
    {
        IC_CLK = 0;
        Delay5us();
        IC_IO = data.Bits.bit0;     
        Delay5us();
        IC_CLK = 1;
        Delay10us();
        data.Word = data.Word >> 1;                 //右移一位
    }
    IC_CLK = 0;
}

/********************************************************************************  
*函 数 名: ReadMode()
*功    能: 连续输出i(=<255)个字节,存放到以ReadBuffer开头的指针中,必须在某一
*          读数据命令模式之后使用
*说    明: 
*调    用: Delay10us(),ReadByte()
*入口参数: ReadBuffer:读取数据的起始地址,ReadCount:数据个数
*返 回 值: 无
*********************************************************************************/
void ReadMode(U16 *ReadBuffer,U16 ReadCount)
{
    IC_CLK=0;
    Delay10us();
    do
    {
        *ReadBuffer = ReadByte();    //读入一个字节
        ReadBuffer++;                //指针加一

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -