运行 Yocto Linux + PN7160 的 i.MX6ULL EVK
硬件:
1. i.MX6ULL EVK 板
2. OM27160A1HN
软件:
1. 为 i.MX6ULL EVK 构建 Yocto Linux BSP。
步骤如下:
$ mkdir L6.6.36_2.1.0
$ cd L6.6.36_2.1.0
$ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-scarthgap -m imx-6.6.36-2.1.0.xml
$ repo sync
$ DISTRO=fsl-imx-xwayland MACHINE=imx6ull14x14evk source imx-setup-release.sh -b build-for-6ullevk
$ bitbake core-image-full-cmdline
2. 将 nxpnfc 驱动添加至内核
BSP 构建成功后,内核源代码位于此处:
L6.6.36_2.1.0/build-for-6ullevk/tmp/work/imx6ull14x14evk-poky-linux-gnueabi/linux-imx/6.6.36+git/git/
将 nxpnfc 代码库克隆到内核目录,替换现有实现:
$ cd L6.6.36_2.1.0/build-for-6ullevk/tmp/work/imx6ull14x14evk-poky-linux-gnueabi/linux-imx/6.6.36+git/git/
$ rm -rf drivers/nfc
$ git clone https://github.com/NXPNFCLinux/nxpnfc.git drivers/nfc
这将导致 drivers/nfc 文件夹中包含以下文件:
• README.md:存储库信息 • Makefile:驱动程序头文件 • Kconfig:驱动程序配置文件 • LICENSE:驱动程序许可条款
• i2c_devicetree.txt:I²C 设备树定义示例• spi_devicetree.txt:SPI 设备树定义示例• nfc 子文件夹包含:– Makefile:– common.c:通用驱动程序实现—— common.h:通用驱动接口定义– i2c.c:I2C 专用驱动程序实现– i2c.h:I2C 专用驱动程序接口定义——spi.c:SPI 专用驱动程序实现– spi.h:SPI 专用驱动接口定义
通过内核 menuconfig 流程将目标驱动包含在构建中(选择为内置 <*>):
$ bitbake linux-imx -c menuconfig
<*> NFC I2C Slave driver for NXP-NFCC
3. i.MX6ULL EVK与PN7160之间的连接
i.MX6ULL EVK 开发板的 Arduino 接口上有若干引脚可用于连接 PN7160 板。以下是 i.MX6ULL EVK 开发板 Arduino 接口的示意图。其中 I2C2 的两个引脚可用于 I2C 连接。UART2_RX、UART2_TX 和 UART2_RTS 可配置为 GPIO,分别连接 PN7160 的 IRQ、VEN 和 DWL_REQ。
以下是 EVK 板上的 J1704 和 J1703 接口。
以下是 OM27160A1HN 上的 Arduino 接口示意图。
需使用转接板(OM29110ARD-B),OM27160A1HN 模块安装于其上方。以下是转接板的原理图。
因此,在 i.MX6ULL EVK 开发板上,需使用 I2C2_SDA 和 I2C2_SCL 进行 I2C 通信。另需 3 个 GPIO 引脚连接 PN7160 的 IRQ、VEN 和 DWL_REQ。
这是 i.MX6ULL EVK 和 OM29110ARD-B 之间的连接。
OM29110ARD-B
引脚
i.MX6ULL EVK
引脚
I2C_SCL
J2-1
I2C2_SCL
J1704-10
I2C_SDA
J2-2
I2C2_SDA
J1704-9
GPIO_0
J2-10
GPIO1_21
J1703-1
GPIO_1
J4_1
GPIO1_20
J1703-2
GPIO_2
J4_2
GPIO1_25
J1703-3
3.3v
J1-4
3.3v
J1705-4
5V
J1-5
5V
J1705-5
接地
J1-6
接地
J1705-6
4. 修改 i.MX6ULL EVK 的设备树文件
i.MX6ULL EVK 的设备树文件为 imx6ul-14x14-evk.dtsi,其路径如下:
L6.6.36_2.1.0/build-for-6ullevk/tmp/work/imx6ull14x14evk-poky-linux-gnueabi/linux-imx/6.6.36+git/git/arch/arm/boot/dts/nxp/imx/imx6ul-14x14-evk.dtsi
由于未使用 UART2,我们已禁用它。
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart2>;
uart-has-rtscts;
/* for DTE mode, add below change */
/* fsl,dte-mode; */
/* pinctrl-0 = <&pinctrl_uart2dte>; */
status = "disabled"; // <--- change the status to "disabled"
bluetooth {
compatible = "nxp,88w8987-bt";
};
};
将下面的 nxpnfc 放在 &I2C2 节点下。
nxpnfc: nxpnfc@28 {
compatible = "nxp,nxpnfc";
reg = <0x28>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_nfcgpio>;
nxp,nxpnfc-irq = <&gpio1 21 0>;
nxp,nxpnfc-ven = <&gpio1 20 0>;
nxp,nxpnfc-fw-dwnld = <&gpio1 25 0>;
};
像这样:
为 nxpnfc 添加 GPIO。
pinctrl_nfcgpio: nfcgpiogrp {
fsl,pins = <
MX6UL_PAD_UART2_RX_DATA__GPIO1_IO21 0xb0 //irq
MX6UL_PAD_UART2_TX_DATA__GPIO1_IO20 0xb0 //ven
MX6UL_PAD_UART3_RX_DATA__GPIO1_IO25 0xb0 //dwld req
>;
};
5. 重新编译内核及完整镜像
$ bitbake linux-imx -c compile
$ bitbake core-image-full-cmdline
6. 使用 UUU 工具烧录镜像至开发板
构建生成的镜像为 .wic.zst 文件,需将其烧录至开发板。该文件位于以下部署目录中:
L6.6.36_2.1.0/build-for-6ullevk/tmp/deploy/images/imx6ull14x14evk/core-image-full-cmdline-imx6ull14x14evk.rootfs-20241113103828.wic.zst
从以下链接下载 UUU.exe:
https://github.com/nxp-imx/mfgtools/releases
从 Linux BSP 网页下载 i.MX6ULL EVK 的演示镜像。
将演示镜像解压至文件夹,并将 UUU.exe 复制到同一目录。
通过 USB 线将开发板连接至 PC,并将启动模式切换为 "Serial Downloader mode"。
在 PC 端执行以下命令,将镜像烧录至 i.MX6ULL EVK 的 SD 卡:
uuu -b sd_all core-image-full-cmdline-imx6ull14x14evk.rootfs-20241112083235.wic.zst
随后将启动模式切换为 "Internal Boot (Development)" 并重启开发板。
此时可通过 "root" 账户登录并使用开发板。
您可以看到 nxpnfc 驱动程序已正确加载。
7. 在 Yocto 中构建 NFC 库和 nfcDemoApp。
在 Yocto 源码目录中,从以下链接下载 meta-nxp-nfc 层: https://github.com/NXPNFCLinux/meta-nxp-nfc
$ git clone https://github.com/NXPNFCLinux/meta-nxp-nfc.git
然后,NFC库的配方位于 L6.6.36_2.1.0/sources/meta-nxp-nfc/recipes-nfc/nxp_nfc。请将配方 nxp-nfc_git.bb 更改如下:
# Copyright (C) 2016 NXP Semiconductors
DESCRIPTION = "Linux NFC stack for NCI based NXP NFC Controllers."
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=86d3f3a95c324c9479bd8986968f4327"
SRC_URI = " \
git://github.com/NXPNFCLinux/linux_libnfc-nci.git;branch=NCI2.0_PN7160;protocol=https \
"
SRCREV = "6bf9f42b94e267f6384043009bda84c11e7ebbaa"
SRC_URI[sha256sum] = "47bdc27108fc8d66ce5d6c33f76b419cdef20c24b9e187ada8e689d1bd7f79c7"
inherit autotools pkgconfig lib_package
S = "${WORKDIR}/git"
将 meta-nxp-nfc 层添加至构建定义,需更新 build_dir/conf/bblayers.conf 文件:
BBLAYERS += " ${BSPDIR}/sources/meta-nxp-nfc"
Build meta-nxp-nfc layer:
$ bitbake nxp-nfc
构建成功后,库文件及 nfcDemoApp 将位于以下路径:
L6.6.36_2.1.0/build-for-6ullevk/tmp/work/cortexa7t2hf-neon-poky-linux-gnueabi/nxp-nfc/git/
使用 "scp" 命令通过网络将文件复制至 EVK 开发板。若目标文件夹不存在,请先在 EVK 上使用 "mkdir" 创建目录,再执行 "scp" 命令。
以下是示例:(**下方的 IP 地址应更改为您的 EVK 的 IP 地址。)
scp build/.libs/*
[email protected]:/.libs/
scp image/etc/libnfc*
[email protected]:/etc/
scp image/usr/lib/*
[email protected]:/usr/lib
在 EVK 开发板上:
root@imx6ull14x14evk:/# mkdir /usr/local
root@imx6ull14x14evk:/# mkdir /usr/local/etc
root@imx6ull14x14evk:/# cp /etc/libnfc-nci.conf /usr/local/etc
现在,您可以在 i.MX6ULL EVK 上运行 nfcDemoApp。
root@imx6ull14x14evk:/# cd .libs/
root@imx6ull14x14evk:/.libs# ./nfcDemoApp poll
参考资料:
1. i.MX Yocto Project 用户指南
2. PN7160 Linux Porting Guide
3. MCIMX6ULL-EVK_DESIGNFILES
4. OM27160A1HN 硬件设计文件
5. OM29110 NFC SBC 接口板设计文件
6。在运行 Yocto 的 i.MX8M mini EVK 上使用 PN7150 NFC 控制器
接触式智能卡读卡器芯片