串口M1卡读写模块,串口Mifare 读写模块,串口Ntag213/215/216读写模块

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feijack/article/details/76085857

                                  串口Mifare、Ntag读写模块


一、主要特点

          用户只需通过Uart串口控制就能实现Mifare系列、Ntag系列的读写。不需要了解NFC底层协议,迅速完成产品开发。

二、支持平台:

     WinXP、Win7、Win8、Win10、Linux、Android 等等。

三、模块介绍:

     支持13.56MHz TypeA型卡片的读写,发送相关卡片的操作指令即可,如Mifare、Ntag标签等。

     主模块天线是板载天线,用户不需要自己搭配天线,直接通过串口控制操作、简单方便

基本特征

Ø  射频工作频率:13.56MHz

Ø  通讯接口:Uart口,波特率115200,

Ø  供电电源:DC3.3V

Ø  模块尺寸:73mm*50mm

外观图片


联系QQ:2425053909(M1读写模块)

模块操作控制示例(具体协议见用户手册)

Mifare卡操作示例(包含钱包格式数据充值、扣款)

终端发送:

0200 04 a2 31 00 00 93 03//连接卡片指令

读写器返回:

0200 08 00 00 04 00 AB 23 3B EF 58 03

说明:黄色部分为返回状态,表明成功连接到卡片,绿色部分为卡片类型,红色部分为卡片UID

注意:

下面的操作跟具体的卡片有关:本卡片keyA:ffffffffffff,keyB: ffffffffffff,卡片UID:AB 23 3B EF,使用时请注意

终端发送(认证KeyA)

0200 0e a2 33 60 00 ff ff ff ff ff ff ab 23 3b ef ad 03 //认证key B

60表示认证keyA,00表示认证0扇区,ffffffffffff表示keya 值,ab233bef卡片UID

读写器返回:

0200 02 00 00 00 03  //黄色表示认证成功

 

终端发送(认证KeyB)

0200 0e a2 33 61 00 ff ff ff ff ff ff ab 23 3b ef ac 03 //认证key B

61表示认证keyB,00表示认证0扇区,ffffffffffff表示keya 值,ab233bef卡片UID

读写器返回:

0200 02 00 00 00 03  //黄色表示认证成功

 

终端发送(写块):

0200 14 a2 33 a0 01 11 22 33 44 55 66 77 88 99 00 aa bb cc dd ee ff30 03//写块1

A0表示写块,01表示写的块号,11223344556677889900aabbccddeeff表示写值

读写器返回:02 00 02 00 0000 03//黄色表示写人成功

 

终端发送(读块):

0200 04 a2 33 30 01 a0 03  //读块1

30表示读块,01表示读的块号。

读写器返回:02 00 12 00 0011 22 33 44 55 66 77 88 99 00AA BB CC DD EE FF 00 03

黄色部分表示读取正确,绿色部分为返回值。

 

钱包格式值的操作

终端发送(设置钱包格式值):

0200 08 a2 33 FA 01 11 22 33 44 2E 03 //设置钱包金额,金额高位字节在前

FA表示设置钱包数据,01表示块号,11223344表示金额

读写器返回:02 00 02 00 0000 03//黄色表示设置成功

 

终端发送(读块):

0200 04 a2 33 30 01 a0 03  //读块1

30表示读块,01表示读的块号。

读写器返回:02 00 12 00 0044 33 22 11 BB CC DD EE 44 3322 11 01 FE 01 FE 44 03

黄色部分表示读取正确,绿色部分为返回值。

 

终端发送(增值/充值):

0200 08 a2 33 C1 01 00 00 00 01 50 03//增值/充值,低位字节在前

C1表示增值,01表示块号,00000001表示金额

读写器返回:02 00 02 00 0000 03//黄色表示指令成功

终端发送transfer指令

0200 04 a2 33 B0 01 20 03  //transfer

B0表示transfer指令,01表示块号

读写器返回:02 00 02 00 0000 03//黄色表示指令成功

此时充值成功 ,可以通过读指令检测。

 

终端发送:02 00 04 a2 33 3001 a0 03

读写器返回:02 00 12 00 0044 33 22 12 BB CC DD ED 44 3322 12 01 FE 01 FE 47 03

关于读指令说明参考前面即可。

 

终端发送(减值/扣款):

200 08 a2 33 C0 01 01 00 00 00 51 03 //扣款/减值,低位字节在前

C0表示减值,01表示块号,01000000表示金额

读写器返回:02 00 02 00 0000 03//黄色表示指令成功

终端发送transfer指令

0200 04 a2 33 B0 01 20 03  //transfer

B0表示transfer指令,01表示块号

读写器返回:02 00 02 00 0000 03//黄色表示指令成功

此时扣款成功 ,可以通过读指令检测。

 

终端发送:02 00 04 a2 33 3001 a0 03

读写器返回:02 00 12 00 0043 33 22 12 BC CC DD ED 43 3322 12 01 FE 01 FE 40 03

关于读指令说明参考前面即可。



展开阅读全文

有关于串口读写(MC35模块

08-28

定义:rnLPCTSTR lpcsCommand = "AT+CPMS=SM,SM,SM\r"; \\设置收到短信存储位置为SIM卡rnrnrn使用WriteFile写串口rnrnif ( !WriteFile ( m_hComm, lpcsCommand, strlen(lpcsCommand) , &dwWrittenBytes, &m_oWrite ) )rnrn if ( GetLastError() == ERROR_IO_PENDING )rn rn GetOverlappedResult ( m_hComm, &m_oWrite, &dwTransferred, TRUE));rn rn elsern rn ....rn rnrnrn然后用WaitCommEvent( m_hComm, &dwEvtMask, &m_o ) 等待串口返回事件rnrnif(!WaitCommEvent( m_hComm, &dwEvtMask, &m_o ))rnrn if(GetLastError() == ERROR_IO_PENDING )rn GetOverlappedResult(m_hComm, &m_o, &dwTransferred, TRUE);rnrnrn最后用ReadFile读串口,看是否接收到“OK”rnrnif ( !ReadFile ( m_hComm, pszRead, RECEIVE_BUFFER, &dwReadBytes, &m_oRead ) )rnrn if ( GetLastError() == ERROR_IO_PENDING )rn rn GetOverlappedResult(m_hComm, &m_oRead, &dwTransferred, TRUE);rn rn elsern rn ...rn rnrnrnif(strstr(pszRead,"OK"))rn return TRUE;rnelsern return FALSE;rnrnrn程序大体就这样。rnrnrnrn这里使用了WaitCommEvent()函数,一直等待串口事件,也就是串口收到字符事件,它才返回。然后再去ReadFile()读串口,把字符读出来。rnrn如果lpcsCMGF = "AT+CMGF=1\r";这个命令,一切正常,ReadFile()可以读到“OK”。rnrn但是如果第一次使用 "AT+CPMS=" 这个命令去更改存储位置的时候,串口需要等待很长一段时间才能收到MC35模块是否设置成功的回复。所以使用WaitCommEvent(),应该是串口有数据才能返回,然后ReadFile()读到数据放入pszRead。但是为什么我什么也字符没接收到????即WaitCommEvent()好像没有收到任何字符事件它就返回了,ReadFile()中pszRead什么也没有。rn 论坛

关于西门子MC35模块串口读写问题!

08-28

定义:rnLPCTSTR lpcsCommand = "AT+CPMS=SM,SM,SM\r"; \\设置收到短信存储位置为SIM卡rnrnrn使用WriteFile写串口rnrnif ( !WriteFile ( m_hComm, lpcsCommand, strlen(lpcsCommand) , &dwWrittenBytes, &m_oWrite ) )rnrn if ( GetLastError() == ERROR_IO_PENDING )rn rn GetOverlappedResult ( m_hComm, &m_oWrite, &dwTransferred, TRUE));rn rn elsern rn ....rn rnrnrn然后用WaitCommEvent( m_hComm, &dwEvtMask, &m_o ) 等待串口返回事件rnrnif(!WaitCommEvent( m_hComm, &dwEvtMask, &m_o ))rnrn if(GetLastError() == ERROR_IO_PENDING )rn GetOverlappedResult(m_hComm, &m_o, &dwTransferred, TRUE);rnrnrn最后用ReadFile读串口,看是否接收到“OK”rnrnif ( !ReadFile ( m_hComm, pszRead, RECEIVE_BUFFER, &dwReadBytes, &m_oRead ) )rnrn if ( GetLastError() == ERROR_IO_PENDING )rn rn GetOverlappedResult(m_hComm, &m_oRead, &dwTransferred, TRUE);rn rn elsern rn ...rn rnrnrnif(strstr(pszRead,"OK"))rn return TRUE;rnelsern return FALSE;rnrnrn程序大体就这样。rnrnrnrn这里使用了WaitCommEvent()函数,一直等待串口事件,也就是串口收到字符事件,它才返回。然后再去ReadFile()读串口,把字符读出来。rnrn如果lpcsCMGF = "AT+CMGF=1\r";这个命令,一切正常,ReadFile()可以读到“OK”。rnrn但是如果第一次使用 "AT+CPMS=" 这个命令去更改存储位置的时候,串口需要等待很长一段时间才能收到MC35模块是否设置成功的回复。所以使用WaitCommEvent(),应该是串口有数据才能返回,然后ReadFile()读到数据放入pszRead。但是为什么我什么也字符没接收到????即WaitCommEvent()好像没有收到任何字符事件它就返回了,ReadFile()中pszRead什么也没有。rnrn 论坛

没有更多推荐了,返回首页