513453733 发表于 2022-3-29 21:46:28

i2通信异常 rk628 4-0050: failed to access register: -6

问题如下图log日志中截取部分:


i2c读取不到rk628d

核心板:core-3568j
行业版:aio-3568j
所驱动芯片:瑞芯微rk628d

步骤:
1.kernel config配置


2.dts配置
修改的dts为rk3568-firefly-aioj.dts

硬件连接如下:
i2c采用ic4(位于mipi_csi中),中断采用tp端子中的int脚,复位采用tp端子中的res脚。










连接如图:(rk628的开发板i2c要单独接出来,采用常供电)


参考连接(rk官方提供的连接方法):



dts代码如下:其中部分代码参考子rk官方提供的节点配置以及安卓内核中部分其他主板的rk628驱动dts
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2020 Rockchip Electronics Co., Ltd.
*
*/


#include "rk3568-firefly-aioj.dtsi"
/*
*                               Select one of the three
* using single camera xc7160 ----> rk3568-firefly-aioj-cam-8ms1m.dtsi
* using dual camera gc2053/gc2093   ----> rk3568-firefly-aioj-cam-2ms2m.dtsi
* using hdmi-in module rk628d   ----> rk3568-firefly-aioj-tf-hdmi-mipi-rk628.dtsi
*/
#include "rk3568-firefly-aioj-cam-8ms1m.dtsi"
//#include "rk3568-firefly-aioj-cam-2ms2m.dtsi"
//#include "rk3568-firefly-aioj-tf-hdmi-mipi-rk628.dtsi"



/ {
    model = "AIO-3568J HDMI (Android)";
    compatible = "rockchip,rk3568-firefly-aioj", "rockchip,rk3568";

};

&route_hdmi {
    status = "okay";
    connect = <&vp0_out_hdmi>;
};

&i2c4{
    clock-frequency = <400000>;
    status = "okay";

    rk628: rk628@50{
      reg = <0x50>;
      interrupt-parent = <&gpio3>;
      interrupts = <RK_PA3 IRQ_TYPE_LEVEL_HIGH>;

      reset-gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>;
      status = "okay";

    };
};

#include <arm/rk628.dtsi>

&rk628_combtxphy{
    status = "okay";
};

&rk628_combrxphy{
    status = "okay";
};

&rk628_csi {
    status = "okay";
    /** If the hpd output level is inverted on the circuit, * the following configuration needs to be enabled. */
    /* hpd-output-inverted; */
    plugin-det-gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>; //
    //power-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>;
    rockchip,camera-module-index = <0>;
    rockchip,camera-module-facing = "back";
    rockchip,camera-module-name = "RK628-CSI";
    rockchip,camera-module-lens-name = "NC";

    port {
      hdmiin_out0: endpoint {
            remote-endpoint = <&mipi_in>;
            data-lanes = <1 2 3 4>;
      };
    };
};

&csi2_dphy_hw {
    status = "okay";
};

&csi2_dphy0 {
    status = "okay";

    ports {
      #address-cells = <1>;
      #size-cells = <0>;
      port@0 {
            reg = <0>;
            #address-cells = <1>;
            #size-cells = <0>;

            mipi_in: endpoint@0 {
                reg = <0>;
                remote-endpoint = <&hdmiin_out0>;
                data-lanes = <1 2 3 4>;
            };
      };

      port@1 {
            reg = <1>;
            #address-cells = <1>;
            #size-cells = <0>;

            csidphy0_out: endpoint@0 {
                reg = <0>;
                remote-endpoint = <&isp0_in>;
            };
      };
    };
};

&rkisp {
    status = "okay";
};

&rkisp_mmu {
    status = "okay";
};

&rkisp_vir0 {
    status = "okay";

    port {
      #address-cells = <1>;
      #size-cells = <0>;

      isp0_in: endpoint@0 {
            reg = <0>;
            remote-endpoint = <&csidphy0_out>;
      };
    };
};


编译结果:



log中i2c读取不到设备,返回错误码6.



已确定:
1.i2c地址设置没有问题,


2.硬件连接没有问题,3568与rk628的i2c相连,rk628供电正常,上电后芯片发热,系统开机是3568会给628d输入一个拉高的边沿脉冲,即供电和置为ok。FPC连接没有问题。
3.考虑过是否是dts中时序的问题,对dts中clock-frequency进行过修改,400000,40000,10000等时序都尝试过,依旧注册不上。

萌新求助 ==

zyk 发表于 2022-3-30 09:15:27

排查一下是否是rk628d复位不成功

513453733 发表于 2022-4-6 16:28:16

zyk 发表于 2022-3-30 09:15
排查一下是否是rk628d复位不成功

之前的628d芯片发热严重,换了个新板子没有明显发热,之前的芯片应该是坏了。

513453733 发表于 2022-4-6 16:43:14

zyk 发表于 2022-3-30 09:15
排查一下是否是rk628d复位不成功

但是烧录固件后依旧不行,rk628 4-0050: failed to access register: -6
检查复位端,rk628d有复位信号输入,其低电平有效,系统正常运行的情况下为3.3v,检测控制io输出3.3v,到rk628d芯片上就只有1v了(即杜邦线两端一端3.3v一端1v,电压被分掉了)。
但是有人已经调通了,这个应该没有影响。

513453733 发表于 2022-4-6 16:56:19








cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins
检查gpio口功能,结果如上,3-3和3-5gpio无主,把我写的dts注释掉后编译烧录,gpio口功能设置没有发生变化。
怀疑是否是3-3和3-5gpio口功能设置有问题
但是修改dtsgpio3-3和gpio3-5引脚的配置,对应引脚电平有变化。

zyk 发表于 2022-4-6 17:29:02

513453733 发表于 2022-4-6 16:43
但是烧录固件后依旧不行,rk628 4-0050: failed to access register: -6
检查复位端,rk628d有复位信号 ...
确定不需要3.3V吗。我记得是需要3.3V的

513453733 发表于 2022-4-6 22:20:00

zyk 发表于 2022-4-6 17:29
确定不需要3.3V吗。我记得是需要3.3V的

控制io是3.3v,是电压输过去会掉电,两个板子都有这个问题而且int端口也有掉电这个现象,说明这应该是个普遍问题.

zyk 发表于 2022-4-6 23:10:39

分压的话就没办法,只能尝试硬件上能否去掉分压。我司设计的RK628D模块是会转一下的,模块近期应该会上线。目前RK356X上使用RK628D,需要修改的东西不少,原厂主要维护forall版本,如果走vicap,目前库还没兼容;走isp的用4K需要进行超频

513453733 发表于 2022-4-19 10:21:51

zyk 发表于 2022-4-6 23:10
分压的话就没办法,只能尝试硬件上能否去掉分压。我司设计的RK628D模块是会转一下的,模块近期应该会上线。 ...

您好,我昨天又看了一下,有以下几个疑问。
1.关于之前分压的问题,我换了个rk3568-evb2-lp4x-v10的固件,连接杜邦线两端分压问题消失,原因不知道。
2.rk628d int端一直是0.72v,原本的控制中断的GPIO口设置为高电平输出3.3v时,int端也为0.72v。
3.rk628d int端不与主控芯片连接时,628复位端一直是0V(控制复位端的GPIO输出3.3v),只有将int端口与主控芯片连接到一起的时候,628d复位端才会变成3.3v,正常芯片中复位端与int端不应该是独立的吗?
4.3568的控制中断的GPIO口无论设置IRQ_TYPE_LEVEL_HIGH还是IRQ_TYPE_LEVEL_LOW常状态下检测都是0v。
5.我在一次登录load模式时,上电后3568没有反应,正常上电后也没有反应,3568板载上power端子12v脚有电,3.3v和5v没电,目前尝试过对emmc和nor flash进行清空,无效。怀疑是供电变压内边给烧掉了,请问如何检测。

zyk 发表于 2022-4-21 11:53:14

rk3568-evb2-lp4x-v10的固件具体是哪个板子?
中断就算不用,rk628也是可以起来的,配置就行,所以这个可以跳过先,确保可以起来
对于第5点,只是一次有问题,还是一直有问题
页: [1] 2
查看完整版本: i2通信异常 rk628 4-0050: failed to access register: -6