zynq-7000系列基于7015的linux下 I2C-bus switch的扩展使用
作者:卢浩
时间:2017.3.6
转载请注明出处
有一些用户在嵌入式开发过程中,存在I2C不够用的情况,这时候我们就需要扩展多个I2C接口了。这里我是基于7015的I2C0扩展的8个I2C,用PCA9548A8-channel I2C-bus switch with reset。
http://www.nxp.com/documents/data_sheet/PCA9548A.pdf
我们可以看一下PCA9548的地址信息:如下图
1110A2A1A0,我的设计中,A2 A1 A0都接了GND,即为0 0 0,那么地址就是1110000,16进制为0X70,请看原理图:
打开zynq-zed.dts文件,添加如下:
aliases {
ethernet0 = &gem0;
i2c0 = &i2c0;
i2c1 = &i2c1;
serial0 = &uart1;
spi0 = &qspi;
mmc0 = &sdhci0;
};
&i2c0 {
status = "okay";
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c0_default>;
#address-cells = <1>;
#size-cells = <0>;
pca9548: mux@70 {
compatible = "nxp,pca9548";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x70>;
};
};
&pinctrl0 {
pinctrl_i2c0_default: i2c0-default {
mux {
groups = "i2c0_0_grp";
function = "i2c0";
};
conf {
groups = "i2c0_0_grp";
bias-pull-up;
slew-rate = <0>;
io-standard = <1>;
};
};
};
然后配置内核添加对pca9543的支持,如下:
<*> Philips PCA954x I2C Mux/switches
编译内核和dts,收工。