1 引脚连接:
bh1750 | duo
vcc | 3.3v(out)
gnd | gnd
scl | gpio0(gpio28)
sda | gpio1(gpio29)
addr | gnd
gpio28为芯片的io序号,gpio0为小板的io序号
查看io默认状态
duo-buildroot-sdk\build\boards\cv180x\cv1800b_milkv_duo_sd\u-boot\cvi_board_init.c
PINMUX_CONFIG(IIC0_SDA, XGPIOA_29);
PINMUX_CONFIG(IIC0_SCL, XGPIOA_28);
!!补充内容
上述配置会导致i2c0无法加载成功,报错提示i2c超时。
尝试更改为如下内容。
PINMUX_CONFIG(IIC0_SDA, IIC0_SDA);
PINMUX_CONFIG(IIC0_SCL, IIC0_SCL);
如图引脚名称为IIC0_SDA,可以复用为左边框住的内容,通过PINMUX_CONFIG配置即可。
2 添加dts
duo-buildroot-sdk\build\boards\cv180x\cv1800b_milkv_duo_sd\dts_riscv\cv1800b_milkv_duo_sd.dts
&i2c0 {
status = "okay";
bh1750:bh1750@23 {
compatible = "rohm,bh1750";
reg = <0x23>;
status = "okay";
};
};
3 打开config
duo-buildroot-sdk\build\boards\cv180x\cv1800b_milkv_duo_sd\cv1800b_milkv_duo_sd_defconfig
CONFIG_IIO=y
CONFIG_BH1750=y
iio一定要添加,驱动添加流程如下
duo-buildroot-sdk\linux_5.10\drivers\Makefile
obj-$(CONFIG_IIO) += iio/
duo-buildroot-sdk\linux_5.10\drivers\iio\Makefile
obj-y += light/
duo-buildroot-sdk\linux_5.10\drivers\iio\light\Makefile
obj-$(CONFIG_BH1750) += bh1750.o
4 查看编译log
CC drivers/iio/light/bh1750.o
5 查看设备中驱动和dts加载
[root@milkv]/# find | grep bh1750
find: ./proc/2874: No such file or directory
./sys/bus/i2c/drivers/bh1750
./sys/bus/i2c/drivers/bh1750/uevent
./sys/bus/i2c/drivers/bh1750/bind
./sys/bus/i2c/drivers/bh1750/unbind
./sys/firmware/devicetree/base/i2c@04000000/bh1750@23
./sys/firmware/devicetree/base/i2c@04000000/bh1750@23/compatible
./sys/firmware/devicetree/base/i2c@04000000/bh1750@23/status
./sys/firmware/devicetree/base/i2c@04000000/bh1750@23/reg
./sys/firmware/devicetree/base/i2c@04000000/bh1750@23/name
看起来dts和驱动都有添加到,但是使用i2cdetect -yr 0没有看到i2c地址,查看log才发现i2c0 time out了。
6 报错
[root@milkv]~# dmesg
[ 1.943778] i2c_designware 4000000.i2c: controller timed out
[ 1.949738] bh1750: probe of 0-0023 failed with error -110
请为有没有朋友遇到过这种问题,是否可以帮忙解答,感谢~