nfc - 读取数据 ST25DV
问题描述
我用 STM32L031K6 和 ST25DV64K NFC 芯片制作了自己的电路板。我正在使用安卓应用程序“NFC 工具”。我可以使用应用程序读取 NFC 芯片的 UID,因此天线已正确调谐。我还可以通过 I2C 总线使用微控制器读取 UID。当我用微控制器写入 NFC 芯片的 eeprom 存储器时,我无法用 NFC 应用程序读取数据。它说标签是空的。我想我缺少一个配置,但我找不到哪个配置。
这是我的代码,执行一次:
uint8_t ToWrite = 15;
uint8_t Password[17] = {0}; //Default password is"00000000"
Password[8] = 0x09; //Validation Code
// ST25DV_Address_E21 0x57 << 1; // Device select code= 0b1010111 ; E2 = 1
Password_Address = 0x900
HAL_I2C_Mem_Write(&hi2c1, ST25DV_Address_E21, Password_Address, 2, Password, 17, 0xFFF);
HAL_Delay(200);
//Read the UID
HAL_I2C_Mem_Read(&hi2c1, ST25DV_Address_E21, 0x18, 2, UID_Read, 8, 0xFFF); // This line works, UID displayed in the app and in the debugger are the same
HAL_Delay(500);
//Write some data in the eepprom memory (first address: 0x00)
for(int i = 0; i< 250; i++)
{
ToWrite++;
HAL_I2C_Mem_Write(&hi2c1,ST25DV_Address_E21, i, 2, &ToWrite, 1, 0xFF);
}
解决方案
当您从地址/块 0 向 EEPROM 中写入数据时,您只是用全零覆盖了能力容器值。正确的做法是初始化标签,然后从块 4 开始写入数据。
CC 值如下所示:
0xE1, /* (block 0) */
0x40, /* (block 1) */
0x40, /* (block 2) */
0x05 /* (block 3) */
后跟其他键标头值,具体取决于 NDEF 消息类型。在这里,我为 NDEF TEXT 进行说明:
0x03, /*(block 4) NDEF message type (block 4) */
0x0D, /*(block 5) NDEF message length (blobk 5) eg, 13 byte message starting from here */
0xD1, /*(block 6) NDEF Record header: MB = 1, ME = 1, CF = 0, SR = 1, IL = 0, TNF = 001 > 0xD1 */
0x01, /*(block 7) Type length */
0x09, /*(block 8) Payload length = 9 (from language code) */
0x54, /*(block 9) Msg Type = Text */
0x02, /*(block 10) Language code size */
0x65, /*(block 11) Language = English, 'e', */
0x6E, /*(block 12) 'n', */
'A', /*(block 13+)Payload data */
'B',
'C',
'D',
'E',
'F'
了解 NDEF 有效负载格式的一个很好的阅读资源在这里。
希望这可以帮助!
推荐阅读
- amazon-web-services - 如何在运行 kops update cluster ${NAME} --yes 时修复“找不到“kope.io/k8s ...”的图像
- angularjs - process.nextTick 不是新 MicrophoneStream (microphone-stream.js:114) 中的函数,位于 identifyMicrophone (recognize-microphone.js:107)
- php - Laravel 多个路由参数
- api - 有没有办法在 Azure-DevOps Build Pipeline 中异步运行命令行?
- eyeshot - 如果(Mesh or Brep)的面是平面,如何得到它的法线向量
- cakephp-3.0 - 无法使用 $this->set('data', array received from find()) 将数组从控制器传递到 cakephp 3 中查看
- spring-boot - 将类路径中的外部 jar 添加到可执行 WAR 文件
- gitlab - 在 gitlab 上运行的 newman 超时,出现 503
- javascript - 一次清除所有表单字段,reactjs
- xml - 在 XML 的下拉命令中引用动态值