ARTICLE DETAIL

资讯详情

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

USB转I2C总线扫描与100KHz速率测试及Excel登记表实战

USB转I2C总线扫描与100KHz速率测试及Excel登记表实战 做嵌入式这几年I2C这条两线总线可以说是又爱又恨——硬件上只要两根线就能挂一堆外设省IO省得很开心可真到了调板阶段总线扫不到设备、寄存器读回来全FF、从机偶尔不应答这类问题能把人折腾到怀疑人生。我最近用一套“USB转I2C Excel表格”的组合做了一次完整的总线扫描和通信验证把总线速率锁定在100KHz标准模式量了时序波形最后还把所有扫描结果和寄存器信息汇总成了Excel登记表。这个项目名字叫“USB TO I2C (Excel) Scan ---- 100KHz总线速率测试_A”别看名字平平无奇这套工具链就是排查I2C总线问题最高效的组合拳。这篇内容适合做硬件调试、嵌入式软件、产线测试的朋友尤其是那些拿着USB转I2C适配器却只会用现成GUI扫一下地址、遇到问题不知道从哪里下手的同学。我会把这个项目的设计思路、协议原理、实操步骤、波形测试数据、以及我踩过的几个坑完整拆开讲一遍内容包括硬件连接、扫描逻辑、Excel数据处理、100KHz速率测试方法、常见故障定位。全部都是可以直接照着做的内容。1. 项目拆解一个“USB转I2C Excel”工具链到底在解决什么问题1.1 为什么需要USB转I2C而不是直接用MCU点灯调试先说说我为什么折腾这套东西。以前调I2C设备最常用的办法是拿一个MCU开发板写个初始化代码然后通过串口把设备ID、寄存器值打印出来看。这个方法能用但效率低得感人每换一个从机就要改固件重新烧录代码里写死地址调试过程中改一个bit都得大动干戈更不用说在产线上做功能测试时根本不可能让工人去碰IDE。USB转I2C适配器解决的就是这个问题——它把PC的USB口变成一个可以自由收发I2C数据的通道上位机软件可以随时改变扫描范围、读写寄存器、调整总线速率完全不碰固件。这种“PC直接操控总线”的模式才是I2C调试该有的样子。具体到这个项目里我用的是USB转UART再通过固件比特翻转模拟I2Cbit-bang的方案底层芯片是FTDI系电脑端识别的就是虚拟串口。这套方案的好处是驱动成熟、跨平台兼容性好USB虚拟串口驱动装上之后上位机只需要按照串口协议下发命令适配器端用MCU模拟出I2C时序就行。另外市面上也有直接带硬件I2C控制器的方案比如CH341A这类芯片SPI和I2C都由硬件实现时序更稳、不依赖固件适合对波形时序要求更高的场景。两种方案我都用过调试阶段用bit-bang方案灵活性更好因为你能在固件里加打印、改时序参数做产线测试则建议用硬件I2C方案少一个变量。这里要特别说一句速率测试用bit-bang方案会有一定误差固件里每条指令翻转IO的耗时都会影响最终SCL频率。如果你想做严格的100KHz时序验证展示给客户或者写进测试报告最好用带硬件I2C控制器的适配器或者直接用示波器实测上位机配置的结果不要只看软件界面显示的数字。1.2 Excel在调试链路里的真实定位Excel在这个项目里不是花架子它承担了三个非常实际的功能地址登记、寄存器映射、测试数据归档。先说地址登记。一块主板上经常挂着五六个I2C从机有eMMC、触摸屏控制IC、温度传感器、EEPROM、电源管理芯片。这些芯片的7位地址各自不同如果你不把它们登记成一张表再过两个月回来看代码根本想不起来0x48是谁、0x50又是谁。更麻烦的是有些芯片支持地址引脚配置同一型号能通过A0/A1/A2引脚电平分成8个地址Excel登记表能帮你一眼看出哪些地址被占用了避免硬件上冲突。寄存器映射表也离不开Excel。复杂一点的传感器芯片寄存器动辄几十上百个每个寄存器还有读写属性、默认值、功能说明。芯片手册通常是PDF翻起来费劲用Excel按“寄存器地址—名称—读/写—默认值—描述”的格式整理成速查表调试时ControlF一下就能定位效率翻倍。最后是测试数据归档。100KHz速率测试测出来的SCL频率、高电平时间、低电平时间、上升沿这些波形参数直接记录到Excel里再附上截图说明就是一份能交付的测试报告。要是纯靠聊天记录和散落的截图管理这些数据后面想追溯就难了。我用Python脚本直接把扫描结果和测试数据写进Excel不用手动敲省掉了很多重复劳动。2. I2C协议基础与100KHz速率测试的原理2.1 I2C通信协议快速回顾从时序到ACK的完整链路要把速率测试做明白先得把I2C协议的基本时序捋一遍。I2C是两线制总线一条串行数据线SDA一条串行时钟线SCL两根线都是开漏结构外部必须有上拉电阻才能工作。通信由主机发起起始条件START是SCL为高电平时SDA从高到低跳变停止条件STOP则相反是SCL为高电平时SDA从低到高跳变。起始条件之后主机发送的第一个字节是地址字节高7位是从机地址最低位是读写方向位0表示写、1表示读。一个典型的写操作流程是——发送START → 发送地址写位 → 等待从机拉低SDA应答ACK→ 发送寄存器地址 → 等待ACK → 发送要写的数据 → 等待ACK → 发送STOP。读操作则略微复杂通常要先写寄存器地址然后发一个重复起始条件Repeated START再发送地址读位从机随后在时钟的驱动下把数据放到SDA上主机读取数据后若不再继续读则回NACK并发送STOP。ACK机制是整个I2C通信中最关键的判断依据。每一个字节传输完成后在第9个SCL时钟周期发送方释放SDA接收方需要在这期间把SDA拉低表示“我收到了”。如果总线上没有设备响应这个地址SDA会保持高电平主机读到的是NACK这就是Scan扫描功能判断设备是否存在的底层依据。时序参数上标准模式100KHz有一组硬性指标SCL高电平时间t_HIGH最小4.0μs低电平时间t_LOW最小4.7μs起始条件保持时间t_HD;STA最小4.0μs数据建立时间t_SU;DAT最小250ns数据保持时间t_HD;DAT最小0上升沿时间最大1000ns。这些参数都是NXP的I2C规范里定义好的你测波形时拿这些数值去对比就知道余量够不够。2.2 100KHz为什么是“默认起跑线”以及它真正的坑在哪很多刚接触I2C的人会有个直觉100KHz这么慢的速度怎么可能出错但实际上I2C的通信问题跟速率高低没有绝对关系100KHz模式下翻车的情况我见过太多了。频率低只代表每位数据的“时间段”足够长但不代表SCL/SDA的边沿质量好。决定波形质量的硬指标是上升时间tr规范要求标准模式tr_max为1000ns。如果PCB走线过长、总线挂载设备过多、上拉电阻选得太大SDA和SCL的上升沿就会变缓。上升沿太慢会导致器件在采样数据时电平还没稳定轻则偶发通信错误重则整个总线卡死。而且SDA/SCL同时为低超过一定时间在某些器件看来就是总线锁死状态很多I2C控制器会因此拒绝继续通信。100KHz标准模式还有一个常被忽略的问题——总线上所有从机的内部延时在低速下反而会被“放大”。举个例子某些EEPROM在写入期间内部忙会通过拉低SCL来暂停主机时钟这叫clock stretching。在400KHz快速模式下主机一般会设置较短的超时时间但在100KHz模式有的适配器固件根本没做clock stretching超时处理一旦从机拉长了SCL低电平时间适配器就傻在原地等表现为主机一直收不到数据总线看起来“死”了。这个问题在Scan扫描时尤其致命因为扫描会连续访问多个地址任何一个从机响应慢都可能拖垮整个扫描流程。后面我会专门讲怎么处理这个坑。另外100KHz之所以是调试中最常用的速率是因为它的兼容性最好——几乎所有I2C从机都声明支持标准模式而部分老芯片或长走线场景只支持100KHz。我一般建议先跑通100KHz把功能验证完再逐步提速到400KHz做压力测试。如果100KHz都跑不稳先别急着怀疑从机回头检查上拉和布线。2.3 速率测试到底测什么SCL频率只是表面时序余量才是核心速率测试听起来简单——把示波器夹在SCL引脚上读频率是不是100KHz。但真正专业的测试远不止这一步要从四个方面看第一是SCL实际频率。你配置的是100KHz实际固件算出来的可能是97KHz也可能是103KHz这取决于适配器的时钟源精度和固件翻转IO的指令周期。测量方法是示波器统计一个完整波形周期然后算出频率。频率超出规范允许的误差范围标准模式一般控制在±10%以内就得查固件配置。第二是SCL高电平和低电平的时间分配。理想状态下高电平4.0μs以上、低电平4.7μs以上。如果低电平时间不足从机可能来不及完成内部处理如果高电平时间不足从机采样窗口变短时序余量会跟着恶化。第三是上升沿和下降沿的时间。上升沿上面说了标准模式要求在1000ns以内。下降沿通常是开漏结构外部设备主动拉低速度快一般没问题但如果总线电容特别大下降沿也会变缓。测量上升沿时示波器探头要尽量靠近SCL引脚探头本身的寄生电容会影响测量结果的真实性有条件就上10x探头并做补偿。第四是数据建立保持时间。在100KHz模式下数据建立时间要求250ns以上你在SCL上升沿之前看SDA是否已经稳定。实际测量时我会固定看SDA在SCL上升沿前500ns处有没有完成跳变留足设计余量。这些数据每一项都要记录到Excel里和规范的限值做对比算出差值和余量。一次合格的速率测试报告至少要包含上面四个维度的数据光写一个“SCL100KHz”是交不了差的。3. 实操过程与核心环节实现3.1 硬件连接规范上拉电阻计算与电平匹配硬件连接是I2C调试中最容易出问题、也最容易被忽略的环节。I2C是开漏总线两根线必须有上拉电阻上拉阻值的选择直接影响波形质量和通信稳定性。上拉电阻的计算逻辑是两条约束夹出来的一个区间。最小值约束来自VOL规格I2C标准要求器件输出低电平VOL不超过0.4V此时灌入电流按3mA计算标准模式要求所以上拉电阻不能太小。以3.3V系统为例(3.3V - 0.4V) / 3mA ≈ 967Ω也就是说上拉电阻取小于约1kΩ时驱动低电平的电流会超过标准器件可能拉不低。最大值约束来自上升时间标准模式要求上升时间不超过1000ns而上升时间τ近似等于上拉电阻R乘以总线电容Cb完整的公式是tr 0.8473 × R × Cb。假设总线电容Cb为100pF5个设备、中等长度走线的典型值反推最大上拉电阻为1000ns / (0.8473 × 100pF) ≈ 11.8kΩ。所以实际常用阻值是2.2kΩ到4.7kΩ之间分别对应不同总线电容场景——走线短、设备少用4.7kΩ设备多、走线长、环境有干扰时用2.2kΩ。我实测下来3.3V系统、四五个从机、总线上拉用2.2kΩ波形上升沿通常在100ns到300ns之间余量非常充裕。接线时还要注意电平匹配适配器和目标板供电电压必须一致或者至少保证SCL/SDA的电平标准互相兼容。3.3V的从机接到5V的总线上不经过电平转换直接怼轻则通信不稳定重则烧芯片。供电上我习惯让USB转I2C适配器用自己的供电引脚给目标板供3.3V保证两边参考地严格相连避免浮地导致总线电平错乱。这里有一个特别容易犯的错扫描不到设备的时候很多人第一反应是查适配器、查软件设置但真正的问题往往在接线——某个从机地址引脚悬空没上拉、地和系统没共地、SDA和SCL接反。我建议任何I2C调试开始前先用万用表量SDA和SCL的对地电压正常空闲状态下两根线都应该是高电平接近VDD。如果量出来是0V检查上拉电阻和供电如果一根高一根低基本可以确定是SDA和SCL短接或者接反了。3.2 Scan扫描功能的实现逻辑从机地址探测的双向策略Scan扫描的核心功能就是遍历I2C总线上所有可能的从机地址逐个发送地址字节观察是否收到ACK从而找出总线上活跃的设备。这个功能看似简单但实现上有不少细节值得注意。地址扫描范围要避开保留区域。I2C规范定义了0x00是通用广播地址General Call0x01到0x07是保留地址0x78到0x7F也是保留地址真正可以分配给普通从机的7位地址范围是0x08到0x77。全范围扫描时我一般从0x03往后扫跳过0x00到0x02避免误判。扫描方向要双向确认。理想情况下主机发送“地址写位”时从机应该ACK“地址读位”时从机也应该ACK。但实际有些从机行为并不对称——某些只读设备在收到“地址读位”时才ACK而某些只写设备只对“地址写位”应答。所以严谨的扫描策略是先对每个地址发送“写方向”探测记录ACK的设备再对每个地址发送“读方向”探测记录ACK的设备最后把两个方向的命中结果合并去重才是最终的设备列表。只扫一个方向的扫描器会漏设备这个问题在调试时很容易误导人。扫描时还要设置合理的超时机制。特别是在100KHz模式下如果从机在响应前先做了内部处理比如EEPROM正在写操作SCL会被从机拉低主机等ACK的时间就可能无限延长。适配器固件里必须加入超时计数比如等待ACK超过10ms就判定该地址无设备并继续下一个地址。没有超时机制的扫描程序遇到一个不响应又拖时钟的地址就会挂死。我在这套项目里给适配器固件添加的命令格式是这样的上位机通过虚拟串口下发“SCAN start_addr end_addr”指令适配器遍历地址范围返回“FOUND addr”或“NOACK addr”给上位机。上位机收集应答后把命中设备按地址排序供后续操作使用。扫描100个地址在100KHz速率下即使每个地址只发一个字节也要耗时接近90ms加上超时等待总计大约一两秒体验上可以接受。3.3 Excel登记表的设计与自动化写入让扫描结果变成可归档的报告扫描得到设备地址之后下一步就是落到Excel登记表里。这个环节我完全用Python脚本自动化处理不用手工录入。Excel登记表我设计成三个Sheet。第一个Sheet是“设备扫描记录”列出总线上所有发现的设备地址、方向应答情况、对应芯片型号、物理位置、备注。第二个Sheet是“寄存器速查表”用于登记每个芯片的寄存器映射——寄存器地址、名称、读写属性、复位值、功能说明。第三个Sheet是“速率测试记录”放SCL频率、高低电平时间、上升沿、数据建立时间等测试数据。用Python写Excel推荐openpyxl库轻量、无需安装Office也能用。流程是先调指令扫描得到设备列表然后用pandas或openpyxl把数据写入单元格再设置表头字体加粗、列宽自适应、冻结首行。Python脚本和USB转I2C适配器之间怎么衔接我是用pyserial库直接打开虚拟串口发送扫描指令读取返回结果解析成列表再写Excel。整个过程一条命令行搞定输出文件命名带上日期和板卡版本号方便溯源。这里要提醒一句Excel表头别用中文命名“地址HEX”之类的花哨写法尽量用英文或者拼音因为后续你可能要拿这些数据做筛选、VLookup或者导入其他系统中文字段名在跨平台处理时容易出编码问题。我自己的习惯是“Addr_HEX”“Addr_DEC”“R_W”“Device”“Result”这类简洁命名阅读性不差程序处理起来也省心。4. 100KHz速率测试的完整过程与数据解读4.1 测试环境与测量方法示波器怎么接、探头怎么夹、数据怎么读速率测试的工具准备很简单一台带宽不低于100MHz的数字示波器两根无源探头被测板卡USB转I2C适配器以及一个稳定的上位机测试程序。示波器接法上CH1接SCLCH2接SDA地线夹分别接板卡的地。探头要用10x衰减挡等效电容一般在10到15pF之间比1x挡的100pF以上小得多对总线波形的影响更小。测之前先对探头做补偿校准用示波器自带的1kHz方波输出调整探头电容确保波形不畸变。这一点很重要探头没校准测出来的上升沿数据基本不可信。触发设置上用SCL通道的上升沿触发触发电平设为VDD的一半比如3.3V系统设1.65V时基先放到10μs一格查看连续多个周期的整体波形再放大到1μs一格看单个周期的细节。要测量的参数在示波器的Measure菜单里直接调出来频率、正脉宽对应SCL高电平时间、负脉宽对应SCL低电平时间、上升时间。有条件的话把SDA的数据建立时间也量一下——设置SDA在SCL上升沿之前跳变的那一段用光标测量SCL上升沿中点与SDA最后一次跳变之间的时间差。整个测量过程要注意示波器探头的地线夹要尽量短长地线会引入额外电感导致波形振铃被测板上如果有其他高速信号在跑测量的时机要选在系统静默的时候避免干扰影响数据准确性。4.2 实测数据对标100KHz标准模式下的波形参数记录下面是我在3.3V系统、总线上挂4个从机、上拉电阻2.2kΩ条件下测到的一组实际数据。适配器配置目标速率100KHz示波器实测结果如下参数实测值I2C标准模式限值余量SCL频率98.9 kHz100 kHz ±10%合格SCL高电平时间4.9 μs≥4.0 μs0.9 μsSCL低电平时间5.2 μs≥4.7 μs0.5 μs上升沿时间680 ns≤1000 ns达标SDA数据建立时间1.2 μs≥250 ns余量充足从数据上看这个配置下的100KHz速率波形整体合格SCL频率偏低约1.1%属于固件指令周期的正常偏差不影响通信。高电平时间和低电平时间都超过规范下限但值得注意的是余量并不算大——我实测低电平时间5.2μs只比规范下限多了0.5μs如果固件里某个中断处理函数抢占了CPU低电平时间进一步缩短就可能跌破4.7μs的底线。这就是为什么速率测试不能只看频率必须把高低电平时间单独测出来。上升沿680ns这个数值也给我提了个醒总线上4个从机的电容效应已经让边沿变慢了后续如果再往总线上挂设备或者PCB走线再加长上升沿很可能突破1000ns上限。碰到这种情况解决方案是换更小的上拉电阻比如从2.2kΩ换到1.5kΩ或者优化走线缩短主干的长度。我每次测完都会把数据填进Excel的“速率测试记录”Sheet并且顺手把示波器截图保存到同名文件夹文件名格式用“日期_板卡版本_速率_Channel号”这样事后回溯非常方便。4.3 从波形到Excel报告的转换数据可视化与趋势记录测试数据记录不是终点关键是后续怎么用。我通常把多次测试的结果放在同一个Excel表格里按日期排序就能看出不同配置下波形参数的演变趋势。比如换了上拉电阻、加了从机设备、改了PCB走线后SCL频率和上升沿会发生什么变化一目了然。Excel里还可以用条件格式和数据有效性做参考线效果。给“上升沿”这一列加一条数据条绿色代表低于500ns黄色代表500到800ns红色代表超过800ns——超过800ns就说明余量已经偏紧了需要介入调整。高电平、低电平时间同理。这比自己肉眼看数字判断高效得多尤其是一张表几十行测试记录的时候一目了然。另外Excel的图表功能可以拿来画SCL频率随时间的变化曲线。如果发现同一块板卡在不同温度或不同老化阶段SCL频率有漂移趋势这类图表可以作为可靠性分析的参考素材。我在实际项目里就用这个方式追踪过一批样机的时序参数波动为后面批量生产阶段的筛选标准提供了实测依据。5. 常见问题与排查技巧实录5.1 扫描不到设备的排查顺序从电气到协议按层剥洋葱扫描不到设备是最常见的I2C故障我建议按固定顺序排查不要东一榔头西一棒子。第一步量电压。用万用表量SDA和SCL引脚的空闲电平正常应该接近VDD。如果两根线都是0V查上拉电阻有没有焊上、电源有没有供上如果一根线是0V另一根是VDD八成是两根线之间或者对地短路了。第二步查接线。核对SCL、SDA、GND三根线的连接GND不接是整个I2C通信最容易忽略的坑——适配器地和板卡地不共地总线电平完全没有参考点导致SDA/SCL电平乱跳。第三步看波形。示波器夹上SCL上位机发起一次单地址读写观察有没有正常的时钟脉冲。如果SCL有波形但SDA没有对应变化说明地址没匹配上或者从机没供电。第四步检查地址设置。确认你用的地址位数对不对——很多芯片手册写的是8位地址地址读写位合成但I2C协议族习惯用7位地址描述面对不匹配就会一直NACK。这套排查顺序的核心思想是先确保物理层正常再查协议层。我见过太多人拿逻辑分析仪狂抓波形抓了半天SDA和SCL根本没正确连接。5.2 USB转I2C适配器驱动与虚拟串口的坑USB转I2C这套方案里上位机和适配器之间通常走的虚拟串口协议。驱动这块有几个常见的坑。一是系统更新后虚拟串口设备消失。Windows下偶尔会出现设备管理器里能看到设备但端口号变成“未知USB设备”的情况通常拔插重连就能恢复如果反复出现检查驱动的兼容性——老版本驱动和新系统之间的兼容问题经常导致这种情况。二是串口号漂移。今天插上枚举的是COM3明天插上变成了COM7代码里写死COM口就会连接失败。解决办法是在上位机里做成端口自动探测——遍历所有可用串口发一条握手命令看返回能握手的就是正确的适配器。三是波特率设置不一致。bit-bang方案里上位机和固件约定的串口波特率必须一致否则发送的指令到了固件那里全是乱码。我通常会做一套指令头校验避免乱码被误执行。另外如果适配器本身用的是硬件I2C控制芯片比如CH341PC端识别出来的是专用设备而非虚拟串口上位机要调用芯片厂商的API接口。两种方案的上位机代码不通用选型时要提前确认清楚。5.3 7位地址还是8位地址Excel登记表里最常犯的错地址位数这个坑几乎每个搞I2C的人都会踩一次。芯片手册上写的“从机地址0x68”有的写的是7位形式有的写的是8位形式即7位地址左移一位后的值。I2C总线上实际发送的字节永远是8位形式——7位地址加1位读写方向所以0x68如果以8位形式发送写方向就是0xD0读方向就是0xD1。很多Scan程序接收到的反馈直接给的是完整8位字节如果你拿7位地址去对怎么都对不上。以EEPROM AT24C系列为例手册上通常写7位地址是0x501010000实际发送写方向时字节是0xA0。我就见过同事把Excel登记表里整列都填成了8位地址扫描结果对不上号排查了半天才发现地址表全错了。我的建议是Excel登记表里“地址”一列统一用7位地址记录另加一列“8位写方向地址”在备注里注明换算方法——7位地址左移一位最低位为0是写、为1是读。统一基准之后再做扫描、写代码、核对硬件都不会再犯糊涂。扫描程序返回结果时我也特意让它同时输出两列Addr77位形式和Addr8_W8位写形式方便对照。5.4 从机特殊行为导致的“假失败”时钟延展与总线锁死前面提到过clock stretching这里展开讲。部分从机在内部处理期间会将SCL拉低阻止主机继续发送时钟相当于告诉主机“我现在忙你先等着”。USB转I2C适配器如果没有对SCL被拉低的情况做超时判断就会一直等下去整套扫描流程就卡死了。我遇到过最夸张的一次某颗温湿度传感器上电初始化期间SCL被拉低了200多毫秒要不是适配器固件里有10ms超时整个调试直接进入死循环。另一个“假失败”是总线锁死bus hang-up。I2C协议规定如果主机在传输过程中异常掉电或者软件崩溃SDA可能停在低电平此时总线被某个不知道在哪的设备“占用”。绝大多数I2C从机检测到这种情况都会选择等待主机发送START或STOP来恢复但也有少数从机直接罢工。处理方法是在上位机软件里加一个“总线恢复”功能——连续发送9个SCL时钟脉冲不启动任何传输让SDA上的卡死状态被时钟驱动释放再发送STOP条件把总线复位到空闲状态。我在这套项目的适配器固件里专门加了两个命令CLK_STRETCH_TIMEOUT设置超时时间BUS_RECOVER执行总线恢复序列。实测下来90%的总线锁死场景靠这个能救回来。大家做自己的工具链时一定要给这两个功能留接口否则现场遇到总线锁死就只能断电重启不能接受。做这套USB转I2C扫描和100KHz速率测试项目我个人最深的体会是工具链的价值不在于某个单一功能多强大而在于把“扫描—验证—记录—归档”这条链路完全打通。以前我调I2C设备从发现问题到定位原因通常要一两个小时现在接上适配器、跑一遍扫描、看Excel登记表几分钟就能锁定目标设备。特别是把Excel登记表做成固定的模板之后每个新板卡进来只需要更新地址和设备型号两列其他信息全沿用效率提升了不止一个量级。最后再分享一个小技巧扫描结果Excel的命名一定要带板卡硬件版本号我就吃过亏——拿老版本板的扫描结果去核对新版本板的设备地址对不上排查了半天才发现是版本差异。硬件调试这种事每一份数据都要能追溯到具体板子和具体时间不然就是在给自己挖坑。
返回列表