【经验】国产非接触卡读写芯片THM3523对NFC卡片执行读写数据和修改扇区密码的方法
本文使用同芯微电子的THM3523 DEMO板和MIFARE 1(ISO/IEC 14443A )NFC卡片作为测试工具,编写程序实现THM3523非接触卡读写芯片对NFC卡片执行读写数据和修改扇区密码的功能。
1、本文使用已经移植好THM3523驱动代码的MCU工程做测试,在main.c文件中,增加如下包含头文件的代码。
#include "stm32f10x.h"
#include "usart.h"
#include "mifare.h"
#include "thm3523.h"
#include "ISO14443.h"
#include <string.h>
2、增加变量g_rfAtrLen 和数组g_rfAtr[],用来存放卡片返回的数据。
u8 g_rfAtrLen = 0;
u8 g_rfAtr[20];
3、增加数组M_gUID[]的外部定义,用来存放卡片的卡号和异或校验值;M_gUID[0]~M_gUID[3]存放4个字节的卡号,M_gUID[4]存放卡号的异或校验值。
extern unsigned char M_gUID[5];
4、增加数组DefaultKey[],用来存放卡片的默认密码;本次用来测试的NFC卡片,新卡的出厂扇区密码A和密码B都是6个字节的0xFF;增加KeyA[]和KeyB两个数组,分别用来存放要写入卡片的新密码A和新密码B;增加AccessControl[]数据,用来存放扇区的存取控制字节,使用默认的存取控制:0xFF, 0x07, 0x80, 0x69。
u8 DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
u8 KeyA[6] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5};
u8 KeyB[6] = {0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5};
u8 AccessControl[4] = {0xFF, 0x07, 0x80, 0x69};
5、增加数组TempData[],用来存放16字节的临时数据;增加数组TestData[],用来存放要写入块1的16字节测试数据。
u8 TempData[16];
u8 TestData[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
6、在main()函数中,调用uart2_init()函数将UART2的波特率设置为9600,调用SleepMode()函数设置THM3523进入工作模式,调用SET_Mode()函数设置MCU和THM3523使用SPI接口通信,调用IO_INIT()函数对SPI的GPIO口进行初始化。
7、在main()函数的while()循环中,调用THM_MFindCard()函数执行寻卡操作,发现卡片后才执行下一步的操作。
8、调用THM_MCascaded_Anticoll()函数执行卡片防冲突和读卡号操作,正确读到卡号后,将卡号通过UART2打印出来。
9、调用THM_MInitialKEY()函数将默认的密钥加载到M_gKEYA[]数组中,并调用THM_MAuthentication()函数验证卡片块1的密钥是否跟M_gKEYA[]数组中的密钥一样;密钥验证通过后,才能对卡片的块1进行读写数据的操作。
10、调用UART2_SendBuff()函数将TempData[]数组中的16字节数据通过UART2打印出来,此时打印的数据是16字节的0x00;调用THM_MWrite()函数对块1写16字节的测试数据。
11、调用THM_MRead()函数从块1读16字节数据,并把数据存放在TempData[]数组中;调用UART2_SendBuff()函数将TempData[]数组中的16字节数据通过UART2打印出来,如果对THM3523的块1执行写数据和读数据的操作都有正常执行,此时打印的数据跟TestData[]数组中的数据一样;最后将TempData[]数组中的数据全部清零。
12、调用THM_WriteSectorTrailer()函数修改扇区0的密码A和密码B,扇区0的密码和存取控制字节存放在块3中;修改扇区0的密码后,将扇区0的密码和存取控制字节通过UART2打印出来;如果程序能正常打印密码和存取控制字节,则证明修改扇区0密码的操作正常执行;注意修改扇区0的密码后,下次得使用新密码才能正常读写扇区0里面的块数据。
13、main()函数完整的代码如下所示:
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 key
if(status != MI_OK)
{
continue;
}
UART2_SendBuff(TempData, MBLOCK_SIZE);//Send the data of TempData to uart2
status = THM_MWrite(1, TestData); //Write TestData to block[1]
if(status != MI_OK)
{
continue;
}
status = THM_MRead(1, &g_rfAtrLen, TempData); //Read the data of block[1] to TempData
if(status != RECEIVE_OK)
{
continue;
}
UART2_SendBuff(TempData, MBLOCK_SIZE); //Send the data of TempData to uart2
memset(TempData, 0, MBLOCK_SIZE); //Clear TempData
status = THM_WriteSectorTrailer(3, KeyA, KeyB, AccessControl); //Set KeyA and KeyB
if(status != MI_OK)
{
continue;
}
UART2_SendBuff(KeyA, 6); //Send the data of KeyA to uart2
UART2_SendBuff(AccessControl, 4); //Send the data of AccessControl to uart2
UART2_SendBuff(KeyB, 6); //Send the data of KeyB to uart2
}
}
14、将编译好的程序下载到MCU中,将没修改过密码的新卡靠近THM3523 DEMO板时,UART2打印的数据如下,证明THM3523对卡片执行读写数据和修改密码的操作都有正常执行。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由潮汕小菜提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】国产非接触卡读写芯片THM3523实现电子钱包功能的方法
本文使用同芯微电子THM3523非接触卡读写芯片的DEMO板测试电子钱包功能,主要介绍如何使用THM3523将mifare格式的NFC卡片的某个块初始化为值块,并对该值块执行充值、扣款、读取余额等操作。
设计经验 发布时间 : 2021-05-01
【经验】THM3523非接触卡读写芯片移植读卡代码和实现读卡号功能的方法
同芯微电子原厂提供的“THM3523_DEMO参考程序”主要是实现上位机软件控制THM3523芯片和NFC卡片进行通信的功能,在普通的读卡应用中可以不用那么多代码。本文主要介绍如何移植读卡需要的代码到MCU工程中,并使用STM32F103 MCU控制THM3523 DEMO板实现读卡号功能。
设计经验 发布时间 : 2021-04-27
【选型】同芯微电子(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
【应用】安全加密芯片TMS-97-101A用于T-BOX,满足并高于国六要求,AEC-Q100认证
同芯微电子的安全加密芯片SE产品T9系列的TMS-97-101A,内置DES/T-DES 、AES,SM1,SM4等安全对称算法,以及RSA,SM2 等非对称算法, 可提供安全加密芯片配套OS和SDK,能够方便接入T-BOX系统。同芯微安全加密SE芯片能够有效的保护T-BOX与外界通信的安全,为T-BOX终端和云端建立安全通道,保护数据的安全。
应用方案 发布时间 : 2020-08-21
《高效率15w车载手机无线充电器优选元器件方案》,这个支持哪些协议?
这个资料是介绍其中的无线充电的功率和线圈部分。世强现在有满足QI协议的IDT/ROHM/紫光同芯三个品牌的无线充电产品,请参考下列链接。三个品牌产品均可以支持QI协议。 https://www.sekorm.com/doc/159956.html https://www.sekorm.com/chapter/5968.html
技术问答 发布时间 : 2019-12-23
【方案】家庭智能锁优选器件方案
描述- 本方案通过采用Silicon Labs 32 位低功耗MCU EFM32G230 系列,Silicon Labs 无线多协议SoC EFR32MG系列、圣邦微高精度低噪声低功耗低压差LDO SGM2034、圣邦微直流H 桥驱动器SGM42507 及相关器件,解决了产品运行功耗大、带载能力弱、电机驱动能力不足导致工作不稳定的问题,有效保证了产品可靠的运行。
型号- MK16-B-2,SI4438,SGM42507,EFR32MG1V132F256GM32,SGM2040,MC-146,SGM3752,SGM31324,HR9110S,SGM42609,BGM12X,FA-20H,THM3010,SI4463,AT8837,CPT112S,A9500,SI1153,EFR32BGXXX,SGM4890,SGM2034,SGM706B,RX8010SJ,FC-135,CC6206,EFM32G230,CC6205
【产品】900V N沟道MOSFET TMA3N90H、TMU3N90H,100%雪崩测试
无锡紫光微电子有限公司是由紫光同芯微电子有限公司投资的一家高新技术企业,是一家专注于先进半导体功率器件和集成电路的设计研发、芯片加工、封装测试及产品销售的集成电路设计企业。无锡紫光微推出了TMA3N90H和TMU3N90H的VD MOSFET。分别采用TO-220F和TO-251的封装方式。
新产品 发布时间 : 2019-10-25
【产品】650V N沟道MOSFET TMA/TMC/TMD/TMP/TMU6N65HG,脉冲漏极电流达24A
无锡紫光微电子有限公司是由紫光同芯微电子有限公司投资的一家高新技术企业,是一家专注于先进半导体功率器件和集成电路的设计研发、芯片加工、封装测试及产品销售的集成电路设计企业。无锡紫光微推出了TMA6N65HG,TMC6N65HG,TMD6N65HG,TMP6N65HG和TMU6N65HG的VD MOSFET。封装方式分别为TO-220F,TO-262,TO-252,TO-220和TO-251。
新产品 发布时间 : 2019-10-27
紫光同芯微安全芯片产品介绍
型号- THM3300,THC80,THC20F192A,THC20F08AD-V11M,THM3100,THC80F480A,THC20,THM3060,THC20F17BD-V40,THD86,THM3040,THD89,THD88,THC20F132A,THC80F212A,THM3080,THC80F08BD,THC80F228A,THK88,THD88-F1280,THK89,THK88-2,THC80F09AD-BM,THM3010,THC80F340A,THM3030,THD8X,THM3070,THC20F08AD-V11,THC80F09AD,THM30,THC26E05C,THD20F06BD
【产品】基于32位安全核处理器的安全芯片THM36系列,内置512KB Flash存储器
同芯微电子的THM36系列是高性能、低功耗、具有丰富的内部协处理器和对外接口的安全芯片,可以作为支付终端或者密码键盘使用,用于指纹应用、国家商用密码专用算法应用、网络银行应用、小商户/家庭/个人支付应用等对信息安全有较高要求的应用场合。
新产品 发布时间 : 2019-08-20
是否有13.56MHz、支持ISO15693协议的非接触卡读写芯片?
您好,推荐同芯微THM3070、符合ISO/IEC14443Type A/B和ISO/IEC15693标准、最高支持848kbit/s速率,参考链接:https://www.sekorm.com/news/69249979.html
技术问答 发布时间 : 2023-01-10
【选型】同芯微电子(TMC)智能终端安全芯片/32位安全MCU/非接触式读卡芯片/无线充电IC选型指南
目录- 安全芯片 安全MCU 非接触式接口芯片 接触式接口芯片 Nor Flash 无线充电接收IC 无线充电发射IC
型号- THM3622FAQDB,THM3682FAQD,THM38034,THM3100,THM3682FAQH,THM3622FAQFB,THM3040,THM3070,THK88V20,TH25Q40,TH25040,THK88,THKSS,THP9110,THP9330,THM36S2FAQH,THM380344,THP9410,THM3652FAQHB,THM3652FAGAB,THP9100,THM36S2FAQD,THM3662FAQB
电子商城
现货市场
服务
提供稳态、瞬态、热传导、对流散热、热辐射、热接触、和液冷等热仿真分析,通过FloTHERM软件帮助工程师在产品设计初期创建虚拟模型,对多种系统设计方案进行评估,识别潜在散热风险。
实验室地址: 深圳 提交需求>
世强深圳实验室提供Robei EDA软件免费使用服务,与VCS、NC-Verilog、Modelsim等EDA工具无缝衔接,将IC设计高度抽象化,并精简到三个基本元素:模块、引脚、连接线,自动生成代码。点击预约,支持到场/视频直播使用,资深专家全程指导。
实验室地址: 深圳 提交需求>
登录 | 立即注册
提交评论