ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

I²C 的线谁来拉高?看懂开漏与上拉电阻

I²C 的线谁来拉高?看懂开漏与上拉电阻 I²C 的线谁来拉高看懂开漏与上拉电阻本文为教学接线与设计预期尚无实物测量记录使用 NUCLEO-F030R8。问题两颗芯片共用一根数据线单片机放开它电压为什么还能自己回到高电平并不是 EEPROM 主动往线上推三点三伏。本例用一颗真实的二十四 LC 二五六存储芯片只讲清一件事谁负责拉低谁负责让线路回高。物件动作把数据线想成一根绳子小熊和仓库员各拿一个向下拉的把手旁边还有一根向上拉的橡皮筋。小熊放手、仓库员也放手橡皮筋把绳子抬高只要其中一人把手向下拉绳子就低。真实连接回到电路NUCLEO 开发板 D十四也就是 PB九接 EEPROM 五脚数据线D十五也就是 PB八接六脚时钟线。数据线和时钟线各经四点七千欧电阻接三点三伏。EEPROM 八脚接三点三伏、四脚共地地址三脚都接地七脚写保护接三点三伏。原因与结果数据线上主机和存储芯片的输出级只会拉低或放开。双方都放开时上拉电阻把线带回高电平任一方拉低线上就是低。时钟线也需要上拉。给本例零地址器件发地址时主机先发问再放开数据线器件若应答就在应答位把线拉低。验证用逻辑分析仪接数据线、时钟线和公共地。设计预期空闲时两线接近三点三伏主机寻址后数据线在应答位出现低电平。四点七千欧在三点三伏下被拉低时单线电阻电流上界约零点七毫安。边界开漏解决的是共享总线不互相硬推高低不保证任何电阻值都适合。电阻太大上升沿可能慢太小拉低时电流增加。线长、器件数量和速度都要核对。图中电压、电流和应答波形是计算与设计预期没有冒充已经完成的实物测量。先看清楚一条共享线为何不会互相打架如果单片机把 SDA 强推成高电平同时 EEPROM 把同一线强拉到低电平电流就会在两个输出级之间冲突。I²C 的开漏输出不这样工作输出级要么把总线拉低要么放开。放开不是主动输出 3.3 V外接上拉电阻才把电位缓慢抬回电源电压。于是主机放开、从机拉低时线上仍是低主从都放开线上才是高。这种共享线上‘任意一方拉低即低’的行为常称线与本例用真器件而不是空泛方框说明。时钟 SCL 也经上拉电阻到 3.3 V本例由主机产生节拍不演示多主仲裁或从机时钟延展。不能把图上的 SCL 当作 EEPROM 的供电线也不能因为两根线最后都通向 3.3 V 就把它们直接短在一起。两只电阻分别接到各自信号节点中间隔着器件输出级。这颗 EEPROM 的引脚到底怎么接本例选 Microchip 24LC256 SOIC-8与 NUCLEO-F030R8 共用 3.3 V 电源域。官方 SOIC-8 引脚表给出 1A0、2A1、3A2、4VSS、5SDA、6SCL、7WP、8VCC。STM32 开发板 UM1724 表中 D15 对应 PB8/I2C1_SCLD14 对应 PB9/I2C1_SDA图中的时钟和数据不能对调。D15 接 6 脚D14 接 5 脚8 脚接 3.3 V4 脚与板卡共地并在芯片电源附近把 100 nF 电容跨接 8 脚与 4 脚。SCL 与 SDA 各自通过一只 4.7 kΩ 电阻上拉到 3.3 V这是短跳线、教学速度下的示例值实际要按总线电容、低电平电流和上升时间重新校核。A0、A1、A2 接地形成 7 位地址 0x50。WP 接高使本例保持写保护读取仍可进行不要让地址脚或写保护脚悬空。24LC256 官方供电范围为 2.55.5 V但这块 STM32 开发板的 I/O 使用 3.3 V本例不会因为 EEPROM 能承受 5 V就把两条总线上拉到 5 V。从一位应答看出谁在拉线空闲时主机和 EEPROM 都放开 SDA/SCL两只电阻分别把它们拉高。主机按 I²C 时序在 SCL 节拍下送出地址再放开 SDA 给从机应答若地址匹配、器件有电且接线正确从机在应答位把 SDA 拉低主机采到低电平。此时并非 EEPROM 在与主机的高电平‘对顶’主机已放开输出级电流只是从 3.3 V 经上拉电阻流向拉低总线的器件。假设忽略输出低电平压降单根 4.7 kΩ 电阻被拉低时电流上界按欧姆定律为 3.3/4700 A约 0.70 mA。实际低电平不一定恰好为零电阻和电源也有容差它不是本项目量得的电流。电阻过小会增加拉低电流过大会拉长上升时间同一组数值不能在长线或大量器件上不加计算地复用。一步步验证而不是拿地址扫描当万用答案断电后按芯片缺口定位 SOIC-8 的顶视脚号逐线核对电源、地、D15→SCL、D14→SDA 和两只分别存在的上拉电阻。上电后先用万用表确认芯片 VCC 对 VSS 的电压再用逻辑分析仪同时看 SDA/SCL 对共同地空闲时两线应靠近高电平寻址时出现低脉冲器件应答位的 SDA 低电平应在主机释放该线后出现。逻辑分析仪如果只接信号不接公共地解码可能失真。若两线一直低先查短路、脚位和哪个器件持续拉低若一直高却没有应答核对地址脚、供电、D14/D15 是否对调、I²C 外设配置和采样时序。若拔掉上拉线后仍偶尔读到高不可称电路正常浮动输入会受寄生电容和噪声影响。本文没有实物波形与电流记录图示和数值仅是设计预期与可复算结果。边界与迁移开漏不是‘只能传零不能传一’通过释放并由电阻拉高线上照样能形成高电平。它也不是自动保证通信成功总线时钟、上升沿、地址、供电与各器件时序都必须匹配。换成另一颗 EEPROM、传感器或更长线束时要重新查引脚和供电范围并核算电阻。这个只读、写保护示例不展示 EEPROM 擦写寿命也不会把地址应答误报为数据内容已经通过验证。逐线接线清单CN5 D15/PB8 I2C1_SCL → 24LC256 SOIC-8 pin 6 SCL时钟线CN5 D14/PB9 I2C1_SDA → 24LC256 SOIC-8 pin 5 SDA双向数据线CN6 3.3V → 24LC256 pin 8 VCC3.3 V 供电CN6 GND → 24LC256 pin 4 VSS公共地CN6 3.3V → 4.7 kΩ 到 SCL、另 4.7 kΩ 到 SDA两根线分别上拉24LC256 pin 1 A0、pin 2 A1、pin 3 A2 → CN6 GND本例零地址选择24LC256 pin 7 WP → CN6 3.3V禁止写入允许读取24LC256 pin 8 VCC → 100 nF 到 pin 4 VSS就近去耦逻辑分析仪 SDA、SCL、地 → 两根对应总线与 CN6 GND观察设计波形计算与实施边界Microchip 24LC256 SOIC-8 引脚为 1 A0、2 A1、3 A2、4 VSS、5 SDA、6 SCL、7 WP、8 VCC24LC256 电源范围 2.55.5 V本例 3.3 V、短跳线、100 kHz、每线 4.7 kΩ 上拉为教学选型实际须按总线电容和器件吸电流核查3.3 V/4700 Ω≈0.70 mA 是忽略低电平压降的单根上拉支路电流上界非实测地址脚全接地时的 7 位器件地址为 0x50WP 拉高禁止写入不影响读取不以读取空白内容猜测是否已写入数据这些参数和数值是本例选择或可复算计算实际测量前应先检查电源极性、公共地、元件额定值、仪器探头连接。完整可运行的核心算例与验收以下 C11 程序可在电脑上用 C 编译器单独编译运行用来复算状态或数值它不是已配置 GPIO、ADC、定时器和驱动的开发板固件。移植到实板时应按前述接线配置外设、检查读取错误并另做实测。#includestdbool.h#includestdio.hstaticboolbus_low(bool mcu_pulls_low,bool eeprom_pulls_low){returnmcu_pulls_low||eeprom_pulls_low;}intmain(void){constdoublevolts3.3,pullup_ohms4700.0;printf(both release: %s\n,bus_low(false,false)?LOW:HIGH);printf(EEPROM ACK: %s\n,bus_low(false,true)?LOW:HIGH);printf(pull-up current upper bound: %.3f mA\n,1000.0*volts/pullup_ohms);return0;}验收时同时记录输入、关键节点电压或波形、程序输出若发现传感器通信失败、输入超出允许范围或波形明显异常应停止并排查。官方资料https://www.st.com/resource/en/user_manual/um1724-.pdfhttps://www.st.com/resource/en/reference_manual/dm00091010.pdfhttps://ww1.microchip.com/downloads/en/DeviceDoc/21203R.pdf
返回列表