8位MCU EFM8LB1是Silicon Labs专门针对光模块、小家电推荐的一款小封装、高性价比微控制器解决方案,EFM8LB1系列MCU,可选I2C bootloader、UART bootloader功能,内部自己温度传感器,精度+/-3℃,14bit精度ADC,3X3mm小封装,
在光模块以及小家电市场中,有非常多的成功案列,尤其是光模块市场,占有90%以上的市场份额。
本文主要讲解EFM8LB1系列8位MCU的I2C_slave的多地址模式,在光模块中普遍会用到这个功能。
1、I2C_Slave模式最高速率可达3.4Mbps,I2C主机想访问I2C_Slave设备,需要知道I2C_Slave设备的地址。
2、在寄存器I2C0SLAD: I2C0 Slave Address中可以设置设备的从地址,寄存器如下:
在这个寄存器中只可以设置一个从地址,比如设置为0x50,当主机只有发送数据到地址0xA0的时候,从地址才可以收到数据,
比如设置为0x51,那么当主机只有发送数据到地址0xA1的时候,从地址才可以收到数据,那么如何不论主机发送数据到地址0xA0或者0xA1的时候,从设备都可以接收到I2C_Master的数据呢?
下面讲解I2C_Slave的另外一个寄存器,从地址掩码I2C0ADM: I2C0 Slave Address Mask:
从地址掩码的功能是掩盖掉需要核对的bit,也就是说,可以通过这个寄存器把地址的某个比较bit去掉不进行硬件比较,从而直接接收到来自被掩盖掉bit的之后,地址相同的数据,举例:
把寄存器I2C0ADM = 0x7E,把最后一个bit屏蔽掉,那么需要比较的地址为0x50、0x51,忽略掉最后一个bit,那么两个0x50 = 0x51,两个地址是相同的,所以,此时,不论主机发送数据到从地址0xA0或者0xA1,在slave端,判断地址0x50、0x51为同一个地址,从设备会接收到来自Master的数据。