驱动PCA9555扩展IO芯片

一、介绍

PCA9555是一款高性能、低功耗的I/O扩展芯片,具有以下主要特性和功能:

  1. 通用性:PCA9555是一款24引脚的CMOS器件,为I²C总线/SMBus应用提供16位通用并行输入/输出(GPIO)扩展。它旨在增强恩智浦半导体的I2C总线I/O扩展器系列,具有更高的驱动能力、5V I/O容差、更低的电源电流、独立的I/O配置和更小的封装。
  2. 配置灵活性:PCA9555由两个8位配置(输入或输出选择)组成,包括输入、输出和极性反转(高电平有效或低电平有效操作)寄存器。系统控制器可以通过写入I/O配置位来启用I/O作为输入或输出。每个输入或输出的数据保存在相应的输入或输出寄存器中。
  3. 兼容性:PCA9555的I/O端口可耐受5V电压,兼容大多数微控制器。它还具有400kHz的快速I2C总线,以及针对多达8个器件使用的3个硬件地址引脚寻址功能。此外,它还具有极性反转寄存器,允许用户根据需要配置每个通道的极性。
  4. 驱动能力:PCA9555具有最大高电流驱动能力的锁存输出,可用于直接驱动LED等外部设备。

        总之,PCA9555是一款功能强大、配置灵活且兼容性良好的I/O扩展芯片,适用于各种需要额外I/O的应用场景。

二、配置方法

1、配置地址位

        PCA9555是一款基于I²C总线的16位通用并行输入/输出(GPIO)扩展芯片。其配置地址的设置是通过I²C通信协议和特定的地址位来实现的。以下是关于PCA9555配置地址的详细说明: 

  1. 地址位:PCA9555的地址位由A2、A1和A0三个硬件引脚决定。这三个引脚通常被称为“地址引脚”或“寻址引脚”,用于设置PCA9555在I²C总线上的唯一地址。每个引脚都有两种状态(高电平或低电平),因此,通过组合这三个引脚的不同状态,最多可以连接8个PCA9555芯片到同一个I²C总线上,而不会产生地址冲突。
  2. I²C通信:PCA9555通过I²C总线与主控制器(如微处理器、微控制器等)进行通信。
  3. 地址格式:PCA9555的地址格式由8位组成。其中,前4位是固定的,后3位(A2、A1、A0)则是由PCA9555的地址引脚决定的,用于在同一I²C总线上区分不同的PCA9555芯片。
  4. 读写操作:地址的最后一位(也称为“读写位”或“R/W位”)用于指示接下来的操作是读操作还是写操作。当读写位为高电平时(通常为1),表示接下来的操作是读操作;当读写位为低电平时(通常为0),表示接下来的操作是写操作。

2、Command Byte寄存器

        PCA9555芯片提供了多种内部寄存器,用于配置和管理其GPIO(通用输入输出)端口的行为。以下是关于PCA9555芯片主要寄存器地址的说明:

  1. 输入寄存器 0x00、0x01(Input Register)
    • 功能:输入寄存器反映GPIO端口的当前输入状态。无论引脚被配置为输入还是输出,输入寄存器都会显示引脚的实际电平状态。
  2. 输出寄存器 0x02、0x03(Output Register)
    • 功能:输出寄存器控制GPIO端口的输出状态。当引脚被配置为输出时,写入输出寄存器将改变相应引脚的电平状态。
  3. 极性反转寄存器 0x02、0x03(Polarity Inversion Register)
    • 功能:极性反转寄存器允许用户配置每个GPIO引脚是否进行极性反转。例如,如果某个引脚被设置为极性反转,则高电平输入将被视为低电平,低电平输入将被视为高电平。
  4. 配置寄存器 0x06、0x07(Configuration Register)
    • 功能:配置寄存器用于设置每个GPIO引脚的工作模式(输入或输出)。

        要访问这些寄存器,主控制器(如微处理器或微控制器)需要通过I²C总线向PCA9555发送特定的命令和数据。命令通常包括PCA9555的I²C地址、要访问的寄存器地址以及读写位。数据则用于读取或写入寄存器的内容。

3、端口配置时序 

3.1、配置输入输出模式

        PCA9555在配置输入输出模式时,主要涉及到的是其配置寄存器0x06、0x07(Configuration Register)。这个寄存器允许用户为每个GPIO引脚设置其工作模式,即输入或输出。这里是配置的P00~P07的IO口。

  • Slave Address为PCA9555的通信地址。
  • Command Byte为需要访问的寄存器。
  • Data为需要设置的P00~P07端口的输入输出工作模式。
3.2、写入Write端口输出状态 

        在PCA9555中,设置P00~P07端口的电平状态通常是通过写入输出寄存器(Output Register)来实现的。

  • 单片机发送PCA9555的设备地址(包括由A2、A1、A0确定的地址位)以及一个写操作位(通常为0,表示写操作)。设备地址和写操作位一起构成了I²C地址字节。
  • 单片机接下来发送输出寄存器的地址。这个地址指定了要写入哪个输出寄存器(0x02对于P00~P07)。
  • 单片机现在发送要写入输出寄存器的数据。对于P00~P07,这通常是8位的数据,其中每一位对应一个GPIO引脚的电平状态(0为低电平,1为高电平)。
3.3、读取Read端口输入状态 

        在PCA9555中,读取P10~P17端口的电平状态通常是通过读取输入寄存器(Input Register)来实现的。

  • 单片机发送PCA9555的设备地址(包括由A2、A1、A0确定的地址位)以及一个写操作位(通常为0,表示写操作)。
  • 单片机接下来发送读取的寄存器地址。这个地址指定了要读取那个输入寄存器(0x01对于P10~P17)。
  • 单片机发送PCA9555的设备地址(包括由A2、A1、A0确定的地址位)以及一个读操作位(通常为1,表示读操作)。
  • 单片机接收寄存器的数据。这通常是一个8位的数据,其中每一位对应一个GPIO引脚的电平状态(0为低电平,1为高电平)。

三、代码示例 

//配置扩展IO芯片PCA9555的地址 	//0 1 0 0 A2 A1 A0
#define		PCA9555		0x40   	 	//0 1 0 0 0  0  0

//扩展IO芯片PCA9555 --> P00~P07读取IO口的电平
#define		PCA9555_Input_P0		0x00

//扩展IO芯片PCA9555 --> P10~P17读取IO口的电平
#define		PCA9555_Input_P1		0x01

//扩展IO芯片PCA9555 --> P00~P07设置IO口的高低电平
#define		PCA9555_Output_P0		0x02

//扩展IO芯片PCA9555 --> P10~P17设置IO口的高低电平
#define		PCA9555_Output_P1		0x03

//配置扩展IO芯片PCA9555 --> P00~P07的端口模式
#define		PCA9555_Config_P0		0x06

//配置扩展IO芯片PCA9555 --> P10~P17的端口模式
#define		PCA9555_Config_P1		0x07




	// 扩展IO芯片PCA9555的P00~P07设置为输出(0:输出 1:输入)
	uint8_t buff1[]={PCA9555_Config_P0,0x00};
	HAL_I2C_Master_Transmit(&hi2c1,PCA9555,buff1,sizeof(buff1),50);
	HAL_Delay(20);
	
	// 扩展IO芯片PCA9555的P10~P17设置为输入(0:输出 1:输入)
	uint8_t buff2[]={PCA9555_Config_P1,0xFF};
	HAL_I2C_Master_Transmit(&hi2c1,PCA9555,buff2,sizeof(buff2),50);
	HAL_Delay(20);

完整代码:https://download.csdn.net/download/qq_26043945/89305547

  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_755682240

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值