一,概述
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堆栈概述
<hr> 二,内核移植
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通讯是否正常。
<hr> 三,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
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |