CAT9555 16路 I2C GPIO 扩展模块
I 产品简介
CAT9555 是一款 16 位并行 GPIO 端口扩展芯片,支持 I2C 和 SMBus 接口,带有低电平有效中断输出。
本产品为需要扩展 I/O 的应用提供 16 位并行输入/输出端口,例如传感器、电源开关、LED、按键、风扇等。
模块核心芯片 CAT9555 包含两个 8 位配置端口(输入或输出)、输入寄存器、输出寄存器、极性反转寄存器,以及兼容 I2C/SMBus 的串行接口。通过写入配置寄存器,16 个 I/O 均可配置为输入或输出;主机可通过写入极性反转寄存器使输入数据反向。CAT9555 提供一个低电平有效的中断输出信号,当输入状态改变时通知系统主机。模块具有 3 个地址选择脚,可实现最多 8 个设备共享同一 I2C 总线。
II 产品特性
• 支持 400 kHz I2C 总线
• 低待机电流
• 5.0V 容忍 I/O
• I/O 具备高驱动能力
• 极性反转寄存器
• 低电平有效中断输出
• 内置上电复位
III 产品参数
| 参数 | 规格 |
|---|---|
| 外形尺寸 | 45mm(长) × 25mm(宽) |
| I/O 端口数量 | 16 |
| 控制芯片 | CAT9555 |
| 信号接口 | I2C |
| 工作电压 | 3.3V / 5V |
IV 使用说明
4.1 硬件接口配置
4.1.1 Raspberry Pi 接线
例程使用 wiringPi 编号方式,对应引脚定义如下:
| 接口 | 功能 | BCM | wiringPi | BOARD |
|---|---|---|---|---|
| VCC | 3.3V | 3.3V | 3.3V | 1 |
| GND | GND | GND | GND | 6 |
| SDA | SDA.1 | 2 | 8 | 3 |
| SCL | SCL.1 | 3 | 9 | 5 |
| INT | GPIO.7 | 4 | 7 | 7 |
(表 4-1:模块与 Raspberry Pi 接线定义)
4.1.2 Arduino 接线说明
| CAT9555 IO 扩展模块 | Arduino UNO R3 |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | SDA (A4) |
| SCL | SCL (A5) |
| INT | D2 |
(表 4-2:模块与 Arduino UNO R3 接线定义)
4.1.3 STM32 接线说明
| CAT9555 IO 扩展模块 | STM32F103 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | PB10 |
| SCL | PB11 |
| INT | PB3 |
(表 4-3:模块与 STM32F103 接线定义)
4.1.4 I2C 地址配置
当主机在 I2C 总线发送 START 条件后,需要发送包含从机地址的字节来激活 CAT9555 的读写。
从机地址高 4 位固定为二进制 0100。
CAT9555 使用 A2/A1/A0 用于地址扩展,使得同一总线最多可挂 8 个设备。

从机地址字节第 8 位为 R/W 位:
-
1 = 读
-
0 = 写
若板载 DIP 拨到 “ON”,该位为 0;拨到另一边则为 1。
| I2C 地址位 | DIP = ON | DIP = OFF |
|---|---|---|
| A0 | 0 | 1 |
| A1 | 0 | 1 |
| A2 | 0 | 1 |
(表 4-4:A0~A2 地址位定义)
4.2 软件使用说明
4.2.1 Raspberry Pi 示例
4.2.1.1 安装 wiringPi
|
sudo apt-get install wiringpi wget https://project-downloads.drogon.net/wiringpi-latest.deb # Raspberry Pi 4B version upgrade sudo dpkg -i wiringpi-latest.deb gpio -v # |
若显示 2.52 即安装成功。
Bullseye 系统使用以下方式:
|
git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build gpio -v |
运行 “gpio -v” 将显示版本 2.70。如果没有显示,则表示安装错误。
如果在运行示例程序的 Python 版本时收到 “ImportError: No module named 'wiringpi'” 错误,请执行以下命令:
针对 Python 2.x 版本:
| pip install wiringpi |
对于Python 3.x版本:
| pip3 install wiringpi |
注意:若安装失败,可尝试以下编译安装方法:
| git clone --recursive https://github.com/WiringPi/WiringPi-Python.git |
注意:--recursive 选项会自动获取子模块;否则,你需要手动下载它们。
导航到已下载的 WiringPi-Python 文件夹并运行以下命令进行编译和安装:
适用于 Python 2.x 版本:
| sudo python setup.py install |
适用于 Python 3.x 版本:
| sudo python3 setup.py install |
如果你遇到以下错误:
此时,输入命令“sudo apt install swig”来安装 SWIG。安装完成后,继续输入命令“sudo python3 setup.py install”进行编译和安装。如果你看到如下所示的类似信息,说明安装成功。
4.2.1.2 Raspberry Pi I2C 配置
启动树莓派系统配置:
| sudo raspi-config |
启用I2C接口:
| Interfacing Options -> I2C -> Yes |
重启设备:
| sudo reboot |
查看已启用的I2C设备:
| ls /dev/i2c* # Output: "/dev/i2c-1" |
安装I2C工具:
| sudo apt install i2c-tools |
安装Python的smbus:
| sudo apt install python-smbus |
按照表4-1和图4-1的布线定义连接模块后,使用以下命令检测I2C总线上已安装的设备地址:
| sudo i2cdetect -y -a 1 |
4.2.1.3 C 语言示例
导航至示例目录:
| cd /home/pi/cat9555/c sudo make clean sudo make sudo ./main |
4.2.1.4 Python版本示例
导航至示例目录:
| python3 cat9555.py |
示例中,P0被配置为输出端口,P1被配置为输入端口。P0每秒切换一次其IO状态。当P1的输入状态发生变化时,串行端口将输出P1的当前状态。
4.2.2 Arduino UNO R3的示例使用
安装 Arduino IDE 软件后,按照表 4-2 和图 4-2 中的接线定义连接模块。双击演示示例程序中的 cat9555.ino 文件。依次点击“验证”和“上传”按钮。然后打开“工具”->“串口监视器”以查看 P1 的输入状态。
在此示例中,P0 配置为输出,P1 配置为输入。P0 每 1 秒切换一次其 IO 状态。当 P1 的输入状态发生变化时,串口将输出 P1 的当前状态。
4.2.3 STM32的示例用法
该示例基于 STM32F103CBT6 微控制器。按照表 4-3 中的接线定义连接模块。如果您希望查看 P1 的输入状态,请将 STM32 的 UART1 端口(3.3V TTL 电平)连接到电脑。PA9 是数据发送引脚,PA10 是数据接收引脚。
示例程序使用 Keil uVision5 编写。您需要提前安装该软件。连接好线路后,双击位于 demo codes/STM32/USER/ 路径下的项目文件 main.uvprojx。点击“Build”按钮进行编译。编译成功后,点击“LOAD”按钮将编译好的可执行文件下载到 STM32。下载方法及对应下载器需用户自行配置。
该示例的行为与 Raspberry Pi 和 Arduino UNO R3 相同。P0 每 1 秒切换一次 IO 状态,P1 配置为输入。
V 附录
5.1 注意事项与维护
• 禁止带电插拔
• 保持干燥,如遇液体应断电并晾干
• 确保使用环境通风良好
• 禁止在粉尘、油污环境中使用
• 避免剧烈温差,防止结露
• 禁止跌落、敲击、震动
• 不得使用腐蚀性溶剂清洁
• 故障请联系售后,不得擅自拆修
