LSM6DSO除了作为普通的I2C从设备外(模式1),它还有3种特殊的模式,如下图:
其中模式2就是I2C HUB模式,它作为一个I2C HUB,后面挂接其它的I2C从设备。在模式2/3/4下,芯片的SDx/SCx引脚作为I2C HUB的SDA/SCL引脚。
对于X-NUCLEO-IKS01A3开发板,默认使用了标准模式,JP7和JP8的跳线连接1-2和3-4,这样I2C1和I2C2短连,LSM6DSO的SDx和SCx接到GND,6个传感器的I2C通过U6/U7(ST2378E)连接在一起。
如果使用I2C HUB模式,需要改变JP7/JP8的短路块连接方式,将2-3短路,这样I2C1_SDA/I2C1/SCL就可以和SDx/SCx相连了。
不过仅仅改变跳线,I2C HUB还是无法工作的,因为默认情况下,LSM6DSO没有允许这个功能,还需要通过寄存器设置芯片工作模式。虽然设置并不复杂,但LSM6DSO的寄存器实在太多了,相信大部分网友没有耐心去完整看一次,下面就简单介绍设置方法。
首先需要修改FUNC_CFG_ACCESS寄存器,将SHUB_REG ACCESS设置为1,启用 sensor hub (I²C master) 寄存器访问功能。
其次,将sensor hub的寄存器MASTER_CONFIG中的PASS_THROUGH_MODE(直通模式)设置为1,这样就可以启用I2C HUB功能了。
下面以MicroPython为例,介绍具体的使用方法:
首先将X-NUCLEO-IKS01A3开发板的J2(I2C和电源)连接到MicroPython开发板,具体方法请参考帖子《使用 MicroPython 连接 X-NUCLEO-IKS01A3》。
以PYB Nano为例,使用进行I2C1连接。然后扫描I2C总线上的设备(这时已经将X-NUCLEO-IKS01A3切换到了HUB模式),可以发现有3个设备,其中设备76是PYB Nano上的加速度传感器MMA7660,设备25是X-NUCLEO-IKS01A3上的LIS2DW12磁场传感器,设备107是LSM6DSO。
依次设置寄存器FUNC_CFG_ACCESS和寄存器MASTER_CONFIG,然后再次扫描I2C总线,就可以发现其它传感器已经连接到I2C HUB上了。
此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处