当前位置: 首页 > news >正文

RK3568 android11 基于PN7160的NXP NFC移植

一,概述

1. 模块概述

PN7160专为在各种系统实现快速集成而设计,支持所有符合NFC Forum的模式,包括Android和Linux驱动程序,并支持实时操作系统和无操作系统的应用(PN7160不符合EMVCo)。嵌入式NFC固件减少了对主机交互的需求,并最大限度缩小了代码尺寸,使设计更轻松。PN7160具有I²C或SPI接口,与广受欢迎的MCU兼容,包括LPC、Kinetis和i.MX。

2.产品特性

  • 支持所有符合NFC Forum的模式

    读写器模式:ISO/IEC A&B、FeliCa、MIFARE 1K、4K,NFC Forum类型1、2、3、4、5,ISO/IEC 15693
    对等模式:被动和主动、发起方和目标方
    卡模拟模式:NFC Forum类型3和4(A&B)

  • 灵活的主机接口

    电源电压:1.8V或3.3V
    I²C接口或SPI接口
    符合NCI 2.0的协议
    改进同步的IRQ信号

  • 高性能NFC控制器

    射频驱动程序:2.7V至5.25V,最大值为250mA
    接收器灵敏度为20mVp-p
    完全可配置的轮询循环,带低功耗模式
    有源负载调制与动态功率控制

  • 标准封装

    HVQFN40
    VFBGA64

3.安卓NFC堆栈概述

在这里插入图片描述


二,内核移植

NFC安卓堆栈使用nxpnfc内核驱动程序与NXP NCI NFC控制器进行通信。nxpnfc内核驱动程序提供了与通过I2C或SPI物理接口连接的NFC控制器的通信。当加载到内核时,通过名为/dev/nxpnfc的设备节点将该接口公开给NFC控制器。

1.移植驱动

a. nxpnfc存储库克隆到内核目录中
$ rm -rf drivers/nfc
$ git clone https://github.com/NXPNFCLinux/nxpnfc.git drivers/nfc
b. 修改driver目录下Kconfig以及nfc目录下Makefile和Kconfig
kernel/drivers/Kconfig中添加:
source "drivers/nfc/Kconfig"====================================================================
kernel/drivers/nfc/Kconfig中添加:config NXP_NFC_I2Ctristate "NFC I2C Slave driver for NXP-NFCC"depends on I2ChelpThis enables the NFC driver for PN71xx based devices.This is for I2C connected version. NCI protocol logicresides in the usermode and it has no other NFC dependencies.If unsure, say N.config NXP_NFC_SPIIf unsure, say N.config NXP_NFC_SPItristate "NFC SPI Slave driver for NXP-NFCC"depends on SPIhelpThis enables the NFC driver for PN71xx based devices.This is for SPI connected version. NCI protocol logicresides in the usermode and it has no other NFC dependencies.If unsure, say N.config NXP_NFC_RECOVERYbool "NXP based NFC minimal FW update support"depends on NXP_NFC_I2C && I2Cdefault yhelpThis enables NFC minimal FW update.If unsure, say N.
c.内核中加载驱动
kernel/arch/arm64/configs/rockchip_defconfig中添加:CONFIG_NFC=y
CONFIG_NXP_NFC_I2C=y

2.设备树配置

nxp使用tp的接口,挂在i2c1节点下:
在这里插入图片描述
注:不同主板节点以及GPIO引脚是不同的,根据原理图确定。

&i2c3 {status = "okay";pn547: pn547@28 {compatible = "nxp,nxpnfc";reg = <0x2B>;  //I2C地址(需要找供应商确认,错误的话是无法通讯的)nxp,nxpnfc-irq = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;  //中断脚nxp,nxpnfc-ven = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>;  //复位脚status = "okay";};
};

3.驱动调试

配置完驱动,可以先用测试程序NfcFactoryTestApp试一下nfc通讯是否正常。
在这里插入图片描述


三,Android层移植

1.将存储库克隆到Android源目录

$ git clone https://github.com/NXPNFCLinux/nxpnfc_android11.git ${ANDROID_BUILD_TOP}/vendor/nxp/nfc

在这里插入图片描述

2.运行补丁脚本

chmod +x vendor/nxp/nfc/install_NFC.sh
./vendor/nxp/nfc/install_NFC.sh

3.adding NFC to the build

diff --git a/device/rockchip/rk356x/BoardConfig.mk b/device/rockchip/rk356x/BoardConfig.mk
index e2773c1369..0e0598f209 100644
--- a/device/rockchip/rk356x/BoardConfig.mk
+++ b/device/rockchip/rk356x/BoardConfig.mk
@@ -64,7 +64,7 @@ ENABLE_CPUSETS := true
# Enable Dex compile opt as default
WITH_DEXPREOPT := true
-BOARD_NFC_SUPPORT := false
+BOARD_NFC_SUPPORT := true
BOARD_HAS_GPS := false
BOARD_GRAVITY_SENSOR_SUPPORT := true
@@ -116,3 +116,6 @@ PRODUCT_HAVE_OPTEE := true
BOARD_ROCKCHIP_TRUST_MERGE_TO_UBOOT := true
BOARD_BASEPARAMETER_SUPPORT := true
+
+#NXP NFC Sensor
+-include vendor/nxp/nfc/BoardConfigNfc.mk
diff --git a/device/rockchip/rk356x/device.mk b/device/rockchip/rk356x/device.mk
index 1ddf1b4b1e..7cad9522b0 100644
--- a/device/rockchip/rk356x/device.mk
+++ b/device/rockchip/rk356x/device.mk
@@ -80,6 +80,9 @@ PRODUCT_PROPERTY_OVERRIDES += \
PRODUCT_COPY_FILES += \$(LOCAL_PATH)/public.libraries.txt:vendor/etc/public.libraries.txt
+#DEVICE_MANIFEST_FILE += vendor/nxp/nfc/manifest.xml
+$(call inherit-product, vendor/nxp/nfc/device-nfc.mk)

4.编译系统

a.编译报错android.hardware.nfc有冲突

修改vendor/nxp/nfc/BoardConfigNfc.mk,注释掉DEVICE_MANIFEST_FILE += vendor/nxp/nfc/manifest.xml这行。
在这里插入图片描述

b.编译报错

checkvintf I 03-13 09:55:50 18859 18859 check_vintf.cpp:84] List ‘out/target/product/rk3568_r/product/etc/vintf/’: No such file or directory
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] files are incompatible: Device manifest and framework compatibility matrix are incompatible: HALs incompatible. Matrix level = 5. Manifest level = 5. The following requirements are not met:
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] android.hardware.nfc:
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] required: @1.2::INfc/default
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] provided:
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] vendor.nxp.nxpnfc:
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] required: @1.0::INxpNfc/default
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] provided:
checkvintf E 03-13 09:55:50 18859 18859 check_vintf.cpp:554] : Success
INCOMPATIBLE

可做如下修改:

diff --git a/device/rockchip/common/manifests/android.hardware.graphics.mapper@4.0.xml b/device/rockchip/common/manifests/android.hardware.graphics.mapper@4.0.xml
index 95ae60faae..9715f19c0a 100755
--- a/device/rockchip/common/manifests/android.hardware.graphics.mapper@4.0.xml
+++ b/device/rockchip/common/manifests/android.hardware.graphics.mapper@4.0.xml
@@ -8,4 +8,28 @@<instance>default</instance></interface></hal>
+    <hal format="hidl">
+        <name>android.hardwar

http://www.mrgr.cn/news/94658.html

相关文章:

  • 基于cat1的贵重物品的状态和位置小型监控系统特色解析
  • hot100算法刷题:二叉树的层序遍历
  • 解决 openeuler 系统 docker 下载慢,docker 镜像加速
  • 线性回归原理推导与应用(五):波士顿房价预测实战
  • Flux 文生图技术解析与部署实践
  • C++初阶——类和对象(三) 构造函数、析构函数
  • Prosys OPC UA Gateway:实现 OPC Classic 与 OPC UA 无缝连接
  • [Linux][经验总结]Ubuntu6.11.0 docker更换镜像源(实操可用的正确方法)
  • stl之string的详解
  • [设计模式]1_设计模式概览
  • 开发、科研、日常办公工具汇总(自用,持续更新)
  • {瞎掰} 手机安装app问题:app签名,手机 or OS官方商店 其他非官方app源,安全防护 突破限制
  • odoo, fireflyiii,akaunting财务软件全栈开发
  • 设计模式(行为型)-备忘录模式
  • 建筑兔零基础Arduino自学记录47|安装和实战小灯闪烁-1
  • 解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南
  • 深入剖析 MetaSpace OOM 问题:根因分析与高效解决策略
  • Linux与深入HTTP序列化和反序列化
  • 添加 ChatGPT/Grok/Gemini 到浏览器搜索引擎
  • 神聖的綫性代數速成例題2. 行列式的性質