DIODES AP33772 USB PD 接收器控制器 Raspberry Pi I2C 接口
介绍
- AP33772 Sink Controller,作为USB PD3.0.3.0 Type C Connector-equipped Device(TCD,Energy Sink)的协议设备,旨在从USB PD3.0.XNUMX Type C Connector-equipped PDXNUMX请求适当的电源数据对象(PDO) .XNUMX 合规充电器(PDC,能源)。
- 图 1 说明了一个嵌入了 PD3.0 接收器控制器 IC (AP33772) 的 TCD,通过一个物理连接到嵌入了 USB PD3.0.43771 解码器 (APXNUMX) 的 PDC
- C 型到 C 型电缆。 基于内置的 USB PD3.0.33772 兼容固件,AP43771 和 AP3.0 对将通过 USB PD3.0.XNUMX 标准连接程序建立合适的 PDXNUMX 充电状态。
- AP33772 接收器控制器 EVB 为系统设计人员提供了易用性和强大的多功能性,可通过 I33772C 接口发送 AP2 内置命令,从 USB 供电充电器请求 PDO。 典型的系统设计需要 MCU 编程,这需要特定的软件(例如 IDE)设置,并且可能是一个耗时的开发过程。
- 相比之下,Raspberry Pi (RPI) 是一种单板计算机 (SBC),在用户友好的 Linux 操作系统上运行并配备了灵活的 GPIO 引脚,它提供了一种直接的方法来验证 AP33772 Sink EVB 是否与 PD 充电器配合使用。 本指南的目标是为系统设计人员提供一个有效的平台,以快速完成 RPI 上的软件验证,然后将开发移植到任何所需的 MCU 以满足快速周转的市场需求。
- 作为 AP33772 EVB 用户指南的补充文档,本用户指南说明了通过 I33772C 接口使用 RPI SBC 控制 AP2 EVB 的简单方法。
- 图 1 中描述的 MCU 块与 AP33772 接口的角色由 RPI 扮演。 本用户指南涵盖了很多寄存器定义和使用信息,如前amp文件,但是,有关完整和最新信息,请参阅 AP33772 EVB 用户指南。 (见参考文献 2)
- 图 1 – 典型的 TCD 使用带 I33772C 接口的 AP2 PD 接收器控制器从 USB Type-C PD3.0/PPS 合规电源适配器请求电源
验证平台设置
AP33772 接收器控制器 EVB
图 2 显示接收器控制器 EVB 的图片。 它具有 Type-C 连接器、I2C 引脚、用于中断的 GPIO3 引脚、用于 OTP 的 NTC 热敏电阻、显示充电状态的 LED 指示灯以及连接到负载的 Vout 连接器。
树莓派 Zero 2W
- 任何最新版本的 RPI 都能够通过 I33772C 引脚控制 AP2 接收器控制器 EVB。 本用户指南中使用 Raspberry Pi Zero 2 W (RPI Z2W) 是因为它具有成本效益和多功能性。 它具有所有 RPI 中最小的外形尺寸,并与 WiFi 和蓝牙集成,无需额外组件即可实现无线连接。 它完美地用作 AP33772 接收器控制器 EVB 验证平台。
- 用户可以查看Raspberry Pi官方 web网站获取更多信息(https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/)
验证平台连接和上电
图 5 显示了验证平台的完整连接和设置。 用户应遵循以下步骤:
- 在 RPI 和 AP33772 EVB 之间连接 SCL、SDA 和 GND 引脚
- 使用 Type-C 数据线连接 65W PD 充电器和 AP33772 EVB
- 启动 RPI 和 PD 充电器。
树莓派软件设置
Raspberry Pi 操作系统
- 有许多不同的操作系统支持 RPI。 其中Raspberry Pi OS因为是RPI官网使用最多和推荐的操作系统而被选中。
下载操作系统映像并准备 SD 卡
- 在 PC 上下载并安装 Raspberry Pi Imager 工具(https://www.raspberrypi.com/software/). 按照说明准备一个加载了正确操作系统映像的 Micro-SD(https://youtu.be/ntaXWS8Lk34/). 请注意,建议使用 32BG 或更大的 Micro-SD 卡。
树莓派操作系统安装
- 将之前加载成像仪的Micro-SD卡插入RPI的Micro-SD卡槽。 连接电源适配器、鼠标/键盘和 HDMI 显示器。 打开 RPI 电源并按照说明完成操作系统安装和基本设置。 确保操作系统中包含最新的更新。
所需功能的设置
- 为了在 RPI 上成功运行 I2C 接口,我们必须配置或安装 SSH、VNC 和 I2C 功能。
树莓派配置——SSH、VNC、I2C
- RPI 启动后,打开“Raspberry Pi Configure”实用程序并打开 SSH、VNC 和 I2C 功能。
I2C 波特率配置
- 替换 /boot/config.txt 中有关 dtparam 和 dtoverlay 的行 file 和:
- dtoverlay=i2c-bcm2708
- dtparam=i2c_arm=开,i2c_arm_baudrate=640000
I2C-工具安装
- I2C-Tools 是一个工具集,提供在 Raspberry Pi OS 下的命令行上运行的简单命令。 通过运行以下命令在操作系统上安装 I2C-Tools:sudo apt install i2c-tools
SMBus2 安装
- SMBus2是一个Python模块,为用户在Python环境下控制I2C接口提供了方便的功能。 通过运行以下命令在操作系统上为 Python 安装 SMBus2 模块:sudo pip3 install smbus2
基本命令 Examp莱斯
- 本用户指南演示了在 RPI 上使用 I2C 接口的两种不同方法。 它们是 I2C-Tools Utility 和 Python SMBus2 Module。 本节介绍这两种方法的基本命令。
I2C 工具命令 Examp莱斯
- I2C-Tools 实用程序包提供 i2cdetect、i2cget 和 i2cset 命令。 ex 中描述了简化的用法amp本节下的文件。 有关 I2C-Tools 实用程序的完整信息,请参阅 https://linuxhint.com/i2c-linux-utilities/.
- 表 1 显示了 AP33772 寄存器摘要,以方便用户消化本节中的命令用法。 有关完整的寄存器信息,请参阅 AP33772 接收器控制器 EVB 用户指南。
登记 | 命令 | 长度 | 属性 | 打开 | 描述 |
SRCPDO |
0x00 |
28 |
RO |
全00h |
用于公开 PD 源 (SRC) 电源功能的电源数据对象 (PDO)。
总长度为 28 字节 |
普多努姆 | 0x1C | 1 | RO | 00小时 | 有效的源 PDO 编号 |
地位 | 0x1D | 1 | RC | 00小时 | AP33772状态 |
面具 | 0x1E | 1 | RW | 01小时 | 中断使能掩码 |
音量TAGE | 0x20 | 1 | RO | 00小时 | 最低有效位 80mV |
当前的 | 0x21 | 1 | RO | 00小时 | 最低有效位 24mA |
温度 | 0x22 | 1 | RO | 19小时 | 温度,单位:°C |
OCPTHR | 0x23 | 1 | RW | 00小时 | OCP 阈值,LSB 50mA |
OTPTHR | 0x24 | 1 | RW | 78小时 | OTP阈值,单位:°C |
DRTHR | 0x25 | 1 | RW | 78小时 | 降额阈值,单位:°C |
TR25 | 0x28 | 2 | RW | 2710小时 | 热阻@25°C,单位:Ω |
TR50 | 0x2A | 2 | RW | 1041小时 | 热阻@50°C,单位:Ω |
TR75 | 0x2C | 2 | RW | 0788小时 | 热阻@75°C,单位:Ω |
TR100 | 0x2E | 2 | RW | 03CEh | 热阻@100°C,单位:Ω |
远程数据处理中心 | 0x30 | 4 | WO | 00000000小时 | 请求数据对象 (RDO) 用于请求电源功能。 |
视频识别 | 0x34 | 2 | RW | 0000小时 | 供应商 ID,为将来的应用程序保留 |
PID | 0x36 | 2 | RW | 0000小时 | 产品 ID,为将来的应用保留 |
预订的 | 0x38 | 4 | – | – | 为将来的应用保留 |
表 1 – AP33772 寄存器汇总
检测连接到 I2C 的所有设备——i2cdetect
- 要显示当前连接到 I2C-2 总线的所有 i1c 设备,请在命令提示符下键入以下内容:i2cdetect -y 1
- 如果连接了 AP33772 接收器控制器 EVB,用户应该看到设备连接在 0x51 地址
读取 SRCPDO (0x00~0x1B)
- i2cget 命令不支持超过 2 个字节的块读取。 用户需要使用“for 循环”来显示所有 28 字节长的 PDO 数据。 要显示所有 PDO 数据,请在 bash 命令提示符下键入以下内容 for i in {0..27}; 做 i2cget -y 1 0x51 $ib; 完毕
- 将显示代表 28 个 PDO 的 7 字节数据
读取 PDONUM (0x1C)
- 要显示有效 PDO 的总数,请在命令提示符下键入以下内容:i2cget -y 1 0x51 0x1c b
读取状态 (0x1D)
- 此命令报告接收器控制器的状态,包括降级、OTP、OCP、OVP、请求被拒绝、请求已完成和就绪。 要显示状态信息,请在命令提示符下键入以下内容:i2cget -y 1 0x51 0x1db
- 用户应在每次 RDO 请求后使用此命令,以通过读取 COMPLETE 位来确保 RDO 请求成功。 4.1.5 写掩码(0x1E)
- 此命令启用通过 AP3 的 GPIO33772 引脚向主机发出信号的中断。 中断包括 Derating、OTP、OCP、OVP、Request Rejected、Request Completed 和 Ready。 要启用特定中断,请将相应位设置为 XNUMX。 对于前ample,要启用 OCP 中断,请在命令提示符下键入以下内容,将 MASK 寄存器的位 4 设置为 2:i1cset -y 0 51x0 1x0e 10xXNUMX b
- 当触发 OCP 保护时,AP3 的 GPIO33772 引脚将变高。
读取音量TAGE (0x20)
- 此命令报告卷tage 由 AP33772 接收器控制器测量。 报告卷tage、在命令提示符下输入:i2cget -y 1 0x51 0x20 b
- 报告值的一个单位代表 80mV。
读取电流 (0x21)
- 此命令报告 AP33772 接收器控制器测量的电流。 要报告电流,请在命令提示符下键入以下内容:i2cget -y 1 0x51 0x21 b
- 报告值的一个单位代表 24mA。
读取温度 (0x22)
- 此命令报告 AP33772 接收器控制器测量的温度。 要报告温度,请在命令提示符下键入以下内容:
i2cget -y 1 0x51 0x22 b - 报告值的一个单位代表 1°C。
- 读取和写入 OCPTHR (0x23)、OTPTHR (0x24) 和 DRTHR (0x25)
- 通过将值写入 OCPTHR、OTPTHR 和 DRTHR 寄存器,可以将 OCP、OTP 和降额阈值更改为用户所需的值。 作为前任ample,要将 OCP 阈值更改为 3.1A,用户应通过在命令提示符下键入以下内容将 0x3E (=3100/50=62=0x3E) 写入 OCPTHR:i2cset -y 1 0x51 0x23 0x3e b
- 要将 OTP 阈值更改为 110°C,用户应通过在命令提示符下键入以下内容将 0x6E (=110) 写入 OTPTHR:
- 要从 OCPTHR、OTPTHR 和 DRTHR 中读取值,请在命令提示符下键入以下内容:
- i2cget -y 1 0x51 0x23 b i2cget -y 1 0x51 0x24 b i2cget -y 1 0x51 0x25 b
- 读写TR25(0x28~0x29)、TR50(0x2A~0x2B)、TR75(0x2C~0x2D)、TR100(0x2E~0x2F)
- Murata 10KΩ 负温度系数 (NTC) 热敏电阻 NCP03XH103 安装在 AP33772 EVB 上。 在最终设计中将热敏电阻更改为不同的热敏电阻是用户的偏好。 用户应根据所用热敏电阻的规格更新 TR25、TR50、TR75 和 TR100 寄存器值。 对于前amp乐,
- 设计中使用村田的6.8KΩ NCP03XH682。 25℃、50℃、75℃、100℃时的电阻值分别为6800Ω(0x1A90)、2774Ω(0x0AD6)、1287Ω(0x0507)、662Ω(0x0296)。 要将相应的值写入这些寄存器,请在命令提示符下键入以下内容:
- i2cset -y 1 0x51 0x28 0x1a90 w i2cset -y 1 0x51 0x2a 0x0ad6 w i2cset -y 1 0x51 0x2c 0x0507 w i2cset -y 1 0x51 0x2e 0x0296 w
- 要读出这些值,请在命令提示符下键入以下内容:i2cget -y 1 0x51 0x28 w i2cget -y 1 0x51 0x2a w i2cget -y 1 0x51 0x2c w i2cget -y 1 0x51 0x2e w
- 输出值为 2 字节字。 由于命令直接处理 2 字节字,因此用户无需担心这里的小端字节顺序。
写入 RDO (0x30~0x33)
- 为了启动 PDO 请求协商程序,4 字节数据以小端字节顺序写入 RDO(请求数据对象)寄存器。 作为前任amp例如,要请求具有 3V 和 15A 的 PDO3,0x3004B12C 将写入 RDO 寄存器。 在命令提示符下键入以下内容:i2cset -y 1 0x51 0x30 0x2c 0xb1 0x04 0x30 i
- 最低有效字节 (0x2C) 应首先写入以符合小端字节顺序表示法。 请参考 AP9 Sink Controller EVB 用户的表 10 和表 33772
- 详细 RDO 内容信息指南。
- 用户可以通过使用全零数据写入 RDO 寄存器来发出硬复位:i2cset -y 1 0x51 0x30 0x00 0x00 0x00 0x00 i
- AP33772 接收器控制器将重置为初始状态,输出将关闭。
Python SMBus2 命令示例amp莱斯
- Python 因其支持的模块种类繁多而越来越受欢迎。 SMBus2 是其中之一,能够处理 I2C 读写命令。 SMBus2提供了read_byte_data、read_word_data、read_i2c_block_data、write_byte_data、write_word_data、write_i2c_block_data命令。 ex 中描述了简化的用法amp本节下的文件。 有关 SMBus2 模块的完整信息,请参阅 https://smbus2.readthedocs.io/en/latest/.
读取 SRCPDO (0x00~0x1B)
- SMBus.read_i2c_block_data 是一条有效命令,支持最多读取 32 字节块数据。 读取所有28字节的PDO数据,在python3环境下使用如下:
- SMBus.read_i2c_block_data(0x51, 0x00, 28)
- 代表 28 个 PDO 的 7 个一字节数据将以列表数据结构返回。
读取 PDONUM (0x1C)
- 要读取有效 PDO 的总数,请在 python3 环境下使用以下命令:
- SMBus.read_byte_data(0x51,0x1c)
- 将返回表示有效 PDO 计数的一字节数据。
读取状态 (0x1D)
- 此命令报告接收器控制器的状态,包括降额、OTP、OCP、OVP、请求被拒绝、请求已完成和就绪。 读取状态信息,在python3环境下使用如下:
- SMBus.read_byte_data(0x51,0x1d)
- 用户可以在每次 RDO 请求后使用此命令,通过读取 COMPLETE 位来确保 RDO 请求成功。
写屏蔽 (0x1E)
- 此命令启用通过 AP3 的 GPIO33772 引脚向主机发出信号的中断。 中断包括 Derating、OTP、OCP、OVP、Request Rejected、Request
- 完成,准备就绪。 要启用特定中断,请将相应位设置为 XNUMX。 对于前ample,要启用OCP中断,在python4环境下使用以下命令将MASK寄存器的第3位设置为XNUMX:
- SMBus.write_byte_data(0x51, 0x1e, 0x10)
- 当触发 OCP 保护时,AP3 的 GPIO33772 引脚将变高。
读取音量TAGE (0x20)
- 此命令报告卷tage 由 AP33772 接收器控制器测量。 报告卷tage、在python3环境下使用如下:
- SMBus.read_byte_data(0x51,0x20)
- 报告值的一个单位代表 80mV。
读取电流 (0x21)
- 此命令报告 AP33772 接收器控制器测量的电流。 上报当前,在python3环境下使用如下
- SMBus.read_byte_data(0x51,0x21)
- 报告值的一个单位代表 24mA。
读取温度 (0x22)
- 此命令报告 AP33772 接收器控制器测量的温度。 上报温度,在python3环境下使用如下:
- SMBus.read_byte_data(0x51,0x22)
- 报告值的一个单位代表 1°C。
读取和写入 OCPTHR (0x23)、OTPTHR (0x24) 和 DRTHR (0x25)
- 通过将值写入 OCPTHR、OTPTHR 和 DRTHR 寄存器,可以将 OCP、OTP 和降额阈值更改为用户所需的值。 作为前任ample,要将 OCP 阈值更改为 3.1A,用户应在 python0 环境下使用以下命令将 3x3100E (=50/62=0=3x3E) 写入 OCPTHR:SMBus.write_byte_data(0x51, 0x23, 0x3e)
- 要将 OTP 阈值更改为 110°C,用户应在 python0 环境下使用以下命令将 6x110E (=3) 写入 OTPTHR:SMBus.write_byte_data(0x51, 0x24, 0x6e)
- 要将降额阈值更改为 100°C,用户应在 python0 环境下使用以下内容将 64x100 (=3) 写入 DRTHR:SMBus.write_byte_data(0x51, 0x25, 0x64)
- 要从 OCPTHR、OTPTHR 和 DRTHR 中读取值,请在 python3 环境下使用以下命令: SMBus.read_byte_data(0x51, 0x23) SMBus.read_byte_data(0x51, 0x24) SMBus.read_byte_data(0x51, 0x25) 。
- 读写TR25(0x28~0x29)、TR50(0x2A~0x2B)、TR75(0x2C~0x2D)、TR100(0x2E~0x2F)
- Murata 10KΩ 负温度系数 (NTC) 热敏电阻 NCP03XH103 安装在 AP33772 EVB 上。 在最终设计中将热敏电阻更改为不同的热敏电阻是用户的偏好。 用户应根据所用热敏电阻的规格更新 TR25、TR50、TR75 和 TR100 寄存器值。 对于前ample,设计中使用村田的6.8KΩ NCP03XH682。 25℃、50℃、75℃、100℃时的电阻值分别为6800Ω(0x1A90)、2774Ω(0x0AD6)、1287Ω(0x0507)、662Ω(0x0296)。 将相应的值写入这些寄存器,在python3环境下使用如下:
- SMBus.write_word_data(0x51, 0x28, 0x1a90) SMBus.write_word_data(0x51, 0x2a, 0x0ad6) SMBus.write_word_data(0x51, 0x2c, 0x0507) SMBus.write_word_data(0x51, 0x2e, 0x0296)
- 要读取值,请在 python3 环境下使用以下命令: SMBus.read_word_data(0x51, 0x28) SMBus.read_word_data(0x51, 0x2a) SMBus.read_word_data(0x51, 0x2c) SMBus.read_word_data(0x51, 0x2e)
- 返回值也是 2 字节的字。 由于命令直接处理 2 字节字,因此用户无需担心这里的小端字节顺序。
写入 RDO (0x30~0x33)
- 为了启动 PDO 请求协商程序,4 字节数据以小端字节顺序写入 RDO(请求数据对象)寄存器。 作为前任amp例如,要请求具有 3V 和 15A 的 PDO3,0x3004B12C 将写入 RDO 寄存器。 在python3环境下使用如下:
- SMBus.write_i2c_block_data(0x51, 0x30, [0x2c, 0xb1, 0x04, 0x30])
- 有关详细的 RDO 内容信息,请参阅 AP9 接收器控制器 EVB 用户指南的表 10 和表 33772。
- 用户可以通过用全零数据写入 RDO 寄存器来发出硬复位:
- SMBus.write_i2c_block_data(0x51, 0x30, [0x00, 0x00, 0x00, 0x00])
- AP33772 接收器控制器将重置为初始状态,输出将关闭。
实践案例amp莱斯
Example 1: Bash I2C-工具Examp文件:ap33772_querypdo.bash
这个前任amp文件检查所有有效的 PDO 并列出卷tage 和当前能力信息输出。
代码详情
代码执行和输出
Example 2:Python SMBus2 Examp乐:ap33772_allpdo.py3
这个前任amp文件检查所有有效的 PDO,并按上下顺序逐一请求它们。
代码详情
代码执行和输出
Examp文件代码下载
前任名单amp代码
- Examp文件代码有 Bash 脚本和 Python 版本
- ap33772_querypdo:查询所有PDO信息
- ap33772_reqpdo:上报所有PDO信息,发出用户指定的PDO请求
- ap33772_allpdo:上报所有PDO信息,上下遍历所有PDO请求
- ap33772_pps:上报所有PDO信息,以及ramp上下整个 PPS 卷tage 范围为 50mV 步长
- ap33772_vit:报告卷tage、电流和温度信息
Examp下载网站
Example 代码可以从 Github 下载。 发出以下命令进行下载:git clone https://github.com/diodinciot/ap33772.git-ap33772
参考
- AP33772 数据表(USB PD3.0.XNUMX PPS 接收器控制器): https://www.diodes.com/products/power-management/ac-dc-converters/usb-pd-sink-controllers/
- AP33772 I2C 接收器控制器 EVB 用户指南: https://www.diodes.com/applications/ac-dc-chargers-and-adapters/usb-pd-sink-controller/
- 树莓派零 2 W: https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/
- 树莓派操作系统: https://www.raspberrypi.com/software/
- I2C 工具实用程序: https://linuxhint.com/i2c-linux-utilities/
- SMBus2 模块: https://smbus2.readthedocs.io/en/latest/
修订历史
修订 | 签发日期 | 评论 | 作者 |
1.0 | 4 年 15 月 2022 日 | 初始版本 | 赵爱华 |
重要通知
- Diodes INCORPORATED 对本文档不作任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的暗示保证(及其在任何司法管辖区法律下的等效保证)。
- Diodes Incorporated 及其子公司保留对本文档和此处描述的任何产品进行修改、增强、改进、更正或其他更改的权利,恕不另行通知。 Diodes Incorporated 不承担因应用或使用本文档或本文描述的任何产品而产生的任何责任; Diodes Incorporated 也不转让其专利或商标权下的任何许可,也不转让他人的权利。 本文档或此类应用程序中描述的产品的任何客户或用户应承担此类使用的所有风险,并同意持有 Diodes Incorporated 及其产品在 Diodes Incorporated 上代表的所有公司 web网站,对所有损害无害。
- 对于通过未经授权的销售渠道购买的任何产品,Diodes Incorporated 不作任何保证或承担任何责任。
如果客户购买或使用 Diodes Incorporated 产品用于任何意外或未经授权的应用,客户应赔偿并持有 Diodes - Incorporated 及其代表对因与此类意外或未经授权的应用相关的任何人身伤害或死亡索赔而直接或间接引起的所有索赔、损害赔偿、费用和律师费无害。
- 此处描述的产品可能受一项或多项正在申请的美国、国际或外国专利的保护。 此处提及的产品名称和标记也可能包含一个或多个美国、国际或外国商标。
- 本文档以英文撰写,但可能会被翻译成多种语言以供参考。 只有本文档的英文版本才是 Diodes Incorporated 发布的最终和决定性格式。
生命支持
- 未经 Diodes Incorporated 首席执行官的明确书面批准,Diodes Incorporated 产品未明确授权用作生命支持设备或系统中的关键组件。 如本文所用:
- A. 生命支持设备或系统是以下设备或系统:
- 旨在植入体内,或
- 支持或维持生命,如果按照标签中提供的使用说明正确使用,则可以合理预期对用户造成重大伤害。
- B. 关键组件是生命支持设备或系统中的任何组件,其性能故障可合理预期会导致生命支持设备失效或影响其安全性或有效性。
- 客户表示,他们在其生命支持设备或系统的安全和监管后果方面拥有所有必要的专业知识,并承认并同意,他们对有关其产品和 Diodes 的任何使用的所有法律、监管和安全相关要求负全部责任尽管 Diodes Incorporated 可能提供任何与设备或系统相关的信息或支持,但在此类安全关键、生命支持设备或系统中集成了产品。
- 此外,客户必须全额赔偿 Diodes Incorporated 及其代表因在此类安全关键、生命支持设备或系统中使用 Diodes Incorporated 产品而造成的任何损害。
- 版权所有 © 2017,Diodes Incorporated
- www.diodes.com
文件/资源
![]() |
DIODES AP33772 USB PD 接收器控制器 Raspberry Pi I2C 接口 [pdf] 用户指南 AP33772 USB PD 接收器控制器 Raspberry Pi I2C 接口, AP33772, USB PD 接收器控制器 Raspberry Pi I2C 接口, Raspberry Pi I2C 接口, Pi I2C 接口 |