Firefly开源社区

[Core-1126-JD4] os04a10 reset pin 无法配置为高电平有效,是否是 bug 还是预期的...

299

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
299
发表于 2021-9-10 11:11:59     
如题, 我做了 10 次对比实验, 发现 pwd pin 可以配置为高电平/低电平有效, 但 reset pin 不可以.
请教firefly 的兄台, 是否是 bug 呢?

具体实验:
  1. rst pwn pin gpio分析

  2. # case1 当如下配置后,pwn电压为0

  3. pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
  4. reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;

  5. /*
  6.     usleep_range(500, 1000);
  7.     if (!IS_ERR(os04a10->pwdn_gpio))
  8.         gpiod_direction_output(os04a10->pwdn_gpio, 1);
  9. */

  10. # cases2 当如下配置后, pwn 电压还是 0

  11. pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
  12. reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;

  13.     usleep_range(500, 1000);
  14.     if (!IS_ERR(os04a10->pwdn_gpio))
  15.         gpiod_direction_output(os04a10->pwdn_gpio, 1);

  16. # case3 当如下配置, pwn 电压正常为 1.8v,sensor 可以正常用.

  17. pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
  18. reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;


  19.     if (!IS_ERR(os04a10->reset_gpio))
  20.         gpiod_direction_output(os04a10->reset_gpio, 0);

  21.     usleep_range(500, 1000);
  22.     if (!IS_ERR(os04a10->pwdn_gpio))
  23.         gpiod_direction_output(os04a10->pwdn_gpio, 0);

  24. # case4. 异常 . 异常. pwn=1.8v, rst=0v.

  25. if (!IS_ERR(os04a10->reset_gpio))
  26.         gpiod_direction_output(os04a10->reset_gpio, 0);

  27.     if (!IS_ERR(os04a10->reset_gpio))
  28.         gpiod_direction_output(os04a10->reset_gpio, 1);

  29.     usleep_range(500, 1000);
  30.     if (!IS_ERR(os04a10->pwdn_gpio))
  31.         gpiod_direction_output(os04a10->pwdn_gpio, 0);

  32.                 pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
  33.                 reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;

  34. # case5. 异常 . 异常. pwn=1.8v, rst=0v.
  35. /*  if (!IS_ERR(os04a10->reset_gpio))
  36.         gpiod_direction_output(os04a10->reset_gpio, 0); */


  37.     if (!IS_ERR(os04a10->reset_gpio))
  38.         gpiod_direction_output(os04a10->reset_gpio, 1);

  39.     usleep_range(500, 1000);
  40.     if (!IS_ERR(os04a10->pwdn_gpio))
  41.         gpiod_direction_output(os04a10->pwdn_gpio, 0);

  42.                 pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
  43.                 reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;

  44. # case6. 异常. pwn=0 rst=0
  45. /*  if (!IS_ERR(os04a10->reset_gpio))
  46.         gpiod_direction_output(os04a10->reset_gpio, 1); */

  47.     if (!IS_ERR(os04a10->reset_gpio))
  48.         gpiod_direction_output(os04a10->reset_gpio, 1);

  49.     usleep_range(500, 1000);
  50.     if (!IS_ERR(os04a10->pwdn_gpio))
  51.         gpiod_direction_output(os04a10->pwdn_gpio, 1);

  52.                 pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
  53.                 reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;


  54. # case7. 正常. 其实就是重复 case3 的实验.
  55. /*  if (!IS_ERR(os04a10->reset_gpio))
  56.         gpiod_direction_output(os04a10->reset_gpio, 0); */

  57.     if (!IS_ERR(os04a10->reset_gpio))
  58.         gpiod_direction_output(os04a10->reset_gpio, 0);

  59.     usleep_range(500, 1000);
  60.     if (!IS_ERR(os04a10->pwdn_gpio))
  61.         gpiod_direction_output(os04a10->pwdn_gpio, 0);

  62.                 pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
  63.                 reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;


  64. # case8. 异常. pwn=1.8v, rst=0v.
  65.                 pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
  66.                 reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;

  67. /*  if (!IS_ERR(os04a10->reset_gpio))
  68.         gpiod_direction_output(os04a10->reset_gpio, 0); */

  69.     if (!IS_ERR(os04a10->reset_gpio))
  70.         gpiod_direction_output(os04a10->reset_gpio, 1);

  71.     usleep_range(500, 1000);
  72.     if (!IS_ERR(os04a10->pwdn_gpio))
  73.         gpiod_direction_output(os04a10->pwdn_gpio, 1);

  74. # case9. 异常. pwn=1.8v, rst=0v.

  75.     if (!IS_ERR(os04a10->reset_gpio))
  76.         gpiod_direction_output(os04a10->reset_gpio, 0);

  77.     if (!IS_ERR(os04a10->reset_gpio))
  78.         gpiod_direction_output(os04a10->reset_gpio, 1);

  79.     usleep_range(500, 1000);
  80.     if (!IS_ERR(os04a10->pwdn_gpio))
  81.         gpiod_direction_output(os04a10->pwdn_gpio, 1);

  82.                 pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
  83.                 reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;

  84. # case10. 正常.
  85.     if (!IS_ERR(os04a10->reset_gpio))
  86.         gpiod_direction_output(os04a10->reset_gpio, 0);

  87.     usleep_range(500, 1000);
  88.     if (!IS_ERR(os04a10->pwdn_gpio))
  89.         gpiod_direction_output(os04a10->pwdn_gpio, 1);

  90.                 pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
  91.                 reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;



复制代码
回复

使用道具 举报

811

积分

3

威望

0

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
811
发表于 2021-9-10 15:16:41     
不知道你是用示波器测量还是万用表,如果你要怀疑这两个脚可不可控应该用 gpio 子系统去测试一下。如果你用 sensor 去测试,sensor 驱动很多地方会控制这两个引脚,例如摄像头初始化失败了,就会把掉源关掉。所以用示波器测试应该会准确一点
回复

使用道具 举报

299

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
299
发表于 2021-9-13 16:45:44     
板蓝根 发表于 2021-9-10 15:16
不知道你是用示波器测量还是万用表,如果你要怀疑这两个脚可不可控应该用 gpio 子系统去测试一下。如果你用 ...

您说的对.
虽然我把 camera driver 下电函数直接 return , 然后用万能表测试, 但 camera sensor 内部电路未知.

我应该不挂载 camera sensor 直接测试主板试试.
欢迎与我进行rv1109 rv1126 方面的技术交流.
我的QQ: 712715984
我擅长的: 手机平台的camera driver isp
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表