[C语言]华禹工控 RFID 测试程序设计说明
1.RFID 工作原理
基于华禹平台的手持 RFID 刷卡设备由三部分组成:
- 1. C程序.
- 2. 操作系统固件,按照设备型号可分为 P1300、P1220、P1500 等系列。
- C 程序通过串口与单片机通信,并通过 gpio 控制单片机的电源。
读卡操作时,C 程序发送读卡命令,接收到单片机固件返回的卡信息,解析后显示。
写卡操作时,C 程序发送写卡命令,接收到单片机固件返回的成功或者失败信息后,显示结果。
2 C语言RFID测试程序设计思路
主要思路:初始化——发送命令——接受信息——解析信息——显示信息
- 初始化
打开RFID单片机电源
初始化串口,具体代码请参考《串口通信文档》
- 发送命令
结合串口通信,发送读卡命令(发送函数的原型)
UART_PutBytes(UART_PORT port, kal_uint8 *Buffaddr, kal_uint16 Length, module_type ownerid);
其命令在Buffaddr这块地址空间内
具体命令格式请参考华禹工控 RFID Demo 命令集用户手册.
- 接受信息
你发一个命令,如果你发的命令正确就会返回两个信息
接收单片机返回的命令,此返回的信息分为两部分,
1.第一次返回的信息是判断你发的命令是否正确
2.第二次返回的信息就是你想要的信息
- 解析信息
得到信息就可以对信息进行解析了.
- 显示信息
根据需求,可以自行设计UI界面显示信息
3 读卡具体程序示例
3.1.1 打开串口
串口操作详情请看串口部分
值得注意的是开发版与电脑连时用的是串口1,而与单片机接连时用的是串口2.
3.1.2 打开 RFID 单片机的电源
对GPIO进行初始化设置:
代码如下:
extern char gpio_47_urxd2;
extern char gpio_48_utxd2;
extern char gpio0_switch_main;
extern char gpio_bt_urts3_pin;
#define GPIO_SWITCH_A1 gpio_bt_urts3_pin
#define GPIO_SWITCH_A0 gpio0_switch_main
#define GPIO_SWITH_PIN47 gpio_47_urxd2
#define GPIO_SWITH_PIN48 gpio_48_utxd2
初始化管脚(使GPIO进入收发模式):
GPIO_ModeSetup(GPIO_SWITH_PIN47,1); //1为串口模式,0为GPIO模式
GPIO_ModeSetup(GPIO_SWITH_PIN48,1);
GPIO_WriteIO(1, GPIO_SWITCH_A0);
GPIO_WriteIO(0, GPIO_SWITCH_A1);
开启电源:
GPIO_WriteIO(1, GPIO_RFID_POWER_PIN);
3.1.3 发送读卡命令
U8 readCardData = "023034435234303030303003";
注意这里应该把命令从十六进制转化成字节数组
之后利用串口发送命令;
readCardData 的意义:读卡命令、读取的扇区 4 块 0 的数据;
简单的解释:
02
|
前缀;
|
30 34
|
表示长度为 4;
|
43 52
|
表示命令为 CR;(ASCII)
|
34
|
表示扇区为 4;
|
30
|
表示块区为 0;
|
30 30 30 30
|
校验和为 0x0000;(预留)
|
03
|
后缀;
|
命令更详细的格式,见华禹工控 RFID Demo 命令集用户手册 |
3.1.4 接收并解析返回信息
返回信息: 单片机收到命令后返回ACK;
ACK 的值为{0x02,0x41,0x43,0x4B,0xFF,0x03};
当读卡正确后返回:
02 32 34: | 表示长度为0x24 |
43 52: | 表示命令为CR |
34 30: | 扇区号为4,块号为0 |
30 30 30 30 30 30 30 30: | 0x00 0x00 0x00 0x00 | 表示卡号为0; |
30 30 30 30: | 0x00 0x00 | 表示金额为0; |
30 30 30 30: | 0x00 0x00 | 未用; |
30 30 30 30 30 30 30 30: | 0x00 0x00 0x00 0x00 | 未用; |
30 30 30 30 30 30 30 30: | 0x00 0x00 0x00 0x00 | 未用; |
30 30 30 30 03: |
当读卡出现错误时返回:
02 30 36 : | 表示长度为6;(含错误码和校验和的长度) |
43 52: | 表示命令为CR |
34 30: | 表示扇区为4,块号为0; |
30 35: | 错误码为5;表示读错误; |
30 30 30 30: | 校验码; |
03 |
命令更详细的格式,见华禹工控 RFID Demo 命令集用户手册 |
3.1.5 关闭电源
关闭收发模式
GPIO_ModeSetup(GPIO_SWITH_PIN47,0); //1为串口模式,0为GPIO模式
GPIO_ModeSetup(GPIO_SWITH_PIN48,0);
GPIO_WriteIO(0, GPIO_SWITCH_A0);
GPIO_WriteIO(1, GPIO_SWITCH_A1);
关闭单片机电源
GPIO_WriteIO(0, GPIO_RFID_POWER_PIN);
3.1.6. 关闭串口
操作请参照串口的代码;
3.2 写卡操作
3.2.1 打开串口
与 2.1.1 相同。
3.2.2 打开电源
与 2.1.2 相同。
3.2.3 发送写卡命令
具体命令格式请参考华禹工控 RFID Demo 命令集用户手册.
3.2.4 接收并解析返回信息
2.2.5 关闭电源
与2.1.5 相同
2.2.6 关闭串口
与2.1.6 相同
3 资源
华禹工控资源:
源码下载地址:RFID源码
华禹工控 RFID Demo 命令集用户手册。
华禹工控 GPIO 测试程序设计说明。
学者之家技术论坛
技术交流群:
15762255
29475577
华禹工控官方博客