当前位置: 首页 > 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_I2C
       tristate "NFC I2C Slave driver for NXP-NFCC"
       depends on I2C
       help
         This enables the NFC driver for PN71xx based devices.
         This is for I2C connected version. NCI protocol logic
         resides in the usermode and it has no other NFC dependencies.

         If unsure, say N.

config NXP_NFC_SPI

         If unsure, say N.

config NXP_NFC_SPI
       tristate "NFC SPI Slave driver for NXP-NFCC"
       depends on SPI
       help
         This enables the NFC driver for PN71xx based devices.
         This is for SPI connected version. NCI protocol logic
         resides in the usermode and it has no other NFC dependencies.

         If unsure, say N.

config NXP_NFC_RECOVERY
       bool "NXP based NFC minimal FW update support"
       depends on NXP_NFC_I2C && I2C
        default y
       help
         This 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

相关文章:

  • C++基础——从C语言快速入门
  • 前端权限系统
  • ctfshow web刷题记录
  • 2.机器学习-回归模型-非线性模型
  • 面试求助:接口测试用例设计主要考虑哪些方面?
  • Matlab自学笔记四十八:各类型缺失值的创建、判断、替换、移位和处理方法
  • 计算机网络笔记再战——理解几个经典的协议HTTP章3
  • 【Gitee】删除仓库的详细步骤
  • centos8 安装指定版本 nodejs
  • 【数据结构】ArrayList顺序表
  • 数据库:一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)
  • Mac 使用 Crossover 加载 Windows Steam 游戏库,实现 Windows/Mac 共享移动硬盘
  • NO.40十六届蓝桥杯备战|指针和动态内存管理|取地址操作符|解引用操作符|指针+-整数|void*|new|delete(C++)
  • C语言基础知识04---指针
  • docker搭建elk
  • MySQL-存储过程和自定义函数
  • Typora自带的picgo图床上传功能 异常修复
  • JVM常用概念之锁省略
  • Windows编译Flash-attention模块
  • 【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力
  • 美媒:鲁比奥称特朗普不出席二十国集团领导人会议
  • “世界茶树原产地”打通全产业链,茶文旅融合助力西双版纳高质量发展
  • 焦点访谈丨售假手段又翻新,警惕化肥“忽悠团”的坑农套路
  • “高原笑匠”、西藏著名表演艺术家扎西顿珠去世
  • 河北6人在河道倒污泥被控污染环境案撤诉后,已拿到国赔决定书
  • 世卫大会连续九年拒绝涉台提案