PCA9555是一个16 bit 的I2C bus的Expander。
A2,A1,A0是地址位;SCL/SDA 是来自Master的I2C data线和CLK线,VDD是PWR,VSS是参考地,SDA经过I2C Control判定为是读还是写,如果是写,将port配置成output,则将2字节的data经过串并转换依次成8bit的并行数据输出。如果是读,则将port配置成input。
数据经过I2C Contorl,判定为读写后,如果为写,则数据经过移位寄存器(shift Register),串行输入并行输出至相应的寄存器,后经过output port数据输出。如果为读,则反之。
寄存器一共有四种,分别为 input port Register、output port Register、Configuration Register、Polarity inversion Register。每一种寄存器有两个为一对,第一个8bit数据如果进入Regiser0,则下一个8bit则进入Register1。
如何判定是读还是写呢?又如何选定寄存器呢?
Writing: data由master-->slave,可写入output port Registers、configuration port registers.
如上图所示,会有一个起始位,之后7Bit为地址位,地址位中,高四位默认为0100,后三位通过外部上下拉确定,第八位为读写位,如果是0则为写,如果是1则为读,之后则会跟一位应答位,再后面八位判定是写进哪个寄存器 ,后面应答位,之后数据位,不论是地址byte还是command byte还是data byte,其后面都要跟一位来自slave的应答位,告诉master这个byte已经接收到,可以传输下一个byte了。
Read:data由slave-->master,可从input port register读取数据.
第一个8bit:slave Address+读写位(读为1);
来自slave 应答位;
第2个8bit:Command byte,用于判断写入哪个寄存器;
来自slave应答位;
第3个8bit:重复地址位+读写位
来自slave应答;
后面一次8bit数据位+来自master应答;
寄存器的选取?
通过command byte确定数据到达哪个寄存器,如下图所示
00000000即input port 0 Register;00000010即output port 0 Register,以此类推。
Pin Description
INT:open-drain(OD)需要外部一个特定的上拉;
A2/A1/A0:固定的上下拉表示不同的地址位;
VDD:2.3V-5.5V.
Application design-in :
IO_1_0/IO_1_1/IO_1_2通过外部特定的上下来来确定主板上通过PCIE接的是什么类型的Riser;
A 2/A1/A0通过外部固定的上下拉确定地址位000;
SDA/SCL是一组来自FPGA的I2C,通过IO EXP读取Riser的类型,Wake信号,接在Riser上的PCIe卡的在位信号 等;
INT因为OD,必须有一个外部上拉,同时接入了DC Monitor,产生中断。