读取数据ST25DV

问题描述 投票:0回答:1

我用STM32L031K6和ST25DV64K NFC芯片制作了自己的电路板。我正在使用android应用“ 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);
}
nfc stm32
1个回答
0
投票

当您从地址/块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有效载荷格式的良好阅读资源是here

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.