CC3200——IIC从机地址计算

版权声明:虽为原创,欢迎转载。 https://blog.csdn.net/m0_37655357/article/details/86544394

在SDK 的i2c_demo例程中,有两个IIC器件,温度传感器TMP006和三轴加速度传感器BMA222E,下面 以TMP006为例总结一下IIC从机地址的计算步骤:

1、根据TMP006数据手册找到其从机地址定义的地方,有些设备的从机地址是 固定的,有些则根据其引脚的电平决定,这样就可以在一根总线上挂载多个从机设备,TMP006就是这样。

2、根据CC3200开发板的硬件原理图,可以确定ADR1=0,ADR0=1,所以上面的7位从机地址应该选1000001

3、查看CC3200的数据手册,找到其发送IIC地址的时序如下图所示:

大概意思就是说发送的从机地址由从机的7位地址最后加上一位读写标志位,然后从高位向低位依次发送。其中读写标志位规定1读0写。

4、而i2c_demo的例程中是需要读取设备ID寄存器,寄存器地址为0XFE。因此,可以确定最后一位应该是取1,那么主机需要发送的数据也就确定了:10000011=0x83

5、但是发现在TI给出的例程的说明书中,发送的地址却不是0x83,而是0x41,如下图:

这又是怎么回事呢?

首先上面的分析肯定没有问题,那么就看他的程序是怎么实现的,下图是写从机地址时调用的函数:

看来他调用了MAP_I2CMasterSlaveAddrSet(I2C_BASE, ucDevAddr, false);函数,通过查看库函数的帮助文档,看这个函数到底干了什么:

下面还有这么一段话的介绍 :

This function configures the address that the I2C Master places on the bus when initiating a transaction. When the bReceive parameter is set to true, the address indicates that the I2C Master is initiating a read from the slave; otherwise the address indicates that the I2C Master is initiating a write to the slave.

原来TI早就给我们封装好了,只要知道7位从机地址并确定读写操作,直接当做参数传给这个函数就行了。所以他传入的0x41就是1000001作为低7位时的值(高位补0)。

猜你喜欢

转载自blog.csdn.net/m0_37655357/article/details/86544394
今日推荐