FM17550的ISO14443A协议读写卡流程的c语言具体实现
时间: 2024-03-23 13:38:58 浏览: 86
下面是FM17550的ISO14443A协议读写卡流程的C语言实现示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fm17550.h"
#define MAX_BUFF_SIZE 256
unsigned char g_ucSendBuff[MAX_BUFF_SIZE];
unsigned char g_ucRecvBuff[MAX_BUFF_SIZE];
unsigned short g_usSendLen;
unsigned short g_usRecvLen;
int main(int argc, char *argv[])
{
int iRet;
FM17550_HANDLE hDevice;
// 打开设备
iRet = FM17550_Open(&hDevice, "/dev/ttyUSB0");
if (iRet != FM17550_OK)
{
printf("Error: FM17550_Open failed (%d)\n", iRet);
return -1;
}
// 初始化设备
iRet = FM17550_Init(hDevice);
if (iRet != FM17550_OK)
{
printf("Error: FM17550_Init failed (%d)\n", iRet);
FM17550_Close(hDevice);
return -1;
}
// 寻卡
iRet = FM17550_PCDRequest(hDevice, PICC_REQ_ALL, g_ucRecvBuff, &g_usRecvLen);
if (iRet != FM17550_OK)
{
printf("Error: FM17550_PCDRequest failed (%d)\n", iRet);
FM17550_Close(hDevice);
return -1;
}
// 防冲撞
iRet = FM17550_PAntiColl(hDevice, g_ucRecvBuff, g_usRecvLen, g_ucSendBuff, &g_usSendLen);
if (iRet != FM17550_OK)
{
printf("Error: FM17550_PAntiColl failed (%d)\n", iRet);
FM17550_Close(hDevice);
return -1;
}
// 选卡
iRet = FM17550_Select(hDevice, g_ucSendBuff, g_usSendLen, g_ucRecvBuff, &g_usRecvLen);
if (iRet != FM17550_OK)
{
printf("Error: FM17550_Select failed (%d)\n", iRet);
FM17550_Close(hDevice);
return -1;
}
// 读卡
iRet = FM17550_MifareRead(hDevice, 1, 1, g_ucRecvBuff, &g_usRecvLen);
if (iRet != FM17550_OK)
{
printf("Error: FM17550_MifareRead failed (%d)\n", iRet);
FM17550_Close(hDevice);
return -1;
}
// 关闭设备
FM17550_Close(hDevice);
return 0;
}
```
其中,FM17550_Open()、FM17550_Init()、FM17550_Close()等函数是设备操作相关的函数;FM17550_PCDRequest()、FM17550_PAntiColl()、FM17550_Select()等函数是ISO14443A协议相关的函数,用于寻卡、防冲撞、选卡等操作;FM17550_MifareRead()、FM17550_MifareWrite()等函数是Mifare卡操作相关的函数,用于读写Mifare卡数据。