GPIO 推挽、开漏和高阻态在电气上有什么区别?
推挽能主动拉高和拉低,边沿快但不适合多器件直接线与;开漏只主动拉低,高电平由上拉产生,可实现线与和电平转换;输入高阻几乎不驱动线路,但悬空时容易受噪声影响。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
推挽能主动拉高和拉低,边沿快但不适合多器件直接线与;开漏只主动拉低,高电平由上拉产生,可实现线与和电平转换;输入高阻几乎不驱动线路,但悬空时容易受噪声影响。
SDA/SCL 为开漏线与,主机发送高电平时会释放 SDA 并同时采样;若期望高却读到低,说明另一主机发送了占优的低电平,当前主机失去仲裁并停止驱动。时钟同步同样由低电平占优协调快慢主机。
典型寄存器读取先以写方向发送寄存器地址,再不释放总线地发送重复起始并切到读方向。这样保持一次原子事务,避免 STOP 后器件状态变化或其他主机插入。最后一个接收字节通常由主机 NACK 并 STOP。
从机可在允许的阶段保持 SCL 为低,推迟主机下一位时钟,因此主机设定频率并不等于实际传输始终按该速率进行。控制器必须支持拉伸,并设置有上限的超时与恢复策略。
总线首字节由 7 位从机地址和最低位读写方向组成;不同控制器 API 有的接收纯 7 位地址,有的要求已放到首字节位置。必须按 API 契约传参,不能把数据手册的读写地址和 7 位地址混用。
CPU、总线和外设时钟由时钟树分频而来,目标频率受电压范围、PLL 输入输出、总线最大频率和 Flash 访问速度约束。切换高频前通常先配置电源档位和等待周期,降频则按安全逆序。