【经验】国产非接触卡读写芯片THM3523实现电子钱包功能的方法
本文使用同芯微电子THM3523非接触卡读写芯片的DEMO板测试电子钱包功能,主要介绍如何使用THM3523将mifare格式的NFC卡片的某个块初始化为值块,并对该值块执行充值、扣款、读取余额等操作。
1、在main.c文件中添加需要用到的头文件;定义g_rfAtr[]数组用来存放缓存数据;定义M_gUID[]数组用来存放卡号;定义DefaultKey[]数组用来存放默认密码,本文使用mifare格式的NFC卡片,卡片的块原始密码为6个0xFF;按照值块的格式定义ValueBlockInitSet[]数组,本文定义值块余额为0,值块地址为0x01;定义ValueBlockIncrease[]数组用来存放需要充值的金额,本文定义充值100;定义ValueBlockDecrease[]数组用来存放需要扣款的金额,本文定义扣款20。
2、增加ReadBlockDataSendToUart2()函数,用来读取某个块的数据,并把读到的数据通过UART2打印出来。
3、在main()函数中,调用uart2_init()函数对串口2执行初始化,波特率9600;调用SleepMode()函数设置THM3523芯片进入正常的工作模式,SleepMode()函数的形参填写1为正常模式,形参填写0为休眠模式;调用SET_Mode()函数设置THM3523芯片使用SPI接口,在SET_Mode()函数的形参中,填写0则使用UART接口,填写1则使用I2C接口,填写2则使用SPI接口;调用IO_INIT()函数执行IO口初始化,主要是初始化SPI接口。
4、在while()循环中,调用THM_MFindCard()函数执行寻卡功能,当发现NFC卡片后再执行其他操作。
5、发现NFC卡片后,调用THM_MCascaded_Anticoll()函数执行防冲撞处理,并读出卡片的卡号,然后将卡片4个字节的卡号通过UART2发送到串口打印出来。
6、调用THM_MInitialKEY()函数加载默认密码,然后再调用THM_MAuthentication()函数对块1进行密码验证;在对块执行读写操作之前,需要先验证密码是否正确。
7、调用THM_MWrite()函数按照值块的格式将块1初始化为值块,要将NFC卡片的某个块作为电子钱包使用,得先将卡片的某个块按照值块的格式写入数据。
8、调用THM_Mchange()函数给NFC卡片的值块1充值100,并读出余额打印到串口;THM_Mchange()函数的第一个形参写入0xC1时,表示执行充值操作。
9、调用THM_Mchange()函数给NFC卡片的值块1扣款20,并读出余额打印到串口;THM_Mchange()函数的第一个形参写入0xC0时,表示执行扣款操作。
10、编译程序并下载固件到MCU中,将卡片靠近THM3523 DEMO板时,串口打印如下数据;第1行数据表示读到NFC卡片的卡号为:0xA3、0x89、0xDE、0x79;第2行数据表示将块1初始化为值块后,读到值块1的余额为0;第2行数据表示将值块1充值100之后,读到值块1的余额为100;第2行数据表示将值块1扣款20之后,读到值块1的余额为80。
11、本文的mian.c文件源代码如下所示:
#include "stm32f10x.h"
#include "usart.h"
#include "mifare.h"
#include "thm3523.h"
#include "ISO14443.h"
#include <string.h>
u8 g_rfAtr[20];
extern unsigned char M_gUID[5];
u8 DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
u8 ValueBlockInitSet[16] = {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x01, 0xFE};
u8 ValueBlockIncrease[4] = {0x00, 0x00, 0x00, 0x64};
u8 ValueBlockDecrease[4] = {0x00, 0x00, 0x00, 0x14};
void ReadBlockDataSendToUart2(u8 block)
{
u8 status;
u8 TempData[16];
u8 g_rfAtrLen = 0;
status = THM_MRead(block, &g_rfAtrLen, TempData); //Read the data of block[n] to TempData
if(status == RECEIVE_OK)
{
UART2_SendBuff(TempData, MBLOCK_SIZE); //Send the data of TempData to uart2
}
}
int main(void)
{
u8 status;
uart2_init(9600); //Set uart2 Baud Rate: 9600
SleepMode(1); //Set THM3523 to work mode
SET_Mode(2); //Set THM3523 to SPI mode, 0: UART, 1: I2C, 2: SPI
IO_INIT(); //SPI GPIO initialize
while(1)
{
status = THM_MFindCard(g_rfAtr); //Find Card
if(status != 0x02)
{
continue;
}
status = THM_MCascaded_Anticoll(g_rfAtr); //Anticoll and Read Card ID
if((status != 5) && (status != 10) && (status != 15))
{
continue;
}
UART2_SendBuff(M_gUID, 4); //Send Card ID to uart2
THM_MInitialKEY(PICC_AUTHENT1A, DefaultKey); //Copy block key to M_gKEYA[]
status = THM_MAuthentication(PICC_AUTHENT1A, 1); //Authentication block[1] key
if(status != MI_OK)
{
continue;
}
status = THM_MWrite(1, ValueBlockInitSet); //Initializes the block[1] to a value block
if(status != MI_OK)
{
continue;
}
ReadBlockDataSendToUart2(1); //Read the block[1] data and send the data to UART2
THM_Mchange(0xC1, 1, ValueBlockIncrease); //Increases the value of the value block 1
ReadBlockDataSendToUart2(1); //Read the block data and send the data to UART2
THM_Mchange(0xC0, 1, ValueBlockDecrease); //Decreases the value of the value block 1
ReadBlockDataSendToUart2(1); //Read the block data and send the data to UART2
}
}
- |
- +1 赞 0
- 收藏
- 评论 0
本文由潮汕小菜提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】国产非接触卡读写芯片THM3523对NFC卡片执行读写数据和修改扇区密码的方法
本文使用同芯微电子THM3523 DEMO板和MIFARE 1(ISO/IEC 14443A )NFC卡片作为测试工具,编写程序实现THM3523非接触卡读写芯片对NFC卡片执行读写数据和修改扇区密码的功能。
设计经验 发布时间 : 2021-04-20
【经验】THM3523非接触卡读写芯片移植读卡代码和实现读卡号功能的方法
同芯微电子原厂提供的“THM3523_DEMO参考程序”主要是实现上位机软件控制THM3523芯片和NFC卡片进行通信的功能,在普通的读卡应用中可以不用那么多代码。本文主要介绍如何移植读卡需要的代码到MCU工程中,并使用STM32F103 MCU控制THM3523 DEMO板实现读卡号功能。
设计经验 发布时间 : 2021-04-27
【经验】加密芯片解决信息泄漏的烦恼,在信息安全领域中发挥着重要作用
随着互联网的普及,信息安全已经成为了一个备受关注的问题。在这个大数据时代,我们的个人信息和公司机密、财务信息等都面临着被黑客侵扰、病毒攻击和各种网络攻击的风险。因此,加密技术也就应运而生,为解决信息泄漏带来的烦恼提供了有力的保障。
设计经验 发布时间 : 2023-07-25
【选型】同芯微电子(TMC)国产NFC读卡器芯片THM3070和THM3523性能和应用的区别
同芯微电子国产NFC读卡器芯片目前主推的型号是THM3070和THM3523,本文主要从芯片的性能和应用来介绍这两种芯片的区别,方便用户在设计产品的时候根据需求来选择合适的NFC读卡器芯片。
器件选型 发布时间 : 2020-12-09
【应用】国产非接触式读卡芯片THM3523用于智能电表,支持低功耗寻卡模式
在客户智能电表中,国产高可靠性非接触读卡器芯片推荐THM3523,输入电压为2.7~5.5V。SPI最高可达10Mbps。可支持读ISO/IEC14443 TypeA/B卡。通信接口也支持多种模式,如SPI、I2C、UART。支持低功耗寻卡模式,适合电池供电产品。
应用方案 发布时间 : 2020-09-18
紫光青藤(TSINGTENG MICRO)公司简介及产品介绍
型号- THM3523,THM3682FAQHB,TH25D-40LA,TH25D-20LA,TH25D-40HA,TH25D-20HA,THK88,THM3652FAGAB,TH25Q-16UA,THM3622FAQF,T9,THM3682FAQH,THM3682FAGA,TH25Q-80HA,TH25D-40UA,THM3070,TH25D-20UA,TH25Q-40UA,THM30,25D SERIES,25Q SERIES,THM35,THM3632FAQB,THM36,THM3652FAQHB,TH25Q-80UA,THM3662FAQB
详解加密芯片的基本特性和加密原理
加密芯片通过内置的加密算法和密钥管理机制,为数据的加密和解密提供了硬件级别的支持和保护,提高了系统的安全性和可靠性。加密芯片在信息安全领域的广泛应用,有效保护了重要信息的机密性和完整性,为各行业用户提供了更加安全可靠的数据保护手段。
技术探讨 发布时间 : 2023-10-28
【技术】一文介绍安全芯片的工作原理
安全芯片是一种集成了安全功能的芯片,它通过硬件和软件的双重机制保护数据的安全性。安全芯片的工作原理包括密钥管理、加解密处理、防攻击和安全认证等几个方面。本文瑞纳捷将从安全芯片的功能、特点、工作原理以及应用等几个方面进行阐述,旨在帮助读者更好地了解安全芯片。
技术探讨 发布时间 : 2023-07-11
《高效率15w车载手机无线充电器优选元器件方案》,这个支持哪些协议?
这个资料是介绍其中的无线充电的功率和线圈部分。世强现在有满足QI协议的IDT/ROHM/紫光同芯三个品牌的无线充电产品,请参考下列链接。三个品牌产品均可以支持QI协议。 https://www.sekorm.com/doc/159956.html https://www.sekorm.com/chapter/5968.html
技术问答 发布时间 : 2019-12-23
【产品】内嵌8位微处理器的非接触式CPU卡芯片,具有80k Bytes的存储空间
华大电子推出的非接触式CPU卡芯片CIU51L80,其典型的应用覆盖公共交通、电子钱包等。CIU51L80内嵌8位微处理器、符合ISO/IEC14443 Type A标准的RF电路、真随机数电路、DES/3DES算法模块、SM1/SM4商密算法模块。
产品 发布时间 : 2022-02-26
【产品】1k bytes非接触式逻辑加密卡芯片SHC1112,采用SM7商密算法
华大电子推出的非接触式逻辑加密卡芯片SHC1112 (国密型号SSX0904)的安全协议采用了SM7商密算法来保护数据交换的安全。该芯片适用于各种电子证件、电子钱包、自动收费系统和公共交通自动售检票系统等领域。
新产品 发布时间 : 2022-03-01
【产品】采用CMOS EEPROM工艺制作的非接触式CPU卡芯片,擦写次数>10万次
华大电子非接触式CPU卡芯片SHC1108是采用CMOS EEPROM工艺制作的高端智能卡产品,典型的应用如公共交通、电子钱包等。
产品 发布时间 : 2022-03-06
【技术】加密芯片技术如何保障数据安全?
随着数字化时代的到来,人们对数据安全的需求越来越高。加密技术作为一种保护数据安全的重要手段,被广泛应用于各个领域。而加密芯片技术则是实现加密技术的关键之一。本文瑞纳捷将介绍加密芯片技术的基本原理和应用。
技术探讨 发布时间 : 2023-05-31
电子商城
现货市场
服务
提供稳态、瞬态、热传导、对流散热、热辐射、热接触、和液冷等热仿真分析,通过FloTHERM软件帮助工程师在产品设计初期创建虚拟模型,对多种系统设计方案进行评估,识别潜在散热风险。
实验室地址: 深圳 提交需求>
世强深圳实验室提供Robei EDA软件免费使用服务,与VCS、NC-Verilog、Modelsim等EDA工具无缝衔接,将IC设计高度抽象化,并精简到三个基本元素:模块、引脚、连接线,自动生成代码。点击预约,支持到场/视频直播使用,资深专家全程指导。
实验室地址: 深圳 提交需求>
登录 | 立即注册
提交评论