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

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

http://www.kler.cn/a/589242.html

相关文章:

  • ASP.NET Webform和ASP.NET MVC 后台开发 大概80%常用技术
  • 操作系统的磁盘调度
  • 鸿蒙Next开发中的坑与问题总结
  • 五大基础算法——枚举算法
  • 从被动响应到主动预见:智能可观测性技术的变革与实践
  • Qt常见面试题合集
  • ⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具
  • Spring cloud Gateway中的GlobalFilter接口及其方法
  • Spring Boot 核心知识点精讲:助你快速上手与深度理解
  • Linux下部署前后端分离项目 —— Linux下安装nginx
  • oracle实例
  • ai智能语音机器人对我们生活有什么影响
  • Designing Dashboards with SAP Analytics Cloud
  • RNN 实战指南:用 PyTorch 从零实现文本分类
  • 【从零开始学习计算机科学】编译原理(一)编译过程概述
  • tcp/ip三次握手和四次挥手原理详细解析
  • Java学习——day21
  • Springboot连接neo4j
  • 蓝桥杯好题推荐---前缀和
  • 深度学习篇---Opencv中的Haar级联分类器