【前言】
NRF54L16-DK开发板配置的NFC天线,可以实现NFC的功能
【开发环境】
SDK版本:nRF Connect SDK v3.2.4
Toolchains:NRF3.2.4
【工程创建】
的nrf connect中的create a new application中新建一个基于nrf shell的sample
【工程修改】
1、prj.conf
CONFIG_DK_LIBRARY=y # NFC T2T 配置 CONFIG_NFC_T2T_NRFXLIB=y CONFIG_NFC_NDEF=y CONFIG_NFC_NDEF_MSG=y CONFIG_NFC_NDEF_RECORD=y CONFIG_NFC_NDEF_TEXT_RECORD=y # 日志配置 CONFIG_LOG=y CONFIG_LOG_MODE_DEFERRED=y CONFIG_LOG_PRINTK=y
2、main.c
1、引入头文件
#include <nfc_t2t_lib.h> #include <nfc/ndef/msg.h> #include <nfc/ndef/text_rec.h> #include <dk_buttons_and_leds.h>
2. 常量定义
#define MAX_REC_COUNT 1 #define NDEF_MSG_BUF_SIZE 128 #define RUN_STATUS_LED DK_LED1 // 状态指示 LED #define NFC_FIELD_LED DK_LED2 // NFC 场检测 LED #define STATUS_LED_INTERVAL K_MSEC(1000)
3、NDEF 文本消息编码
static const uint8_t en_payload[] = {
'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
static const uint8_t en_code[] = {'e', 'n'};4、NFC 回调函数
static void nfc_callback(void *context,
nfc_t2t_event_t event,
const uint8_t *data,
size_t data_length)
{
ARG_UNUSED(context);
ARG_UNUSED(data);
ARG_UNUSED(data_length);
switch (event) {
case NFC_T2T_EVENT_FIELD_ON:
dk_set_led_on(NFC_FIELD_LED); // 检测到 NFC 场
break;
case NFC_T2T_EVENT_FIELD_OFF:
dk_set_led_off(NFC_FIELD_LED); // NFC 场移除
break;
default:
break;
}
}5、NDEF 文本编码函数
static int nfc_text_encode(uint8_t *buffer, uint32_t *len,
const uint8_t *payload, size_t payload_len,
const uint8_t *lang_code, size_t lang_code_len,
nfc_ndef_text_rec_utf_type_t encoding)
{
NFC_NDEF_TEXT_RECORD_DESC_DEF(nfc_text_rec,
encoding,
lang_code, lang_code_len,
payload, payload_len);
NFC_NDEF_MSG_DEF(nfc_text_msg, MAX_REC_COUNT);
if (nfc_ndef_msg_record_add(&NFC_NDEF_MSG(nfc_text_msg),
&NFC_NDEF_TEXT_RECORD_DESC(nfc_text_rec)) < 0) {
return -1;
}
if (nfc_ndef_msg_encode(&NFC_NDEF_MSG(nfc_text_msg), buffer, len) < 0) {
return -1;
}
return 0;
}6、NFC 初始化函数
static int start_nfc(void)
{
uint32_t len;
uint8_t ndef_msg_buf[NDEF_MSG_BUF_SIZE];
/* 设置 NFC 回调 */
if (nfc_t2t_setup(nfc_callback, NULL) < 0) {
return -1;
}
/* 编码 NDEF 消息 */
len = sizeof(ndef_msg_buf);
if (nfc_text_encode(ndef_msg_buf, &len,
en_payload, sizeof(en_payload),
en_code, sizeof(en_code), UTF_8) < 0) {
return -1;
}
/* 设置 NFC 载荷 */
if (nfc_t2t_payload_set(ndef_msg_buf, len) < 0) {
return -1;
}
/* 启动 NFC 模拟 */
if (nfc_t2t_emulation_start() < 0) {
return -1;
}
return 0;
}7、主函数集成
int main(void)
{
int err;
printk("Starting NFC NDEF sample\n");
/* 初始化 LED */
err = dk_leds_init();
if (err) {
printk("LEDs init failed (err %d)\n", err);
return 1;
}
/* 启动 NFC */
if (start_nfc() < 0) {
printk("Cannot start NFC!\n");
}
while (true) {
/* 状态 LED 闪烁 */
k_sleep(STATUS_LED_INTERVAL);
}
return 0;
}【工程配置】
添加编译配置如下:
编译后结果如下:

使用west flash后,打印日志如下:

【测试效果】
测试工具为PTX IOT Config Tool


【总结】
NRF54L15-DK可以实现NFC功能,并且可以传输信息。
我要赚赏金
