Chinaunix首页 | 论坛 | 博客
  • 博客访问: 910684
  • 博文数量: 453
  • 博客积分: 7865
  • 博客等级: 少将
  • 技术积分: 5673
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-29 16:21
个人简介

时光荏苒..

文章分类
文章存档

2015年(46)

2014年(22)

2013年(68)

2012年(218)

2011年(99)

分类: LINUX

2012-03-12 15:28:10

转自 陈兵的博客

image

上图为iMX233中了led和button部分的原理图,其中pca95555为接在i2c总线上的扩展芯片。

I2C BUS

 

概述

      IIC总线信号:为两线,双向传输的数据线SDA、双向传输的时钟线SCL。是信号线最少的串行总线。总线标准速度为100kbps,高速传输速度为400kbps,可以以查询和中断方式工作。有四种操作模式:主机发送模式、主机接收模式、从机发送模式、从机接收模式。

image

 

工作原理

image

       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的相应端口的读写来控制的。

 
 
 
 
 
 
 
 
阅读(1903) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~