You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将NTAG213/215 NFC标签设为只读?附代码报错咨询

嘿,我来帮你搞定这个NFC贴纸只读设置的问题!你遇到的TypeError是因为nfcpy里的NTAG对象不能直接用下标访问内存块,得用专门的方法来读写标签的内存区域。下面一步步给你讲清楚:

一、修复NTAG213设置只读的代码错误

首先修正你的代码,用nfcpy提供的read_blockwrite_block方法来操作标签内存:

import nfc
from time import sleep
from nfc.clf import RemoteTarget
import ndef

clf = nfc.ContactlessFrontend('usb')
while True:
    target = clf.sense(RemoteTarget('106A'), RemoteTarget('106B'), RemoteTarget('212F'))
    if target is None:
        sleep(1)
        continue
    serial = target.sdd_res.hex()
    tag = nfc.tag.activate(clf, target)
    
    if not tag.ndef:
        print("No NDEF records found!")
        # 先写入测试NDEF数据(如果需要的话)
        record = ndef.UriRecord("https://www.example.com")
        tag.ndef.records = [record]
        print("Wrote test NDEF record.")
    
    # 打印现有NDEF记录
    for record in tag.ndef.records:
        print("Found record: " + str(record))
    
    # 1. 设置访问条件:块10、11设为0xFF,无需认证即可读取
    tag.write_block(10, b'\xFF\xFF\xFF\xFF')
    tag.write_block(11, b'\xFF\xFF\xFF\xFF')
    
    # 2. 锁定所有内存块:修改块15(锁控制块)的第一个字节
    block15 = bytearray(tag.read_block(15))
    block15[0] = block15[0] | 0x0F  # 锁定所有块0-15
    tag.write_block(15, block15)
    
    print("NTAG213已设置为只读状态!")
    break  # 操作完成后退出循环

关键说明:

  • NTAG213的访问条件块是块10和11,写入0xFF表示无需认证就能读取标签内容
  • 锁控制块是块15,修改第一个字节为0x0F会锁定所有内存块(0-15),之后无法修改任何数据
二、NTAG215设置只读的操作

NTAG215的内存结构和213类似,只是块号不同,调整对应的块即可:

# 针对NTAG215的修改部分
# 1. 设置访问条件:块34、35设为0xFF
tag.write_block(34, b'\xFF\xFF\xFF\xFF')
tag.write_block(35, b'\xFF\xFF\xFF\xFF')

# 2. 锁定所有内存块:修改块39(锁控制块)的第一个字节
block39 = bytearray(tag.read_block(39))
block39[0] = block39[0] | 0x0F  # 锁定所有块0-39
tag.write_block(39, block39)

print("NTAG215已设置为只读状态!")

关键说明:

  • NTAG215的访问条件块是块34和35
  • 锁控制块是块39,同样通过修改第一个字节锁定所有块
三、NFC贴纸设置只读的通用流程

不管是NTAG系列还是其他类型的NFC贴纸,设置只读的核心逻辑都是一致的,步骤如下:

  • 确认标签规格:先查对应标签的官方 datasheet,找到访问条件块锁控制块的位置、格式
  • 写入数据:先把需要存储的NDEF数据写入标签(确保内容正确,锁定后无法修改)
  • 配置访问权限:修改访问条件块,设置为「无需认证即可读取」(通常是写入特定值,比如0xFF,具体看 datasheet)
  • 锁定内存:修改锁控制块,将数据区和配置区锁定为只读(这一步不可逆,一定要谨慎)
  • 验证效果:尝试重新写入数据,确认操作失败;再用设备读取,确认内容正常显示

重要注意事项:

  • 锁定操作是不可逆的,一旦设置为只读,就无法再修改标签内容,操作前务必确认数据正确
  • 不同品牌、型号的NFC标签锁机制差异很大,必须参考官方文档,不能照搬NTAG的操作

内容的提问来源于stack exchange,提问作者James

火山引擎 最新活动