Funpack2-6 nRF7002DK 自定义NFC卡片
Funpack2-6活动,基于nrf7002dk开发板,利用板载NFC功能,实现自定义NFC卡片
标签
Funpack活动
nRF7002
NFC
DayDay
更新2023-10-17
707

简介

该项目是Funpack第二季第六期任务三:使用板卡的NFC功能,模拟出一个自定义功能的卡片,使用手机靠近并能读取卡片信息。

板卡

nRF7002 DK是nRF7002 Wi-Fi 6协同IC的开发评估板,它包含了在单板上开发所需要的所有元器件。开发板采用nRF5340多协议SoC作为主处理器,配合nRF7002 Wi-Fi协同芯片。可以同时支持低功耗蓝牙和Wi-Fi 应用的开发,并实现如 OFDMA、波束成形和目标唤醒时间等多项 Wi-Fi 6 功能。

板上的nRF5340是支持低功耗蓝牙、蓝牙Mesh、NFC、Thread和Zigbee的双核蓝牙5.3 SoC,并且蓝牙测向可实现所有到达角(AoA)和出发角(AoD)的测量功能。此外,它支持低功耗蓝牙音频,2 Mbps高吞吐量、广播扩展和长距离。像蓝牙Mesh、Thread和Zigbee这样的Mesh协议可以与低功耗蓝牙同时运行,从而使智能手机能够配网、入网、配置和控制Mesh节点。还支持NFC、ANT、802.15.4和2.4 GHz专有协议。

设计思路

任务三是利用nrf5340中的NFC功能实现,因而无关板卡WiFi和蓝牙部分。

NFC通讯中,两个设备一个工作在被动模式下,一个工作在主动模式下。被动模式的设备被主动模式的设备读取、写入信息。一般NFC卡片都是被动模式的设备。

因此,我们将nRF5340编程为NFC被动模式,并存储一些字符信息,由手机NFC读取。

流程图与主要代码

Fow-1pzcrfB3ijaAfyIKVIHrGvBg

 

流程

/*
 * Copyright (c) 2018 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

#include <zephyr/kernel.h>
#include <zephyr/sys/reboot.h>

#include <nfc_t2t_lib.h>
#include <nfc/ndef/msg.h>
#include <nfc/ndef/text_rec.h>

#include <dk_buttons_and_leds.h>

#define REC_COUNT		1
#define BUF_SIZE	128

static const uint8_t data[] = {
	'H', 'e', 'l', 'l', 'o', ' ', 'F', 'u','n','p','a','c','k','2','-','6','!'
};
static const uint8_t code[] = {'e', 'n'};


/* Buffer used to hold an NFC NDEF message. */
static uint8_t msg_buf[BUF_SIZE];


static void 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);


}


int main(void)
{
	uint32_t len = sizeof(msg_buf);

	nfc_t2t_setup(callback, NULL);
	//创建RECORD
	NFC_NDEF_TEXT_RECORD_DESC_DEF(rec,UTF_8,code,sizeof(code),data,sizeof(data));
	//创建MESSAGE
	NFC_NDEF_MSG_DEF(text_msg, REC_COUNT);
	//将RECORD添加入MESSAGE
	nfc_ndef_msg_record_add(&NFC_NDEF_MSG(text_msg),&NFC_NDEF_TEXT_RECORD_DESC(rec));
	//编码MESSAGE
	nfc_ndef_msg_encode(&NFC_NDEF_MSG(text_msg),msg_buf,&len);
	//设置NFC Type 2 Tag Payload
	nfc_t2t_payload_set(msg_buf, len);
	//启动NFC Type 2 Tag模拟
	nfc_t2t_emulation_start();

	return 0;

}

 

原理说明

在初始化后nfc t2t后,首先通过宏NFC_NDEF_TEXT_RECORD_DESC_DEF创建了ndef的record,record中填入我们自定义的字符串。

然后通过宏NFC_NDEF_MSG_DEF创建ndef message,再通过函数nfc_ndef_msg_record_add将record加入message。

接着用函数nfc_ndef_msg_encode对message进行编码,存入数据缓冲,用函数nfc_t2t_payload_set设置nfc t2t payload指向存储编码数据的缓冲区。

最后用函数nfc_t2t_emulation_start启动nfc t2t模拟。这时板卡就可以被识别为一个nfc tag。

NFC技术使用的频率是13.56MHz。这个频率被称为“高频”,因为它比一些其他无线技术使用的频率高。NFC设备需要非常接近才能进行通信,通常只有几厘米的距离。

NFC设备使用的是被动和主动模式。在被动模式下,标签只是等待读取器/写入器的信号。当读取器/写入器靠近标签时,标签会接收到一个电磁场,并回复一个包含存储在标签上的信息的信号。在主动模式下,读取器/写入器会发送一个信号,标签会接收到这个信号并回复一个响应。

当手机靠近读取nfc tag的时候,手机发出NFC射频信号,tag感应到信号后,利用感应能量,将自身数据回传给手机,这样就能够从手机端获取tag中我们填入的自定义字符串。

 

功能演示

在板卡上插入NFC天线,下载运行程序。

开启手机NFC功能,打开手机App NFC Tools。

手机贴近板卡NFC天线,手机App上会弹出提示:检测到NFC标签。

手机页面显示标签详细技术信息,包括自定义的字符串“Hello,Funpack2-x!"

FqCnTjMIKJaxe9DytT0Vuuk3pz-N

 

心得体会

参加本次活动,了解到了nordic最新的nrf connect sdk基于zephyr的开发方式。一开始在搭建环境的过程中颇费周折。学习了nrf nfc库的使用。以后有机会再详细研究wifi和蓝牙部分。

希望funpack越办越好!

 

附件下载
record_text.7z
团队介绍
个人
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号