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

固件类型:自行编译的固件
SDK包名称:Firefly-RK356X_Android11.0_git_20210824
SDK修改内容:rk3568-firefly-aioj.dts中添加了rk628d的设备节点
Log日志:log (2).zip

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

i2c读取不到rk628d

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

步骤:
1.kernel config配置

579c34eec13b4ef05b9488f6546d3d2.png

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

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

44da5342cbb82afe8ca6e4263af5d8f.png

连接如图:(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等时序都尝试过,依旧注册不上。

萌新求助 ==

tchip_askquestions



log (2).zip (27.8 KB)

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

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

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

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,电压被分掉了)。
但是有人已经调通了,这个应该没有影响。


46f4f7f8915245367b09d2360d49403.png

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引脚的配置,对应引脚电平有变化。

513453733 发表于 2022-4-6 16:43
但是烧录固件后依旧不行,rk628 4-0050: failed to access register: -6
检查复位端,rk628d有复位信号 …

确定不需要3.3V吗。我记得是需要3.3V的

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

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

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

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进行清空,无效。怀疑是供电变压内边给烧掉了,请问如何检测。

rk3568-evb2-lp4x-v10的固件具体是哪个板子?
中断就算不用,rk628也是可以起来的,配置就行,所以这个可以跳过先,确保可以起来
对于第5点,只是一次有问题,还是一直有问题

zyk 发表于 2022-4-21 11:53
rk3568-evb2-lp4x-v10的固件具体是哪个板子?
中断就算不用,rk628也是可以起来的,配置就行,所以这个可 …

以及解决了,换了块3568的板子