/**--------------File Info---------------------------------------------------------------------------------
** File name: type_a.c
** Last modified Date: 2016-3-14
** Last Version: V1.00
** Descriptions: ISO/IEC144443A卡相关操作
**
**--------------------------------------------------------------------------------------------------------
*/
#include <stdint.h>
#include "fm175xx.h"
#include <string.h>
#include "stm32f10x.h"
#include "nfcSpi.h"
#include "delay.h"
#include "includes.h"
#include "type_a.h"
#include "type_b.h"
#define MI_NOTAGERR 0xEE
#define MAXRLEN 64
/*********************************************************************************************************
** Function name: pcd_Init
** input parameters: N/A
** output parameters: N/A
** Returned value:
*********************************************************************************************************/
void CD_CfgTPD(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void CD_SetTPD(void){
GPIO_SetBits( GPIOC, GPIO_Pin_7 );
}
void CD_ClrTPD(void){
GPIO_ResetBits( GPIOC, GPIO_Pin_7 );
}
void pcd_Init(void)
{
nfcSpiInit();
CD_CfgTPD(); /* 配置复位管脚 */
}
/*********************************************************************************************************
** Function name: MCU_TO_PCD_TEST
** Descriptions: MCU与读卡芯片通信测试函数
** 不同的读卡芯片的选取用于测试的寄存器不一样,需要更具具体芯片而确定目标寄存器
** input parameters: N/A
** output parameters: N/A
** Returned value: TRUE---测试通过 FALSE----测试失败
*********************************************************************************************************/
uint8_t MCU_TO_PCD_TEST(void)
{
volatile uint8_t ucRegVal;
pcd_RST(); /* 硬件复位 */
ucRegVal = spi_GetReg(ControlReg);
spi_SetReg(ControlReg, 0x10); /* 启动读写器模式 */
ucRegVal = spi_GetReg(ControlReg);
spi_SetReg(GsNReg, 0xF0 | 0x04); /* CWGsN = 0xF; ModGsN = 0x4 */
ucRegVal = spi_GetReg(GsNReg);
if(ucRegVal != 0xF4) /* 验证接口正确 */
return FALSE;
return TRUE;
}
/*********************************************************************************************************
** Function name: pcd_RST
** Descriptions: PCD控制PICC硬件复位函数
** input parameters: N/A
** output parameters: N/A
** Returned value: 寄存器数值
*********************************************************************************************************/
void pcd_RST(void)
{
CD_SetTPD();
Delay100us(3);
CD_ClrTPD(); /* 复位管脚拉低 */
Delay100us(5);
CD_SetTPD(); /* 再拉高 */
Delay100us(10);
}
void NRSTPD_CTRL(uint8_t ctrltype)
{
if(ctrltype == 0x0)
CD_ClrTPD();
else
CD_SetTPD();
}
/*********************************************************************************************************
** Function name: Read_Reg
** Descriptions: 读取寄存器
** input parameters: reg_add:寄存器数值
** output parameters: N/A
** Returned value: 寄存器数值
*********************************************************************************************************/
uint8_t Read_Reg(uint8_t reg_add)
{
uint8_t reg_value;
reg_value=spi_GetReg(reg_add);
return reg_value;
}
/*********************************************************************************************************
** Function name: Read_Reg
** Descriptions: 读取寄存器
** input parameters: reg_add:寄存器数值
** output parameters: N/A
** Returned value: 寄存器数值
*********************************************************************************************************/
uint8_t GetReg(uint8_t reg_add,uint8_t *regData)
{
*regData=spi_GetReg(reg_add);
return *regData;
}
/*********************************************************************************************************
** Function name: Read_Reg
** Descriptions: 读取寄存器
** input parameters: reg_add:寄存器数值
** output parameters: N/A
** Returned value: 寄存器数值
*********************************************************************************************************/
uint8_t SetReg(uint8_t reg_add,uint8_t ucRegVal)
{
spi_SetReg(reg_add,ucRegVal);
return 1;
}
/*********************************************************************************************************
** Function name: Read_Reg_All
** Descriptions: 读取全部寄存器
** input parameters: reg_value:寄存器数值
** output parameters: N/A
** Returned value: TRUE:操作成功 ERROR:操作失败
*********************************************************************************************************/
uint8_t Read_Reg_All(uint8_t *reg_value)
{
uint8_t i;
for (i=0;i<64;i++)
*(reg_value+i) = spi_GetReg(i);
return TRUE;
}
/*********************************************************************************************************
** Function name: Write_Reg
** Descriptions: 写寄存器操作
** input parameters: reg_add:寄存器地址
** reg_value:寄存器数值
** output parameters: N/A
** Returned value: TRUE:操作成功 ERROR:操作失败
*********************************************************************************************************/
uint8_t Write_Reg(uint8_t reg_add,uint8_t reg_value)
{
spi_SetReg(reg_add,reg_value);
return TRUE;
}
/*********************************************************************************************************
** Function name: Read_FIFO
** Descriptions: 读出FIFO的数据
** input parameters: length:读取数据长度
** *fifo_data:数据存放指针
** output parameters: N/A
** Returned value: TRUE:操作成功 ERROR:操作失败
*********************************************************************************************************/
void Read_FIFO(uint8_t length,uint8_t *fifo_data)
{
SPIRead_Sequence(length,FIFODataReg,fifo_data);
return;
}
/*********************************************************************************************************
** Function name: Write_FIFO
** Descriptions: 写入FIFO
** input parameters: length:读取数据长度
** *fifo_data:数据存放指针
** output parameters: N/A
** Returned value: TRUE:操作成功 ERROR:操作失败
*********************************************************************************************************/
void Write_FIFO(uint8_t length,uint8_t *fifo_data)
{
SPIWrite_Sequence(length,FIFODataReg,fifo_data);
return;
}
/*********************************************************************************************************
** Function name: Clear_FIFO
** Descriptions: 清空FIFO
** input parameters:
** output parameters: N/A
** Returned value: TRUE:操作成功 ERROR:操作失败
******************************************************************************************
- 1
- 2
前往页