I2C
来源:互联网 发布:破解版软件大全 编辑:程序博客网 时间:2024/06/04 20:02
I2C总线上所有外闱器件都有规范的器件地址,器件地址由7位组成,它和1位方向位(R/W)构成了I2C总线器件的寻址字节SLA,格式如下:
器件地址(A7,A6,A5,A4)是I2C总线外围接口器件同有的地址编码(4位或5位),器件出厂时已固化好。
地址的规则为:1010+(A0)(A1)(A2)(R/W)
最后一位(R/W)是写保护引脚——接高电平时只能对该器件进行读操作((R/W)=1),低电平时为写操作((R/W)=0).
问:IIC总线上的器件都是只通过SCL和SDA这两条线连接到IIC总线上的吗?
答:是的
问:IIC上的每个器件都要一个地址寄存器来确定自己的地址吗?
答:不一定,很多器件都是通过硬件来确定地址的。
有的在出厂时地址就设置好了,用户不可以更改;
有的确定了几位,剩下几位由硬件确定(比如有三位由用户确定,就留有3个控制地址的引脚),此类较多;
还有的有地址寄存器。
问:”如果主机向从机发送地址,从机怎么知道这个地址就是主机的,这个地址是怎么计算出来的”
答:严格讲,主机不是向从机发送地址,而是主机往总线上发送地址(这个地址是某个从机的,而不是主机的,所以不存在“从机怎么知道这个地址就是主机的”的问题),所有的从机都能接收到主机发出的地址,然后每个从机都将主机发出的地址与自己的地址比较,如果匹配上了,这个从机就会向主机发出一个响应信号。主机收到响应信号后,开始向总线上发送数据,与这个从机的通讯就建立起来了。如果主机没有收到响应信号,则表示寻址失败。
“比如IIC总线上接了两块单片机,一块是主机,另一块是从机,如何定义从机的这个地址”
如果是带IIC的单片机,会有地址寄存器,寄存器里的值即为它作为从机时的地址。
以ATmega48为例,有TWI从机地址寄存器—TWAR,先要确定工作模式(主机模式或从机模式),若工作在从机模式,,TWI将根据这个地址进行响应。
如果是不带IIC的单片机,没有地址寄存器。所以一般不用做从机。以AT89C51为例,用它的普通IO口模拟IIC时序时,一般都是用作主机。特殊情况下51用作从机时,可以通过扫描总线的方式,若发现总线上出现某个地址信号便响应(严格来说,这种方式只是在IIC基础上z用户定义的通信方式)。
最常见的情况,如前面所说,主从器件的角色是确定的,也就是说从机一直工作在从机模式。它的地址确定方法我已经说过了。不同的器件定义地址的方式是不同的,有的是软件定义,有的是硬件定义。你找个数据手册看看就明白了,纸上谈兵很难说清楚
- I2C
- I2C
- i2c
- I2C
- I2C
- i2c
- i2c
- I2C
- I2C
- I2c
- I2C
- I2C
- I2C
- I2C
- I2C
- i2c
- I2C
- i2c
- coredata 小结
- 视差动画引导界面
- alter database datafile offline 和offline drop的区别
- liunx源码 makefile详细分析
- android中Thread对于Adapter出现的报错情况的处理以及如何正确使用Spinner与SimpleCurosorAdapter
- I2C
- Js获取当前日期时间及其它操作
- Unity3D SpuerSocket 网络聊天室实现 <一>
- android RecylerView需要注意的问题
- ice和java socket网络传输的对比
- springmvc+easyui实现界面控制quartz的暂停、恢复、修改、添加
- JS组装 HTML片段 列表 ul li
- jQuery.fileDownload.js successCallback方法失效的问题
- 实现jqgrid表格数据上下滚动