将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
大家好,社区: 本文档展示了如何将基本的 NFC(近场通信)库集成到 KSDK 项目中,并通过一个简单的演示项目解释其用法。 集成NFC控制器库 这些说明基于 KSDK 项目中通常存在的文件。如果您的项目具有自定义源文件结构,只需相应地添加引用的代码。 1-打开文件gpio_pins.c并添加 2 个引脚配置:1 个称为NFCCirqPin的输入引脚和 1 个称为NFCCvenPin 的输出引脚: gpio_input_pin_user_config_t NFCCirqPin =
{
.pinName = kGpioNFCCirq,
.config.isPullEnable = false,
.config.pullSelect = kPortPullUp,
.config.isPassiveFilterEnabled = false,
.config.interrupt = kPortIntDisabled,
};
gpio_output_pin_user_config_t NFCCvenPin =
{
.pinName = kGpioNFCCven,
.config.outputLogic = 1,
.config.slewRate = kPortSlowSlewRate,
.config.driveStrength = kPortLowDriveStrength,
}; 2-在文件gpio_pins.h中向 gpio 枚举添加 2 个额外元素。还为上一步中定义的 2 个引脚添加外部声明。 注意:在此示例中,选定的引脚为PTB16(作为IRQ)和PTB17 (作为VEN) 。引脚取决于从 Kinetis MCU 到 NFC 控制器板的路由。 enum _gpio_pins
{
kGpioLED1 = GPIO_MAKE_PIN(GPIOD_IDX, 5), /* FRDM-KL43Z RBG LED Green LED */
kGpioLED2 = GPIO_MAKE_PIN(GPIOE_IDX, 31), /* FRDM-KL43Z RBG LED Red LED */
kGpioSW1 = GPIO_MAKE_PIN(GPIOA_IDX, 4), /* FRDM-KL43Z SW1 */
kGpioSW3 = GPIO_MAKE_PIN(GPIOC_IDX, 3), /* FRDM-KL43Z SW3 */
kGpioNFCCirq = GPIO_MAKE_PIN(GPIOB_IDX, 16), /* GPIO for NFCC IRQ pin */
kGpioNFCCven = GPIO_MAKE_PIN(GPIOB_IDX, 17), /* GPIO for NFCC VEN pin */
};
extern gpio_input_pin_user_config_t NFCCirqPin;
extern gpio_output_pin_user_config_t NFCCvenPin; 3-在文件pin_mux.c中定义一个函数来配置所需 GPIO 和 I2C 引脚的 MUX 设置,以便与 NFC 控制器接口。 注意:配置的引脚必须与从 Kinetis MCU 到 NFC 控制器板的路由相对应。在本例中, PTB16/PTB17设置为 GPIO,而PTE0/PTE1配置为 I2C 功能。对于 I2C 引脚,还请检查设备参考手册中的 MUX 编号(例如,KL43 中的 PTE0/PTE1 在ALT6中具有 I2C 功能)。 void configure_nfcc_pins(void)
{
/** I2C_SDA **/
PORT_HAL_SetMuxMode(PORTE,0u,kPortMuxAlt6);
/** I2C_SCL **/
PORT_HAL_SetMuxMode(PORTE,1u,kPortMuxAlt6);
/* NFCC IRQ */
PORT_HAL_SetMuxMode(PORTB,16u,kPortMuxAsGpio);
/* NFCC VEN */
PORT_HAL_SetMuxMode(PORTB,17u,kPortMuxAsGpio);
} 4-将函数原型添加到头文件pin_mux.h 。 /*
** ===================================================
** Method : configure_nfcc_pins
*/
/*!
** @brief
** Set mux configuration for I2C and GPIO pins
** to interface with the NFC Controller.
*/
/* ==================================================*/
void configure_nfcc_pins(void); 5-将NfcLibrary和TML文件夹及其所有子文件夹和文件添加到项目树中,以便库成为构建的一部分。还将inc文件夹的包含路径添加到编译器中。以下是 Kinetis Design Studio 的示例: - 现在项目已准备好使用 NFC 控制器库。该库使用下一个条件编译宏,根据需要从编译器的预处理器设置中添加或删除这些符号: CARDEMU_SUPPORT : NFC 控制器主机 (MCU) 模拟可由外部读写器访问的非接触式卡。 P2P_SUPPORT:主机 MCU 可以建立双向通信,访问或向外部读写器发送信息。 RW_SUPPORT:在此模式下,主机可以通过 NFC 控制器访问远程非接触式标签/卡。 NCI_DEBUG:如果定义,主机 MCU 和 NFC 控制器接口(命令、响应、通知、数据)之间传输的所有信息都将回显到控制台以用于调试目的。 Demo项目 所附项目基于应用说明AN11658 NXP-NCI NullOS 集成示例。因此您可以参考应用说明来获取详细信息。 软件 该项目是使用以下软件版本开发的: - KSDK v1.3 - KDS v3.0.0 :smileyinfo: 注释: -必须在示例项目之前构建KL43的KSDK平台库。否则,由于缺少库文件(libksdk_platform.a),构建将失败。 - 导入示例项目后,请验证构建变量PROJECT_KSDK_PATH是否指向您的 KSDK v1.3 安装路径。 硬件 - 对于 NFC 部分,我使用了OM5577的 NFC 控制器板,它是PN7120 NFC 控制器接口芯片的演示套件。 - 为了与 NFC 控制器接口,我使用了FRDM-KL43Z Freedom 板。 如何使用演示 读/写模式: - 将带有单个文本、URI 或 vCard NDEF 记录的标签放置在 NFC 阅读器旁边。例子: P2P模式: - 将启用 NFC 的 Android 手机靠近 NFC 控制器天线并使用“传送”功能。在以下情况下,NXP 主页是从 Android 手机的浏览器“传送”的: 卡仿真模式 对于此模式,需要删除P2P_SUPPORT宏并重建/重新编程项目。 - 将设置为读取 NFC 标签的 Android 手机靠近 NFC 控制板: 我希望你喜欢这份文件。如有任何问题或疑问,请在评论中告诉我。 豪尔赫·冈萨雷斯 恩智浦技术支持 概述 回复:将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
你好,Jorge, 我使用 FRDM-KL43Z 板和 OM5577 / PN7120S NFC 模块尝试了您的示例代码,并且它与 SBC 套件附带的标签 NTAG216F 配合良好。现在我已将其更改为标签 SL2S2602。遗憾的是,PN7120 无法检测到此标签。终端软件没有收到任何消息,PN7120 也没有触发中断。在完全相同的状态下,可以检测到 NTAG216F。之后,我使用了第二个测试系统,该系统由 Raspberry PI 和 NXP 应用软件组成,该软件参考了 AN11697。我使用完全相同的 PN7120、完全相同的 NTAG216F 和 SL2S2602 标签再次进行了测试,一切正常。然而,FRDM-KL43Z / PN7120 / SL2S2602 系统却无法播放。我有点困惑。您知道造成这种情况的原因是什么吗? 此致 回复:将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
恩智浦 (NXP) 有可能就此话题提供一些支持吗? 非常感谢。 此致问候 回复:将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
谢谢豪尔赫, 这是我们的情况:我们希望与 Mifare Desfire、Plus 等加密卡进行交互……同时避免对主机的关键时间限制并减少 SW 开发时间。您会推荐我们什么?7120 还是只是一个前端? 使用 PN7120 实现加密通信会很困难吗? 此致。 回复:将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Hi Alejandro, 应用说明中的图像所引用的库实际上是 NXP-NCI KDS 示例或本文档中的示例项目中可用的库。该库提供了使用 PN71xx 系列 NFC 控制器开始开发的主要功能。顺便说一下,下一个链接中有此社区文档的新版本,用于使用 Arduino 接口套件: https://community.nxp.com/docs/DOC-331907 Android 和 Linux 的 libnfc-nci 库确实提供了一些更高级的 API,但代码不适合在通用 MCU 中使用。如果您需要这些库中的某些功能,则需要在现有的 Kinetis NXP-NCI 库之上实现它。 关于加密,我们正在努力创造更多的支持,但不幸的是到目前为止我还没有发现任何使用 PN7120 加密机制的例子。很抱歉造成您的不便。 此致敬礼! 豪尔赫·冈萨雷斯 回复:将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
你好,Jorge, 我的公司(200 名员工)正在尝试使用 PN7120 和 Kinetis KL26Z 推出 NFC 产品;由于这是我们的第一款 NFC 产品,因此出现了一些疑问: - 在许多使用 PN7120 和 NCI 用于 kinetis 的项目示例中,此图像由相应的应用说明提供; 但我的问题是,我可以从哪里获得这样的库?示例的移植库(例如NXP-NCI Kinetis Design Studio 示例)是一个简化的 NCI 库;完整的库在哪里?完整的库是“linux_libnfc-nci”?那么当我想在 Kinetis 微控制器中使用它时,必须移植它吗?我的情况是:我想在 KL26 微控制器中而不是在 Android 设备中拥有完整的 NFC NCI 库,我该怎么做?是否有针对微控制器的完整 NCI 库的移植版本? - 另一个问题:有没有使用 Kinetis 微控制器(或其他任何微控制器)和 PN7120 进行加密通信的示例?如果没有 SAM,该如何进行加密? 非常感谢 Jorge。 亲切的问候。 回复:将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
你好,尼尔: 本项目中使用的 NFC 控制器库旨在与 NXP 的 NFC 控制器配合使用(例如PN7120)。由于它基于 NFC 论坛 NCI 规范,因此一些 NCI 命令应该与其他制造商的控制器兼容,但也有一些命令是 NXP 专有扩展。 实际上,只要 MCU 支持该接口(例如I2C、SPI、UART)。您只需要根据需要使用低级驱动程序,这就是我在这里描述的,特别是针对 PN7120 提供的控制器库代码。 不确定这是否回答了你的问题。如果还有疑问请告诉我。 此致敬礼! 豪尔赫·冈萨雷斯 回复:将NFC控制器库与KSDK集成 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Hi Jorge, 我注意到你使用了 NXP OM5577,但是对于不同制造商的任何 NFC 模块可以做到这一点吗? 谢谢! 尼尔
View full article