RFID实验三总结

本文详述了一次RFID实验的过程,主要涉及圈存功能的实现,包括圈存的四个步骤和代码分析。作者强调理解源代码的重要性,并提供了圈存初始化和执行的详细步骤,帮助读者理解RFID圈存操作的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一次debug到哭泣的经历。

龙云尧个人博客,转载请注明出处。

优快云地址:http://blog.youkuaiyun.com/Michael753951/article/details/70481546

个人blog地址:http://yaoyl.cn/rfidshi-yan-san-zong-jie/


在实验过程中,需要不断翻阅实验课PPT之《04 电子钱包的功能》,word之《实验3文档》优快云大佬吕浪的课程总代码以及他的的Java card开发系列文章

本次实验和前两次实验相比,代码量多很多,并且实验思路稍有区别。实验之前可以不太懂实验流程(主要是因为流程本身就太复杂了),但是一定要一遍又一遍阅读源代码,只有在读源码的过程中,才能体会整个验证过程,对项目中涉及到的函数方法的使用才能有一个更加深入的了解。接着自己不断重写代码,理解整个实现过程,才能对这个课程实验有较为深入的了解。

代码在未征得本人同意之前,请勿直接Ctrl+C,Ctrl+V,谢谢。

正式实验

实验分析

首先我们在PPT中知道本次实验的主要需要实现的功能是:

  • 圈存
  • 消费
  • 余额查询

接下来我们开始看ppt《04 电子钱包的功能》和《实验3文档》。

首先是圈存功能的流程图。

圈存流程

流程图中我们可以分析出圈存一共有4个步骤:

  • 终端发送消息初始化
  • IC响应初始化,并且发送MAC1验证
  • 终端验证MAC1,确认IC卡是否合法,然后发送包含MAC2的圈存命令
  • IC卡验证终端机的合法性,执行完成以后返回TAC响应操作完成

接下来我们将一步一步仔细分析圈存是如何实现的。

圈存初始化命令

step1:圈存机发送的初始信息如下所示。消息中包含了秘钥标识符交易金额终端机编号

IC卡响应圈存初始化命令

IC卡处理圈存初始化信息流程

step2:

  • IC卡根据秘钥标识符寻找圈存秘钥
  • 生成过程秘钥。输入数据为[伪随机数||电子钱包联机交易序号||8000],秘钥为圈存秘钥,使用3DES加密算法。
  • 生成MAC1。输入数据为[电子钱包余额(交易前)||交易金额||交易类型标识||终端机编号],秘钥为过程秘钥,使用我们在上一次实现的MAC生成函数gmac4,计算出MAC1用来表明身份。
  • IC卡返回[余额||联机交易序列号||秘钥版本号||算法标识||伪随机数||MAC1]。

圈存指令

圈存指令流程

step3:

  • 圈存机对IC卡发挥的MAC1信息进行校验,如果正确就说明IC卡信息合法。
  • 计算MAC2。输入信息为[交易金额||交易类型标识||终端机编号||交易日期(主机)||交易时间(主机)],秘钥为过程秘钥,加密算法为依然为gmac4。用来表明自己的身份。
  • 发送圈存指令。消息中包含[交易日期||交易时间||MAC2]。

圈存TAC

TAC

step4:IC使用同样的算法计算MAC2,如果计算结果和终端返回的MAC2一致,就说明终端的身份合法。IC卡就会执行圈存命令。同时返回TAC。其中TAC计算时,输入数据为[电子钱包余额(交易后)||电子钱包联机交易序号(加1前)||交易金额||交易类型标识||终端机编号||交易日期(主机)||交易时间(主机)],密钥为TAC密码最左8个字节与TAC密码最右8个字节异或的结果。

到这里整个圈存过程就结束了。消费以及查询和圈存的实现原理一致,这里就不赘述了。

读代码

前面的分析中,我们已经对本次实验有了大致的了解,接下来就是开始读源码的过程了。不过本次实验中,因为我们只需要对IC卡的系统进行编程实现,而对终端机需要靠人脑完成,所以我们重心就会放在圈存的初始化和圈存的执行上面了。

圈存初始化

还是老样子,我们先读项目给的源码中的Purse部分,里面有圈存初始化和圈存确认信息的处理函数。

在TA给的源代码中,init_loadload方法是已经给好了的,我们先读这两部分的源代码,理解整个设计思路。

首先我们需要修改Purse类,让其process方法里面增执行圈存初始化,圈存,消费初始化,消费,以及查询的入口

### RFID实验课设计方案及实验报告 RFID(射频识别)技术在物联网领域的应用日益广泛,针对高校实验室或实训室的RFID实验课程设计,需要结合实际设备操作、开发环境学习以及理论知识传授。以下是一个完整的RFID实验课设计方案和实验报告模板。 #### 实验课设计方案 #### 1. 实验目标 本实验旨在让学生熟悉RFID技术的基本原理及其在物联网中的应用[^1]。通过实际操作,学生将掌握STM32单片机控制RFID模块的方法,并能够编写简单的程序实现数据读取和处理功能。 - 熟悉Keil开发环境及STM32F103VET6单片机编程。 - 学习如何配置和使用RFID读写器电子标签进行通信。 - 掌握基本的RFID数据读取流程并完成硬件检测。 #### 2. 实验环境准备 - **硬件设备**:RFID实验箱、STM32F103VET6开发板、RFID读写器、电子标签、USB下载线等[^2]。 - **软件工具**:Keil MDK开发环境、串口调试助手。 #### 3. 实验内容 实验分为以下几个部分: - **硬件连接初始化**: 按照实验箱说明书完成RFID模块STM32开发板的连接,确保电源、信号线正确接入[^1]。 - **程序编写下载**: 使用Keil开发环境编写一个简单的程序,实现对RFID模块的数据读取功能。例如,可以通过SPI或UART接口发送命令给RFID模块,获取标签ID并显示在串口调试助手上。 ```c #include "stm32f1xx_hal.h" void RFID_Init(void); uint8_t RFID_ReadTagID(void); int main(void) { HAL_Init(); RFID_Init(); while (1) { uint8_t tagID = RFID_ReadTagID(); if (tagID != 0xFF) // 如果读取到标签ID { printf("Tag ID: %d\n", tagID); // 输出到串口 } HAL_Delay(500); // 延时 } } void RFID_Init(void) { // 初始化UART或SPI接口代码 } uint8_t RFID_ReadTagID(void) { // 发送命令读取标签ID的代码 return 0x01; // 示例返回值 } ``` - **数据处理分析**: 分析从RFID模块接收到的数据,验证其正确性,并尝试扩展功能,如记录多个标签ID或判断特定标签的存在。 #### 4. 实验报告模板 实验报告应包含以下内容: - **实验目的**:简述实验的目标和意义。 - **实验设备**:列出所使用的硬件设备和软件工具。 - **实验步骤**:详细描述实验的具体操作过程。 - **实验结果**:展示实验中获得的数据和现象,可以附上截图或图表。 - **问题解决**:记录实验过程中遇到的问题及解决方案。 - **总结体会**:总结实验收获,并提出改进建议。 #### 实验报告示例 **实验目的** 熟悉RFID技术的基本原理,掌握STM32单片机控制RFID模块的方法[^1]。 **实验设备** - STM32F103VET6开发板 - RFID读写器 - 电子标签 - Keil开发环境 **实验步骤** 1. 按照实验箱说明书连接硬件设备。 2. 在Keil中编写程序,实现RFID数据读取功能。 3. 使用串口调试助手查看输出结果。 **实验结果** 成功读取电子标签ID,并在串口调试助手上显示如下数据: `Tag ID: 0x01` **问题解决** 在调试过程中发现无法正常读取标签数据,经过检查发现是SPI接口配置错误,调整后问题解决。 **总结体会** 通过本次实验,深入理解了RFID的工作原理,并掌握了STM32单片机的基本编程技能。未来可进一步探索RFID技术在其他场景中的应用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值