[Core-1126-JD4] os04a10 reset pin 无法配置为高电平有效,是否是 bug 还是预期的...
如题, 我做了 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>;
不知道你是用示波器测量还是万用表,如果你要怀疑这两个脚可不可控应该用 gpio 子系统去测试一下。如果你用 sensor 去测试,sensor 驱动很多地方会控制这两个引脚,例如摄像头初始化失败了,就会把掉源关掉。所以用示波器测试应该会准确一点 板蓝根 发表于 2021-9-10 15:16
不知道你是用示波器测量还是万用表,如果你要怀疑这两个脚可不可控应该用 gpio 子系统去测试一下。如果你用 ...
您说的对.
虽然我把 camera driver 下电函数直接 return , 然后用万能表测试, 但 camera sensor 内部电路未知.
我应该不挂载 camera sensor 直接测试主板试试.
页:
[1]