ST意法半导体
直播中

打马过草原

9年用户 884经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

Python中如何通过i2c协议写入NFC01A1内存?

我在 NFC01A1 上工作,想在 M24SR 中使用 python 中的 i2c 协议编写。我的目标是放入一个 URI,在此示例中为“ abc.com ”。在这里,我将只放置代码的 3 个重要部分,擦除消息长度、写入消息、写入消息长度:
  • # erase NDEF messgae length
  •     wait("erase NDEF message length")
  •     data = [0x03,0x00,0xD6,0x00,0x00,0x02,0x00,0x00]
  •     tag.write(data, crc=True)
  •     # write NDEF  message
  •     wait ("write NDEF message")
  •     data = [0x02,0x00,0xD6,0x00,0x02,0x0C,0xD1,0x01,0x07,0x55,0x03,0x61,0x62,0x63,0x2E,0x63,0x6F,0x6D]
  •     tag.write(data, crc=True)
  •     # write NDEF message length
  •     wait("write NDEF message length")
  •     data = [0x03,0x00,0xD6,0x00,0x00,0x02,0x00,0x08]
  •     tag.write(data, crc= True)
我可以用 applcation ST25 NFC 水龙头读取它,我得到了这个:

我想我无法打开页面是因为两个字节“00 08”,我现在真的不明白为什么他们会在这里..
你有解决这个问题的方法吗?
谢谢你们 !






回帖(1)

潘沪城

2023-2-1 10:42:11

  •   # erase NDEF messgae length
  •   wait("erase NDEF message length")
  •   data = [0x03,0x00,0xD6,0x00,0x00,0x02,0x00,0x00]

你发送这个命令来写一个空的 NDEF 了吗?
推荐的空 NDEF 是 0x00 0x03 0xD0 0x00 0x00。
在你的转储中,我看到字节 0x03 0x00 的长度,我想知道你是否可能在字节序方面犯了错误:NFC william hill官网 规范使用 Big Endian 标准,所以第一个字节是 MSB。如果长度是“3 个字节”,你应该写 0x00 0x03。
分 3 步完成 NDEF 编程是件好事。这确实是应该做的。我正在与您分享 Android 日志,显示在保存 URI“ abc.com ”时标记中写入的内容:
- 首先我们有一个命令来选择 NDEF 文件(文件 ID = 0x0001):
2020-07-15 14:06:26.262 10839-10883/com.st.st25nfc.dbg D/Type4Command:==> 发送 SelectFile 0x0001 命令:00 a4 00 0c 02 00 01
2020-07-15 14:06:26.268 10839-10883/com.st.st25nfc.dbg D/Type4Command:响应:90 00
- 然后我们在 NDEF Length 中写入 0x00 0x00:
2020-07-15 14:06:26.268 10839-10883/com.st.st25nfc.dbg D/Type4Command:==>发送更新二进制命令:00 d6 00 00 02 00 00
2020-07-15 14:06:26.277 10839-10883/com.st.st25nfc.dbg D/Type4Command:响应:90 00
- 然后我们编写 NDEF 消息:
2020-07-15 14:06:26.278 10839-10883/com.st.st25nfc.dbg D/Type4 命令:==> 发送更新二进制命令:00 d6 00 02 0c d1 01 08 55 01 61 62 63 2e 63 6f 6d
2020-07-15 14:06:26.289 10839-10883/com.st.st25nfc.dbg D/Type4Command:响应:90 00
注意:我们从偏移量 0x02 开始写入,在这个阶段长度仍然是 0x00 0x00
- 然后我们写入正确的 NDEF 长度:
2020-07-15 14:06:26.290 10839-10883/com.st.st25nfc.dbg D/Type4Command:==>发送updateBinary命令:00 d6 00 00 02 00 0c
2020-07-15 14:06:26.299 10839-10883/com.st.st25nfc.dbg D/Type4Command:响应:90 00
这是我们最后在内存中得到的:00 0c d1 01 08 55 01 61 62 63 2e 63 6f 6d
我认为您可以通过 I2C 执行相同的操作。
关于最后一张图片(以 0xD1 开头的图片)中显示的转储,我注意到您错过了指示 NDEF 长度的 2 个字节。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分