文章目录
1 TCA9539 IO扩展芯片简介
1.1 IO扩展芯片的作用
- 当主控制器MCU的IO接口不够用,需要扩展出更多的IO接口,就需要用到扩展IO芯片。IO扩展芯片的选择也比较多,但原理、使用方法基本都一样。本文介绍2款IO扩展芯片:TCA6408-Q1和TCA9539-Q1, 两款芯片的原理的使用方法可以说完全相同,TCA6408芯片拥有8个IO扩展口,TCA9539芯片拥有16个IO扩展口,可以说是TCA6408的升级版。弄懂TCA9539芯片后,自然也就掌握了TCA6408芯片的使用方法,对其它TCA系列芯片的使用,也大致相同,因此本文介绍TCA9539的使用方法。
1.2 TCA9539-Q1 简介
- TCA9539-Q1是一款24引脚器件,支持I2C总线(或SMBus协议),提供16位通用并行输入和输出(I /O)扩展,工作电源电压(VCC )范围为1.65V至3.6V,并且支持100kHz(I2C标准模式)和400kHz(I2C快速模式)两种时钟频率。
- TCA9539-Q1通信I2C地址可以通过硬件引脚A0和A1配置,最多允许四个TCA9539-Q1器件位于同一I2C总线上。
- 当端口状态发生变化时,TCA9539-Q1可在 INT 引脚上生成中断,告知主控MCU芯片端口发生了改变。
- 可通过电源循环供电以生成上电复位,从而复位到默认状态;此外,TCA9539-Q1还具有一个硬件 RESET 引脚,可用于将器件复位为默认状态。
2 TCA9539 原理图介绍
2.1 TCA9539 原理图
- 如下图所示,为TCA9539芯片的原理图:
2.2 TCA9539管脚说明
- 各个管脚介绍如下表:
PIN | I/O | 描述 |
---|---|---|
INT | O | 中断引脚 |
A1/A0 | I | 硬件I2C地址输入引脚 |
RESET | I | 硬件 RESET 引脚 |
VCC | - | 电源输入引脚 |
GND | - | 电源地引脚 |
SCL | I | I2C时钟线 |
SDA | I | I2C数据线 |
P00 - P07 | I/O | IO扩展管脚 |
P10 - P17 | I/O | IO扩展管脚 |
2.3 TCA9539管脚详细描述
- 16个IO扩展管脚,由IO方向选择寄存器、输入端口寄存器、输出端口寄存器和极性反转(active-high或active-low)操作寄存器共8个8位寄存器控制。在上电时,I/O初始默认配置为输入,系统可以通过写入IO方向选择寄存器值来控制I/O管脚的输入或输出。
- 当配置为输入时,通过读取输入端口寄存器值,获取输入状态,因此输入端口寄存器可读不可写,没有默认值。读取的极性可以用极性反转寄存器进行反转。
- INT管脚可以连接到一个主控制器MCU的中断输入,当管脚配置成输入时,输入的状态与相应的输入端口寄存器状态不同时,开漏中断(INT)输出被激活,用于通知主控MCU输入状态已经改变,即发送一个中断信号,通知主控制器MCU输入状态发生了改变,主控MCU通过读取寄存器的值,即可判断具体那个端口发生了变化。
- 当配置为输出时,通过配置输出寄存器的值,控制输出管脚的拉高或者拉低。
- 在超时或其他不正确操作的情况下,主控制器MCU可以通过RESET输入重置芯片。开机复位后,寄存器置于默认状态并初始化I2C-SMBus状态机,在不断电的情况下通过RESET输入,可以达到重置初始化效果。
- 两个硬件引脚(A0和A1)用于编程和改变固定的I2C地址,并允许最多4个设备共享同一个I2C总线或SMBus。
3 TCA9539 寄存器介绍
3.1 I2C地址寄存器
上图为IO扩展芯片的I2C访问地址寄存器,高5位为默认值无法更改,最后1位为执行的操作(读或写),1:读操作,0:写操作。另外2位通过硬件连接Vcc或GND来控制,如上表所示,连接Vcc表示输入为H,连接GND表示输入为L。因此该芯片的I2C地址共有4个,也就是为什么同一路I2C最多可以允许4个设备。
3.2 控制寄存器和命令字节
- 在成功确认地址字节之后,总线主机发送上表所示的命令字节,即访问寄存器的地址,该命令字节存储在TCA9539-Q1的控制寄存器中,如上图所示,前5位位默认值,后3位可选,命令字节只在写传输期间发送。当一个命令字节被发送成功后,被寻址的寄存器可以继续被访问。
- 上表中POWER-UP DEFAULT展示了各寄存器的默认初始值,输入端口寄存器无初始值。
3.3 IO方向选择寄存器
- 寄存器Configuration Port 0(寄存器地址:0x06)和Configuration Port 1(寄存器地址:0x07)分别控制I0管脚P00-P07和P10-P17的方向,置1则为输入端口,置0为输出端口,默认为输入端口。
- 当端口为输入时,输出端口寄存器将不起作用;同样端口为输出时,输入端口寄存器和极性反转寄存器不起作用。
3.4 输入端口寄存器
- 当IO方向选择寄存器写1时,对应IO端口为高阻态输入管脚,此时通过读取输入端口寄存器的数值,判断输入信号的状态。
- 输入端口寄存器读取的极性高低值,与极性反转寄存器的配置的值有关,当极性反转寄存器端口写1,则进行极性反转,输入为高电平,读取的为0;当极性反转寄存器端口写0,极性不会反转,输入为高电平,读取值为1,输入低电平,读取为0。
- 当端口输入信号发生变化后,通过INT管脚向主控制器MCU发送一个中断信号,告诉端口输入有变化了,此时读取端口的值和原来读取的值进行比较,则知道那个端口输入发生了变化。
3.5 输出端口寄存器
- 当端口配置为输出时,端口寄存器的1或0则表示对应管脚的拉高或者拉低操作。
- 输出端口寄存器的默认值为1,即拉高状态。
3.6 极性反转寄存器
- 极性反转寄存器控制输入端口读取的值是否是输入极性的真实值,当极性反转寄存器端口写1,则将输入的极性进行反转。
- 极性反转寄存器默认值为1,即进行极性反转。
4 I2C通信过程
4.1 写操作
I2C通信的写操作步骤如上图所示:
- 首先主设备发送准备信号start,I2C上的所有从设备做好接收准备
- 接着主设备发出访问的从设备地址,发送1字节数据,前7位为访问地址,最后一位是将要进行操作,写操作该位为0。
- 被访问的从设备收到呼叫消息后,发出ACK应答,从设备接收到应答后,接着发出1字节数据,告知要写入的寄存器地址。
- 从设备收到寄存器地址后,同样做出ACK应答,主设备接收到应答后,发送要写入的数据,写入完成后从设备发出应答。
- 最后主设备发送通信结束信号STOP,通信结束。
4.2 读操作
I2C通信的读操作步骤如上图所示:
- 首先主设备发送准备信号start,I2C上的所有从设备做好接收准备
- 接着主设备发出访问的从设备地址,发送1字节数据,此时任然发送的写操作。
- 被访问的从设备收到呼叫消息后,发出ACK应答,从设备接收到应答后,接着发出1字节数据,告知要操作的寄存器地址。
- 从设备收到寄存器地址后,同样做出ACK应答,主设备接收到应答后,重新发出准备信号start,然后重新发送访问从设备地址,此时最后一位的操作位为1,表示读操作。
- 被访问的从设备收到消息后,发出ACK应答,主设备读取从设备寄存器中的1字节数据。
- 读取完成后,发送NACK应答消息,最后主设备发送通信结束信号STOP,通信结束。
备注:
- ACK应答和NACK应答即SDK数据线的高低状态,ACK : SDA = Low,NACK : SDA = High。
感谢阅读 若有错误 敬请见谅 !!!