Skip to content

PCF8574 IO 扩展器 ​

PCF8574 通过共享 I2C 总线提供 8 路逻辑数字输入/输出。先确认当前固件编译了 IO 扩展器能力,并在功能配置启用「通用 IO 扩展器」(ioExpander);编译能力、功能启用和驱动初始化是三个独立状态。

功能启用顺序 ​

功能开关出厂默认关闭,重启后应用:保存只改变用户意图,bootEnabled 表示本次启动的取值;看到 pendingRestart 时先保存并重启,再检查实际 active 状态。运行中重新加载配置、保存失败回滚或恢复默认均不会提前应用开关。配置可在功能停用时保留和编辑;实际使用同时受「固件已编译、用户已启用、运行内存预算允许」约束,内存预算拒绝时应查看功能状态,不能把保存成功当作硬件已运行。

外设启用顺序:先启用并保存共享 I2C 总线,再启用扩展器父设备,最后启用逻辑输入/输出子通道。被已启用外设引用的总线必须是启用的 I2C 主机(address=0)。

扩展器父设备 ​

配置项说明
类型type=55,driver="PCF8574"
地址0x20~0x27(JSON 使用十进制 32~39)
sampleInterval20~1000 ms
数量最多 4 个扩展器父设备

当前仅实现 PCF8574;PCF8574A 的 0x38~0x3F 地址不在该驱动支持范围内。

逻辑输入输出通道 ​

配置层字段和范围
逻辑输入type=11,ioSource=1,引用 providerId,channel=0~7,pins=[]
逻辑输出type=12,引用规则相同,initialState=0/1 定义软件启动状态
输入参数inputMode=0,可配置 debounceMs、invertLogic、reportMode
动作能力高、低、翻转和间隔不小于 200 ms 的低速闪烁;输入支持去抖及按键事件

同一父设备的每个通道只能有一个逻辑拥有者,停用条目仍保留通道占用。

PCF8574 为准双向端口:输入通过向对应位写 1 释放端口,没有 MCU 式可选上拉/下拉、ADC、PWM 或呼吸灯能力。当前实现不接芯片的 INT 引脚,只使用有界轮询;这些不支持的模式和动作会被拒绝。

芯片上电时端口为高。initialState 是固件初始化后的目标电平,无法消除固件启动前的电平窗口;需要无误动作的负载必须通过外部使能、驱动电路和硬件默认状态保证。单个通道停用或删除时恢复该通道配置的启动值,正常情况下不重置其他输出。

端口不能直接连接继电器线圈、电机、24 V 工业输入或市电负载;按实际电气需求增加输入整形/隔离或输出驱动。芯片的驱动能力、整板端子额定值及隔离能力不能互相替代。

共享总线规则 ​

  • PCF8574 要求 100 kHz;与其他传感器或显示设备共存时统一使用该频率。不同物理总线或频率不能靠新增逻辑总线条目混用。
  • 不要让另一个驱动擅自重新初始化同一 Wire。
  • 共享地址尤其需注意 LCD1602 转接板:它可能与 PCF8574 使用相同地址,其自动地址扫描模式还可能占用候选地址范围。扫描发现地址仅证明收到应答,不能证明芯片型号、接线或驱动完整可用。
  • 共享总线租约上限为 16,既有显示器等也会占用;该上限不是任意组合都能满足实时性和内存预算的保证。

总线引用使用 busPeripheralId,此时从设备的 pins 必须为空;独立接线模式则清空引用并给出两个不同的 SDA/SCL 引脚,不能同时填写两种形式。

状态、错误与恢复 ​

读取失败不是数值 0。Web/API 和规则必须区分「有效读数」「尚未采样」「过期/不可用」,同时查看采样时间、valid、stale 与错误原因;停用或失效的数据不得继续作为新鲜值参与展示或联动。

错误或状态处理方式
IO_EXPANDER_NOT_COMPILED / IO_EXPANDER_DISABLED / IO_EXPANDER_BUDGET_DENIED检查固件、功能开关及预算;IO 功能变更后确认重启应用
I2C_REFERENCE_INVALID / I2C_BUS_CONFLICT / I2C_ADDRESS_CONFLICT修正总线引用、启用顺序、接线/频率或地址冲突,再预检
IO_CHANNEL_CONFLICT / IO_CHANNEL_INVALID去除重复通道拥有者,使用通道 0~7 及普通数字输入/输出
IO_CONFIG_PENDING / IO_SAMPLE_UNAVAILABLE / IO_PROVIDER_UNAVAILABLE配置同步中或父设备未提供新鲜样本;等待状态恢复,持续出现时排查供电和总线
IO_WRITE_FAILED本次输出操作失败;检查父设备和各输出状态,不假定负载已切换

PCF8574 输入按整字节轮询。第一次真实读取失败就使当前样本失效;连续 3 次读取失败或一次结果不确定的写失败才进入输出恢复流程。恢复时重新应用各通道启动值并重建输入基线,避免断线/恢复产生伪按键。真实故障的重试间隔逐步增大至 2 s;总线暂忙与硬件故障分别处理。调度延迟造成样本过期时不会仅凭过期就重放输出启动值。

停用、删除或更新逻辑通道时,如果总线暂忙而无法确认旧通道已经按约定退出,父设备进入 IO_CONFIG_PENDING。退役完成前,同一父设备上的其他通道仍可运行,但原通道不能绑定给新外设;维护任务完成同步后才能重试该配置。这可避免新外设继承旧输出影子和错误电平。

现场验收 ​

最少选一个无 PSRAM 目标和另一个不同芯片家族目标,先单模块验证,再同总线共存,最后加入现有网络、规则、Web 和显示负载。以下项目未完成前保持「待验证」,不能用编译通过或主机测试代替实物结论。

检查项操作和通过条件
接线和预检记录模块/芯片、总线地址、SDA/SCL、上拉电平、电源与负载;预检无未处理冲突
配置恢复保存、重启、重新打开表单;引用、通道、启用状态与有效功能一致
IO 启动和隔离用可观察测试负载检查启动电平;逐通道高/低/翻转,其他通道不变化
IO 输入事件按下/释放、单击、抖动、长按及启动时按住;无重复事件或伪触发
IO 退出与恢复停用/删除输出恢复其配置启动值;断线/写失败显示未知;重连恢复启动值且无伪按键
规则链路输入翻转输出;配置变更立即使旧样本失效;按需验证已有平台物模型上报
共享总线传感器、IO、现有显示、扫描并发;没有重新初始化冲突、输出误改或长期饥饿
功能和预算开关、重启应用、内存预算拒绝、恢复;保留用户配置且状态能解释不可用原因
10 轮真实重启保存、重启、恢复配置循环,比较同一稳定点的堆、实例和引用;无持续资源下降
24 h 混合运行使用相同负载记录堆、最大连续块、执行/采样延迟、错误数和重连;无崩溃或持续资源增长
回退停用相关规则和外设,恢复配套旧配置/固件,确认原有功能与实际负载状态

相关文档 ​

蜂信物联 | fastbee.cn