平台:RK3288 & Android7.1
内容:调试NFC功能
模块:PN7150
前言
在Android7.1系统的主板上外挂PN7150开发板,增加NFC功能,用于支付。
一、调试
1.1、内核层
1.1.1 dts
PN7150通过I2C与主板通信,所以需要在对应的IIC节点添加设备,这里是将模组挂在I2C4
&i2c4 {
status = "okay";
clock-frequency = <400000>;
i2c-scl-rising-time-ns = <345>;
i2c-scl-falling-time-ns = <11>;
pn7150: pn7150@28 {
status = "okay";
compatible = "nxp,pn547";
reg = <0x28>;
interrupt-gpios = <&gpio7 RK_PA6 IRQ_TYPE_LEVEL_HIGH>;
enable-gpios = <&gpio7 RK_PA5 GPIO_ACTIVE_LOW>;
};
};
1.1.2 驱动
1、切换至目录
SDK/kernel/drivers/misc
2、下载驱动源码
git clone https://github.com/NXPNFCLinux/nxp-pn5xx.git
这里修改一下Makefile,将Makefile的内容替换成下面这个,把驱动编译成.o文件
kernel\drivers\misc\nxp-pn5xx\Makefile
obj-$(CONFIG_NFC_NXP_PN5XX) += pn5xx_i2c.o
nxp-pn5xx-objs := pn5xx_i2c.o
二、系统层
2.1 替换lib库
https://github.com/NXPNFCProject/NFC_NCIHAL_libnfc-nci
SDK路径:external/libnfc-nci
2.2 NFC服务APP更换
https://github.com/NXPNFCProject/NFC_NCIHAL_Nfcpackages\apps\Nfc
SDK路径:packages\apps\Nfc
3、补丁
3.1 带有补丁脚本的包
https://github.com/NXPNFCLinux/nxpnfc_android_nougat
3.2 补丁脚本需要的文件
https://github.com/NXPNFCProject/NFC_NCIHAL_base/tree/br_android_ncihalx_n
SDK根目录新建文件夹 NxpNfcAndroid ,然后把3.1整个文件夹扔进去,3.2里面的内容也全部扔进去,然后执行脚本 install_NFC.sh PN7150
4、nfc.h
https://github.com/NXPNFCProject/NXPNFC_Reference
替换这个文件,补丁脚本里面没有,但是参考文档有
SDK路径:hardware\libhardware\include\hardware\nfc.h
5、系统文件修改
SDK\device\rockchip\rk3288\device.mk
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml
# NFC packages
PRODUCT_PACKAGES += \
libnfc-nci \
libnfc_nci_jni \
nfc_nci_pn54x.default \
NfcNci \
Tag \
com.android.nfc_extras
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/com.nxp.mifare.xml:system/etc/permissions/com.nxp.mifare.xml \ frameworks/native/data/etc/com.android.nfc_extras.xml:system/etc/permissions/com.android.nfc_extras.xml \ frameworks/native/data/etc/android.hardware.nfc.xml:system/etc/permissions/android.hardware.nfc.xml \ frameworks/native/data/etc/android.hardware.nfc.hce.xml:system/etc/permissions/android.hardware.nfc.hce.xml \ NxpNfcAndroid/android.hardware.nfc.hcef.xml:system/etc/permissions/android.hardware.nfc.hcef.xml \
NxpNfcAndroid/conf/libnfc-brcm.conf:system/etc/libnfc-brcm.conf \
NxpNfcAndroid/conf/libnfc-nxp.conf:system/etc/libnfc-nxp.conf
SDK\device\rockchip\rk3288\init.rk3288.rc
//如果没有设备/dev/pn544,就把这段往前提,跟着on boot后面执行
+ # NFC
+ setprop ro.nfc.port "I2C"
+ chmod 0660 /dev/pn544
+ chown nfc nfc /dev/pn544
三、测试
测试apk文章结尾有,测试结果类似下面这种
拿手机扫可能手机不会弹出nfc的窗口,但是模块是可以识别到手机的ID的,类似上面。
四、遇到的问题
4.1 下载源码
开始参考NXP文档clone的时候不知道要切换平台,后面切换平台下的才对的上。
4.2 补丁脚本执行失败
在执行脚本 install_NFC.sh PN7150 打补丁的时候失败了,这个只能根据报错信息去改,如果有时间可以根据脚本手动打补丁。
4.3 I2C报错
模组使用看起来正常,示波器量中断脚电平波动也正常,在驱动里面加打印看数据收发也有,但是I2C时不时会报下面这个错误
pn54x_dev_write : i2c_master_send returned -6
看起来可能是设备掉了,可能是不太稳定,加了上拉也不好使,但是使用起来感觉不到。
4.4 没有pn544
没有发现/dev/pn544设备文件,将代码执行顺序往前提到boot那里即可
五、资料包
链接:https://pan.baidu.com/s/1U-y6EO_TO3ZojCd6TdZf5w
提取码:lmjm
六、参考文章
nfc模块pn7150移植说明教程(android mtk rk3399 rk3588)_rk3399 nfc-CSDN博客