请选择 进入手机版 | 继续访问电脑版
查看: 2230|回复: 1

[原创] 【经验分享】移植nfc库到KW36

[复制链接]

该用户从未签到

653

主题

6308

帖子

0

超级版主

Rank: 8Rank: 8

积分
19848
最后登录
2024-4-16
发表于 2021-6-2 14:29:09 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-6-4 09:18 编辑

将NFC库移植到KW36
在实际应用过程中,经常有客户提出需要ble+NFC这样组合的功能。目前我们的IOT-DK006是唯一拥有NFC模块的开发板,但是开发板的例程的NFC功能并不全面,所以我们移植PN7150这个NFC reader的库提供给KW系列单片机,从而使得KW系列可以处理ble+NFC功能组合的需求。
下面将介绍nfc reader—PN7150库移植到kw36的方法,使得kw具有nfc功能
一、PN7150简介
PN7150 是 PN7120 的高性能版本,PN7120 是即插即用 NFC 解决方案,可轻松集成到任何操作系统环境中,减少物料清单 (BOM) 尺寸和成本。PN71xx 控制器是网关等家庭自动化应用的理想选择,可与NFC 连接标签无缝协作。
平台:支持 Linux、Android、RTOS 和 NullOS
支持所有NFC操作模式
·      Read/Write Mode: ISO/IEC 14443 A&B up to848 kbit/s, FeliCa at 212 & 424 kbit/s, MIFARE Classic with 1K, 4K, NFCForum type 1, 2, 3, 4, 5 tags, ISO/IEC 15693
·      All peer-to-peer modes
·      Card Emulation Mode (from host): NFC Forum T4T(ISO/IEC 14443 A&B) at 106 kbit/s, NFC Forum T3T (FeliCa, PN7150 only)

二、开发环境
硬件:FRDM-KW36开发板,PN7150开发板,以及若干枚杜邦线。
软件:mcuxpresso11.3
开发包:NXP-NCIMCUXpresso example Project里面有若干例程,我们需要里面的库文件。移植参照的例程是NXPNCI-K64F_example。Kw36的sdk版本是2.2.8,例程使用的是frdmkw36_rtos_examples_freertos_i2c
三、移植步骤
硬件部分:PN7150我们需要如下连接,注意虽然PN7150可以直接插进ardunio接口,但是由于插上后,ardunio接口提供的电压(1.8V)不够,不足以带动PN7150,所以我们使用杜邦线连接,并且我们从U1这个LDO上引出一个3.3V
  
PN7150
  
FRDM-KW36
VBAT/PVDD
3.3V
VANT
5V
GND
GND
IRQ
PTA16
VEN
PTC15
SCL
PTB0,I2C0
SDA
PTB1,I2C0

连接如图:
hardware.jpg

软件部分:首先我们需要移植必要的nfc库文件以及文件夹加入路径。这包括如图,具体如何添加文件夹到目前工程可以参考这篇链接
如图,红色标记的就是需要的文件
file_path.PNG
注意,添加完文件夹路径除了要包括头文件路径以外,还需要再path and symbols里添加文件夹,具体可以参见刚才链接
path_and_symbol.PNG
我们还需要添加一些宏定义在预编译器里
macro.PNG
文件放入以后,我们将freertos_i2c.c文件里的内容替换为NXPNCI-K64F_example例程里的main.c的内容。下面我们需要配置修改的是pin_mux.c, tml.c, board.h文件。

在board.h里,加入如下宏定义
  1. /* NXPNCI NFC related declaration */

  2. #define BOARD_NXPNCI_I2C_INSTANCE I2C0

  3. #define BOARD_NXPNCI_I2C_BAUDRATE (100000)

  4. #define BOARD_NXPNCI_I2C_ADDR       (0x28)

  5. #define BOARD_NXPNCI_IRQ_PORTIRQn PORTA_IRQn

  6. #define BOARD_NXPNCI_IRQ_GPIO     (GPIOA)

  7. #define BOARD_NXPNCI_IRQ_PORT     (PORTA)

  8. #define BOARD_NXPNCI_IRQ_PIN      (16U)

  9. #define BOARD_NXPNCI_VEN_GPIO     (GPIOC)

  10. #define BOARD_NXPNCI_VEN_PORT     (PORTC)

  11. #define NXPNCI_VEN_PIN            (5U)
复制代码

在pin_mux.c文件里添加board.h头文件,再添加代码,配置i2c接口和VEN,IRQ,i2C0例程里已经提前配置好了,它同时配置了I2C1可以注释掉。
  1. /* Initialize NXPNCI GPIO pins below */
  2.   /* IRQ and VEN PIN_MUX Configuration */
  3.   PORT_SetPinMux(BOARD_NXPNCI_IRQ_PORT, BOARD_NXPNCI_IRQ_PIN, kPORT_MuxAsGpio);
  4.   PORT_SetPinMux(BOARD_NXPNCI_VEN_PORT, NXPNCI_VEN_PIN, kPORT_MuxAsGpio);
  5.   /* IRQ interrupt Configuration */
  6.   NVIC_SetPriority(BOARD_NXPNCI_IRQ_PORTIRQn, 6);
  7.   EnableIRQ(BOARD_NXPNCI_IRQ_PORTIRQn);
  8.   PORT_SetPinInterruptConfig(BOARD_NXPNCI_IRQ_PORT, BOARD_NXPNCI_IRQ_PIN, kPORT_InterruptRisingEdge);
复制代码
最后到tml.c文件里把
  1. PORTC_IRQHandler
复制代码
改成
  1. PORTA_IRQHandler
复制代码
修改完这些就可以了。很简单吧
四、实验结果
我们使用ntag来测试读取和写入操作。
WeChat Image_20210602110416.jpg
当把tag靠近以后,就可以获得如下信息。
result.PNG
tag内记录的文字是VER=03
下面我们来修改这段文字。
在预处理器中添加新的宏定义
  1. RW_NDEF_WRITING
复制代码
write.PNG
在函数
  1. task_nfc_reader()
复制代码
里通过修改
  1. NDEF_MESSAGE
复制代码
add.PNG
来编辑我们要写入的文字,代码中写入的文字是Test,我们重新下载代码,然后可以看到现象,第一次读取的是原来字符,同时写入了新的信息。然后再次读取tag,文字变成了Test
res1.PNG
下面我们再写一个长一点数据,此时就需要修改ADD。这个message,只发送4个字符时候ADD为0,每多发一个字符就要加一,我们修改tag的文字为Ver=03,多了两个字符,所以ADD要定义为2
res2.PNG
这样一开始是Test后来就变成了新字符串
res3.PNG
其他的卡读写,都可以定义宏来使能这些功能。默认下,是不使用的。
加个附件 frdmkw36_rtos_examples_freertos_i2c.zip (1.1 MB, 下载次数: 62)
回复

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

新手上路

Rank: 1

积分
10
最后登录
2022-11-11
发表于 2022-11-8 16:47:25 | 显示全部楼层
请问一下这个nfc 的ic 读写地址是多少
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-4-17 06:19 , Processed in 0.120028 second(s), 20 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表