本项目是一个基于zigbee CC2530的照度计,传感器使用的是TI的OPT3001,开发环境是IAR Embedded Workbench。关于IAR开发环境的搭建可参考《Zigbee开发平台的构建》及《IAR集成开发环境入门》。
这里采用的是普通IO口模拟实现I2C通信,其中ZigBee-CC2530开发板作为主设备,OPT3001模块作为从设备。
对于I2C总线,这里就不多阐述了,有兴趣的可点击《I2C总线协议学习笔记》。
OPT3001模块硬件连接如下图所示:
一般的,OPT3001传感器实现I2C通信流程如下:
OPT3001通过两个引脚连接到总线:SCL时钟输入引脚和SDA开漏双向数据引脚。总线必须由主设备控制,主设备生成串行时钟(SCL),控制总线访问,并生成启动和停止条件。为了寻址特定器件,主器件通过在SCL为高电平时将数据信号线(SDA)从高逻辑电平拉至低逻辑电平来启动启动条件。总线上的所有从器件都在SCL上升沿的从器件地址字节中移位,最后一位指示是否需要读取或写入操作。在第9个时钟脉冲期间,被寻址的从机通过拉低SDA产生应答位来响应主机。
然后启动数据传输并发送8位数据,然后发送应答位。在数据传输期间,SDA必须保持稳定,同时SCL为高电平。当SCL为高电平时,SDA的任何变化都被解释为启动或停止条件。当所有数据都被传输时,主机产生停止条件,通过在SCL为高电平时将SDA从低电平拉至高电平来指示。
I2C写操作时序图
I2C读操作时序图
如上图所示,数据传送时,1个字节8位数据,后面跟一个应答位。所以,一桢有9位。
SCL是时钟,SDA承载的是数据。当SDA从1变动到0,而SCL还是1时,表示开始数据传输。接下来的7位,就是设备的地址。紧接着的是读写标志,其为1时是读取,为0则是写。如果I2C总线上存在着和请求的地址相对应的设备,则从设备会发送一个ACK信号通知主设备,可以发送数据了。接到ACK信号后,主设备则发送一个8位的数据。当传输完毕之后,SCL保持为1,SDA从0变换到1时,标明传输结束。
从这个时序图中可以看到,SCL很重要,并且哪个时钟沿是干嘛的,都是确定好的。比如,前面7个必定是地址,第8个是读写标志,数据传输必须是8位,必须接个ACK信号等等。
本项目是一个基于zigbee CC2530的照度计,传感器使用的是TI的OPT3001,开发环境是IAR Embedded Workbench。关于IAR开发环境的搭建可参考《Zigbee开发平台的构建》及《IAR集成开发环境入门》。
这里采用的是普通IO口模拟实现I2C通信,其中ZigBee-CC2530开发板作为主设备,OPT3001模块作为从设备。
对于I2C总线,这里就不多阐述了,有兴趣的可点击《I2C总线协议学习笔记》。
OPT3001模块硬件连接如下图所示:
一般的,OPT3001传感器实现I2C通信流程如下:
OPT3001通过两个引脚连接到总线:SCL时钟输入引脚和SDA开漏双向数据引脚。总线必须由主设备控制,主设备生成串行时钟(SCL),控制总线访问,并生成启动和停止条件。为了寻址特定器件,主器件通过在SCL为高电平时将数据信号线(SDA)从高逻辑电平拉至低逻辑电平来启动启动条件。总线上的所有从器件都在SCL上升沿的从器件地址字节中移位,最后一位指示是否需要读取或写入操作。在第9个时钟脉冲期间,被寻址的从机通过拉低SDA产生应答位来响应主机。
然后启动数据传输并发送8位数据,然后发送应答位。在数据传输期间,SDA必须保持稳定,同时SCL为高电平。当SCL为高电平时,SDA的任何变化都被解释为启动或停止条件。当所有数据都被传输时,主机产生停止条件,通过在SCL为高电平时将SDA从低电平拉至高电平来指示。
I2C写操作时序图
I2C读操作时序图
如上图所示,数据传送时,1个字节8位数据,后面跟一个应答位。所以,一桢有9位。
SCL是时钟,SDA承载的是数据。当SDA从1变动到0,而SCL还是1时,表示开始数据传输。接下来的7位,就是设备的地址。紧接着的是读写标志,其为1时是读取,为0则是写。如果I2C总线上存在着和请求的地址相对应的设备,则从设备会发送一个ACK信号通知主设备,可以发送数据了。接到ACK信号后,主设备则发送一个8位的数据。当传输完毕之后,SCL保持为1,SDA从0变换到1时,标明传输结束。
从这个时序图中可以看到,SCL很重要,并且哪个时钟沿是干嘛的,都是确定好的。比如,前面7个必定是地址,第8个是读写标志,数据传输必须是8位,必须接个ACK信号等等。
举报