ST意法半导体
直播中

蒋美燕

7年用户 889经验值
私信 关注
[问答]

将ndef标签与st25dv04k连接起来,为什么没有得到ndef标签的响应?

#include
#include
#include
#include
#include <时间.h>
#include tinet/in.h>
#include
/* NDEF 文本记录 */
无符号字符 NDEF_DATA[] =
{
/*NDEF文本记录*/
0x03, 0x0E, //NDEF消息,14字节消息
0xD1, //NDEF 记录头: MB = 1b, ME = 1b, CF = 0b, SR = 1b, IL = 0b, TNF = 001b
0x01, 0x0A, //类型长度,载荷长度
0x54, //类型 = 文本
0x02, //语言代码大小
0x65, 0x6E, // 语言 = 英语, 'e', 'n',
/*有效载荷数据=“EEwiki”*/
' ', 'E', 'E', 'w', 'i', 'k', 'i',
};
#define地址 0x53
诠释主要(){
诠释;
无符号字符缓冲区[3];
无符号字符缓冲区 1[2];
if ((fd = open("/dev/i2c-2", O_RDWR)) < 0) { printf("无法打开设备!%dn", fd); 返回 1;}
如果 (ioctl(fd, I2C_SLAVE, 地址) < 0)
{
printf("在地址上找不到设备!n"); 返回 1;
}
缓冲区[0] = 0x00;
缓冲区[1] = 0x00;
缓冲区[2] = NDEF_DATA[0];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x01;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[1];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x02;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[2];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x03;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[3];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x04;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[4];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲器[1] = 0x05;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[5];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲器[1] = 0x06;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[6];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x07;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[7];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x08;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[8];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x09;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[9];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲器[1] = 0x0A;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[10];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲器[1] = 0x0B;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[11];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲器[1] = 0x0C;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[12];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲区[1] = 0x0D;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[13];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲器[1] = 0x0E;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[14];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
缓冲区[0] = 0x00;
缓冲器[1] = 0x0F;
//缓冲区[2] = 0x00;
缓冲区[2] = NDEF_DATA[15];
如果(写(fd,缓冲区,3)!= 3)
{
printf("错误处理:i2c 事务失败n");
}
别的
printf("i2c 写入成功n");
睡眠(5000);
关闭(fd);
返回 0;
}









回帖(1)

张荣

2023-1-11 14:19:21
我认为您的问题是缺少 CCfile。
根据 NFC william hill官网 规范中的定义,前 4 个字节(或 8 个字节,取决于标签内存大小)必须包含 CCFile,这表明标签是 NFC william hill官网 兼容设备,并提供有关标签功能的一些信息,比如内存大小。
NDEF 文件应仅在 CCFile 之后写入,在您的情况下为 Ii2C 地址 0004h,而不是地址 0000h
您可以在https://nfc-forum.org/our-work/specification-releases/specifications/nfc-forum-technical-specifications/找到 NFC william hill官网 “Type 5 标签规范”对此进行解释  (需要购买)。
您还可以在以下应用说明中找到有关如何使用 CCFIle 格式化标签的说明:https ://www.st.com/resource/en/application_note/dm00328901-ndef-management-with-st25dvxxx-and-st25tvxxx-products -stmicroelectronics.pdf
举报

更多回帖

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