时光荏苒..
全部博文(453)
分类: LINUX
2012-03-12 15:28:10
概述
IIC总线信号:为两线,双向传输的数据线SDA、双向传输的时钟线SCL。是信号线最少的串行总线。总线标准速度为100kbps,高速传输速度为400kbps,可以以查询和中断方式工作。有四种操作模式:主机发送模式、主机接收模式、从机发送模式、从机接收模式。
工作原理
I2C总线通过SDA和SCL线的配合来产生传输中的信号。如SCL为高电平、SDA由高变低来产生传输的起始信号。SCL为高电平、SDA由低变高来产生传输的结束信号。地址信号占7位,与读写控制信号组成一个字节。如下图:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D1 |
D3 | D2 | D1 | D0 | A2 | A1 | A0 | R/ W |
器件地址(D0~D3):是I2C设备固有的地址编码,有器件生产厂家给定。
引脚地址(A0~A2):有器件的A0~A2引脚电位的高低决定,高电平为1,低电平为0。
传输格式如下:
ST | SAD+W | SAK | DATA | SAK | SP |
ST | SAD+R | SAK | DATA | SAK | SP |
首先主机发出起始信号,然后在总线上发送从机的地址(占7位)和读写控制信号(1为读,0为写)组成的一个字节。对应该地址的从机将会相应并向主机发送ACK信号。接着主机就会向从机发送数据。最后接收到停止信号终止传输。
如上为i2c总线进行传输和接收的一般原理,针对不同的芯片有不同的i2c总线控制器和寄存器组。
PCA9555 –带中断的16位I2C和SMbus I/O口概述
PCA9555为24脚的CMOS器件,提供了I2C/SMbus的应用中的16位通用并行输入输出口(GPIO)的扩展。可以利用这些I/O口来连接传感器、按钮、LED风扇等。
PCA9555包括两个8位配置寄存器、输入寄存器、输出寄存器和极性反转寄存器。系统主控器通过写I/O口相应的配置为来激活端口的输入或输出。每个输入或输出口的数据都保存在相应的输入/输出寄存器中。读寄存器操作的极性根据反转寄存器的内容而反转。
PCA9555有3个管脚(A0,A1,A2)来实现不同的固定的I2C地址。最多允许8个器件共用I2C/SMbus总线。器件地址为0100
工作原理command bytes
command | register |
0 | input prot 0 |
1 | input prot 1 |
2 | output port 0 |
3 | output port 1 |
4 | polarity port 0 |
5 | polarity port 1 |
6 | configuration port 0 |
7 | configuration port 1 |
为了使系统主控器能够读写PCA9555的各个端口。定义了如上的命令字节。在系统主控器发送地址和读写操作的字节后将会发送该命令字节,来决定PCA9555中的哪个寄存器将会被读写。如写数据到输出寄存器,其传输格式如下:
s | 0 | 1 | 0 | 0 | A2 | A1 | A0 | 0 | A | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | A | DATA | A | DATA | A | P |
首先我们通过发送命令字节6或7来配置端口的输入输出功能,然后再对端口进行读写。
因此,Button和LED的工作原理就是通过i2c对其扩展芯片PCA9555的相应端口的读写来控制的。