|
[Core-1126-JD4] os04a10 reset pin 无法配置为高电平有效,是否是 bug 还是预期的...
发表于 2021-9-10 11:11:59
浏览:5152
|
回复:2
打印
只看该作者
[复制链接]
楼主
如题, 我做了 10 次对比实验, 发现 pwd pin 可以配置为高电平/低电平有效, 但 reset pin 不可以.
请教firefly 的兄台, 是否是 bug 呢?
具体实验:
- rst pwn pin gpio分析
- # case1 当如下配置后,pwn电压为0
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
- /*
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 1);
- */
- # cases2 当如下配置后, pwn 电压还是 0
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 1);
- # case3 当如下配置, pwn 电压正常为 1.8v,sensor 可以正常用.
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 0);
- # case4. 异常 . 异常. pwn=1.8v, rst=0v.
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0);
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 1);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 0);
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;
- # case5. 异常 . 异常. pwn=1.8v, rst=0v.
- /* if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0); */
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 1);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 0);
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;
- # case6. 异常. pwn=0 rst=0
- /* if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 1); */
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 1);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 1);
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
- # case7. 正常. 其实就是重复 case3 的实验.
- /* if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0); */
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 0);
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_LOW>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
- # case8. 异常. pwn=1.8v, rst=0v.
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;
- /* if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0); */
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 1);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 1);
- # case9. 异常. pwn=1.8v, rst=0v.
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0);
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 1);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 1);
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>;
- # case10. 正常.
- if (!IS_ERR(os04a10->reset_gpio))
- gpiod_direction_output(os04a10->reset_gpio, 0);
- usleep_range(500, 1000);
- if (!IS_ERR(os04a10->pwdn_gpio))
- gpiod_direction_output(os04a10->pwdn_gpio, 1);
- pwdn-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
- reset-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
复制代码 |
|