
1. 环境准备 硬件连接 确保ST25R3911 Discovery板通过USB正确连接到PC,并安装官方驱动(STSW-ST25R001)。 检查设备管理器中是否识别为ST25R3911-DISCO COM端口。 软件依赖 引用官方DLL(需从ST官网下载): ST25R3911DISCOComm.dll ST25R3911DISCOComm.xml(文档注释) 2. C#示例代码 初始化读写器 csharp 复制 using System; using ST25R3911DISCOComm; // 引用DLL命名空间 class NFCReader { private static ST25R3911Discovery _discoveryBoard; static void Main(string[] args) { // 1. 初始化设备 _discoveryBoard = new ST25R3911Discovery(); if (!_discoveryBoard.Connect()) { Console.WriteLine("连接ST25R3911 Discovery板失败!"); return; } // 2. 检测NFC标签 if (!_discoveryBoard.IsTagPresent()) { Console.WriteLine("未检测到NFC标签!"); _discoveryBoard.Disconnect(); return; } // 3. 读取NDEF数据 ReadNDEFMessage(); // 4. 写入NDEF数据 string newMessage = "https://www.st.com"; WriteNDEFMessage(newMessage); _discoveryBoard.Disconnect(); } } 读取NDEF消息 csharp 复制 static void ReadNDEFMessage() { try { // 获取NDEF数据 byte[] ndefData = _discoveryBoard.ReadNDEF(); if (ndefData == null || ndefData.Length == 0) { Console.WriteLine("标签中没有NDEF数据或读取失败。"); return; } // 解析NDEF记录(示例:解析URI类型) NdefRecord record = NdefParser.Parse(ndefData)[0]; // 取第一条记录 Console.WriteLine($"NDEF类型: {record.Type}"); Console.WriteLine($"NDEF内容: {Encoding.UTF8.GetString(record.Payload)}"); } catch (Exception ex) { Console.WriteLine($"读取NDEF时出错: {ex.Message}"); } } 写入NDEF消息 csharp 复制 static void WriteNDEFMessage(string uri) { try { // 创建NDEF URI记录 NdefRecord record = new NdefRecord { Type = NdefRecordType.Uri, Payload = Encoding.UTF8.GetBytes(uri) }; // 转换为NDEF字节流 byte[] ndefBytes = NdefParser.ToByteArray(new List<NdefRecord> { record }); // 写入标签 if (_discoveryBoard.WriteNDEF(ndefBytes)) { Console.WriteLine("NDEF写入成功!"); } else { Console.WriteLine("NDEF写入失败!"); } } catch (Exception ex) { Console.WriteLine($"写入NDEF时出错: {ex.Message}"); } } 3. NDEF辅助类(NdefParser.cs) csharp 复制 using System; using System.Collections.Generic; using System.Text; public class NdefRecord { public NdefRecordType Type { get; set; } public byte[] Payload { get; set; } } public enum NdefRecordType { Text = 0x01, Uri = 0x02 } public static class NdefParser { // 解析NDEF字节流为记录列表 public static List<NdefRecord> Parse(byte[] ndefData) { var records = new List<NdefRecord>(); int index = 0; while (index < ndefData.Length) { byte flags = ndefData[index++]; NdefRecordType type = (NdefRecordType)ndefData[index++]; int payloadLength = ndefData[index++]; byte[] payload = new byte[payloadLength]; Array.Copy(ndefData, index, payload, 0, payloadLength); index += payloadLength; records.Add(new NdefRecord { Type = type, Payload = payload }); } return records; } // 将NDEF记录列表转为字节流 public static byte[] ToByteArray(List<NdefRecord> records) { var bytes = new List<byte>(); foreach (var record in records) { bytes.Add(0xD1); // MB+ME+CF+SR+IL标志位 bytes.Add((byte)record.Type); bytes.Add((byte)record.Payload.Length); bytes.AddRange(record.Payload); } return bytes.ToArray(); } }
所在话题
参与活动
-
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
网络 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16 -
滴滴押注社区团购,明确“投入不设上限,要做市场第一”
线下 2020-10-16