[RK3568][Android11][NFC] NP7160移植调试

1.驱动调试

1.1 NfcFactoryTestApp测试程序

配置完驱动,可以先用测试程序NfcFactoryTestApp试一下nfc通讯是否成

1.先关闭adb shell svc nfc disable

2 ./NfcFactoryTestApp

1.2 也可以在驱动里添加nfc i2c通讯检测

drivers/nfc/nfc/i2c_drv.c

@@ -101,6 +101,47 @@ static irqreturn_t i2c_irq_handler(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
+//start add detect nfc ic func by lpz 20230926
+static int nfc_i2c_test(struct i2c_client *client){
+       int ret;
+       char NCICoreReset[] = {0x20, 0x00, 0x01, 0x01};
+       char NCIEnableStandby[] = {0x2F, 0x00, 0x01, 0x01};
+       char Answer[256];
+
+       ret = i2c_master_send(client, NCICoreReset,4);
+       if (ret <= 0) {
+               printk("[lpz]%s: write NCICoreReset failed ret(%d), maybe in standby\n",__func__, ret);
+               return ret;
+       }else{
+               printk("[lpz]%s: write NCICoreReset succeed, ret(%d)\n",__func__, ret);
+       }
+       msleep(100);
+
+       ret = i2c_master_send(client, NCIEnableStandby,4);
+       if (ret <= 0) {
+               printk("[lpz]%s: write NCIEnableStandby failed ret(%d), maybe in standby\n",__func__, ret);
+               return ret;
+       }else{
+               printk("[lpz]%s: write NCIEnableStandby succeed, ret(%d)\n",__func__, ret);
+       }
+       msleep(10);
+
+       /* Read data, Answer[0] = 0x40*/
+       memset(Answer, 0, sizeof(Answer));
+       ret = i2c_master_recv(client, Answer, 256);
+       printk("[lpz]%s: Read Answer[0]=0x%x, Answer[1]=0x%x, Answer[2]=0x%x, Answer[3]=0x%x, ret(%d)\n",
+                               __func__, Answer[0],Answer[1],Answer[2],Answer[3],ret);
+       if(ret>0 && Answer[0]!=0x00){
+               printk("[lpz]%s: NXP NFC controller detected succeed\n",__func__);
+               return 1;
+       }else{
+               printk("[lpz]%s: NXP NFC controller detected failed\n",__func__);
+               return -1;
+       }
+       return 1;
+}
+//end add detect nfc ic func by lpz 20230926
+
 int i2c_read(struct nfc_dev *nfc_dev, char *buf, size_t count, int timeout)
 {
        int ret;
@@ -361,31 +402,11 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
                goto err_free_gpio;
        }
        client->irq = ret;
        ret = configure_gpio(nfc_gpio->dwl_req, GPIO_OUTPUT);
        if (ret) {
                pr_err("%s: unable to request nfc firm downl gpio [%d]\n",
                       __func__, nfc_gpio->dwl_req);
        }
 
        /* copy the retrieved gpio details from DT */
        memcpy(&nfc_dev->configs, &nfc_configs,
@@ -413,15 +434,32 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
                goto err_nfc_misc_unregister;
        }
        i2c_disable_irq(nfc_dev);
+       set_valid_gpio(nfc_gpio->dwl_req, 0);
        gpio_set_ven(nfc_dev, 1);
        gpio_set_ven(nfc_dev, 0);
+       msleep(10);
        gpio_set_ven(nfc_dev, 1);
+       msleep(100);
        device_init_wakeup(&client->dev, true);
        i2c_set_clientdata(client, nfc_dev);
        i2c_dev->irq_wake_up = false;
+//start add detect nfc ic func by lpz 20230926
+       ret = nfc_i2c_test(client);
+       if(ret > 0){
+               printk("[lpz]%s: nfc_i2c_test ok\n",__func__);
+       }else{
+               printk("[lpz]%s: nfc_i2c_test fail\n",__func__);
+               goto i2c_test_fail;
+       }
+//end add detect nfc ic func by lpz 20230926
 
-       pr_info("%s: probing nfc i2c successfully\n", __func__);
+       pr_info("%s: probing i2c nfc-np7160 successfully\n", __func__);
        return 0;
+i2c_test_fail:
 err_nfc_misc_unregister:
        nfc_misc_unregister(nfc_dev, DEV_COUNT);
 err_mutex_destroy:
@@ -437,7 +475,7 @@ err_free_read_kbuf:
 err_free_nfc_dev:
        kfree(nfc_dev);
 err:
-       pr_err("%s: probing not successful, check hardware\n", __func__);
+       pr_err("%s: probing i2c nfc-np7160 fail, check hardware!!!\n", __func__);
        return ret;
 }

2.Android层移植

Manifest.xml编译FCM Version报错不通过

报错如下:

patch:

--- a/device/rockchip/common/manifest.xml
+++ b/device/rockchip/common/manifest.xml
@@ -66,6 +66,24 @@
             <instance>default</instance>
         </interface>
     </hal>
+    <hal format="hidl">
+        <name>android.hardware.nfc</name>
+        <transport>hwbinder</transport>
+        <version>1.2</version>
+        <interface>
+            <name>INfc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>vendor.nxp.nxpnfc</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>INxpNfc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RK3568是RK公司于2021年推出的一款高性能64位ARM处理器,运行Android 11操作系统。IO调试是指对设备的输入输出接口进行调试和优化,以提高设备的性能和稳定性。 在Android 11上进行IO调试,首先需要确保设备的硬件接口正常工作,包括USB接口、HDMI接口、以太网口等。可以通过使用不同的外部设备(如键盘、鼠标、显示器)进行测试,检查设备的IO接口是否正常工作。 其次,可以使用Android Studio等开发工具进行IO调试。通过连接设备到计算机,可以使用ADB命令行工具或者开发工具自带的调试工具对设备进行IO调试。通过ADB命令行工具,可以查看设备的文件系统、文件传输速度等信息,并对文件进行复制、移动、删除等操作。通过开发工具的调试工具,可以对设备的IO接口进行模拟和测试,以验证其稳定性和兼容性。 同时,对于Android 11系统,还可以使用一些专门的IO调试工具进行调试和优化。这些工具可以监控设备的IO操作,包括读写速度、延迟等指标,并提供分析报告和优化建议。可以根据报告和建议进行相应的调整和优化,以提高设备的IO性能和稳定性。 总结来说,RK3568 Android 11 IO调试主要是通过测试设备的硬件接口、使用ADB命令行工具和开发工具的调试工具对设备进行调试,以及使用专门的IO调试工具进行性能分析和优化。通过这些方法,可以提高设备的IO性能和稳定性,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值