luckfox pico plus开发板 驱动pwdn-gpio疑问

  • 您好, 写成RK_PC7或23(C(2 * 8) + 7=23 )都可以
  • Crocodile wrote: 2024-09-06 11:55 您好, 写成RK_PC7或23(C(2 * 8) + 7=23 )都可以
    &gpio3 23?
  • gpio1-c7 写成

    Code: Select all

    pwdn-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>
    

    Code: Select all

    pwdn-gpios = <&gpio1 23 0>;
    
    都可以,在kernel 的 include/dt-bindings/gpio/gpio.h 和 include/dt-bindings/pinctrl/rockchip.h 下有注释
  • Crocodile wrote: 2024-09-09 2:10 gpio1-c7 写成

    Code: Select all

    pwdn-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>
    

    Code: Select all

    pwdn-gpios = <&gpio1 23 0>;
    
    都可以,在kernel 的 include/dt-bindings/gpio/gpio.h 和 include/dt-bindings/pinctrl/rockchip.h 下有注释
    好的,谢谢,我试试
  • Crocodile wrote: 2024-09-09 2:10 gpio1-c7 写成

    Code: Select all

    pwdn-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>
    

    Code: Select all

    pwdn-gpios = <&gpio1 23 0>;
    
    都可以,在kernel 的 include/dt-bindings/gpio/gpio.h 和 include/dt-bindings/pinctrl/rockchip.h 下有注释
    我在设备树中改为了pwdn-gpios = <&gpio1 23 1>;,但是驱动这里 sc3336->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS);
    if (IS_ERR(sc3336->reset_gpio))
    dev_warn(dev, "Failed to get reset-gpios\n");

    sc3336->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_ASIS);
    if (IS_ERR(sc3336->pwdn_gpio))
    dev_warn(dev, "Failed to get pwdn-gpios\n");
    会打印Failed to get pwdn-gpios,是怎么回事呢,pwdn-gpios = <&gpio3 21 0>就不会打印,是还有什么步骤我没有做吗
  • 调整驱动源码 添加

    Code: Select all

    //原本
    //if (IS_ERR(sc3336->pwdn_gpio))
    //dev_warn(dev, "Failed to get pwdn-gpios\n");
    
    if(IS_ERR(gpiod))
    	dev_warn(dev, "Failed to get pwdn-gpios ,ret = %d\n", PTR_ERR(sc3336->pwdn_gpio));
    
    查看错误返回码判断获取 pwdn-gpios 失败的原因
  • Crocodile wrote: 2024-09-09 6:36 调整驱动源码 添加

    Code: Select all

    //原本
    //if (IS_ERR(sc3336->pwdn_gpio))
    //dev_warn(dev, "Failed to get pwdn-gpios\n");
    
    if(IS_ERR(gpiod))
    	dev_warn(dev, "Failed to get pwdn-gpios ,ret = %d\n", PTR_ERR(sc3336->pwdn_gpio));
    
    查看错误返回码判断获取 pwdn-gpios 失败的原因
    可以了,但是我设置gpio1_C7_d0为1,但是使用万用表测量电压为低电平,拉高不了?gpiod_set_value_cansleep(sc3336->pwdn_gpio, 1);
  • 这块得结合源码执行分析了,条件允许的话请用逻辑分析仪或者示波器测,可能在pwdn-gpio引脚一开始拉高电平后又被驱动拉低了,比如您的摄像头损坏了或者排线没接好,i2c通讯时没有获取到sensor的id直接调用__sc3336_power_off把pwdn-gpios 给重新拉低。
  • Crocodile wrote: 2024-09-09 7:55 这块得结合源码执行分析了,条件允许的话请用逻辑分析仪或者示波器测,可能在pwdn-gpio引脚一开始拉高电平后又被驱动拉低了,比如您的摄像头损坏了或者排线没接好,i2c通讯时没有获取到sensor的id直接调用__sc3336_power_off把pwdn-gpios 给重新拉低。
    有没有其他地方使用到gpio1_C7_d0,然后给他拉低的呢,我power_off那也给他拉高了,还是测不到电压