汗,本来是想写IIC教程的,结果发现IIC好像没有什么要写的东西,看看官方的例程,基本的IIC也就出来,难道要我再造轮子? 于是想写一下注意点。
一般IIC都是用于传感器的通信的,发现官方的板子自带的温度传感器是SMBUS通信协议的,SMBUS是可以用IIC通信,但是有点小区别,具体的区别自己可以google下。
背景:
N天以前,有个同学说,他用IIC去获取陀螺仪的数据,结果怎么都不成功。刚好我在N天前有用过IIC,知道了CC3200的IIC跟我们平常用的IIC有点不太一样(平常我用的是软件的IIC),一眼就知道问题出现在哪里,然后跟他讲了好多IIC的东西,唉,有些代码可能会误导那些对IIC协议不太懂的同学。
像stm32的硬件IIC是比较特别的,所以基本上都是用软件的IIC。什么是软件的IIC:软件控制IO的电平,模仿出IIC的时序图。在这个过程中需要软件去控制电平。
当时如果是硬件IIC的话,就不需要软件去控制电平了,芯片自己会帮我们做了。
IIC协议:如果有不懂的话,请自己先GOOGLE下,花几分钟去详细了解它。哥哥在这里就介绍重点。
IIC分成主机和从机,从机都需要一个地址,这个地址是7BIT的,假设
设备地址是 0b1100 111 ------7bit -------在CC3200的IIC中,我们只关心这个
主机向从机发送数据时的地址是 0b1100 1110 -----8bit -------在CC3200的IIC中,我们不关心这个
从机向主机发送数据时的地址是 0b1100 1111 -----8bit -------在CC3200的IIC中,我们不关心这个
地址的最低bit是用来标识数据的传输方向,所以当我们用软件的IIC,这个bit是需要我们去控制的。
如果我们是用软件的IIC,一般给出的就是 写地址==0b1010 1110 和 读地址== 0b1100 1111 ,8bit总比7bit看的顺眼吧.
如果是硬件的IIC,地址就是 0b1100 111 ,至于是写或者是读,都是由CC3200帮我们做了。所以我们给CC3200的设备地址是7bit。