你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????

[复制链接]
河北兔 提问时间:2024-10-29 11:51 / 未解决
收藏 评论1 发布时间:2024-10-29 11:51

举报

1个回答
STMCU-管管 回答时间:2025-3-25 18:30:45

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();
    }
}

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版