网易首页 > 网易号 > 正文 申请入驻

小凌派-RK2206开发板:NFC控制案例

0
分享至

一、简介

NFC英文全称Near Field Communication,近距离无线通信。是由飞利浦公司发起,由诺基亚、索尼等著名厂商联合主推的一项无线技术。NFC由非接触式射频识别(RFID)及互联互通技术整合演变而来,在单一芯片上结合感应式读卡器、感应式卡片和点对点的功能,能在短距离内与兼容设备进行识别和数据交换。这项技术最初只是RFID技术和网络技术的简单合并,现在已经演变成一种短距离无线通信技术,发展态势相当迅速。与RFID不同的是,NFC具有双向连接和识别的特点,工作于13.56MHz频率范围,作用距离10厘米左右。NFC技术在ISO 18092、ECMA 340和ETSI TS 102 190框架下推动标准化,同时也兼容应用广泛的ISO 14443 Type-A、B以及Felica标准非接触式智能卡的基础架构。

NFC芯片装在手机上,手机就可以实现小额电子支付和读取其他NFC设备或标签的信息。NFC的短距离交互大大简化整个认证识别过程,使电子设备间互相访问更直接、更安全和更清楚。通过NFC,电脑、数码相机、手机、PDA等多个设备之间可以很方便快捷地进行无线连接,进而实现数据交换和服务。

本文基于瑞芯微RK2206芯片 + 鸿蒙LiteOS操作系统,通过i2c总线控制NFC,实现手机和开发板的互相通信功能。

、硬件电路设计

模块整体硬件电路如下图所示,电路中包含了NFC。电路比较简单,这边不对电路进行说明。

图1 硬件电路图

、程序设计

NFC是一种近距离无线通讯技术,使用NFC技术的设备(如智能手机)可以在彼此靠近的情况下进行数据交换,是通过在单一芯片上集成感应式读卡器、感应式卡片和点对点通信的功能,利用移动终端实现移动支付、门禁、移动身份识别等。

与以往设备配网技术相比,NFC"碰一碰"方案可以支持NFC功能的安卓手机和iOS 13.0以上系统的iPhone使用,为消费客户提供高效便捷的智慧生活无缝体验。

1、主程序设计

如图所示为NFC碰一碰主程序流程图,开机LiteOS系统初始化后,进入主程序后先初始化I2C总线,然后控制I2C总线往NFC写入一段文本信息和一段网址信息,最后拿支持NFC功能的安卓手机或iOS 13.0以上系统的iPhone靠近小凌派-RK2206开发板,就可以识别出一段文本信息和一个网址。

图 主程序流程图

void nfc_process(void)

unsigned int ret = 0;

/* 初始化NFC设备 */

nfc_init();

ret = nfc_store_text(NDEFFirstPos, (uint8_t *)TEXT);

if (ret != 1) {

printf("NFC Write Text Failed: %d\n", ret);

ret = nfc_store_uri_http(NDEFLastPos, (uint8_t *)WEB);

if (ret != 1) {

printf("NFC Write Url Failed: %d\n", ret);

while (1) {

printf("==============NFC Example==============\r\n");

printf("Please use the mobile phone with NFC function close to the development board!\r\n");

printf("\n\n");

LOS_Msleep(1000);

、NFC初始化程序设计

NFC碰一碰初始化主要包括I2C总线初始化。

/* NFC使用i2c的总线ID */

static unsigned int NFC_I2C_PORT = 2;

/* i2c配置 */

static I2cBusIo m_i2c2m0 =

.scl = {.gpio = GPIO0_PD6, .func = MUX_FUNC1, .type = PULL_NONE, .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},

.sda = {.gpio = GPIO0_PD5, .func = MUX_FUNC1, .type = PULL_NONE, .drv = DRIVE_KEEP, .dir = LZGPIO_DIR_KEEP, .val = LZGPIO_LEVEL_KEEP},

.id = FUNC_ID_I2C2,

.mode = FUNC_MODE_M0,

/* i2c的时钟频率 */

static unsigned int m_i2c2_freq = 400000;

unsigned int NT3HI2cInit()

uint32_t *pGrf = (uint32_t *)0x41050000U;

uint32_t ulValue;

ulValue = pGrf[7];

ulValue &= ~((0x7 << 8) | (0x7 << 4));

ulValue |= ((0x1 << 8) | (0x1 << 4));

pGrf[7] = ulValue | (0xFFFF << 16);

printf("%s, %d: GRF_GPIO0D_IOMUX_H(0x%x) = 0x%x\n", __func__, __LINE__, &pGrf[7], pGrf[7]);

if (I2cIoInit(m_i2c2m0) != LZ_HARDWARE_SUCCESS)

printf("%s, %s, %d: I2cIoInit failed!\n", __FILE__, __func__, __LINE__);

return __LINE__;

if (LzI2cInit(NFC_I2C_PORT, m_i2c2_freq) != LZ_HARDWARE_SUCCESS)

printf("%s, %s, %d: LzI2cInit failed!\n", __FILE__, __func__, __LINE__);

return __LINE__;

return 0;

unsigned int nfc_init(void)

unsigned int ret = 0;

uint32_t *pGrf = (uint32_t *)0x41050000U;

uint32_t ulValue;

if (m_nfc_is_init == 1)

printf("%s, %s, %d: Nfc readly init!\n", __FILE__, __func__, __LINE__);

return __LINE__;

ret = NT3HI2cInit();

if (ret != 0)

printf("%s, %s, %d: NT3HI2cInit failed!\n", __FILE__, __func__, __LINE__);

return __LINE__;

m_nfc_is_init = 1;

return 0;

、NFC写入信息程序设计

向NFC芯片写入数据,但需要写入2个记录时,第2个记录的位置需要用 NDEFLastPos 来定义;当需要写入3个记录时,第2个和第3个记录的位置分别需要用 NDEFMiddlePos 和 NDEFLastPos 来定义。

图 NDEF协议格式图

ret = nfc_store_text(NDEFFirstPos, (uint8_t *)TEXT);

if (ret != 1) {

printf("NFC Write Text Failed: %d\n", ret);

ret = nfc_store_uri_http(NDEFLastPos, (uint8_t *)WEB);

if (ret != 1) {

printf("NFC Write Url Failed: %d\n", ret);

其中,nfc_store_text()和nfc_store_uri_http()两个函数首先按照rtdText.h和rtdUri.h中RTD协议进行处理。然后与ndef.h中NT3HwriteRecord()进行记录写入。

bool nfc_store_text(RecordPosEnu position, uint8_t *text)

NDEFDataStr data;

if (m_nfc_is_init == 0)

printf("%s, %s, %d: NFC is not init!\n", __FILE__, __func__, __LINE__);

return 0;

prepareText(&data, position, text);

return NT3HwriteRecord(&data);

bool nfc_store_uri_http(RecordPosEnu position, uint8_t *http)

NDEFDataStr data;

if (m_nfc_is_init == 0)

printf("%s, %s, %d: NFC is not init!\n", __FILE__, __func__, __LINE__);

return 0;

prepareUrihttp(&data, position, http);

return NT3HwriteRecord(&data);

NT3HwriteRecord()则负责将需要下发的信息打包成NDEF协议报文,最后由I2C总线将NDEF协议报文发送给NFC设备。

bool NT3HwriteRecord(const NDEFDataStr *data)

uint8_t recordLength = 0, mbMe;

UncompletePageStr addPage;

addPage.page = 0;

// calculate the last used page

if (data->ndefPosition != NDEFFirstPos )

NT3HReadHeaderNfc(&recordLength, &mbMe);

addPage.page = (recordLength + sizeof(NDEFHeaderStr) + 1) / NFC_PAGE_SIZE;

//remove the NDEF_END_BYTE byte because it will overwrite by the new Record

addPage.usedBytes = (recordLength + sizeof(NDEFHeaderStr) + 1) % NFC_PAGE_SIZE - 1;

// call the appropriate function and consider the pointer

// within the NFC_PAGE_SIZE that need to be used

int16_t payloadPtr = addFunct[data->ndefPosition](&addPage, data, data->ndefPosition);

if (payloadPtr == -1)

errNo = NT3HERROR_TYPE_NOT_SUPPORTED;

return false;

return writeUserPayload(payloadPtr, data, &addPage);

、编译过程

1、搭建和下载源代码

我已将OpenHarmony源代码上传到Gitee社区中,大家可以根据以下网址下载。

https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts

注意:编译环境可根据以下网址来操作:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/vendor/lockzhiner/rk2206/README_zh.md

2、打开sdk下面路径的文件

/vendor/lockzhiner/rk2206/samples/b2_nfc/nfc_example.c

注意:Gitee上的NFC控制案例为通用案例,请大家根据上述的需求修改相关源代码。

3、修改编译脚本

修改 vendor/lockzhiner/rk2206/sample 路径下 BUILD.gn 文件,指定 nfc_example 参与编译。

"./b2_nfc:nfc_example",

修改 device/lockzhiner/rk2206/sdk_liteos 路径下 Makefile 文件,添加 -lnfc_example 参与编译。

hardware_LIBS = -lhal_iothardware -lhardware -lnfc_example

3、编译固件

hb set -root .

hb set

hb build -f

4、烧写固件

请参考Gitee网址的说明手册(“烧录打印”章节):https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/device/rockchip/README_zh.md

、实验结果

程序编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志如下:

==============NFC Example==============

Please use the mobile phone with NFC function close to the development board!

==============NFC Example==============

Please use the mobile phone with NFC function close to the development board!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
我去女儿家过中秋,再婚老伴全家打30通电话催我:国庆等你做饭

我去女儿家过中秋,再婚老伴全家打30通电话催我:国庆等你做饭

秋雅聊爱情
2024-09-29 22:05:33
主力军战败,20万人逃离战场,战力损失30%,王牌56旅被全歼

主力军战败,20万人逃离战场,战力损失30%,王牌56旅被全歼

寒山远殆
2024-09-26 09:30:03
重磅消息!以色列释放最强信号,双重暗示指向彻底清除所有隐患!

重磅消息!以色列释放最强信号,双重暗示指向彻底清除所有隐患!

国际情爆猿
2024-09-30 01:25:21
海宁长安机电学院二期建设区块拆房工程7.4事故查明,1人高坠死亡

海宁长安机电学院二期建设区块拆房工程7.4事故查明,1人高坠死亡

中国基建报
2024-09-28 09:37:02
闺蜜的公公年老力壮,看起来比我的老公还年轻,他还是个鳏夫

闺蜜的公公年老力壮,看起来比我的老公还年轻,他还是个鳏夫

神奇的锤子
2024-09-22 10:01:47
奥运冠军自曝“处境艰难”!家人已遭网暴,令人作呕的事不止一件

奥运冠军自曝“处境艰难”!家人已遭网暴,令人作呕的事不止一件

风谈笔录
2024-09-28 17:55:03
1984年,王光美的哥哥王光英和富豪李嘉诚出海游玩时的合影

1984年,王光美的哥哥王光英和富豪李嘉诚出海游玩时的合影

视点历史
2024-09-30 00:10:02
张本美和止步首轮抿嘴沮丧:日媒直言惨败国乒恩师 日乒王牌下线

张本美和止步首轮抿嘴沮丧:日媒直言惨败国乒恩师 日乒王牌下线

颜小白的篮球梦
2024-09-29 13:13:22
上次是李玲玉,这次是华少。网友:许妈一场直播顶老杜170年

上次是李玲玉,这次是华少。网友:许妈一场直播顶老杜170年

渤海草堂2
2024-09-29 05:15:03
梅西赛后指着主裁判怒骂:你是个混蛋,XX养的

梅西赛后指着主裁判怒骂:你是个混蛋,XX养的

懂球帝
2024-09-29 11:15:33
刀郎的一场演唱会,意外戳穿云朵真实处境!难怪徐子尧能上位

刀郎的一场演唱会,意外戳穿云朵真实处境!难怪徐子尧能上位

圈里的甜橙子
2024-09-29 19:42:52
一点美债也不留?中方一举断了美后路,拜登急了,下最后豪赌

一点美债也不留?中方一举断了美后路,拜登急了,下最后豪赌

布衣的呼喊
2024-09-29 14:45:03
终于赢了,中国队打破日韩垄断夺历史首冠,央视等媒体发声称赞

终于赢了,中国队打破日韩垄断夺历史首冠,央视等媒体发声称赞

尘语者
2024-09-15 22:28:56
35岁网红“小熙妈妈”老公去世,四胎儿子才4个月大,死因引热议

35岁网红“小熙妈妈”老公去世,四胎儿子才4个月大,死因引热议

180°视角
2024-09-25 08:34:04
枉为人父!贵州一男子为讹钱,让3岁女儿碾压致死,多位大V炮轰!

枉为人父!贵州一男子为讹钱,让3岁女儿碾压致死,多位大V炮轰!

古希腊掌管松饼的神
2024-09-29 14:45:09
突然之间,这风向为啥就变了?原来民众们都醒了!

突然之间,这风向为啥就变了?原来民众们都醒了!

翻开历史和现实
2024-09-29 11:45:54
退休早的人养老金低,退休晚的人养老金高,这道难题该怎么破解?

退休早的人养老金低,退休晚的人养老金高,这道难题该怎么破解?

帮兄爱唱歌
2024-09-29 19:46:16
属于东北雨姐的园区到底有多可怕,镜头前憨厚镜头后变身黑大姐!

属于东北雨姐的园区到底有多可怕,镜头前憨厚镜头后变身黑大姐!

圈里的甜橙子
2024-09-25 11:47:42
他祸乱沙俄,睡遍贵族妇女,性器官因过于巨大被博物馆保存至今

他祸乱沙俄,睡遍贵族妇女,性器官因过于巨大被博物馆保存至今

魏惊蛰
2023-07-19 11:28:14
一场2-0!让意甲榜首易主:那不勒斯5场不败,反超尤文1分领跑

一场2-0!让意甲榜首易主:那不勒斯5场不败,反超尤文1分领跑

体育知多少
2024-09-30 06:27:00
2024-09-30 06:42:44
凌智电子
凌智电子
带你玩转嵌入式
2文章数 1关注度
往期回顾 全部

科技要闻

电池工厂着火是常事,但在宁德时代很意外

头条要闻

深圳优化分区住房限购政策 首套房最低首付比例15%

头条要闻

深圳优化分区住房限购政策 首套房最低首付比例15%

体育要闻

张帅横扫米内恩 晋级中网女单16强

娱乐要闻

王灿回应不是名媛,没报过名媛培训班

财经要闻

存量房贷利率降了 十大问题权威解读

汽车要闻

焕新上市 全新凯迪拉克XT5售26.59万起

态度原创

艺术
家居
旅游
数码
公开课

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

家居要闻

空间灵动 柔和硬朗感兼具

旅游要闻

九寨沟景区10月2日、3日门票已售罄

数码要闻

联想发布AI PC新品:YOGA Air 15元启版与Pro 14锐龙AI元启版亮相

公开课

眼花失眠抽筋,你的肝该调调了

无障碍浏览 进入关怀版