发表于: 2018-1-18 11:00:58 | 显示全部楼层

本文详细说明了如何将NFC读卡器库移植到Kinetis K64F微控制器。本文使用一个真实的移植案例来展示将NFC读卡器库移植到示例目标MCU所需的步骤。 这篇文章的目的是可以作为一份指南,帮助软件开发人员将NFC读卡器库移植到他们的设计所选择的MCU中。


NFC读卡器库概述

NFC读卡器库是一系列的软件组合,用于创建和开发具有可定制固件的恩智浦NFC前端和NFC控制器的非接触式应用。该库提供了一个API,可以简化NFC应用中所需的最常见操作,例如:将数据读取或写入非接触式卡、与其他支持NFC的设备交换数据或模拟卡。 NFC读卡器库具有以下特性:

●    它基于模块化方法

●    它的设计采用灵活并且多层的架构

●    它是用ANSI-C编程语言编写的

●    它受到多种设计环境和平台的支持,并且开发的重点是便携性。

●    它可以免费下载。

pastedImage_2.png


NFC Reader Library v5.02.00目前支持:

●    我们所有的NFC前端(CLRC663 plus PN5180)和PN7462 NFC控制器。

●    他们相应的开发板,用作恩智浦参考硬件(CLEV6630B、PNEV5180B、PNEV7662B)

●    并且内置MCU支持,LPC1769,LPC11U68,FRDM-K82F和Raspberry Pi。

此外,该版本还包括几个例子来熟悉库,可以将其用作开发的参考,并且还包括一个包含所有组件的基于HTLM的API文档,该文档从源代码注释生成。


NFC读卡器库架构

NFC读卡器库被封装成以不同颜色区分的层和以不同的方框区分的组件。从上到下,我们有:

●    应用层(AL),实现了与MIFARE卡和NFC标签交互的命令集。

●    NFC活动,实现用于检测非接触卡、NFC标签或其他NFC设备的可配置发现回路。

●    其次是HCE和P2P组件,分别用于仿真Type 4标签和P2P数据交换。

●    协议抽象层(PAL),其中包含ISO14443、Felica、接近和NFC标准的RF协议实现。

●   下一个层,硬件抽象层(HAL),它实现了用于控制NFC前端RF接口和功能的驱动程序。

●    下面是最新推出的驱动程序抽象层(DAL),它实现主机MCU和读卡器IC之间的GPIO锁定、定时器配置和物理接口(BAL)。

●    最后,OSAL模块负责抽象OS或RTOS细节(处理诸如定时器、事件、信号量和线程之类的任务)

pastedImage_6.png


这种分层架构有以下几个原因:

1.  应用层(AL)和协议抽象层(PAL)这11个软件例子是独立于硬件的,因此可以在任何NFC前端之上使用。

2.  应用层(AL)、协议抽象层(PAL)和硬件抽象层(HAL)是独立于平台的,因此可以在任何MCU上运行而无需任何其他的改变。


如果读卡器MCU是内置支持的元件,这些示例可以直接导入并直接执行。另一方面,如果默认读卡器MCU不被支持,主要的优势是只需要修改DAL和OSAL层,而其余层可以不经任何修改地使用。


MCUXpresso开发环境中导入时,可以更清楚地看到NFC读卡器库的结构。完成导入向导后,所有项目都列在“Project Explorer”窗口中。从截图中可以看出,它包含不同的文件夹:

●   API文档文件夹

●   驱动程序抽象层

●   FreeRTOS支持

●   平台支持(在屏幕截图中,对应于LPC支持)

●   软件示例(11个)

●   读卡器库的实现

●   以及OS抽象层

pastedImage_1.png


NFC读卡器库移植到FRDM-K64F的步骤

在现有的NFC Reader Library v5.02.00版本中,对Kinetis K64F没有本地支持。但是,它包含了Kinetis K82F MCU的预编译包。我们使用K82F NFC读卡器库软件包作为参考项目,开始移植到K64F MCU。该软件包可从www.nxp.com/pages/:NFC-READER-LIBRARY下载。将库移植到Kinetis K64F所需的步骤如下:

1.    准备硬件(即Kinetis和NFC读卡器之间的引脚连接)。

2.    建立开发环境(即工作空间)。

3.    在项目配置设置中进行一些更改

4.    在DAL和应用程序代码中执行一些代码修改以添加Kinetis K64F支持。


NFC读卡器库移植到FRDM-K64F的步骤 - 准备硬件

该移植示例需要的硬件包含:

●    CLEV6630B评估板(CLRC663 plus),作为NFC收发器

●   作为主MCU的FRDM-K64F开发板(Kinetis K64F),用于加载和运行应用程序逻辑。

pastedImage_4.png


CLRC663 plus评估板默认通过SPI连接到LPC1769微控制器。但是,该电路板这样设计是为了使得LPC1769 MCU可以被轻松地旁路以连接外部MCU。为此:

●   需要拆除电路板上的六个电阻。这些以红色突出显示。

●   使用电路板边缘左侧的SPI引脚连接器。

接下来,将两个电路板连接在一起,按如下方式完成电路布局:

●   我们使用Kinetis K64F跳线2引脚线作为SPI通信的MOSI、MISO、片选和时钟线。

●   CLRC663 plus的IRQ、接口选择和复位引脚连接在跳线1的引脚线上。

●   另外,使用一个接地引脚作为参考点。

pastedImage_6 (1).png


因此,不需要复杂的硬件操作,因为所有的接口都可以通过专用的插头或测试点轻松接入。


NFC读卡器库移植到FRDM-K64F的步骤 - 建立开发环境

一旦硬件连接准备就绪,我们可以开始建立开发环境和工作空间。


获取最新的NFC读卡器库版本

从软件的角度来看,首先我们需要下载最新的NFC Reader Library软件包。要做到这一点:

1.    转到恩智浦官网的NFC读卡器库页面(www.nxp.com/pages/:NFC-READER-LIBRARY

2.    转到“下载”选项卡,然后单击“下载”按钮

3.    单击下载NFC Reader Library for Kinetis K82F package

pastedImage_2 (1).png


为FRDM-K64F开发板生成可下载的SDK包

作为恩智浦支持的一部分,其驱动程序、中间件、实时操作系统演示等软件开发工具包可用于其任何Kinetis和LPC微控制器。我们需要构建一个与K64F SDK相对应的SDK。因此:

1.    导航到www.mcuxpresso.nxp.com,并选择SDK构建器选项。

2.    然后,使用下拉菜单来定制您的SDK配置、中间件和包含在软件包中的可选软件组件。

3.    选择请求构建。

4.    几分钟后,您将收到一封电子邮件,其中包含下载SDK包的链接,与下图中显示的非常相似。

pastedImage_4 (1).png


将NFC读卡器库导入到MCUXpresso工作区

配置开发环境的下一步是在工作区中导入库开发包。最简单的方法是使用左侧的快速启动面板。

1.    点击快速启动面板的导入项目

2.    然后,浏览到文件系统中的库开发包的位置。

3.    单击完成,将其全部导入到您的工作区。

pastedImage_8.png


安装并连接FRDM-K64F SDK到MCUXpresso工作区

最后一步是导入我们从MCUXpresso工具配置的K64F自定义SDK。要做到这一点:

1.    只需将SDK拖放到MCUXpresso IDE的已安装的SDK选项卡中即可。

2.    将SDK导入工作区并将其与软件示例链接。它将在项目浏览器窗口中显示为另一个文件夹。


如果K64F SDK已经正确导入工作区,我们应该会看到一个新的K64F下拉菜单。从那里,我们应该选择K64F,然后单击应用,以便将K64F的内存详细信息设置为项目示例。

跳转到指定楼层
发表于: 2018-1-18 12:25:04 | 显示全部楼层

NFC读卡器库移植到FRDM-K64F的步骤 - 项目配置更改

现在我们已经准备好了硬件和软件开发的工作空间。在这一步中,我们将开始移植NfcrdlibEx1_BasicDiscoveryLoop软件示例,该示例由NFC Reader Library提供。


在项目的MCU设置中选择FRDM-K64F SDK

项目MCU设置是首先要改变的配置之一。这些设置指示哪个目标主机器件运行应用程序代码。这些设置可以操作如下:

1.    在项目示例>Properties上右击

2.    在Properties窗口的左侧列表中,打开“C ++ build”并选择“MCU settings

3.    在右侧面板中,我们可以看到K82F微控制器的相应设置。

pastedImage_5.png

左图显示了为K82F准备的默认SW示例使用的项目配置设置,右图显示了移植到K64F的SW示例使用的最终项目配置设置。


在项目中定义FRDM-K64F SDK预处理器符号

之后,我们需要更改编译器的预处理器设置,这些设置可以在C ++ Build> Settings中找到。在NFC读卡器库的项目示例中,像#ifdef和#ifndef这样的条件指令用于包含或排除实际编译中的部分代码。只有在项目编译器预处理器设置中定义了MACRO时,条件代码才包含在程序编译中。


在左侧,我们可以看到原始项目的定义宏。其中包括定义所使用的硬件是PN518和K82F开发板的一个。因此,在移植的项目中,我们需要用对应于K64F的新宏替换K82F对应的宏。

例如,PHDRIVER_K64_CLRC663宏在编译中包含与移植项目(用于开发板引脚和GPIO配置,SPI设置或定时器)中使用的新硬件相关的文件。准确地说,这些文件包含在驱动程序抽象层(DAL)的BoardSelection.h文件中。

pastedImage_8 (1).png


为FRDM-K64F SDK文件添加包含路径

将头文件包含到我们的项目中时,必须通知编译器必须搜索哪些目录才能找到这些文件。我们可以这样操作:

1.    打开项目属性。

2.    在左侧列表中,打开“C ++ Build”并选择“Settings”。

3.    在右侧窗格中,选择“Includes”部分。

4.    点击“Add”图标。


在左图中,我们看到编译器包含原始示例的K82F SDK的路径。在已移植的示例中,K64F SDK源将不会编译,因为我们没有告诉编译器所有新的包含路径。因此,我们需要添加指向K64F SDK的新包含路径,并将它们放入MCUXpresso IDE项目中。在右图中,您可以看到为此目的而包含的路径。这些路径主要参考板子系统初始化,板卡驱动程序,CMSIS文件和调试使用情况。


为FRDM-K64F MCU汇编器添加包含路径

在MCU汇编程序中,要更改的最后一个MCUXpresso设置。这可以在右侧面板中找到,选择“MCU Assembler”并选择“General”。

pastedImage_14.png


在原始源代码中,K82F SDK使用了一个路径。在已移植的示例中,我们只需删除前面的包含路径,并将其替换为指向我们工作空间中的K64F SDK的相应路径。


NFC读卡器库移植到FRDM-K64F的步骤 - 代码更改

到目前为止,我们已经准备好硬件,开发环境和项目配置设置。此时,在移植完成之前只有很少的代码更改,软件示例可以在K64F中运行。


适用于FRDM-K64F的DAL驱动程序

NFC读卡器库的分层结构使得移植更容易,因为只有较低的驱动程序需要更改。该驱动程序包括以下功能:

●    CLRC663 plus和K64F之间的物理链路连接建立

●    定时器和中断的init函数使得它们被应用层正确地使用。

转到NfcrdlibEx1-BasicDiscovery循环项目结构,它包含几个文件夹。如果我们打开DAL> board文件夹,我们可以在每个支持的平台上观察到一个源文件(带有PN5180和CLRC663的LPC,Raspberry Pi和Kinetis K82F也是如此)。我们的移植任务是为新的受支持的电路板K64F和CLRC663(例如Board_FRDM_K64FRc663.h)创建一个等效的源文件。这个文件包括

●    相关的电路板引脚和GPIO配置

●    SPI配置

●    定时器配置

另外,我们需要包含主板,pin_mux和时钟配置文件。

pastedImage_16.png


使用SDK示例获取FRDM-K64F板的特定配置

在某些情况下,实现这些电路板特定的文件可能是耗时的,可能需要经验。但是,您不需要这样做,而是使用现有的源文件。为此,您可以使用任何现有的SDK软件示例。您可以轻松导入一个SDK示例:

1.    点击快速开始菜单中的“Import SDK”示例>选择FRDM-K64F板。

2.    选择演示示例。

pastedImage_18.png


每个示例应用程序都有自己独特的电路板副本,引脚复用器和时钟配置文件,您可以重复使用该端口(注意:根据所使用的MCU,此过程可能会有所不同)。


在源代码中添加FRDM-K64F宏定义

接下来,沿着项目树,我们需要添加#ifdef指令,指示需要编译的K64F开发板文件。包含:

●    BoardSelection.h文件

●    ph_NxpBuild_App.h,通过启用HAL层中的CLRC663 plus模块将电路板与读卡器IC连接起来。

●    ph_AppInit.h,以便在阅读器设备启动时对板进行初始化。

pastedImage_22.png


添加FRDM-K64F CPU初始化代码

ph_AppInit.h文件负责代码初始化和特定于用于运行示例的HW的代码。作为这个ph_AppInit.h文件的一部分,有一个负责主MCU初始化的功能。在这里,我们需要根据之前选择的SDK示例源代码来实现K64F init的相应功能。如果我们看一下这个例程,我们实际上可以找到以下功能:

●    配置MCU时钟。

●    配置MCU引脚。

●    配置中断(PIT)。

pastedImage_33.png


移植NFC读卡器库到FRDM-K64F的步骤:NfcrdlibEx1_BasicDiscoveryLoop执行

按照前面的步骤,源代码被成功移植到K64F。以下视频演示了连接到CLRC663 plus NFC前端(CLEV6630B)的FRDM-K64F主MCU中的NfcrdlibEx1_BasicDiscoveryLoop示例的正确执行。


该视频包括一个网络摄像头,用于记录硬件,包括K64F和CLRC663加天线之间的所有接线。代码生成并编译完成后,视频将显示如何使用一些标签来验证示例是否按预期工作(标签的UID显示在MCUXpress控制台中)。 。


将NFC读卡器库移植到目标MCU的一般注意事项

总体而言,将NFC阅读器库移植到目标MCU所需的一般步骤如下:

1.    将MCU驱动程序调整到NFC读卡器库中的DAL层。这通常包括:定时器,中断,NFC读卡器和主MCU侧之间的定位和主机接口配置。

2.    调整OS层(即,您可能需要将FreeRTOS移植到目标OS平台)。

3.    调整源代码示例:项目设置(宏,包含路径,MCU配置)并执行所需的代码修改(用于HW初始化,板文件等的代码)。


参考链接

■    NFC读卡器库:www.nxp.com/pages/:NFC-READER-LIBRARY

■    CLRC663 plus:www.nxp.com/products/:CLRC66303HN

■    CLRC663 plus开发套件:www.nxp.com/demoboard/OM26630

■    FRDM-K64F开发板:www.nxp.com/demoboard/FRDM-K64F


本文翻译自https://community.nxp.com/docs/DOC-340025,非常感谢 Jordi Mk 做出的贡献。如有错漏,敬请指正。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 47 | 回复: 68



手机版|

GMT+8, 2024-4-19 14:36 , Processed in 0.156580 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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