1、CH372中文手册(一) USB总线接口芯片 CH372 中文手册 版本: 3A http:/ 1、概述 CH372是一个 USB总线的通用设备接口芯片,是 CH371的升级产品,是 CH375芯片的功能简化版。 在本地端, CH372具有 8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机 /DSP/MCU/MPU等控制器的系统总线上;在计算机系统中, CH372的配套软件提供了简洁易用的操作接 口,与本地端的单片机通讯就如同读写文件。 CH372内置了 USB通讯中的底层协议,具有省事的内置固件 模式 和 灵活 的 外 置固件 模式 。在内置 固件 模式下 , CH372
2、自动处理默认 端 点 0的 所 有事 务 ,本地端单片机 只要负责 数据 交换 , 所 以单片机 程序非常 简洁。在 外 置固件 模式下 , 由外部 单片机 根 据 需要自行处理各种 USB请求 , 从而 可以 实现符 合各种 USB类规范 的设备。 2、 特点 全速 设备接口, 兼容 USB V2.0, 即插即 用, 外围元 器件 只需要晶体 和 电容 。 提供一 对主 端 点 和一 对辅助 端 点 , 支持 控制 传 输、 批量传 输、中断 传 输。 具有省事的内置固件 模式 和 灵活 的 外部 固件 模式 。 内置固件 模式下屏蔽 了 相关 的 USB协议, 自动完成标准 的 USB枚举
3、 配置 过程 , 完全不需要 本 地端控制器作 任何处理 ,简化了单片机的固件 编程 。 通用 Windows驱动程序 提供设备级接口,通 过 DLL提供 API应 用层接口。 产品制 造商 可以 自定义厂商标识 ( Vendor ID)和产品 标识 ( Product ID)。 通用的本地 8位数据总线, 4线控制:读选通、写选通、片选输 入 、中断输出。 主 端 点 上 传下传缓冲区各 64字节 , 辅助 端 点 上 传下传缓冲区各 8字节 。 支持 5V电源电压 和 3.3V电源电压 , CH372A芯片 还 支持 低 功 耗 模式 。 CH372芯片是 CH375芯片的功能简化版, C
4、H372在 CH375基础 上 减少 了 USB主 机方 式 和 串 口通 讯方 式 等功能, 所 以 硬 件 成 本 更低 , 但 是 其它 功能 完全兼容 CH375,可以 直 接 使 用 CH375的 WDM驱动程序 和 DLL动 态链 接 库 。 采 用 SSOP-20封装 。 CS# INT# D- D+ WR# RD# A0 D 7-0 CH372 接口芯片 本地端 控制器 单片机 DSP MCU MPU 等 计算机 应 用层 RD(?) WR(?) CH372中文手册(一) 3、 封装 封装形 式 塑 体 宽度 引脚间距 封装说明 订货型号 SSOP-20 5.30mm 209m
5、il 0.65mm 25mil 超小型 20脚贴 片 CH372T/A 4、 引脚 引脚号 引脚名称 类 型 引脚说明 20 VCC 电源 正 电源 输 入 端, 需要外 接 0.1uF电源 退耦 电容 18 GND 电源 公共 接地端, 需要 连 接 USB总线的地线 5 V3 电源 在 3.3V电源电压 时连 接 VCC 输 入外部电源 , 在 5V电源电压 时 外 接 容量 为 0.01uF退耦 电容 8 XI 输 入 晶体 振荡 的输 入 端, 需要外 接 晶体 及 振荡 电容 9 XO 输出 晶体 振荡 的 反 相 输出端, 需要外 接 晶体 及 振荡 电容 6 UD+ 双向三态 U
6、SB总线的 D+数据线,内置可控的上 拉 电 阻 7 UD- 双向三态 USB总线的 D-数据线 17 10 D7 D0 双向三态 8 位 双向 数据总线,内置上 拉 电 阻 3 RD# 输 入 读选通输 入 , 低 电 平 有 效 ,内置上 拉 电 阻 2 WR# 输 入 写选通输 入 , 低 电 平 有 效 ,内置上 拉 电 阻 19 CS# 输 入 片选控制输 入 , 低 电 平 有 效 ,内置上 拉 电 阻 1 INT# 输出 中断 请求 输出, 低 电 平 有 效 4 A0 输 入 地 址 线输 入 , 区 分命令 口与数据口,内置上 拉 电 阻 , 当 A0=1时 可以写 命令 ,
7、 当 A0=0时 可以读写数据 5、 命令 本手册中的数据, 后缀 B为二进 制数, 后缀 H为十六进 制数, 否则为十进 制数。 本手册中 所 指 的单片机 基 本 适 用 于 DSP或者 MCU/MPU等。 本手册提供了内置固件 模式下 可能用到的 命令 , 其它命令 请 参考 手册( 二 )。 代码 命令名称 输 入 数据 输出数据 命令 用 途 05H RESET_ALL (等 40mS) 执 行 硬 件 复 位 06H CHECK_EXIST 任 意 数据 按 位 取反 测试工 作 状态 VID低 字节 VID高 字节 PID低 字节 12H SET_USB_ID PID高 字节 设
8、置 USB的 厂商识 别码 VID 和产品 识 别码 PID 15H SET_USB_MODE 模式 代码 (等 20uS) 操作 状态 设置 USB工 作 模式 CH372中文手册(一) 22H GET_STATUS 中断 状态 获取 中断 状态 并 取 消 请求 23H UNLOCK_USB 释放 当 前 USB缓冲区 数据 长 度 28H RD_USB_DATA 数据 流 从 当 前 USB中断的端 点缓冲区 读 取 数据 块并释放 当 前 缓冲区 数据 长 度 2AH WR_USB_DATA5 数据 流 向 USB端 点 1的上 传缓冲区 写 入 数据 块 数据 长 度 2BH WR_
9、USB_DATA7 数据 流 向 USB端 点 2的上 传缓冲区 写 入 数据 块 以 下 命令 仅 适 用 于 CH372A芯片 01H GET_IC_VER 版本 号 获取 芯片及固件版本 03H ENTER_SLEEP 进 入 低 功 耗 睡眠 挂 起 状态 数据 10H 0BH CHK_SUSPEND 检查 方 式 设置 检查 USB总线 挂 起 状态 的方 式 数据 长 度 27H RD_USB_DATA0 数据 流 从 当 前 USB中断的端 点缓冲区 读 取 数据 块 如 果 命令 的输出数据是操作 状态 , 参考 下 表 。 状态代码 状态名称 状态说明 51H CMD_RET
10、_SUCCESS 操作 成 功 5FH CMD_RET_ABORT 操作 失败 5.1. 命令 RESET_ALL 该 命令使 CH372执 行 硬 件 复 位。通 常 情况 下 , 硬 件 复 位在 40mS时间 之 内 完成 。 5.2. 命令 CHECK_EXIST 该 命令测试工 作 状态 ,以 检查 CH372是 否正 常 工 作。 该 命令 需要 输 入 1个数据,可以是 任 意 数据, 如 果 CH372正 常 工 作, 那么 CH372的输出数据是输 入 数据的 按 位 取反 。 例 如,输 入 数据是 57H, 则 输 出数据是 A8H。 5.3. 命令 SET_USB_ID
11、 该 命令 设置 USB的 厂商识 别码 Vendor-ID和产品 识 别码 Product-ID。 该 命令 需要 输 入 4个数据, 依次 是 厂商 VID的 低 8位、 厂商 VID的 高 8位,产品 PID的 低 8位,产品 PID的 高 8位。如 果 需要 设 置 ID, 那么该 命令 必须 在 SET_USB_MODE命令 之前 执 行 。 5.4. 命令 SET_USB_MODE 该 命令 设置 USB工 作 模式 。 该 命令 需要 输 入 1个数据, 该 数据是 模式 代码 : 模式 代码为 00H时 切 换 到 未启 用的 USB设备方 式 (上 电 或复 位 后 的 默认
12、 方 式 ); 模式 代码为 01H时 切 换 到 已启 用的 USB设备方 式 , 外部 固件 模式 ; 模式 代码为 02H时 切 换 到 已启 用的 USB设备方 式 ,内置固件 模式 。 在 USB设备方 式下 , 未启 用是 指 USB总线 D+的上 拉 电 阻 被禁止 , 相 当于 断 开 USB设备; 启 用是 指 USB总线 D+的上 拉 电 阻 有 效 , 相 当于连 接 USB设备, 从而 使 USB主 机能 够检 测 到 USB设备的 存 在。 通 过 设置是 否 启 用,可以 模 拟 USB设备的 插 拔 事件。 通 常 情况 下 ,设置 USB工 作 模式 在 20u
13、S时间 之 内 完成 , 完成 后 输出操作 状态 。 关 于 外部 固件 模式请 参考 手册( 二 )。 5.5. 命令 GET_STATUS 该 命令获取 CH372的中断 状态 并 通 知 CH372取 消 中断 请求 。 当 CH372向 单片机 请求 中断 后 ,单片 机通 过 该 命令获取 中断 状态 , 分 析 中断 原因并 处理 。 CH372中文手册(一) 中断 状态 字节 名称 中断 状态分 析 说明 位 7 位 4 ( 保留 位) 总是 0000 位 3 位 2 当 前 事 务 00=OUT事 务 10=IN事 务 11=SETUP事 务 00=端 点 0 01=端 点
14、1 10=端 点 2 位 1 位 0 当 前 端 点 11=USB总线 复 位 下 面 是中断 状态 的 分 析 说明 。在内置固件 模式 的 USB设备方 式下 ,单片机 只需要处理 表 中 标 注 为 灰色 的中断 状态 , CH372内 部自动处理 了 其它 中断 状态 。 中断 状态 值 状态名称 中断 原因 分 析 说明 03H 07H 0BH 0FH USB_INT_BUS_RESET1 USB_INT_BUS_RESET2 USB_INT_BUS_RESET3 USB_INT_BUS_RESET4 检 测 到 USB总线 复 位 0CH USB_INT_EP0_SETUP 端 点
15、 0的接 收 器接 收 到数据, SETUP成 功 00H USB_INT_EP0_OUT 端 点 0的接 收 器接 收 到数据, OUT成 功 08H USB_INT_EP0_IN 端 点 0的 发送 器 发送 完 数据, IN成 功 01H USB_INT_EP1_OUT 辅助 端 点 /端 点 1接 收 到数据, OUT成 功 09H USB_INT_EP1_IN 中断端 点 /端 点 1发送 完 数据, IN成 功 02H USB_INT_EP2_OUT 批量 端 点 /端 点 2接 收 到数据, OUT成 功 0AH USB_INT_EP2_IN 批量 端 点 /端 点 2发送 完
16、数据, IN成 功 05H USB_INT_USB_SUSPEND USB总线挂 起 事件(如 果已 CHK_SUSPEND) 06H USB_INT_WAKE_UP 从 睡眠 中 被唤醒 事件(如 果已 ENTER_SLEEP) 5.6. 命令 UNLOCK_USB 该 命令 释放 当 前 USB缓冲区 。 为 了 防止 缓冲区 覆盖 , CH372向 单片机 请求 中断 前首先锁 定 当 前 缓 冲区 ,暂停 所 有的 USB通讯, 直 到单片机通 过 UNLOCK_USB命令 释放 当 前 缓冲区 ,或者 通 过 RD_USB_DATA 命令 读 取 数据 后 才会释放 当 前 缓冲区
17、。 该 命令 不 能 多 执 行 , 也 不 能 少执 行 。 5.7. 命令 RD_USB_DATA 该 命令 从 当 前 USB中断的端 点缓冲区 中读 取 数据 块并释放 当 前 缓冲区 。 首先 读 取 的输出数据是数 据 块长 度 , 也 就是 后 续 数据 流 的 字节 数。数据 块长 度 的有 效 值 是 0至 64,如 果长 度 不 为 0, 则 单片机 必须将 后 续 数据 从 CH372逐 个读 取 完 ;读 取 数据 后 , CH372自动 释放 USB当 前 缓冲区 , 从而 可以 继续 接 收 USB主 机 发来 的数据。 5.8. 命令 WR_USB_DATA5 该
18、 命令向 USB端 点 1的上 传缓冲区 写 入 数据 块 ,在内置固件 模式下 , USB端 点 1就是中断端 点 。 首先 写 入 的输 入 数据是数据 块长 度 , 也 就是 后 续 数据 流 的 字节 数。数据 块长 度 的有 效 值 是 0至 8,如 果长 度 不 为 0, 则 单片机 必须将 后 续 数据 逐 个写 入 CH372。 5.9. 命令 WR_USB_DATA7 该 命令向 USB端 点 2的上 传缓冲区 写 入 数据 块 ,在内置固件 模式下 , USB端 点 2就是 批量 端 点 。 首先 写 入 的输 入 数据是数据 块长 度 , 也 就是 后 续 数据 流 的
19、字节 数。数据 块长 度 的有 效 值 是 0至 64, 如 果长 度 不 为 0, 则 单片机 必须将 后 续 数据 逐 个写 入 CH372。 5.10. 命令 GET_IC_VER 该 命令获取 芯片及固件版本。 返回 的一个 字节 数据是版本 号 , 其 位 7为 1,位 6为 0,位 5 位 0 为 版本 号 。 对 于 CH372T芯片, 返回值无 效为 5FH; 对 于 CH372A芯片, 返回值 为 0A2H, 去掉 位 7的 1, 实 际 版本 号为 22H。 CH372中文手册(一) 5.11. 命令 ENTER_SLEEP 该 命令使 CH372A芯片 进 入 低 功 耗
20、 睡眠 挂 起 状态 。 进 入 低 功 耗状态后 , CH372A芯片的 时 钟停 振 , 从而节 约 电 能, 直 到 检 测 到以 下 两 种 情况之 一 才 退 出 低 功 耗状态 :一是 检 测 到 USB总线有 信 号 ; 二 是 单片机 向 CH372A芯片写 入 新 的 命令 ( 没 有输 入 数据的 命令 )。 通 常 情况 下 , CH372A芯片 从 低 功 耗状态退 出 并恢 复 到 正 常 工 作 状态 需要 几毫秒 的 唤醒 时间 , 当 完全 恢 复 到 正 常 工 作 状态后 , CH372A将 产 生 USB_INT_WAKE_UP事件中断。 5.12. 命令
21、 CHK_SUSPEND 该 命令 设置 检查 USB总线挂 起 状态 的方 式 。 该 命令 需要 输 入 两 个数据, 分别 是数据 10H和 检查 方 式 。 检查 方 式 有 2种 : 00H说明 不 检查 USB挂 起 (上 电 或复 位 后 的 默认 值 ); 04H说明 以 50mS为间 隔 检查 USB挂 起 。 USB总线挂 起 状态 包 括 两 种 情况 :一是 USB信 号 线 物 理 断 开 , 完全 没 有 USB信 号 ; 二 是 USB主 机 端 停止发送 SOF信 号 , 也 就是 USB主 机端 要求 USB设备 进 入 挂 起 状态 。 当 检查 到 USB
22、总线挂 起 状态后 , CH372A将 产 生 USB_INT_USB_SUSPEND事件中断。 5.13. 命令 RD_USB_DATA0 该 命令 从 当 前 USB中断的端 点缓冲区 中读 取 数据 块 。 首先 读 取 的输出数据是数据 块长 度 , 也 就是 后 续 数据 流 的 字节 数。数据 块长 度 的有 效 值 是 0至 64,如 果长 度 不 为 0, 则 单片机 必须将 后 续 数据 从 CH372A逐 个读 取 完 。 该 命令 与 RD_USB_DATA命令 的 唯 一 区 别 是 后者 在读 取 完成 后还 会 自动 释放 当 前 USB缓冲区 ( 相 当于 再加
23、上 UNLOCK_USB命令 )。 6、功能 说明 6.1. 一 般 说明 CH372套件 包 括 CH372芯片和计算机端的 CH372驱动程序 。在本地端, CH372芯片以内置的固件 程序自动处理 了 USB通讯中的 基 本事 务 ;在计算机端, 驱动程序 以及 动 态链 接 库 等软件 向 计算机 应 用 层提供 应 用层接口。 6.2. 本地端的 硬 件 CH372芯片在本地端提供了通用的 被 动 并 行 接口, 包 括 : 8位 双向 数据总线 D7 D0、读选通输 入 引脚 RD#、写选通输 入 引脚 WR#、片选输 入 引脚 CS#、中断输出 引脚 INT#以及地 址 输 入
24、引脚 A0。通 过 被 动 并 行 接口, CH372芯片可以 很 方便地挂接到 各种 8位单片机、 DSP、 MCU的系统总线上, 并 且 可以 与 多 个 外围 器件 共 存 。 CH372芯片的 RD#和 WR#可以 分别连 接到单片机的读选通输出 引脚 和写选通输出 引脚 。 CS#由 地 址 译 码 电 路 驱动 ,用 于当 单片机具有 多 个 外围 器件 时进 行 设备选 择 。 INT#输出的中断 请求 是 低 电 平 有 效 , 可以 连 接到单片机的中断输 入 引脚或者 普 通 I/O引脚 ,单片机可以 使 用中断方 式 或者 查 询 方 式 获 知 中 断 请求 。 当 W
25、R#为高 电 平 并 且 CS#和 RD#及 A0都 为低 电 平时 , CH372中的数据通 过 D7 D0输出; 当 RD#为 高 电 平 并 且 CS#和 WR#及 A0都 为低 电 平时 , D7 D0上的数据 被 写 入 CH372芯片中; 当 RD#为高 电 平 并 且 CS#和 WR#都 为低 电 平 而 A1为高 电 平时 , D7 D0上的数据 被 作 为命令码 写 入 CH372芯片中。 CH372芯片的 UD+和 UD-引脚 应 该 直 接 连 接到 USB总线上。如 果 为 了芯片 安 全而 串 接 保 险 电 阻或 者 电 感 , 那么 交 直 流 等 效串 联 电
26、阻 应 该 在 5 之 内。 CH372芯片内置了 电源 上 电 复 位 电 路 ,一 般 情况 下 , 不需要外部 提供 复 位。 CH372芯片 正 常 工 作 时 需要外部 为其 提供 12MHz的 时 钟信 号 。一 般 情况 下 , 时 钟信 号 由 CH372内 置的 反 相 器通 过晶体 稳频 振荡 产 生 。 外围电 路 只需要 在 XI和 XO引脚 之 间连 接一个 标 称 频率 为 12MHz 的 晶体 , 并 且 分别为 XI和 XO引脚 对 地 连 接一个 高 频 振荡 电容 。如 果 从外部 直 接输 入 12MHz时 钟信 号 , 那么 应 该 从 XI引脚 输 入
27、 , 而 XO引脚 悬空 。 CH372芯片 支持 5V电源电压 或者 3.3V电源电压 。 当使 用 5V工 作 电压 时 , CH372芯片的 VCC引脚CH372中文手册(一) 输 入外部 5V电源 , 并 且 V3引脚 应 该 外 接 容量 为 0.01uF左右 的 电源 退耦 电容 。 当使 用 3.3V工 作 电压 时 , CH372芯片的 V3引脚 应 该 与 VCC引脚 相 连 接,同 时 输 入外部 的 3.3V电源 , 并 且 与 CH372芯片 相 连 接的 其它 电 路 的 工 作 电压不 能 超 过 3.3V。 6.3. 内 部 结构 CH372芯片内 部 集 成 了
28、 PLL倍频 器、 USB接口 SIE、数据 缓冲区 、 被 动 并 行 接口、 命令 解 释 器、 通用的固件 程序 等 主要部 件。 PLL倍频 器用 于 将 外部 输 入 的 12MHz时 钟 倍频 到 48MHz,作 为 USB接口 SIE时 钟 。 USB接口 SIE用 于 完成 物 理 的 USB数据接 收 和 发送 , 自动处理 位 跟踪 和同 步 、 NRZI编 码 和 解 码 、 位 填充 、 并 行 数据与 串 行 数据 之 间 的 转 换 、 CRC数据 校验 、事 务 握 手、出 错重 试 、 USB总线 状态 检 测 等。 数据 缓冲区 用 于 缓冲 USB接口 SI
29、E收发 的数据。 被 动 并 行 接口用 于 与 外部 单片机 /DSP/MCU交换 数据。 命令 解 释 器用 于分 析并 执 行外部 单片机 /DSP/MCU提 交 的 各种 命令 。 通用的固件 程序 用 于 自动处理 USB默认 端 点 0的 各种标准 事 务 等。 CH372芯片内 部 具有 5个 物 理 端 点 : 端 点 0是 默认 端 点 , 支持 上 传 和 下传 ,上 传 和 下传缓冲区各 是 8个 字节 ; 端 点 1包 括 上 传 端 点 和 下传 端 点 ,上 传 和 下传缓冲区各 是 8个 字节 ,上 传 端 点 的端 点 号 是 81H, 下传 端 点 的端 点
30、号 是 01H; 端 点 2包 括 上 传 端 点 和 下传 端 点 ,上 传 和 下传缓冲区各 是 64个 字节 ,上 传 端 点 的端 点 号 是 82H, 下传 端 点 的端 点 号 是 02H。 在内置固件 模式下 ,端 点 2的上 传 端 点 作 为 批量 数据 发送 端 点 ,端 点 2的 下传 端 点 作 为 批量 数据 接 收 端 点 ,端 点 1的上 传 端 点 作 为 中断端 点 , CH372T芯片的端 点 1的 下传 端 点 被禁止 , CH372A芯片 的端 点 1的 下传 端 点 作 为 辅助 端 点 。 在 外部 固件 模式下 ,端 点 0作 为 默认 端 点 ,
31、端 点 1和端 点 2可以 根 据 USB产品的 需要 选 择 使 用, 并 且 可以 由外部 固件提供的 描 述 符 分别 定义 其 用 途 。通 常 情况 下 ,端 点 2作 为 数据 传 输的 主 端 点 ,如 果 USB产品 需要 ,可以 将 端 点 1作 为 辅助 端 点 。 下 图 为 CH372A芯片内 部 的中断 逻辑图 。 6.4. 本地端的单片机软件 CH372芯片 占 用 两 个地 址 位, 当 A0引脚为高 电 平时 选 择 命令 端口,可以写 入 命令 ; 当 A0引脚为 低 电 平时 选 择 数据端口,可以读写数据。 单片机通 过 8位 并 口 对 CH372芯片
32、进 行 读写, 所 有操作 都 是 由 一个 命令码 、 若干 个输 入 数据和 若 干 个输出数据 组 成 , 部 分命令 不需要 输 入 数据, 部 分命令 没 有输出数据。 命令 操作 步骤 如 下 : 、 在 A0=1时向命令 端口写 入 命令代码 ; CH372中文手册(一) 、 如 果该 命令 具有输 入 数据, 则 在 A0=0时 依次 写 入 输 入 数据, 每 次 一个 字节 ; 、 如 果该 命令 具有输出数据, 则 在 A0=0时 依次 读 取 输出数据, 每 次 一个 字节 ; 、 命令 完成 ,可以 暂停 或者 转 到 继续 执 行下 一个 命令 。 CH372芯片
33、专门 用 于 处理 USB通讯,在接 收 到数据 后或者 发送 完 数据 后 , CH372以中断方 式 通 知 单片机 进 行处理 。 单片机通 过 CH372芯片接 收 数据的 处理 步骤 如 下 : 、 当 CH372接 收 到 USB主 机 发来 的数据 后 , 首先锁 定 当 前 USB缓冲区 , 防止被 后 续 数据 覆盖 , 然 后 将 INT#引脚 设置 为低 电 平 , 向 单片机 请求 中断; 、 单片机 进 入 中断 服 务程序 , 首先 执 行 GET_STATUS命令获取 中断 状态 ; 、 CH372在 GET_STATUS命令 完成 后 将 INT#引脚 恢 复为
34、高 电 平 , 取 消 中断 请求 ; 、 由 于 通 过 上述 GET_STATUS 命令获取 的中断 状态 是 “ 下传成 功 ”, 所 以单片机 执 行 RD_USB_DATA命令 从 CH372读 取 接 收 到的数据; 、 CH372在 RD_USB_DATA命令 完成 后 释放 当 前 缓冲区 , 从而 可以 继续 USB通讯; 、 单片机 退 出中断 服 务程序 。 单片机通 过 CH372芯片 发送 数据的 处理 步骤 如 下 : 、 单片机 执 行 WR_USB_DATA命令向 CH372写 入要 发送 的数据; 、 CH372被 动 地等 待 USB主 机在 需要 时取 走
35、 数据; 、 当 USB主 机 取 走 数据 后 , CH372首先锁 定 当 前 USB缓冲区 , 防止 重 复 发送 数据, 然 后 将 INT# 引脚 设置 为低 电 平 , 向 单片机 请求 中断; 、 单片机 进 入 中断 服 务程序 , 首先 执 行 GET_STATUS命令获取 中断 状态 ; 、 CH372在 GET_STATUS命令 完成 后 将 INT#引脚 恢 复为高 电 平 , 取 消 中断 请求 ; 、 由 于 通 过 上述 GET_STATUS 命令获取 的中断 状态 是 “ 上 传成 功 ”, 所 以单片机 执 行 WR_USB_DATA命令向 CH372写 入
36、另 一 组 要 发送 的数据,如 果没 有 后 续 数据 需要 发送 , 那么 单片机 不 必 执 行 WR_USB_DATA命令 ; 、 单片机 执 行 UNLOCK_USB命令 ; 、 CH372在 UNLOCK_USB命令 完成 后 释放 当 前 缓冲区 , 从而 可以 继续 USB通讯; 、 单片机 退 出中断 服 务程序 ; 、 如 果 单片机 已 经 写 入 了 另 一 组 要 发送 的数据, 那么 转 到 , 否则 结束 。 6.5. 计算机端的软件接口 CH372在计算机端提供了 应 用层接口, 应 用层接口是 由 CH372动 态链 接 库 DLL提供的 面 向 功能 应 用
37、的 API, 所 有 API在 调 用 后 都 有操作 状态 返回 , 但 不 一 定 有 应 答 数据。 CH372动 态链 接 库 提供的 API包 括 :设备 管 理 API、数据 传 输 API、中断 处理 API。 有 关 API参 数的 说明 请 参考 CH372DLL.H或者 CH375DLL.H。 设备 管 理 API: 打 开 设备: CH375OpenDevice 关 闭 设备: CH375CloseDevice 获取 USB设备 描 述 符 : CH375GetDeviceDescr 获取 USB配置 描 述 符 : CH375GetConfigDescr 复 位 USB
38、设备: CH375ResetDevice 设置 USB数据读写的 超时 : CH375SetTimeout 设置 独占 使 用 当 前 CH375设备: CH375SetExclusive 设 定 内 部缓冲 上 传模式 : CH375SetBufUpload 查 询 内 部 上 传缓冲区 中的 已 有数据 包 个数: CH375QueryBufUpload 数据 传 输 API: 读 取 数据 块 (数据上 传 ): CH375ReadData 写出数据 块 (数据 下传 ): CH375WriteData 放 弃 数据 块 读操作: CH375AbortRead 放 弃 数据 块 写操作:
39、 CH375AbortWrite CH372中文手册(一) 写出 辅助 数据( 辅助 数据 下传 ): CH375WriteAuxData 中断 处理 API: 读 取 中断数据: CH375ReadInter 放 弃 中断数据读操作: CH375AbortInter 设 定 中断 服 务程序 : CH375SetIntRoutine 6.6. 端 对 端的 USB传 输 (供 应 用层设计 参考 ) CH372在计算机 应 用层与本地端单片机 之 间 提供了端 对 端的 连 接,在 这 个 基础 上, USB产品的设 计 人员 可以选用 两 种 通讯方 式 :单 向 数据 流 方 式 、 请
40、求 加 应 答 方 式 。 前 者使 用 两 个方 向 相 反 的单 向 数 据 流 进 行 通讯,具有 相对 较 高 的数据 传 输 速 率 , 但 是数据 不容 易同 步 ; 后者使 用 主动请求 和 被 动应 答 的 查 询 方 式 进 行 通讯,数据 自动 同 步 ,具有 较好 的 交 互性 和可控 性 , 程序 设计简单, 但 是数据 传 输 速 率 相对 较 低 。 6.6.1. 逻辑结构 CH372A提供了 4个 相 互独立 的端 对 端的 逻辑 传 输通 道 , 分别称为 :数据上 传 管道 、数据 下传 管 道 、中断上 传 管道 、 辅助 数据 下传 管道 。 CH372并
41、未 定义各 个 管道 的用 途 , 也未 定义 其 数据 格 式 , 所 以 USB产品的设计 人员 可以 根 据 需要自行定义 其 用 途 , 并 在上位机与 下 位机 之 间 约 定各 个 传 输通 道 中 的数据 格 式 。 下 面 的 逻辑结构图 只 适 用 于 内置固件 模式 , 所 以 没 有 包 含 默认 端 点 0。 除 了 图 中的 3个 管道 之 外 , CH372A芯片 还 提供 辅助 数据 下传 管道 ,与数据 下传 管道 类 似 , 但 是有 4个 区 别 :上位机的 API是 WriteAuxData; 下 位机的 辅助 数据 下传 端 点 是 01H;单 次 最大
42、 长 度 是 8字节 ;中断 状态 是 01H。 中断上 传 管道 API: ReadInter 单 次 最大 长 度 8字节 如 果 单片机 未 准 备 好 数据 则 每 毫秒 内 至 少 自动 尝 试 一 次 数据上 传 管道 API: ReadData 单 次 最大 长 度 4096 如 果 单片机 未 准 备 好 数据 则 计算机 空 闲 时 自动 连 续 尝 试 数据 下传 管道 API: WriteData 单 次 最大 长 度 4096 如 果 单片机 未 准 备 好 接 收 则 计算机 空 闲 时 自动 连 续 尝 试 中断上 传 端 点 81H 单 次 最大 长 度 8字节
43、用 WR-USB-DATA5 命令 写 入 数据, 当 上位机 收 到数据 后 产 生 中断 状态 09H 数据上 传 端 点 82H 单 次 最大 长 度 64 用 WR-USB-DATA7 命令 写 入 数据, 当 上位机 收 到数据 后 产 生 中断 状态 0AH 数据 下传 端 点 02H 单 次 最大 长 度 64 当 收 到上位机数据 后 产 生 中断 状态 02H 用 RD-USB-DATA 命令 读出数据 CH372芯片( 或者 是 工 作 于 设备方 式 的 CH375芯片) 计算机的 USB主 机接口及 驱动程序 等( 或者 由 工 作 于 主 机方 式 的 CH375实现
44、 ) USB 连 线 下 位机:单片机, DSP, MCU等 上位机:计算机的 应 用 程序 ( 或者 是 CH375主 机接口 程序 ) CH372中文手册(一) 6.6.2. 单 向 数据 流 方 式 单 向 数据 流 方 式 使 用一个上 传 数据 流 和一个 下传 数据 流 进 行 双向 数据通讯, 两 个数据 流之 间 完全 独立 。 下传 数据 流 是 由 计算机 应 用层通 过 数据 下传 API发起 的, CH372芯片以 64个 字节 为 一 组 , 将 一 个 较 大 的数据 块 分 成 多 组 提 交 给 单片机;如 果 应 用层 发送 150个 字节 的数据 块 , 则
45、 单片机 会被 中断 3 次 , 前两次 各 获取 64个 字节 , 最 后 一 次 获取 22个 字节 。 上 传 数据 流 的 发起 方 式 有 两 种 :一 种 是 查 询 方 式 , 指 计算机 应 用层 定 期 以 查 询 方 式 发起 ; 另 一 种 是 伪 中断方 式 , 指 单片机以中断数据通 知 计算机 应 用层, 再 由 计算机 应 用层 发起 。 因 为 USB总线是 主 从式 结构 , 只 有在计算机 主动 联 系 USB设备 时 , USB设备 才 能 向 计算机上 传 数据。 上 传 数据 流 以 查 询 方 式 发起 的系统中,计算机 应 用层总是通 过 数据上
46、传 API尝 试 读 取 数据。 当 单 片机 没 有数据 需要 上 传 时 ,计算机 应 用层就 会 一 直 等 待 (如 果 设置 USB读 超时则 会 退 出), 实 际 上 该 应 用层 程序 的线 程 将会被 操作系统挂 起 。 当 单片机 需要 上 传 数据 时 , 应 该将 数据写 入 CH372批量 端 点 的上 传缓冲区 中,接 着 计算机 应 用层 自动 取 走 数据, 然 后 CH372芯片以中断方 式 通 知 单片机上 传成 功, 以便单片机 继续 上 传 后 续 数据。 使 用 这 种 方 式 , 建 议用 CH375SetBufUpload设 定 内 部缓冲 上 传
47、 。 上 传 数据 流 以 伪 中断方 式 发起 的系统中,计算机 应 用层 初始 化 时 设置一个 伪 中断 服 务程序 , 然 后 应 用层就 不需要 再 涉 及到上 传 数据 流 。 当 单片机 需要 上 传 数据 时 , 首先将 数据写 入批量 端 点 的上 传缓 冲区 中, 然 后 将 中断 特 征 数据写 入 中断端 点 的上 传缓冲区 中。在 1毫秒之 内( 理 论 值 ),与中断 特 征 数据 对应 的 伪 中断 服 务程序 被 激 活 , 伪 中断 服 务程序 通 知 主程序 调 用数据上 传 API获 得 上 传 数据 块 。 在 此期 间 ,单片机 将会收 到 CH372
48、芯片通 知 的 两次 中断, 首先 是中断端 点 上 传成 功中断, 然 后 是 批量 端 点 上 传成 功中断。 6.6.3. 请求 加 应 答 方 式 请求 加 应 答 方 式 使 用一个 下传 的 主动请求 和一个上 传 的 被 动应 答 进 行交 互 式 的 双向 数据通讯, 下传 与上 传 一一 对应 , 相 互 关 联 。 主动请求 是 指 由 计算机 应 用层 下传 给 单片机的数据 请求 , 被 动应 答 是 指 在单片机 收 到数据 请求 后 ,上 传 给 计算机 应 用层的 应 答 数据。 所 有的通讯 都 由 计算机 应 用层 发起 , 然 后 以接 收 到单片机的 应
49、答结束 , 完 整 的 过程 包 括 : 计算机 应 用层 按 事 先约 定 的 格 式 将 数据 请求 发送 给 CH372芯片; CH372芯片以中断方 式 通 知 单片机; 单片机 进 入 中断 服 务程序 , 获取 CH372的中断 状态 并 分 析 ; 如 果 是上 传 , 则 释放 当 前 USB缓冲区 , 然 后退 出中断 程序 ; 如 果 是 下传 , 则 从 数据 下传缓冲区 中读 取 数据 块 ; 分 析 接 收 到的数据 块 , 准 备 应 答 数据, 也 可以 先 退 出中断 程序 再 处理 ; 单片机 将 应 答 数据写 入批量 端 点 的上 传缓冲区 中, 然 后退 出中断 程序 ; CH372芯片 将 应 答 数据 返回 给 计算机; 计算机 应 用层接 收 到 应 答 数据。 CH372中文手册(一) 7、 参 数 7.1. 绝 对 最大 值 ( 临界 或者超 过 绝 对 最大 值将 可能 导致 芯片 工 作 不 正 常 甚 至 损坏 ) 名称 参 数 说明 最 小 值 最大 值 单位 VCC=5V -