CDC_Class_AN1164_Final.book

Size: px
Start display at page:

Download "CDC_Class_AN1164_Final.book"

Transcription

1 嵌入式设备上的 USB CDC 类 AN1164 作者 : 引言 Bud Caldwell Microchip Technology Inc. 对于最终用户而言, 有了通用串行总线 (Universal Serial Bus,USB), 把外部设备连接到个人计算机上, 已经变得非常简单, 几乎不再需要过去必不可少的大量连接线 RS-232 串行 COM 端口便是不再需要的连接之一, 它已经越来越罕见 事实上, 由于很多时髦的笔记本电脑已经不再配备 RS-232 串行 COM 端口, 因此对于那些需要从外部设备到主机 PC 的串行通信通道的开发人员而言, 这可能是一个挑战 幸运的是, 设备可以使用 USB 通信设备类 (Communication Device Class,CDC), 它使得用户能够充分利用 USB 的简单性, 同时还提供 COM 端口功能 CDC 是通信设备连接 USB 的接口 尽管旨在用于诸如调制解调器这样的设备以及网络接口,CDC 的功能子集也可以用来仿真串行端口, 从而提供 虚拟的 UART USB 的总体灵活性和功能, 需要用于设备标识 配置 控制和数据传输的管理协议 Microchip PIC32 CDC 串行驱动程序处理 USB, 使设备设计人员无需再处理 USB 本文档将对 Microchip PIC32 USB CDC 串行驱动程序进行说明 ; 对于希望在应用中采用 CDC 串行驱动程序的开发人员而言, 本文档可用作编程指南 CDC 串行驱动程序提供了一个简单的 类似 UART 的固件接口, 用来向主机发送数据 接收来自主机的数据, 用来在应用中隐藏大部分的 USB 细节 提供的样本代码很容易进行定制, 减少了工作量, 降低了学习难度 ; 如果没有样本代码的话, 在给设备添加 USB 接口时, 必需的工作量和学习难度要大很多 如果 Microchip USB CDC 串行驱动程序没有提供应用所需的 USB 相关功能, Microchip 还提供了其他常用 USB 设备类的样本实现 这些样本实现是建立在 Microchip PIC32 USB 设备固件栈的基础之上 ( 参见附录 D: USB 固件栈架构 ) 如果没有满足应用所需的程序示例, 设计人员可以使用 Microchip USB 协议栈, 开发自己的供应商或类特定的功能驱动程序 ( 参见 AN1176 PIC32 USB 设备栈编程指南 ), 这仍然将减少开发人员必须直接处理的 USB 细节的工作量 假设 1. C 程序设计语言的实用知识 2. 对 USB 2.0 协议有一定的熟悉 3. 熟悉 Microchip MPLAB IDE 和 MPLAB REAL ICE 在线仿真器 功能与特性 支持 USB 外部设备应用 在支持 CDC 抽象控制模型的个人计算机 (PC) 上仿真串行 COM 端口 为至 / 自主机的数据传输提供简单的固件接口 处理标准的 USB 设备请求, 如 Universal Serial Bus Specification, Revision 2.0 第 9 章中所述 ( 处理 CDC 特定的请求 简化 USB 描述符定义和配置信息 事件驱动系统 ( 中断或查询 ) 限制 使用控制和数据端点 使用中断传输协议进行状态通知 使用批量传输协议进行数据传输 理论最大数据吞吐量 :1,216,000 字节 / 秒 注 : 最大数据吞吐量数字基于下列假定 : 总线上只有数据传输, 每个数据包传输 64 字节的最大数据有效载荷 ( 批量传输的更多信息, 请参见 USB 2.0 Specification (USB 2.0 规范 ) 的第 5.8 节 ) 2009 Microchip Technology Inc. DS01164A_CN 第 1 页

2 系统硬件 本应用的开发, 针对下列硬件 : PIC32 系列单片机 PIM (Processor Interface Module, 处理器接口模块 ), 支持 USB Microchip Explorer 16 开发板 USB PICtail Plus 子板 PIC MCU 存储器资源需求 关于整个程序和数据存储器需求, 请参阅安装目录下的版本说明 PIC MCU 硬件资源需求 USB CDC 串行演示使用下列 I/O 引脚 : 表 1: PIC MCU I/O 引脚用途 I/O 引脚用途 D+ (IO) USB D+ 差动数据信号 D- (IO) USB D- 差动数据信号 VBUS ( 输入 ) 检测 USB 电源 ( 不工作在总线供电方式下 ) VUSB ( 输入 ) USB D+/D- 收发器的电源输入 RD6 ( 输入 ) 监控 Explorer 16 开发板上开关 3 的状态 安装源文件 Microchip PIC32 USB CDC 串行驱动程序的源代码可以 从 Microchip 网站下载 ( 参见附录 G: Microchip USB CDC 串行驱动程序的源代码 ) 源代码以 Windows 安装文件的形式提供 执行下列步骤, 完成安装 : 1. 执行安装文件 Windows 安装向导将指导您完成 安装过程 2. 在继续安装之前, 必须点击 I Accept( 我接受 ), 接受软件许可协议 3. 安装过程完成之后, 应查看 Microchip USB CDC Serial 程序组 完整的源代码将被复制到 选定的目录中 4. 阅读版本说明, 了解最新版本提供的功能特性和 限制 DS01164A_CN 第 2 页 2009 Microchip Technology Inc.

3 源文件构成 CDC 串行设备 USB 协议栈包含下列源文件和头文件 : 表 2: 源文件 文件目录说明 usb_device.c Microchip\USB USB 设备层 ( 设备抽象和协议处理, 如 Universal Serial Bus Specification, Revision 2.0 第 9 章所述 ) usb_hal.c Microchip\USB USB 硬件抽象层 (Hardware Abstraction Layer, HAL) 接口支持 usb_hal_core.c Microchip\USB HAL 接口支持使用的 USB 控制器函数 usb_device_local.h Microchip\USB USB 设备层的私有定义 usb_hal_core.h Microchip\USB HAL 控制器内核的私有定义 usb_hal_local.h Microchip\USB HAL 的私有定义 usb.h Microchip\Include\USB 总的 USB 头文件 ( 包括所有其他的 USB 头文件 ) usb_ch9.h Microchip\Include\USB USB 设备框架 ( Universal Serial Bus Specification, Revision 2.0 第 9 章 ) 定义 usb_common.h Microchip\Include\USB 公共的 USB 协议栈定义 usb_device.h Microchip\Include\USB USB 设备层接口定义 usb_hal.h Microchip\Include\USB USB HAL 接口定义 usb_device_cdc_serial.h Microchip\Include\USB CDC 串行功能驱动程序 API 头文件 usb_func_serial.c Microchip\USB\ cdc_serial_device_driver CDC 串行功能驱动程序实现 usb_func_serial_local.h Microchip\USB\ CDC 串行功能驱动程序的私有定义 cdc_serial_device_driver HardwareProfile.h usb_cdc_serial_device_demo 硬件配置参数 io_cfg.h usb_cdc_serial_device_demo 宏, 支持对连接到开关的 GPIO 位的使用 main.c usb_cdc_serial_device_demo 主要的应用源文件 usb_config.h usb_cdc_serial_device_demo 应用特定的 USB 配置选项 ( 见 USB 固件栈配置 ) usb_app.c usb_cdc_serial_device_demo 应用特定的 USB 支持 2009 Microchip Technology Inc. DS01164A_CN 第 3 页

4 演示应用 演示应用将说明 PIC32 系列 CDC 串行功能驱动程序如何为 PIC32 固件应用提供 虚拟 UART 以及怎样在主机 PC 上仿真串行 COM 端口 固件应用提供两个服务 : 数据回显 (Data Echo) 服务服务接收发送给它的任何数据, 再把数据原样发送回主机, 演示了基本的双向数据传输 问候消息 (Hello Message) 服务当 Explorer 16 开发板上的 SW3 按下时, 服务发送一个文本字符串给主机 要测试这些服务, 使用主机 PC 上的任何终端仿真程序 在安装源文件时, 安装过程中将把 PIC32 USB CDC 串行演示注册为 PC 上的标准串行 COM 端口 把固件编程 ( 烧写 ) 到 PIC32 中 ( 参见下面的编程说明 ) 之后, 把开发板连接到主机的 USB 上, 然后按照屏幕上显示的指示来安装缺省的 (OS 提供的 ) 驱动程序 演示应用将作为一个新的 COM 端口出现 ( 端口号由 OS 指定 ) 在终端仿真程序应用中, 选中这个 COM 端口以测试服务 注 : 当回车 / 键入 (Return/Enter) 键按下时, 如果光标不前进到下一行, 应配置终端仿真程序, 给输入的行尾 (end-of-line) 符添加换行 (line-feed) 字符 此外, 应确保终端仿真程序没有配置为本地回应 (local echo) 键入字符 在连接到 PIC32 之后, 就能在终端仿真程序中键入字符, 并看到演示应用回显的文本 还可以按下开关 (S3), 将看到产生的问候消息 编程演示应用 要把演示应用编程到目标器件中, 必须使用 MPLAB REAL ICE 在线仿真器 下列步骤都假设您将使用 MPLAB IDE 如果不是的话, 请参考您所用编程器的说明书 1. 把 MPLAB REAL ICE 连接到 Explorer 16 板或您的目标板 2. 给目标板上电 3. 启动 MPLAB IDE 4. 选中您选择的 PIC 器件 ( 仅在导入先前已编译好的十六进制文件时才需要这一步 ) 5. 使能 MPLAB REAL ICE, 把它作为编程器 6. 如果打算使用先前已编译好的十六进制文件, 把文件导入 MPLAB 7. 如果要重新编译文件, 打开项目文件, 执行编译 (build) 过程, 创建应用程序的十六进制文件 8. 演示应用包含了 Explorer 16 开发板所需的必要配置选项 如果要对其他类型的开发板编程, 请确保从 MPLAB IDE 配置设定菜单中选择了恰当的振荡器模式 9. 从 MPLAB IDE 编程器菜单中, 选择 Program ( 编程 ) 菜单项, 开始对目标器件进行编程 10. 几秒钟之后, 应该看到消息 Programming successful ( 编程成功 ) 如果没有看到, 仔细检查开发板和 MPLAB REAL ICE 的连接 进一步的帮助请参阅 MPLAB IDE 联机帮助 11. 移去开发板的电源, 把 MPLAB REAL ICE 电缆从目标板上断开 12. 重新给开发板上电, 确保 LCD 显示了标识 CDC 演示的消息 如果没有显示, 仔细检查编程步骤, 并在必要时重复这些步骤 DS01164A_CN 第 4 页 2009 Microchip Technology Inc.

5 主应用程序 在发生任何其他 USB 活动之前, 应用的 main 函数 必须调用一次 USBInitialize API, 以便初始化 USB 固件栈 然后, 它必须在 查询 循环中调用 USBTasks API ( 见图 1) 图 1: 主应用程序逻辑 // 初始化 USB 协议栈 USBInitialize(0); // 主处理循环 while(1) // 检查是否发生 USB 事件 // 并适当地处理 USB 事件 USBTasks(); } // 管理 回显数据服务 // 管理 问候消息服务 : 注 : 除非调用 USBInitialize, 否则 USB 接口模块是被禁止的, PIC32 将不会连接到 USB USBInitialize 例程辅之以应用特定的 USB 支持 ( 在 usb_app.c 文件中 ), 处理初始化 USB 固件栈所必需的所有事项 USBTasks 例程管理 USB 固件栈的状态, 并执行总线上发生事件所需的必要步骤 注 : 可以以查询的协作方式使用 USBTasks 例程, 如同所演示的那样 假如是这样的话, 在主循环中, 任何阻塞都不应超过几微秒, 否则就可能丢失事件 或者, 只要有 USB 中断发生, 就可从中断服务例程 (Interrupt Service Routine,ISR) 调用此例程 如果以这种方式调用 USBTasks 例程的话, 整个 USB 固件栈 (CDC 串行驱动程序的非用户 API 部分 ) 都工作在中断现场中 ( 包括应用的事件处理程序回调例程 ) 2009 Microchip Technology Inc. DS01164A_CN 第 5 页

6 数据回显服务 数据回显服务给出了如何通过 USB 像 UART 那样地进行数据读写的示例 下面的代码维护一个简单的状态机, 以便管理全局数据缓冲区 只要主机发送数据, 数据就将被接收到缓冲区中, 而后回显给主机 注 : 开始时状态变量 gstate 处于 BUFFER_EMPTY 状态 图 2: 数据回显服务 switch (gstate) case BUFFER_EMPTY: // 缓冲区为空, 可用于接收数据 // 如果缓冲区是空的, 读任何可用的数据 if (USBUSARTRxIsReady()) gstate = RECEIVING_DATA; USBUSARTRx(gBuffer, BUFFER_SIZE); } break; case RECEIVING_DATA: // 应用等待接收来自 USB 的数据 // 检查是否已经有了数据 if ( (gsize = USBUSARTRxGetLength()) > 0 ) gstate = DATA_AVAILABLE; // 故意跳入下一个 case 分支! 避免不必要的循环反复 } else break; } case DATA_AVAILABLE: // 已经接收到数据, 应用可以处理数据 // 如果发送器就绪, 把数据回送给主机 if (USBUSARTTxIsReady()) gstate = SENDING_DATA; USBUSARTTx(gBuffer, gsize); } break; case SENDING_DATA: // 应用等待 USB 上的数据发送结束 // 如果发送完成, 释放缓冲区, 接收新的数据 if (USBUSARTTxIsReady()) gsize = 0; gstate = BUFFER_EMPTY; } break; default: while(1); } // 无效状态, 挂起应用 DS01164A_CN 第 6 页 2009 Microchip Technology Inc.

7 状态机的第一循环将开始一个 Rx 传输, 以便接收来自主机的任何可用数据 为了完成这一任务, 状态机调用 USBUSARTRx API 例程, 把地址和数据缓冲区大小传递给例程 不过, 在调用 USBUSARTRx 之前, 它必须调用 USBUSARTRxIsReady API 例程, 确保 虚拟 UART 当前并没有正忙于接收其他的数据 当然, 循环第一次执行时, 虚拟 UART 不会忙, 但在后续循环执行中, 它很有可能处于忙状态 当新的 Rx 传输开始时, 状态机从 BUFFER_EMPTY 状态变为 RECEIVING_DATA 状态 当处于 RECEIVING_DATA 状态时, 应用调用 USBUSAR- TRxGetLength API 例程, 查看已经接收到了多少数据 ( 如果有的话 ) 这很重要, 因为主机没有义务准确地提供应用所请求的数据量 ( 尽管固件栈将不允许应用接收更多的数据 ) 应用把这个量存放在 gsize 变量中 一旦接收到数据, 状态机就变为 DATA_AVAILABLE 状态 ( 在 switch 语句中, 直接掉入下一个 case, 以便避免潜在的不必要的循环反复 ) 注 : 只要 USBUSARTRxGetLength 例程报告接收到了任何数量的数据,CDC 串行驱动程序将不再接收更多来自主机的数据, 一直到再次调用 USBUSARTRx 例程为止 由于本简单应用的设计只是 半双工 的, 要么发送, 要么接收, 不能同时发送和接收, 所以应用将不会马上再次调用 USBUSARTRx 更复杂的应用可以使用不同的缓冲区来立即再次调用 USBUSARTRx, 使得系统看上去似乎是在发送数据的同时又在接收数据, 从而提供 全双工 功能 一旦缓冲区中有可用的数据, 状态机就将调用 USBUSARTTxIsReady API 例程, 查看虚拟 UART 是否准备好发送数据 如果准备就绪的话, 状态机将调用 USBUSARTTx 例程, 开始发送数据, 发送的数据量由 USBUSARTRxGetLength 指明, 然后状态机变为 SENDING_DATA 状态 在 SENDING_DATA 状态, 通过调用 USBUSARTTxIs- Ready 例程, 应用查看虚拟 UART 是否已经完成数据传输 只要 USBUSARTTxIsReady 返回 TRUE, 状态机就将复位缓冲区中数据的长度, 并回复到 BUFFER_EMPTY 状态, 重新开始整个过程 使用这种方法, 应用连续地读取来自主机的数据, 并把数据 回显 给主机 问候消息服务一旦 Explorer 16 开发板上的开关 3 按下, 问候消息服务就将向主机发送一个文本字符串 这展示了 Microchip PIC32 USB CDC 串行驱动程序提供的发送字符串 API 下面的代码片段 它来自应用主循环的应用特定的任务部分 提供了这个服务 图 3: 问候消息服务 // 如果按钮按下, 就显示消息 if(switch3ispressed()) if(usbusarttxisready()) USBUSARTPuts(gTestStr); } } 当 Explorer 16 板上的 SW3 按下时, Switch3IsPressed 例程返回 TRUE 注 : SW3 不进行防反跳, 所以按一次按钮可能返回 TRUE 多次 每次执行循环时都将检查 SW3 如果它被按下, 代码将查看虚拟 UART 是否准备好通过调用例程来发送数据 如果返回的是 TRUE, 那么调用 USBUSARTPuts 例程, 通过 虚拟 UART 向主机 PUT ( 发送 ) 文本字符串 ( 它在 gteststr 数组中 ), 就是安全的 注 : 存在类似的 GET 字符串 API 例程 (USBUSARTGets), 用于接收文本字符串, 但在演示应用中未使用 2009 Microchip Technology Inc. DS01164A_CN 第 7 页

8 应用特定的 USB 支持 由于 CDC 串行演示使用 Microchip USB 外部设备固件栈, 它定义了三个应用特定的表, 如下所示 应用特定的表 : 1. USB 描述符表 2. 端点配置表 3. 功能驱动程序表这三张表以及协议栈用来访问它们的函数, 定义在 usb_app.c 文件中 笼统地说, 可以认为 USB 描述符属于以下三个不同描述符组中的一个 : 它们是描述总体设备的组, 描述可能的设备配置的组以及提供用户可读取信息的组 在第一组中, 每个 USB 设备有且仅有一个描述符 设备描述符 它用于唯一地标识设备, 给出可能配置的数量 每个配置 ( 第二组 ) 都有其自身的描述符集, 对配置细节进行说明 用户可读取的信息保存在字符串描述符中, 构成了第三组描述符 字符串描述符是可选的, 但对最终用户用处很大 ( 见图 4, 完整定义请参见附录 E: USB 描述符表 ) USB 描述符表 每个 USB 设备都必须提供一组称为 描述符 的数据结构, 描述符向主机提供了其用法的详细信息 至于这些描述符是如何正确提供的以及其中包含了什么信息, 在 Universal Serial Bus Specification, Revision 2.0 的第 9 章及其类特定的补充说明中有定义 请参阅这些文档, 了解完整的细节 演示应用定义了样本描述符, 本文档将讨论重要的描述符字段 针对不同的应用, 可能需要改变这些字段 ( 参见 修改应用特定的 USB 支持 ) 图 4: 描述符组 设备描述符 Config 配置描述符 字符串描述符 通知接口描述符 数据接口描述符 CDC 特定的描述符 通知端点描述符 Data-In 端点描述符 Data-Out 端点描述符 为了让主机读取这些描述符, USB 固件栈必须能够访问它们 为了提供这样的访问, 应用定义了 USB- DevGetDescriptor 例程, 它接收一个用来标识描述符类型的 ID 值 对于配置和字符串描述符的情形, ID 还包含有索引号 ( 指明请求的是描述符的哪个实例 ) 以及字符串描述符的语言 ID 然后, 例程提供所请求描述符的长度以及一个指向描述符的指针 ( 参见附录 F: 获取描述符例程 ) DS01164A_CN 第 8 页 2009 Microchip Technology Inc.

9 端点配置表 主机 PC 上的软件通过含有一个或多个 端点 的逻辑 接口 与 USB 设备上的功能进行通信 端点和接口通过编号来标识, 编号从零开始 USB 设备可以有一个或多个这样的端点和接口的配置, 配置通过从 1 开始的编号来标识 使用哪个配置, 由主机在称为 枚举 (enumeration) 的过程中决定 不过,CDC 串行驱动程序只有一个配置 端点配置表 ( 在下面 ) 表明哪个端点属于哪个接口 ( 对于配置 1), 以及每个端点的数据传输方向和协议特性 例 1: 端点配置表 const EP_CONFIG gepconfigtable[] = // EP2 通信类通知端点 CDC_INT_EP_SIZE, // 此端点的最大包大小 USB_EP_TRANSMIT // 此端点的配置标志 ( 见下面 ) USB_EP_HANDSHAKE, CDC_CONFIG_NUM, // 配置编号 CDC_INT_EP_NUM, // 端点编号 0, // 接口编号 0, // 备用的接口设定 ( 缺省 =0) 0 // 设备功能表中的索引 ( 见下面 ) }, }; // EP3 数据类端点 CDC_BULK_OUT_EP_SIZE, // 此端点的最大包大小 USB_EP_RECEIVE // 此端点的配置标志 ( 见下面 ) USB_EP_TRANSMIT USB_EP_HANDSHAKE, CDC_CONFIG_NUM, // 配置编号 ( 从 1 开始 ) CDC_BULK_EP_NUM, // 端点编号 1, // 接口编号 0, // 备用的接口设定 ( 缺省 =0) 0 // 设备功能表中的索引 ( 见下面 ) } 2009 Microchip Technology Inc. DS01164A_CN 第 9 页

10 端点配置表表明, CDC 串行驱动程序使用两个不同的接口, 每个都有一个端点 接口 0 是设备管理接口, 它为主机提供控制设备和接收事件通知的机制 接口 1 是数据接口, 它为 虚拟 UART 提供数据传输机制 端点 2 (CDC_INT_EP_NUM) 属于接口 0 它是 USB IN 端点, 把通知发送给主机 在端点 0( 用于枚举的 USB 控制端点 ) 上接收控制数据, 使得它成为与接口 0 共享的端点 端点 3 (CDC_BULK_EP_NUM) 属于接口 1 它用在两个方向上, 作为 IN 和 OUT 端点 虚拟 UART 数据通过这个端点进行发送或接收 端点配置表还把端点与功能驱动程序 ( 它在功能表的索引 0 处 ) 关联在一起 ( 见 功能驱动程序表 ) 注 : 在 USB 术语中, 设备发送数据给主机是 IN, 接收主机数据是 OUT 为了使 USB 固件栈能够访问配置表, 应用应定义如下的例程 例 2: 协议栈访问例程 inline const EP_CONFIG *USBDEVGetEpConfigurationTable ( int *num_entries ) // 提供表项的数目 *num_entries = sizeof(gepconfigtable)/sizeof(ep_config); // 提供表指针 return gepconfigtable; } // USBDEVGetEpConfigurationTable 此例程向 USB 协议栈提供一个指向端点配置表的指针 ( 还提供了表中所含项的数目 ) 协议栈通过 USB_DEV_GET_EP_CONFIG_TABLE_FUNC 宏来标识此例程 ( 参见 USB 协议栈选项 ) DS01164A_CN 第 10 页 2009 Microchip Technology Inc.

11 功能驱动程序表 Microchip 设备固件栈使用一张表来管理对功能驱动程序的访问, 因为它能够支持多功能设备 表中的每一项都含有管理单一功能驱动程序所必需的信息 由于串行演示应用只实现了一个 USB 功能, 它的表中仅含有一项, 如下所示 例 3: 功能驱动程序表 const FUNC_DRV gdevfunctable[] = USBUARTInit, USBUARTEventHandler, 0 } }; 这张表提供了指向串行功能驱动程序初始化和事件处理例程的指针, 还提供了一个初始化值 这是为 CDC 驱动程序保留的值, 定义为 0 这些就是 USB 固件栈为了管理 CDC 串行驱动程序和确保知道在总线上有事件发生而需要的所有信息 为了使 USB 固件栈能够访问这张表, 应用应定义如下的例程 例 4: 协议栈访问功能驱动程序表 inline const FUNC_DRV *USBDEVGetFunctionDriverTable ( void ) // 数组索引, 提供接口指针 return gdevfunctable; } // USBDEVGetFunctionDriverTable 此例程返回一个指针, 指针指向 获得功能驱动程序表 例程的基地址 不需要获知表的大小, 因为端点配置表中含有指向功能驱动程序表的索引 只要这些索引是正确的, 就不会出现非法访问 2009 Microchip Technology Inc. DS01164A_CN 第 11 页

12 USB 协议栈选项 Microchip PIC32 USB 设备固件栈支持许多配置选项 应用在 usb_config.h 文件中定义这些选项 本节将讨论其中几个对 CDC 串行演示应用而言是重要的 ( 或者是 CDC 特定的 ) 选项 ( 可用选项的详细信息, 请参阅附录 A: USB 固件栈配置 ) 重要的协议栈选项 USB_DEV_HIGHEST_EP_NUMBER: 这个选项影响 USB 固件栈将要分配多少存储空间用于跟踪数据传输和 DMA 用途 CDC 串行功能驱动程序使用两个端点 ( 端点 2 和 3, 如上面的端点配置表和描述符表所示 ), 所以这个宏定义为 3 USB_DEV_EP0_MAX_PACKET_SIZE: 这个宏定义 USB 固件栈为端点 0 分配的缓冲空间大小, 取值必须是 或 64 CDC 演示应用将其定义为 8, 以便减少 RAM 的使用 应用特定的选项 如 应用特定的 USB 支持 中所述, 应用必须定义三个例程, 提供对三个应用特定表的访问, 这是 USB 固件栈所必需的 固件栈使用三个宏 ( 见下 ) 来标识这些例程 #define \ USB_DEV_GET_DESCRIPTOR_FUNC \ USBDEVGetDescriptor #define \ USB_DEV_GET_EP_CONFIG_TABLE_FUNC \ USBDEVGetEpConfigurationTable #define \ USB_DEV_GET_FUNCTION_DRIVER_TABLE_FUNC \ USBDEVGetFunctionDriverTable 注意, 函数名与 应用特定的 USB 支持 中所示访问例程的名称相同 除了上述例程之外 ( 它们提供了 USB 固件栈必需的数据访问途径 ),CDC 串行功能驱动程序还要为应用定义一种接收通知串行相关 USB 事件 ( 尤其是改变线路控制设定和封装命令字符串接收事件 ) 的机制 为此, 应用要实现与以下函数签名匹配的例程 : BOOL CdcDemoEventHandler ( USB_EVENT event, void *data, unsigned int size ); 为了允许应用根据需要来命名例程, USB 固件栈使用下面的宏来标识这个例程 : #define \ CDC_APP_EVENT_HANDLING_FUNC \ DemoEventHandler 下面的宏允许应用定义若干 CDC 串行驱动程序特定的选项 CDC_CONFIG_NUM: 这个宏标识 CDC 串行功能所使用的配置编号 由于只有一个可用的配置, 所以定义为 1 CDC_COMM_INTF_ID: 这个宏标识通信类接口的 USB 接口编号 对于本演示应用, 它定义为 0 除非更复杂的实现要求改变它, 否则该值可以保持不变 DS01164A_CN 第 12 页 2009 Microchip Technology Inc.

13 CDC_INT_EP_NUM: 这个宏定义 中断 端点的 USB 端点编号, 这是通信类定义的一部分 对于本演示应用, 宏定义为 2, 应用如果修改了, 也可改变这个值, 以避免冲突 CDC_INT_EP_SIZE: 这个宏定义中断端点缓冲区的大小 它的大小, 只要足以发送通信设备类 (CDC) 通知即可, 通知是 8 位的 CDC_DATA_INTF_ID: 这个宏标识的是数据类接口的 USB 接口编号, 数据类接口用来传输实际的串行数据 对于本演示, 宏定义为 1 除非需要为不同的实现改变这个值, 否则该值可以保持不变 下面的宏定义缺省的线路编码设定, 这是 CDC 串行驱动程序响应主机的 GET_LINE_CODING 请求而向主机报告的线路编码设定 应该记住, 在 USB 环境中, 通信速度由 USB 协议来定义, 而且大多数主机将根据需要设置线路编码参数 不过, 通过改变下列宏, 仍然可以改变报告的缺省值 // 比特率 CDC_DEFAULT_BPS // 1 个停止位 CDC_DEFAULT_FORMAT 0 // 无校验 CDC_DEFAULT_PARITY 0 // 每字长 8 位 CDC_DEFAULT_NUM_BITS 8 CDC_BULK_EP_NUM: 这个宏定义 批量 (bulk) 端点的 USB 端点编号, 这是数据类接口的一部分 对于本演示, 它定义为 3, 但必要时可改变以避免冲突 CDC_BULK_OUT_EP_SIZE: 这个宏定义批量数据端点接收 (USB OUT ) 缓冲区的大小 它被设置为 64 字节的最大大小, 以便提供最大潜在吞吐量, 如果需要的话, 它也可以是 或 64 字节 CDC_BULK_IN_EP_SIZE: 这个宏定义批量数据端点发送 (USB IN ) 缓冲区的大小 它被设置为 64 字节的最大大小, 以便提供最大潜在吞吐量, 如果需要的话, 它也可以是 或 64 字节 2009 Microchip Technology Inc. DS01164A_CN 第 13 页

14 定制 USB 应用 除了演示如何通过 USB 传输数据之外, 本应用的另一个用途是作为采用受支持 Microchip 单片机进行 USB 外部设备设计的出发点 本节将说明如何使用 Microchip PIC32 CDC 串行功能驱动程序来开发定制应用 概括地说, 定制演示应用有如下三个步骤 : 1. 修改主应用程序 2. 修改应用特定的 USB 支持 3. 配置 USB 协议栈选项 注 : 如果需要做较大的改动, 开发人员可以设计并实现一个定制的 USB 功能驱动程序 不过, 这样做已经超出了本文档的范围 实现功能驱动程序的细节, 请参阅 AN1176 PIC32 USB 设备栈编程指南 修改主应用程序 使用 MPLAB IDE, 为受支持的单片机创建一个新的应用程序 ( 关于如何创建一个项目的说明, 请参阅 MPLAB IDE 联机帮助 ) 实现并测试任何所期望的非 USB 应用特定的支持 然后, 以提供的演示应用为例 ( 见前面的 演示应用 ), 添加必需的 USB 支持 另一种方法是 : 复制演示应用, 按需要重命名项目和应用程序文件, 然后添加任何所需的非 USB 代码 在主应用程序中, 在调用任何其他 USB 例程之前, 确保调用 USBInitialize 来初始化 USB 协议栈 然后, 在循环中调用 USBTasks, 如应用示例所示 有一点非常重要, 在主查询循环中, 代码执行的阻塞或任何等待不得超过几微秒 如果超过的话,USBTasks 接口调用的速度就不够迅速, 不足以在 USB 事件发生时就进行服务 如果需要阻塞行为 ( 或者中断驱动行为更佳的话 ), 可以把 USBTasks 例程直接链接到 USB 设备的中断服务例程中 ( 关于使用中断的细节, 请参阅 MPLAB IDE 联机帮助 ) 从应用程序中, 根据是需要读取来自主机的数据还是向主机写入数据, 调用 CDC 串行驱动程序的虚拟 UART API 例程 演示应用已经演示了这些例程的用法, 在 主应用程序 ( 在前面 ) 也有论述, 这些例程在 USB CDC 串行功能 API ( 在后面 ) 中还有详细说明 DS01164A_CN 第 14 页 2009 Microchip Technology Inc.

15 修改应用特定的 USB 支持 在实现使用串行功能驱动程序的新应用时, 只需要对应用特定的 USB 支持稍作修改 最重要的改动与描述符表有关 除非添加了额外的 USB 功能行为, 否则不需要增加描述符 修改 USB 描述符表 正如前面所述, 每个 USB 设备都有一个设备描述符, 一组或多组说明可能配置的描述符, 以及若干字符串描述符 用于这些描述符的数据类型定义在 usb_ch9.h 头文件中 ( 它定义标准描述符类型 ) 以及在 cdc_serial_device.h 头文件中 ( 它定义 CDC 特定的描述符类型 ) 注 : 关于本应用笔记所使用的描述符的更多细节, 请参阅 Universal Serial Bus Specification, Revision 2.0 第 9 章以及 USB Class Definitions for Communication Devices 文档 本节将讨论在修改应用程序时需要对这些描述符进行的改动 修改设备描述符设备描述符提供了对整个设备适用的信息 这包括设备类 供应商和产品 ID 编号, 配置的数量以及端点 0 的信息 使用如下数据类型 ( 定义在 usb_ch9.h 头文件中 ), 为 USB 固件栈创建设备描述符 图 5: USB 设备描述符结构 typedef struct BYTE blength; BYTE bdescriptortype; WORD bcdusb; BYTE bdeviceclass; BYTE bdevicesubclass; BYTE bdeviceprotocol; BYTE bmaxpacketsize0; WORD idvendor; WORD idproduct; WORD bcddevice; BYTE imanufacturer; BYTE iproduct; BYTE iserialnum; BYTE bnumconfigurations; } USB_DEVICE_DESCRIPTOR; 2009 Microchip Technology Inc. DS01164A_CN 第 15 页

16 在设计新的 CDC 串行设备时, 可能需要改变以下重要字段 : bmaxpacketsize0: 如果端点 0 缓冲区的大小改变, 也必须相应地改变这个字段 注 : 样本代码使用宏 USB_DEV_EP0_MAX_PACKET_SIZE 初始化这个字段, 所以 ( 如果使用样本代码的话 ), 当宏改变时, 这个字段会自动改变 idvendor: 必须改变供应商 ID (VID) 值, 以匹配 USB Implementers Forum (USB IF) 分配给贵公司的 ID 代码 如果您没有 USB IF 分配的 VID, 请联系 Microchip 代表, 讨论使用 Microchip 供应商 ID(0x04D8) 以及租借尚未使用的 Microchip 产品 ID 的可能性 idproduct: 必须改变产品 ID (PID) 值, 使之与分配给开发中产品的 PID 相匹配 每个供应商都要负责分配和跟踪其生产产品的 PID 如果您已经从 Microchip 租用了一个 PID, 这个值必须用在这里, 而且 VID 必须与 Microchip ID 相同 bcddevice: 这个值是产品版本号的二进制编码的十进制数 (Binary Coded Decimal, BCD) 表示 应该改变它, 使之与产品设计的版本相匹配 字符串索引 : imanufacturer iproduct 和 iserialnum 字段中含有指向字符串描述符表中字符串描述符的索引, 字符串描述符是 Unicode 字符串格式, 说明了制造商 产品和序列号 为了提供产品适当的说明, 需要更改这些字符串描述符, 但是不需要改变设备描述符中的索引编号, 除非表中这些描述符的位置被改变 所有其他字段应该保持不变, 除非对应用进行了重大改动 ( 比如, 增加了更多的配置等 ) 修改配置描述符样本代码实现的是单个配置 因此, 只有一组配置特定的描述符, 以单个配置描述符作为开头 使用如下数据类型来定义配置描述符 : 图 6: 配置描述符结构 typedef struct BYTE blength; BYTE bdescriptortype; WORD wtotallength; BYTE bnuminterfaces; BYTE bconfigurationvalue; BYTE iconfiguration; BYTE bmattributes; BYTE bmaxpower; } USB_CONFIGURATION_DESCRIPTOR; 在配置描述符中, 可能只需要改动一个字段 bmaxpower: 这个字段指明设备工作在此配置下时, 它需要的电流大小 描述符中的值是所需电流的一半, 因此 50 的值表示此配置下设备正常工作时需要的最大电流是 100 ma 这个值每增加 1, 则最大电流增加 2 ma 注 : USB 设备可能要求总线能够提供最大 500 ma 的电流, 但低功耗主机 ( 或集线器 ) 可能只能从总线上提供最大 100 ma 的电流 USB On The Go 或嵌入式主机可能只能提供 8 ma 的小电流 如果设备旨在与这样的主机一起工作, 确保设备只汲取主机能够支持的电流 DS01164A_CN 第 16 页 2009 Microchip Technology Inc.

17 修改通信管理接口描述符 通信管理接口描述符是常规的 USB 接口描述符, 它提供了一个标识接口的编号 接口的类信息以及接口所需端点的数量 使用如下数据类型来定义接口描述符 : 图 7: 接口描述符结构 typedef struct BYTE blength; BYTE bdescriptortype; BYTE binterfacenumber; BYTE balternatesetting; BYTE bnumendpoints; BYTE binterfaceclass; BYTE binterfacesubclass; BYTE binterfaceprotocol; BYTE iinterface; }USB_INTERFACE_DESCRIPTOR; 通常不需要改动接口描述符中的任何字段 不过, 下面讨论的两个字段可能要引起注意 : binterfacenumber: 任意两个 USB 接口都不能拥有相同的接口编号, 除非使用的是备用接口设定 (CDC 串行驱动程序不使用备用接口设定 ) 但是, 如果在本应用中集成了更多的 USB 功能, 可能需要改变 CDC 通信管理接口的接口编号 ( 方法是改变这个字段的值 ), 从而主机能够唯一地标识设备中的每个接口 iinterface: 没有为这个接口提供样本字符串描述符 ( 它也不需要 ) 如果打算添加一个字符串描述符的话, 它在字符串描述符表中的索引需要放入这个字段中 CDC 类特定描述符 CDC 特定的描述符向主机指明 : 该设备支持 CDC 支持抽象控制模型 (Abstract Control Model, ACM)( 它具有线路控制功能, 但不具备调用管理功能 ) 可能需要的对这些描述符所作的改变, 仅仅是改变那些用来指明 CDC 功能所使用接口编号的值 如果要改变通信管理接口或数据类接口的接口 ID 编号, 才有必要作出上述改变 任何其他改变, 都可能导致主机希望 CDC 功能驱动程序并不支持的行为, 而引发错误 使用如下数据类型, 定义联合 (Union) 功能描述符和调用管理功能描述符 图 8: CDC 特定的描述符结构 /* 联合功能描述符 */ typedef struct _USB_CDC_UNION_FN_DSC BYTE bfnlength; BYTE bdsctype; BYTE bdscsubtype; BYTE bmasterintf; BYTE bslaveintf0; } USB_CDC_UNION_FN_DSC; /* 调用管理功能描述符 */ typedef struct _USB_CDC_CALL_MGT_FN_DSC BYTE bfnlength; BYTE bdsctype; BYTE bdscsubtype; BYTE bmcapabilities; BYTE bdatainterface; } USB_CDC_CALL_MGT_FN_DSC; bmasterintf: 这个编号向主机指明将把哪个接口用作主通信接口, 主要用于设备通知 如果通信管理接口的 ID 改变, 也要改变这个编号 2009 Microchip Technology Inc. DS01164A_CN 第 17 页

18 bslaveintf0: 从接口是批量传输数据接口 如果数据接口的 ID 改变, 相应地这个值也需要改变 注 : bdatainterface: 这个值应该与 bslaveintf0 值相同 在调用管理功能描述符中重复这个值, 是为了表明调用管理是嵌入在数据流中的 但是, 没有标识出调用管理功能 注 : 通信设备类定义考虑到了一个设备有多个数据接口的情形 所以可扩展这个接口描述符, 以包含更多的从接口 ID 值 不过, 本实现仅使用了从接口 0 通信管理和数据接口分别由 CDC_COMM_INTF_ID 和 CDC_DATA_INTF_ID 宏定义的编号来标识 如果通过修改这些宏值进而改变了这些接口的 ID 编号, 那么将自动修改联合功能和调用管理功能描述符 修改通知端点描述符通知端点描述符指明端点支持的数据传输类型 它的方向 缓冲区大小以及查询周期 如果出于某些原因改变了使用的端点, 那么可能需要修改描述符 下面给出的值是最有可能改变的值 改变其他值可能导致端点不再按需要的方式工作 使用如下数据类型来定义端点描述符 图 9: 端点描述符结构 typedef struct BYTE blength; BYTE bdescriptortype; BYTE bendpointaddress; BYTE bmattributes; WORD wmaxpacketsize; BYTE binterval; } USB_ENDPOINT_DESCRIPTOR; bendpointaddress: 这个值表明通知主机的是哪个端点 如前所述, 如果在应用中集成了更多的 USB 功能而出现冲突时, 可能要改变这个值 注 : 使用 CDC_INT_EP_NUM 宏初始化 bendpointaddress 如果通过改变这个宏的值而改变了端点编号, 则在通知端点描述符中的 bendpointaddress 值将会自动改变 重要的是不要改变方向和传输类型, 否则 CDC 功能驱动程序将不能正常工作 wmaxpacketsize: 这个值向主机表明与通知端点关联的缓冲区的大小 这个缓冲区大小只需要足以发送一条 CDC 通知 (8 字节 ) 即可 不过, 如果某些应用需要发送更大的通知, 那么这个值可以加大至 或 64 binterval: 这个值决定通知端点的查询周期 ( 以微秒为单位, 从 1 到 255) 由于通知端点是中断传输端点, 主机将定期查询它的数据 可以修改查询频率, 满足应用的需要 DS01164A_CN 第 18 页 2009 Microchip Technology Inc.

19 修改数据接口描述符 数据接口描述符提供标识数据接口的编号 类信息以及端点数量 注 : 定义这个描述符的数据类型, 请参阅图 7 通常, 不需要改变数据接口描述符中的任何字段 不过, 如果应用要集成更多的 USB 功能, 可能需要改变下面的字段 binterfacenumber: 任意两个 USB 接口都不能拥有相同的接口编号, 除非其中一个是另一个的备用设定 所以, 如果在本应用中集成了更多的 USB 功能, 可能需要改变这个字段的值来改变数据接口的接口编号, 从而主机能够唯一地标识设备中的每个接口 iinterface: 没有为数据接口提供样本字符串描述符 ( 它也不需要 ) 如果打算添加一个字符串描述符的话, 它在字符串描述符表中的索引需要放入这个字段中 修改数据端点描述符数据端点用来在两个方向上发送和接收数据 因此它有两个端点描述符 类似于通知端点描述符, 数据端点描述符标识传输的类型 方向和缓冲区大小 与通知端点不同的是, 数据端点支持批量传输协议 因此, 没有查询周期 ( 它被规定为零 ) 下面标识出的值是最有可能改变的值 改变其他值可能导致端点不再按照期望的方式工作 图 8 给出了定义数据端点描述符的数据类型 注 : 重要的是不要改变传输类型, 否则 CDC 功能驱动程序将不能正常工作 bendpointaddress: 这个值表明使用哪个端点与主机传输数据 如果在应用中集成了更多 USB 功能而出现冲突时, 可能要改变这个值 使用 CDC_BULK_EP_NUM 宏来初始化 bendpointaddress 的值 如果改变这个宏的值而改变了端点编号的话, 数据端点描述符中 bendpointaddress 的值将会自动更改 注 : 由于每个数据端点都有两个不同的描述符 ( 一个用于 发送 或 IN 端点, 一个用于 接收 或 OUT 端点 ), 可以为发送和接收指定不同的端点编号 不过, 这将是不明智的, 因为主机的设备驱动程序可能认为 IN 传输和 OUT 传输使用的端点编号相同 wmaxpacketsize: 这个值向主机表明与数据端点关联的缓冲区的大小 这个值可以是 或 64, 根据应用的需要而定 缓冲区越小, 消耗的设备存储空间就越少 ; 缓冲区越大, 数据吞吐的效率就更高 注 : USB 固件栈不会为 USB 端点分配缓冲区 相反, 它使用应用定义的缓冲区来经由数据端点进行所有传输 2009 Microchip Technology Inc. DS01164A_CN 第 19 页

20 修改字符串描述符 字符串描述符表提供的是人可阅读的 Unicode 字符串格式的信息, 它有助于主机把设备呈示给用户 它还给出了设备的序列号, 序列号也以字符串给出 可以支持不同语言的字符串 字符串描述符表中的第一项标识出一列支持的语言 示例仅支持英语 ( 美式英语 ) 通过给第一个描述符添加更多的语言 ID, 可支持更多的语言 注 : 可用的语言 ID, 请参阅 USB IF 语言标识符文档 在添加更多的语言时, 通过增加 NUM_LANGS 宏的值, 确保增加第一个字符串描述符 ( 字符串描述符零 ) 的大小 在样本代码中, 给出了供应商描述 产品描述以及序列号的字符串描述符 应该改变它们, 以表示正在开发的应用 注 : 每个设备都应有一个独一无二的序列号, 否则在同一时刻同类设备中只能有一个能够连接到给定的主机上 另外, 每次当设备连接不同的 USB 端口时, 主机系统可能要求用户重新安装驱动程序软件 ; 而不是在设备第一次连接时安装一次即可 修改端点配置表端点配置表表明 USB 设备上使用的每个端点的方向和协议特性 这张表还将表明对于每个端点发生的事件, 应使用哪个功能驱动程序提供服务 唯一的例外是端点 0, USB 设备栈自动配置端点 0, 它也不包含在端点配置表中 通常不需要修改端点配置表 不过, 如果应用要集成更多的 USB 功能, 可能需要添加额外的表项 EP_CONFIG 结构和标志定义在 usb_device.h 头文件中 表中的每个项都由下面的数据结构组成 : 图 10: 端点配置结构 typedef struct _endpoint_configuration_data UINT16 max_pkt_size; UINT16 flags; BYTE config; BYTE ep_num; BYTE intf; BYTE alt_intf; BYTE function; } EP_CONFIG, *PEP_CONFIG; max_pkt_size: 这个字段定义此端点在单个包中能够传输多少字节 flags: 这个字段给出配置端点行为的信息 要定义下列标志 : - USB_EP_TRANSMIT 使能端点, 从而能够发送数据 - USB_EP_RECEIVE 使能端点, 从而能够接收数据 - USB_EP_HANDSHAKE 使能握手包 (ACK/NAK) 的生成 ( 仅对非同步端点 ) - USB_EP_NO_INC 仅用于到其他设备 FIFO 的直接 DMA ep_num: 这个字段表明结构描述的是哪个端点 DS01164A_CN 第 20 页 2009 Microchip Technology Inc.

21 config intf 及 alt_intf: 这些字段表明 : 哪些设备配置 接口和备用接口设定使用了这个结构描述的配置 function: 这个字段表明 : 哪个功能驱动程序要使用 ep_num 中标识的端点 为此, 要提供指向功能驱动程序表的索引 警告 : 包含在端点配置表中的某些信息重复了描述符表中定义的信息 为了消除额外的代码, 需要这种信息冗余, 否则就需要解析描述符表以获取信息 不过, 确保两张表是一致的, 确实给程序员增加了负担 修改支持的功能驱动程序表一个 USB 设备可以实现多个类或供应商特定的功能 为此,Microchip PIC32 USB 固件栈使用功能驱动程序表来管理对功能驱动程序的访问 表中每个项都含有管理某一个功能驱动程序的必要信息 如果一个设备 ( 类似于 CDC 串行演示 ) 只实现了一个 USB 功能, 则表中将只有一项 修改功能驱动程序表的唯一原因是 : 应用被修改, 集成了其他 USB 功能 支持的每个新驱动程序都要求在表中有其对应的项 当然, CDC 功能也必须有一项 ( 如果使用 CDC 功能的话 ) 下面的数据结构定义了功能驱动程序表中的项 图 11: 功能驱动程序表项 struct _function_driver_table_entry USBDEV_INIT_FUNCTION_DRIVER Initialize; USB_EVENT_HANDLER EventHandler; BYTE flags; }; typedef struct _function_driver_table_entry FUNC_DRV, *PFUNC_DRV; Initialize 和 flags: Initialize ( 初始化 ) 字段中存放了一个指针, 指向功能驱动程序的初始化例程 当主机选择与表中给定项标识的功能驱动程序相匹配的设备配置时, 将会调用初始化例程 在调用时, 要向初始化例程传递 flags( 标志 ) 参数 (CDC 驱动程序忽略 flags 参数 ) EventHandler: 这个字段中存放了一个指针, 指向用于处理类或供应商特定的 USB 事件的功能驱动程序例程 注 : 更多细节, 请参阅 Microchip 应用笔记 AN1176 PIC32 USB 设备栈编程指南 2009 Microchip Technology Inc. DS01164A_CN 第 21 页

22 修改 USB 协议栈选项 本节将着重说明几个重要的配置选项, 它们是确保 USB 设备栈正常工作所必需的选项 所有可用配置选项的完整说明, 请参阅附录 A: USB 固件栈配置 必需的选项 下列选项必须如下定义 USB_SUPPORT_DEVICE: 为了确保编译后 USB 协议栈的行为类似 USB 设备, 必须定义这个宏 ( 不需要值 ) 否则, USB 协议栈的行为将不适合 USB 设备应用 USB_DEV_EVENT_HANDLER: 这个宏允许用户替换 USB 固件栈的 设备 层 ( 参见附录 D: USB 固件栈架构 ) 不过, 这样做超出了本文档的范围, 所以, 应用应确保这个宏定义为设备层事件处理例程 USBDEVHandleBusEvent 的名字 修改影响 RAM 使用的选项 为了确保 USB 协议栈分配的 RAM 不超过实际需要, 应小心定义下面的宏 USB_DEV_HIGHEST_EP_NUMBER: 这个宏指明功能驱动程序使用的最高端点编号 在 CDC 串行驱动程序的情形, 它定义为 3, 因为端点 3 用于数据接口 为了集成更多的 USB 功能 ( 从而需要更多的端点 ), 也可改变这个值 注 : 增加这个值将增加 USB 协议栈使用的 RAM 量,USB 协议栈使用 RAM 来分配 BDT 中更多的项以及跟踪状态数据 USB_DEV_SUPPORTS_ALT_INTERFACES: 如果应用支持任何其 USB 接口的备用设定, 就必须定义这个宏 由于 CDC 串行驱动程序不使用备用接口设定, 所以不应改变它, 除非此应用要集成其他需要备用接口设定的应用 USB_DEV_EP0_MAX_PACKET_SIZE: 端点 0 能够支持的缓冲区大小是 或 64 字节 此缓冲区 RAM 的分配取决于 USB_DEV_EP0_MAX_PACKET_SIZE 宏的定义 对于 CDC 串行驱动程序, 这个值是 8 字节 如果要稍稍缩短枚举设备所必需的时间, 可以把这个值加大, 使缓冲区更大一些, 而代价则是分配给端点 0 缓冲区的 RAM 更大 注 : USB 固件栈只为端点 0 分配缓冲空间 DS01164A_CN 第 22 页 2009 Microchip Technology Inc.

23 修改应用特定的 USB 支持选项 为了确保 USB 协议栈能够调用三个用户定义的例程来访问描述符 端点配置以及功能驱动程序表, 必须正确定义下面的宏 USB_DEV_GET_DESCRIPTOR_FUNC USB_DEV_GET_EP_CONFIG_TABLE_FUNC USB_DEV_GET_FUNCTION_DRIVER_TABLE_FUNC 如果任何例程的名称有改变, 也需要更新相应的宏 宏说明如下 : USB_DEV_GET_DESCRIPTOR_FUNC: 这个宏向 USB 协议栈标识应用特定的 获取描述符 例程的名称 ( 见 USB 描述符表 ) 这个例程提供所请求描述符的地址和大小 例 5: 标识 获取描述符 函数 #define USB_DEV_GET_DESCRIPTOR_FUNC 如果 获取描述符 例程的名称改变, 必须改变这个宏定义, 使之与例程的新名称相同 USB_DEV_GET_EP_CONFIG_TABLE_FUNC: 这个宏向 USB 协议栈标识应用特定的 获取端点配置表 例程的名称 ( 见 端点配置表 ) 这个例程提供端点配置表的地址以及表中所含项的数目 例 6: 标识 获取端点配置表 函数 #define USB_DEV_GET_EP_CONFIG_TABLE_FUNC 如果 获取端点配置表 例程的名称改变, 必须改变这个宏定义, 使之与例程的新名称相同 USB_DEV_GET_FUNCTION_DRIVER_TABLE_FUNC: 这个宏向 USB 协议栈标识应用特定的 获取功能驱动程序表 例程的名称 ( 见 功能驱动程序表 ) 这个例程提供功能驱动程序表的地址 例 7: 标识 获取功能驱动程序表 函数 #define USB_DEV_GET_FUNCTION_DRIVER_TABLE_FUNC USBDEVGetDescriptor USBDEVGetEpConfigurationTable USBDEVGetFunctionDriverTable 如果 获取功能驱动程序表 例程的名称改变, 必须改变这个宏定义, 使之与例程的新名称相同 2009 Microchip Technology Inc. DS01164A_CN 第 23 页

24 修改 CDC 串行功能选项 CDC 串行功能驱动程序有几个会影响它如何使用资源的选项 可以根据应用的需要, 改变这些选项 CDC_CONFIG_NUM CDC_COMM_INTF_ID CDC_INT_EP_NUM CDC_INT_EP_SIZE CDC_DATA_INTF_ID CDC_BULK_EP_NUM CDC_BULK_OUT_EP_SIZE CDC_BULK_IN_EP_SIZE 宏说明如下 : CDC_CONFIG_NUM: 定义 CDC 串行功能的配置 ID 值 由于 CDC 驱动程序仅支持单个配置, 这个值不需要改变, 除非此应用要集成更多的使用多重配置的 USB 功能 CDC_COMM_INTF_ID: 定义通信管理接口的接口 ID 值 不应改变这个值, 除非应用集成了更多的 USB 功能 CDC_INT_EP_NUM: 定义通知端点的端点编号, 通知端点用作通信管理接口的一部分 为了优化端点和存储空间使用, 或者应用要集成其他 USB 功能且使用的端点存在冲突, 可以改变这个值 CDC_INT_EP_SIZE: 定义用于 CDC 通知的端点缓冲区的大小 ( 以字节为单位 ) 不应改变这个值, 除非需要存放更大的通知数据 CDC_DATA_INTF_ID: 定义数据接口的 ID 不应改变它的值, 除非要在应用中集成更多的 USB 功能 CDC_BULK_EP_NUM: 定义批量数据接口使用的端点编号 为了优化端点和存储空间使用, 或者在应用集成其他 USB 功能时要避免端点冲突, 可以改变这个值 CDC_BULK_OUT_EP_SIZE: 定义 USB 批量数据 OUT 端点的包大小 它影响接收自主机的数据包的大小 它设置为最大值 64 字节, 以最大化数据吞吐量 不过, 也可以把它降低至 8 16 或 32, 以便降低数据缓冲的 RAM 需求 CDC_BULK_IN_EP_SIZE: 定义 USB 批量数据 IN 端点的包的大小 它影响发送给主机的数据包的大小 它设置成最大值 64 字节, 以最大化数据吞吐量 不过, 也可以把它降低至 8 16 或 32, 以便降低数据缓冲的 RAM 需求 注 : 除了端点 0 之外, USB 固件栈不会为任何端点分配缓冲空间 只要调用读或写 API 例程, 它就把 USB 传输的存储目的地动态地切换到应用的缓冲区 这意味着, 改变这些宏 (CDC_BULK_OUT_EP_SIZE 和 CDC_BULK_IN_EP_SIZE) 可能不会直接影响使用的 RAM 大小 它将改变传输至 / 自主机的数据包的大小 DS01164A_CN 第 24 页 2009 Microchip Technology Inc.

25 缺省的线路编码 下面的宏定义缺省的线路编码参数 ( 与提供的样本代码中定义的相同 ) // 比特率 CDC_DEFAULT_BPS // 1 个停止位 CDC_DEFAULT_FORMAT 0 // 无校验 CDC_DEFAULT_PARITY 0 // 每字长 8 位 CDC_DEFAULT_NUM_BITS 8 需要时, 将把这些值报告给主机 不过, 这些参数的使用完全由应用决定 它们不影响经由 USB 的通信 此外, 作为枚举过程的一部分, 主机很有可能发送新的线路编码参数 其他选项根据应用, 可能还有两个选项需要改变 USB_DEV_SELF_POWERED 定义这个宏, 通知 USB 协议栈设备是自己供电的 如果设备需要总线供电, 不应定义这个宏 USB_DEV_SUPPORT_REMOTE_WAKEUP 定义这个宏, 通知 USB 协议栈 : 设备支持远程唤醒主机 如果不支持的话, 不应定义这个宏 CDC_APP_EVENT_HANDLING_FUNC 这个宏标识的是应用的事件处理例程名称 当线路编码改变, 或者当接收到来自主机的封装通信命令时,CDC 串行驱动程序异步调用此例程 如果应用事件处理例程的名称改变, 也必须改变这个宏定义, 使之与新名称相同 2009 Microchip Technology Inc. DS01164A_CN 第 25 页

26 结论 本文档说明了如何使用 Microchip PIC32 CDC 串行功能驱动程序和 USB 固件栈, 在支持的 Microchip 单片机上, 通过通用串行总线来仿真 UART 通常, 实现一个 USB 设备需要开发固件来处理用于设备标识 控制和数据传输的 USB 协议 CDC 串行驱动程序和 USB 固件栈已经对 USB 协议的细节进行了处理, 因此开发人员不必再关注细节 仅需对给出的样本代码稍作修改, 就能用于大部分原先不得不使用传统 UART 的应用 这样, 只需最少的工作, 设计人员就能提供让最终用户体会到 USB 好处的解决方案 参考文献 Microchip 应用笔记 AN1176, PIC32 USB 设备栈编程指南 Microchip MPLAB IDE 集成开发环境, 许可证免费, 下载地址 : Universal Serial Bus Specification, Revision OTG Supplement, Revision Class Definitions for Communication Devices DS01164A_CN 第 26 页 2009 Microchip Technology Inc.

27 附录 A: USB 固件栈配置 设备栈提供了若干配置选项, 以便针对应用来定制协议栈 配置选项必须在文件 usb_config.h 中定义, 任何 USB 实现都必须包含该文件 一旦选项有改变, 必须重新 干净地 编译协议栈, 从而重新编译所有相关的二进制文件 USB_SUPPORT_DEVICE USB_DEV_EVENT_HANDLER USB_DEV_HIGHEST_EP_NUMBER USB_DEV_EP0_MAX_PACKET_SIZ USB_DEV_SUPPORTS_ALT_INTERFACES USB_DEV_GET_DESCRIPTOR_FUNC USB_DEV_GET_EP_CONFIG_TABLE_FUNC USB_DEV_GET_FUNCTION_DRIVER_TABLE_FUNC USB_DEV_SELF_POWERED USB_DEV_SUPPORT_REMOTE_WAKEUP USB_SAFE_MODE 注 : 上述配置选项的用法, 请参阅 AN1176 PIC32 USB 设备栈编程指南 CDC_CONFIG_NUM CDC_COMM_INTF_ID CDC_INT_EP_NUM CDC_INT_EP_SIZE CDC_DATA_INTF_ID CDC_BULK_EP_NUM CDC_BULK_OUT_EP_SIZE CDC_BULK_IN_EP_SIZE CDC_DEFAULT_BPS CDC_DEFAULT_FORMAT CDC_DEFAULT_PARITY CDC_DEFAULT_NUM_BITS CDC_APP_EVENT_HANDLING_FUNC 2009 Microchip Technology Inc. DS01164A_CN 第 27 页

28 注 : 下列选项全部由应用定义 因此, 每个选项的示例也是缺省的, 与演示应用定义的相同 CDC_CONFIG_NUM 用途 : 定义 CDC 串行驱动程序的配置 ID 编号 先决条件 : 无 有效值 : 设备配置编号必须从 1 开始 示例 : #define CDC_CONFIG_NUM 1 CDC_COMM_INTF_ID 用途 : 为 CDC 串行驱动程序的通信管理接口定义 USB 接口 ID 编号 先决条件 : 无 有效值 : 接口 ID 编号必须从 0 开始, 不得与同一设备上任何其他活动接口发生冲突 示例 : #define CDC_COMM_INTF_ID 0 CDC_INT_EP_NUM 用途 : 为 CDC 串行驱动程序的中断端点定义 USB 端点编号, 中断端点用于至主机的异步通知 先决条件 : 无 有效值 : 端点编号必须在 1 与 15 之间, 包括 1 和 15( 端点 0 是专用的 ), 每个方向上的使用不得超过一次 USB 固件栈为每个端点分配存储空间, 从端点 0 开始, 结束于所使用的最高端点 ( 见 USB_DEV_HIGHEST_EP_NUMBER) 注意 : 将导致为这一范围内未使用的端点分配未使用的存储空间 示例 : #define CDC_INT_EP_NUM 2 CDC_INT_EP_SIZE 用途 : 为 CDC 驱动程序的通知端点定义允许的最大包大小 此端点的常规使用要求宏定义为 8 字节 先决条件 : 无 有效值 : 宏必须定义为 或 64 示例 : #define CDC_INT_EP_SIZE 8 CDC_DATA_INTF_ID 用途 : 为 CDC 串行驱动程序的数据接口定义 USB 接口 ID 编号 先决条件 : 无 有效值 : 接口 ID 编号必须从 0 开始, 不得与同一设备上其他任何活动接口相冲突 示例 : #define CDC_DATA_INTF_ID 1 DS01164A_CN 第 28 页 2009 Microchip Technology Inc.

29 CDC_BULK_EP_NUM 用途 : 先决条件 : 有效值 : 为 CDC 串行驱动程序的批量端点定义 USB 端点编号, 批量端点用于来自或发送至主机的数据传输 无 端点编号必须在 1 到 15 之间, 包括 1 和 15( 端点 0 是专用的 ), 每个方向上的使用不得超过一次 注 : USB 固件栈为每个端点分配存储空间, 从端点 0 开始, 结束于所使用的最高端点 ( 见 USB_DEV_HIGHEST_EP_NUMBER) 为此范围内未使用的端点分配存储空间, 将导致分配的存储空间被浪费 示例 : #define CDC_BULK_EP_NUM 3 CDC_BULK_OUT_EP_SIZE 用途 : 为 CDC 驱动程序的 Data-Out ( 接收 ) 端点定义允许的最大包大小 ( 以字节为单位 ) 较大的值 将增加数据吞吐量 较小的值将减少数据吞吐量 先决条件 : 无 有效值 : 宏必须定义为 或 64 示例 : #define CDC_BULK_OUT_EP_SIZE 64 CDC_BULK_IN_EP_SIZE 用途 : 为 CDC 驱动程序的 Data-In( 发送 ) 端点定义允许的最大包大小 ( 以字节为单位 ) 较大的值将 增加数据吞吐量 较小的值将减少数据吞吐量 先决条件 : 无 有效值 : 宏必须定义为 或 64 示例 : #define CDC_BULK_IN_EP_SIZE 64 CDC_DEFAULT_BPS 用途 : 定义报告给主机的缺省 UART 数据传输速率 ( 以 bps 为单位 ) 先决条件 : 无 有效值 : 宏可以定义为长 32 位的任何数, 通常接受的比特率值是 : 及 示例 : #define CDC_DEFAULT_BPS CDC_DEFAULT_FORMAT 用途 : 定义报告给主机的缺省 UART 字符格式 先决条件 : 无 有效值 : 0 = 每字符 1 个停止位 1 = 每字符 1.5 个停止位 2 = 每字符 2 个停止位 示例 : #define CDC_DEFAULT_FORMAT Microchip Technology Inc. DS01164A_CN 第 29 页

30 CDC_DEFAULT_PARITY 用途 : 定义报告给主机的缺省 UART 校验类型 先决条件 : 无 有效值 : 0 = 无校验 1 = 奇校验 2 = 偶校验 3 = 校验位始终为 1 4 = 校验位始终为 0 示例 : #define CDC_DEFAULT_PARITY 0 CDC_DEFAULT_NUM_BITS 用途 : 定义报告给主机的缺省 UART 字长, 即, 每个 UART 字有多少位 先决条件 : 无 有效值 : 可以定义为每字长 或 16 位 示例 : #define CDC_DEFAULT_NUM_BITS 8 CDC_APP_EVENT_HANDLING_FUNC 用途 : 为 CDC 串行功能驱动程序标识应用的事件处理例程的名称 先决条件 : 应用必须定义这个例程 有效值 : 宏的值必须等于应用的事件处理例程的名称 示例 : #define CDC_APP_EVENT_HANDLING_FUNC CdcDemoEventHandler DS01164A_CN 第 30 页 2009 Microchip Technology Inc.

31 附录 B: USB CDC 串行功能 API 本节将对 CDC 串行功能驱动程序 API 进行说明 API 为应用提供了一种在 USB 上像 UART 那样传输数据的方法 大部分的 USB 细节都被隐藏了起来 表 B-1 对 CDC 串行功能驱动程序 API 进行了概括. 表 B-1: USB 通用功能 API 概要 操作 说明 USBUSARTTxIsReady 确定驱动程序是否已准备好向 USB 发送数据 USBUSARTTxIsBusy 确定驱动程序当前是否正忙于发送数据 USBUSARTRxIsReady 确定驱动程序是否已准备好接收来自 USB 的数据 USBUSARTRxIsBusy 确定驱动程序当前是否正忙于接收数据 USBUSARTRxGetLength 给出已经接收自 USB 并放入调用者缓冲区的当前字节数 USBUSARTTx 开始传输, 发送数据至 USB USBUSARTRx 开始传输, 接收来自 USB 的数据 USBUSARTGets 获取来自 USB 的字符串 ( 使用 USBUSARTRx) USBUSARTPuts 向 USB 发送一个字符串, 包括 NUL 终止符 ( 使用 USBUSARTTx) USBUSARTGetLineCoding 提供当前线路编码信息 (bps 停止位个数 校验以及每字的数据位数) USBUSARTGetCmdStr 检索来自主机的封装命令字符串 USBUSARTSendRespStr 向主机发送对封装 (encapsulated) 命令的响应 USBUSARTSendNotification 向主机发送一个异步通知包 CDC_APP_EVENT_HANDLING_FUNC 这是回调例程, 当应用特定的事件发生时, 由 CDC 串行功能驱动程序调 用 后续页将给出各 API 例程的详细说明 2009 Microchip Technology Inc. DS01164A_CN 第 31 页

32 USB CDC 串行功能 API - USBUSARTTxIsReady 确定 CDC 功能驱动程序是否已经准备好向 USB 发送数据 语法 BOOL USBUSARTTxIsReady ( void ) 参数 无 返回值 TRUE 如果系统已经准备好向 USB 发送数据 FALSE 系统未就绪 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 无 示例 if (USBUSARTTxIsReady ()) USBUSARTTx (&buffer, sizeof(buffer)); } DS01164A_CN 第 32 页 2009 Microchip Technology Inc.

33 USB CDC 串行功能 API - USBUSARTTxIsBusy 确定 CDC 串行功能驱动程序当前是否正忙于向 USB 发送数据 语法 BOOL USBUSARTTxIsBusy ( void ) 参数 无 返回值 TRUE 如果系统正忙于向 USB 发送数据 FALSE 如果不忙 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 无 示例 if (!USBUSARTTxIsBusy ()) USBUSARTTx (&buffer, sizeof(buffer)); } 2009 Microchip Technology Inc. DS01164A_CN 第 33 页

34 USB CDC 串行功能 API - USBUSARTRxIsReady 确定 CDC 串行驱动程序是否已经准备好接收 USB 上的数据 语法 BOOL USBUSARTRxIsReady ( void ) 参数 无 返回值 TRUE 如果系统准备好接收来自 USB 的数据 FALSE 如果没有准备好 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 无 示例 if (USBUSARTRxIsReady()) USBUSARTRx(&buffer, sizeof(buffer)); } DS01164A_CN 第 34 页 2009 Microchip Technology Inc.

35 USB CDC 串行功能 API - USBUSARTRxIsBusy 确定 CDC 串行驱动程序是否正忙于接收 USB 上的数据 语法 BOOL USBUSARTRxIsBusy ( void ) 参数 无 返回值 TRUE 如果系统正忙于接收 USB 上的数据 FALSE 如果不忙 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 无 示例 if (!USBUSARTRxIsReady()) USBUSARTRx(&buffer, sizeof(buffer)); } 2009 Microchip Technology Inc. DS01164A_CN 第 35 页

36 USB CDC 串行功能 API - USBUSARTRxGetLength 给出当前字节数, 这是自最近一次调用 USBUSARTRx 以来, 已经接收自 USB 并放入调用者缓冲区的当前字节数 语法 BYTE USBUSARTRxGetLength ( void ) 参数无返回值在调用者缓冲区中当前可用的字节数先决条件系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用无示例 Size = USBUSARTRxGetLength(); DS01164A_CN 第 36 页 2009 Microchip Technology Inc.

37 USB CDC 串行功能 API - USBUSARTTx 开始 USB 传输, 向 USB 发送数据 它是非阻塞式的, 所以传输已经开始但尚未完成 调用者应监测 USBUSARTTxIsReady 或 USBUSARTTxIsBusy, 判断传输是否已经完成 语法 void USBUSARTTx ( BYTE *pdata, BYTE len ) 参数 pdata 指针, 指向要发送数据的起始位置 len 数据长度, 以字节为单位 返回值 无 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 在调用此例程之前,USBUSARTTxIsReady 必须返回 TRUE( 或者,USBUSARTTxIsBusy 必须返回 FALSE), 否则可能导致无法预料的行为 副作用已经开始向 USB 进行给定长度和数据的传输 示例 if (USBUSARTTxIsReady ()) USBUSARTTx (&buffer, sizeof(buffer)); } 2009 Microchip Technology Inc. DS01164A_CN 第 37 页

38 USB CDC 串行功能 API - USBUSARTRx 开始 USB 传输, 接收来自 USB 的数据 它是非阻塞式的, 所以传输已经开始但尚未完成 调用者应监测 USBUSARTTxIsReady 或 USBUSARTTxIsBusy, 判断传输是否已经完成 语法 void USBUSARTRx( BYTE *pdata, BYTE len ) 参数 pdata 指针, 指向接收数据的缓冲区 len 缓冲区长度, 以字节为单位 返回值 无 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 在调用此例程之前,USBUSARTTxIsReady 必须返回 TRUE( 或者,USBUSARTTxIsBusy 必须返回 FALSE), 否则可能导致无法预料的行为 副作用已经开始自 USB 进行给定长度和数据的传输 示例 if (USBUSARTRxIsReady ()) USBUSARTRx (&buffer, sizeof(buffer)); } DS01164A_CN 第 38 页 2009 Microchip Technology Inc.

39 USB CDC 串行功能 API - USBUSARTPuts 把一个字符串数据写入 USB, 包括 null 字符在内 它是非阻塞式的, 所以传输已经开始但尚未完成 调用者应监测 USBUSARTTxIsReady 或 USBUSARTTxIsBusy, 判断传输是否已经完成 语法 void USBUSARTPuts ( char *data ) 参数 data 指针, 指向以 null 结尾的字符串数据 如果没有找到 null 字符, 将传输 255 字节的数据给主机 返回值 无 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 在调用此例程之前,USBUSARTTxIsReady 必须返回 TRUE( 或者,USBUSARTTxIsBusy 必须返回 FALSE), 否则可能导致无法预料的行为 副作用给定字符串向 USB 的传输已经开始 示例 if(usbusarttxisready()) USBUSARTPuts(gTestStr); } 2009 Microchip Technology Inc. DS01164A_CN 第 39 页

40 USB CDC 串行功能 API - USBUSARTGets 从 USB 上读取给定长度的字符串数据, 不包括 null 字符 它是非阻塞式的, 所以传输已经开始但尚未完成 调用者应监测 USBUSARTTxIsReady 或 USBUSARTTxIsBusy, 判断传输是否已经完成 语法 BYTE USBUSARTGets ( char *buffer, BYTE len ) 参数 buffer 指针, 指向要存放所接收字节的位置 len 预计的字节数 注 : 接收的字节数不会超过 len 返回值 发送的字节数 注 : 由于当此例程返回时, 传输还没有开始, 这个值始终是 0 调用者应使用 USBUSARTRxGetLength 例程来获取发送的字节数 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 在调用此例程之前,USBUSARTTxIsReady 必须返回 TRUE( 或者,USBUSARTTxIsBusy 必须返回 FALSE), 否则可能导致无法预料的行为 副作用已经开始从 USB 进行给定长度和数据的传输 示例 if(usbusartrxisready()) USBUSARTGets(&test_str, sizeof(test_str)); } DS01164A_CN 第 40 页 2009 Microchip Technology Inc.

41 USB CDC 串行功能 API - USBUSARTGetLineCoding 提供当前的线路编码 (bps 停止位个数 校验以及每字的数据位数 ) 信息 注 : 如果主机当前正在更新线路编码数据, 此函数将返回 FALSE, 调用者可稍后再试 语法 BOOL USBUSARTGetLineCoding ( LINE_CODING *plcdata ) 参数 plcdata 指针, 指向要存放所接收字节的位置 下面的结构存放线路编码数据 : typedef union _LINE_CODING struct BYTE _byte[line_coding_length]; }; struct DWORD dwdterate; BYTE bcharformat; BYTE bparitytype; BYTE bdatabits; }; } LINE_CODING; LINE_CODING_LENGTH 宏定义为 7 dwdterate 字段中应含有 bps 信息 bcharformat 字段应该是 0 1 或 2, 表明是 或 2 个停止位 bparitytype 字段应为 或 4, 表明是无校验 奇校验 偶校验 校验位始终为 1 或校验位始终为 0 最后, bdatabits 应该是 或 16, 指明在一个数据字中有多少位 返回值 TRUE 如果成功 FALSE 如果线路编码数据当前正处于更新过程中 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 无 示例 if (USBUSARTGetLineCoding (&line_coding) == FALSE) // 处理错误 } 2009 Microchip Technology Inc. DS01164A_CN 第 41 页

42 USB CDC 串行功能 API - USBUSARTGetCmdStr 获取一个来自主机的封装命令字符串 注 : 仅在已经接收到 EVENT_CDC_CMD 事件通知时, 才调用此例程, 否则调用者或许会干扰正常控制请求处理 语法 BOOL USBUSARTGetCmdStr ( char *buffer, BYTE len ) 参数 buffer 指针, 指向要存放所接收字节的位置 len 预计的字节数 返回值 TRUE 如果成功的话 FALSE 如果失败的话 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 作为对主机发送 SEND_ENCAPSULATED_COMMAND 请求的响应, 应用已经接收到一则 EVENT_CDC_CMD 事件通知 副作用 从 EP0 读取的长度为 len 字节的下一个数据, 将放入 buffer 所指位置的存储单元中 ) 示例 switch (event) case EVENT_CDC_CMD: return USBUSARTGetCmdStr (command, sizeof(command)); // 根据需要, 处理其他事件 DS01164A_CN 第 42 页 2009 Microchip Technology Inc.

43 USB CDC 串行功能 API - USBUSARTSendRespStr 响应 GET_ENCAPSULATED_RESPONSE 请求, 向主机写入一个字符串数据 注 : 对于每条 GET_ENCAPSULATED_RESPONSE 请求, 只应调用此例程一次 语法 BOOL USBUSARTSendRespStr ( char *data ) 参数 data 指针, 指向 null 结尾的字符串响应数据 返回值 TRUE 如果成功的话 FALSE 如果失败的话 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 应用必须已经接收到一个 EVENT_CDC_RESP 事件, 该事件是对主机发送 GET_ENCAPSULATED_RESPONSE 请求的响应 副作用即将使用 USB 控制端点传输响应数据 示例 switch (event) case EVENT_CDC_RESP: return USBUSARTSendRespStr (&response_string); // 根据需要处理其他事件 2009 Microchip Technology Inc. DS01164A_CN 第 43 页

44 USB CDC 串行功能 API - USBUSARTSendNotification 通过通知端点, 向主机发送一个通知包 语法 BOOL USBUSARTSendNotification ( CDC_NOTIFICATION *notification ) 参数 notification 指针, 指向要发送给主机的通知数据 CDC_NOTIFICATION 数据类型定义如下 : typedef SETUP_PKT CDC_NOTIFICATION; SETUP_PKT 数据类型定义在 usb_ch9.h 文件中, 如下所示 : typedef struct SetupPkt union // 偏移量 说明 // BYTE bmrequesttype; // 0 请求类型的位映射 struct BYTE recipient: 5; // 请求的接受方 BYTE type: 2; // 请求的类型 BYTE direction: 1; // 数据传输的方向 }; }requestinfo; BYTE brequest; // 1 请求类型 UINT16 wvalue; // 2 由 brequest 决定 UINT16 windex; // 4 由 brequest 决定 UINT16 wlength; // 6 由 brequest 决定 } SETUP_PKT, *PSETUP_PKT; 这个结构发送应用或类特定的通知给主机 使用下面的宏, 可以静态地初始化这个结构 CDC_INIT_NOTIFICATION(n,v,i,l) 其中 : n = 通知编号 ( 见上 ) v = wvalue ( 通知特定的 ) i = windex ( 通知特定的 ) l = wlength ( 通知特定的 ) 后续数据长度, 如果有的话 返回值 TRUE 如果能够开始传输 FALSE 如果不能 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 即将使用 USB 控制端点传输响应数据 示例 if (USBUSARTSendNotification(&notification) == FALSE) // 处理失败 } DS01164A_CN 第 44 页 2009 Microchip Technology Inc.

45 USB CDC 串行功能 API - CDC_APP_EVENT_HANDLING_FUNC 此例程由应用实现 它由 CDC 串行功能驱动程序调用, 以便在 CDC 特定事件发生时应用能够处理事件 注 : 演示应用把这个例程命名为 CdcDemoEventHandler 通过定义 CDC_APP_EVENT_HANDLING_FUNC 宏, 使得宏等于此例程名, 从而让 CDC 串行驱动程序能够标识此例程 语法 BOOL CDC_APP_EVENT_HANDLING_FUNC ( USB_EVENT event, void *data, int size ) 参数 event CDC 特定的事件 ID data 指针, 指向事件特定的数据 size 事件特定的数据的大小 ( 以字节为单位 ), 如果有数据的话定义了下列 CDC 特定的事件 EVENT_CDC_LINE_CTRL EVENT_CDC_CMD_RCVD 此事件表明发生线路控制状态改变 它没有关联的数据 当这个事件发生时, 应用可以调用 USBUSARTGetLineCoding 以标识新的线路控制设定并采取适当的动作 EVENT_CDC_CMD 此事件表明即将从主机发出一条封装命令 data 参数指向一个 16 位的值 (size = 2), 值表示的是预计命令的大小 ( 以字节为单位 ) 当这个事件发生时, 应用应 ( 使用给定大小的缓冲区 ) 调用 USBUSARTGetCmdStr, 以便接收协议特定的命令 返回值应用应返回 TRUE, 表明事件已得到处理 ; 返回 FALSE 表明事件未得到处理 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 副作用取决于应用如何实现此例程 示例 PUBLIC BOOL CdcDemoEventHandler ( USB_EVENT event, void *data, int size ) UINT16 cmd_size; LINE_CODING line_coding; 此事件表明已经接收到一条封装命令 data 参数指向一个 32 位 (size = 4) 的值, 值表示的是已收到命令的实际大小 ( 注意, 这个值应该等于 EVENT_CDC_CMD 事件中给出的值, 即使数据长度 (size) 不同 ) 这个事件用来向应用指明 :USBUSARTGetCmdStr 请求已经完成, 已经接收到命令 EVENT_CDC_RESP 此事件表明主机已经请求了一条封装响应 data 参数指向一个 16 位 (size = 2) 的值, 值表示响应的预计大小 当这个事件发生时, 应用可以调用 USBUSARTSendRespStr, 以便发送协议特定的响应字符串 2009 Microchip Technology Inc. DS01164A_CN 第 45 页

46 // 处理具体事件 switch (event) // 主机已经改变线路控制状态 case EVENT_CDC_LINE_CTRL: // 读取新的线路编码 // // ( 本演示不对新线路编码进行任何处理, 但是, // 如果需要的话, 可以在读取新线路编码之后进行处理 ) return USBUSARTGetLineCoding (&line_coding); // 主机即将发送一条封装命令 case EVENT_CDC_CMD: // 读取命令字符串 if (size == sizeof(uint16) && data!= NULL) cmd_size = (UINT16)min(sizeof(gCommand), size); return USBUSARTGetCmdStr (gcommand, cmd_size); } break; } // switch (event) // 事件未处理 return FALSE; } // CdcDemoEventHandler DS01164A_CN 第 46 页 2009 Microchip Technology Inc.

47 附录 C: USB CDC 串行功能驱动程序接口 本节将说明的例程构成了 CDC 串行功能驱动程序与低级别 USB 设备固件栈之间的接口 这个接口由两个例程组成, 一个用来初始化功能驱动程序, 另一个用来处理 CDC 类特定的事件 表 C-1: USB CDC 串行功能驱动程序接口概要 操作 USBUARTInit USBHandleEvents 初始化 CDC 串行驱动程序 标识并处理总线事件 应用不应直接调用这两个例程 例程是在合适的时间由低级别的 USB 固件栈调用的 指向这两个例程的指针存放在功能驱动程序表中 ( 见 功能驱动程序表 ), 以便向低级别的 USB 固件栈标识它们 这种机制可支持多功能设备. 说明 2009 Microchip Technology Inc. DS01164A_CN 第 47 页

48 USB CDC 串行功能驱动程序接口 - USBUARTInit 此例程由低级别的 USB 固件栈调用 当主机已经把系统配置成 USB CDC 设备时, 就将调用此例程 它的用途是初始化并激活 CDC 串行功能驱动程序 语法 BOOL USBUARTInit ( unsigned long flags ) 参数 flags - 初始化标志 ( 保留 ) 返回值 TRUE 如果成功的话 FALSE 如果失败的话 先决条件 无 副作用 USB CDC 功能驱动程序已经初始化, 并准备好处理 CDC 特定的事件 示例 const FUNC_DRV gdevfunctable[] = // USB CDC 串行仿真功能驱动程序 USBUARTInit, // 初始化例程 USBUARTEventHandler, // 事件例程 0 // 初始化标志 } }; DS01164A_CN 第 48 页 2009 Microchip Technology Inc.

49 USB CDC 串行功能驱动程序接口 - USBUARTEventHandler 此例程由低级别的 USB 固件栈调用, 通知 CDC 串行功能驱动程序, 在 USB 上有事件发生 它的用途是根据需要处理这些事件, 以便支持 CDC 串行驱动程序 API 语法 BOOL USBUARTEventHandler ( USB_EVENT event, void *data, unsigned int size ) 参数 event 事件 ID data 指针, 指向事件特定的数据 size 事件特定数据的长度 ( 以字节为单位 ), 如果有数据的话 注 : 事件由级别更低的 USB 固件栈定义, 由 CDC 串行功能驱动程序处理 关于可能传播给应用的事件, 请参阅应用的事件处理例程 ( 见 CDC_APP_EVENT_HANDLING_FUNC ) 返回值 TRUE 如果事件已经得到处理 FALSE 如果没有得到处理 ( 或者, 如果需要进一步的处理 ) 先决条件 系统已经被枚举为 USB 上的 CDC 串行仿真设备, CDC 功能驱动程序已经初始化 副作用 随事件的不同, 副作用变化非常大 一般而言, CDC 特定的事件或者得到处理, 或者转交给应用处理 示例 const FUNC_DRV gdevfunctable[] = // USB CDC 串行仿真功能驱动程序 USBUARTInit, // 初始化例程 USBUARTEventHandler, // 事件例程 0 // 初始化标志 } }; 2009 Microchip Technology Inc. DS01164A_CN 第 49 页

50 附录 D: USB 固件栈架构 PIC32 USB 设备固件栈架构的说明, 请参阅 AN1176 PIC32 USB 设备栈编程指南 DS01164A_CN 第 50 页 2009 Microchip Technology Inc.

51 附录 E: USB 描述符表 CDC 串行演示应用在 usb_app.c 中定义数据类型 USB_DESC_TABLE, 并使用该数据类型来定义其描述符表, 如下所示 表 E-1: 设备描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 12 bdescriptortype 类型, 始终是 USB_DESCRIPTOR_DEVICE 1 1 bcdusb USB 规范版本, BCD 码格式 bdeviceclass 设备类代码 1 2 bdevicesubclass 设备子类代码 1 0 bdeviceprotocol 设备协议 1 0 bmaxpacketsize0 EP0, 最大包大小 1 8 idvendor 供应商 ID (VID) 2 04d8 idproduct 产品 ID (PID) 2 000A bcddevice 设备版本编号, BCD 码格式 imanufacturer 制造商名称字符串索引 1 1 iproduct 产品描述字符串索引 1 2 iserialnum 产品序列号字符串索引 1 3 bnumconfigurations 支持的配置数量 1 1 表 E-2: 配置描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 09 bdescriptortype 类型, USB_DESCRIPTOR_CONFIGURATION 1 02 wtotallength 此配置中全部描述符的总长度 bnuminterfaces 此配置中的接口数量 1 02 bconfigurationvalue 此配置的 ID 编号 1 01 iconfiguration 描述此配置的字符串描述符的索引 1 00 bmattributes 此配置属性的位映射 1 80 bmaxpower 1/2 最大电流 ( 以 ma 为单位 ) 1 32 表 E-3: 接口描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 09 bdescriptortype 类型, USB_DESCRIPTOR_INTERFACE 1 04 binterfacenumber 接口 ID 编号 1 00 balternatesetting 备用接口设置的 ID 编号 1 00 bnumendpoints 此接口中端点的数量 1 01 binterfaceclass USB 接口类 ID 1 02 binterfacesubclass USB 接口子类 ID 1 02 binterfaceprotocol USB 接口协议 ID 1 01 iinterface 接口描述字符串索引 Microchip Technology Inc. DS01164A_CN 第 51 页

52 表 E-4: CDC 报头功能描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) bfunctionlength 描述符的大小 1 05 bdescriptortype 类型, CS_INTERFACE 1 24 bdescriptorsubtype 报头功能描述符子类型 1 00 bcdcdc CDC 规范的 BCD 版本号 表 E-5: CDC 抽象控制模型功能描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) bfunctionlength 描述符的大小 1 04 bdescriptortype 类型, CS_INTERFACE 1 24 bdescriptorsubtype 抽象控制模型功能描述符子类型 1 2 bmcapabilities 设备支持设定 / 获取 (set/get) 线路编码和通知 1 02 表 E-6: CDC 联合 (UNION) 功能描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) bfunctionlength 描述符的大小 1 05 bdescriptortype 类型, CS_INTERFACE 1 24 bdescriptorsubtype 联合功能描述符 1 06 bmmasterinterface 主 CDC 控制接口的接口编号 1 00 bslaveinterface0 第一个从接口的接口编号 01 表 E-7: CDC 调用管理功能描述符 字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) bfunctionlength 描述符的大小 1 05 bdescriptortype 类型, CS_INTERFACE 1 24 bdescriptorsubtype 抽象控制模型功能描述符子类型 1 01 bmcapabilities 设备自身处理调用管理 1 00 bdatainterface 数据类接口的接口编号, 调用管理可能使用也可能不使用此接口 01 表 E-8: 通知 (IN) 端点描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 07 bdescriptortype 类型, USB_DESCRIPTOR_ENDPOINT 1 05 bendpointaddress 端点的地址和方向 1 82 bmattributes 中断传输端点 1 03 wmaxpacketsize 此端点能处理的最大包 binterval 查询周期 ( 以 ms 为单位 ) 1 02 DS01164A_CN 第 52 页 2009 Microchip Technology Inc.

53 表 E-9: 数据类接口描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 09 bdescriptortype 类型, USB_DESCRIPTOR_INTERFACE 1 04 binterfacenumber 接口 ID 编号 1 01 balternatesetting 备用接口设定的 ID 编号 1 00 bnumendpoints 此接口中端点的数量 1 02 binterfaceclass USB 接口类 ID 1 0A binterfacesubclass USB 接口子类 ID 1 00 binterfaceprotocol USB 接口协议 ID 1 00 iinterface 接收描述字符串索引 1 00 表 E-10: 数据 (OUT) 端点描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 07 bdescriptortype 类型, USB_DESCRIPTOR_ENDPOINT 1 05 bendpointaddress 端点的地址和方向 1 03 bmattributes 批量传输端点 1 02 wmaxpacketsize 此端点能处理的最大包 binterval 不工作在查询方式 1 00 表 E-11: 数据 (IN) 端点描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 07 bdescriptortype 类型, USB_DESCRIPTOR_ENDPOINT 1 05 bendpointaddress 端点的地址和方向 1 83 bmattributes 批量传输端点 1 02 wmaxpacketsize 此端点能处理的最大包 binterval 不工作在查询方式 1 00 表 E-12: 语言 ID 字符串 (0) 描述符 字段 说明 大小 ( 字节 ) 值 ( 十六进制 ) blength 描述符的大小 1 04 bdescriptortype 类型, USB_DESCRIPTOR_STRING 1 03 wlangid 语言 ID 代码 表 E-13: 供应商描述字符串 (1) 描述符 字段 说明 大小 ( 字节 ) 值 ( 十六进制 / 字符串 ) blength 描述符的大小 1 34 bdescriptortype 类型, USB_DESCRIPTOR_STRING 1 03 bstring 序列号字符串 50 Microchip Technology Inc Microchip Technology Inc. DS01164A_CN 第 53 页

54 表 E-14: 设备描述字符串 (2) 描述符 字段 说明 大小 ( 字节 ) 值 ( 十六进制 / 字符串 ) blength 描述符的大小 1 34 bdescriptortype 类型, USB_DESCRIPTOR_STRING 1 03 wlangid 语言 ID 代码 50 CDC RS-232 Emulation Demo 表 E-15: 序列号字符串 (3) 描述符字段 说明 大小 ( 字节 ) 值 ( 十六进制 / 字符串 ) blength 描述符的大小 1 16 bdescriptortype 类型, USB_DESCRIPTOR_STRING 1 03 bstring 序列号字符串 DS01164A_CN 第 54 页 2009 Microchip Technology Inc.

55 附录 F: 获取描述符例程 下面的 获取描述符 例程 ( 以及辅助函数 ) 提供了从低级别 USB 协议栈对描述符 ( 应用特定的描述符 ) 的访问途径 static inline const void *GetConfigurationDescriptor( BYTE config, unsigned int *length ) switch (config) case 0: // 配置 1 *length = sizeof(gdesctable.cdc_config_descs); return &gdesctable.cdc_config_descs; default: return NULL; } } // GetConfigurationDescriptor static inline const void *GetStringDescriptor( PDESC_ID desc, unsigned int *length ) // 检查语言 ID if (desc->index > 0 && desc->lang_id!= LANG_1_ID) return NULL; } switch(desc->index) case 0: // 字符串 0 *length = sizeof(gdesctable.string_0)+sizeof(gdesctable.langid); return &gdesctable.string_0; case 1: // 字符串 1 *length = sizeof(gdesctable.string_1)+sizeof(gdesctable.string_1_data); return &gdesctable.string_1; case 2: // 字符串 2 *length = sizeof(gdesctable.string_2)+sizeof(gdesctable.string_2_data); return &gdesctable.string_2; case 3: // 字符串 3 *length = sizeof(gdesctable.string_3)+sizeof(gdesctable.string_3_data); return &gdesctable.string_3; default: return NULL; } } // GetStringDescriptor const void *USBDEVGetDescriptor ( PDESC_ID desc, unsigned int *length ) switch (desc->type) case USB_DSC_DEVICE: // 设备描述符 *length = sizeof(gdesctable.dev_desc); return &gdesctable.dev_desc; case USB_DSC_CONFIG: // 配置描述符 return GetConfigurationDescriptor(desc->index, length); case USB_DSC_STRING: // 字符串描述符 return GetStringDescriptor(desc, length); 2009 Microchip Technology Inc. DS01164A_CN 第 55 页

56 // 对于所有未支持的描述符请求, 将会失败 : default: return NULL; } } // USBDEVGetDescriptor 辅助例程都是内联 (inline) 函数 使用它们, 代码的可读性更高, 同时不会产生函数调用开销 USB 固件栈通过 USB_DEV_GET_DESCRIPTOR_FUNC 宏 ( 见 USB 协议栈选项 ) 来标识 USBDEVGetDescriptor DS01164A_CN 第 56 页 2009 Microchip Technology Inc.

57 软件许可协议 Microchip Technology Incorporated ( 以下简称 本公司 ) 在此提供的软件旨在向本公司客户提供专门用于 Microchip 生产的产品的软件 本软件为本公司及 / 或其供应商所有, 并受到适用的版权法保护 版权所有 使用时违反前述约束的用户可能会依法受到刑事制裁, 并可能由于违背本许可的条款和条件而承担民事责任 本软件是按 现状 提供的 任何形式的保证, 无论是明示的 暗示的或法定的, 包括但不限于有关适销性和特定用途的暗示保证, 均不适用于本软件 对于在任何情况下 因任何原因造成的特殊的 附带的或间接的损害, 本公司概不负责. 附录 G: MICROCHIP USB CDC 串行驱动程序的源代码 Microchip PIC32 USB CDC 串行驱动程序的完整源代码是在免费许可证协议的基础上提供 它以一个档案文件的形式提供, 可以从 Microchip 公司网站下载, 地址是 : 下载档案文件之后, 应查阅版本说明, 了解当前的版本号以及软件的修改历史 2009 Microchip Technology Inc. DS01164A_CN 第 57 页

58 版本历史 版本 A (2008 年 2 月 ) 这是本文档的初始版本 DS01164A_CN 第 58 页 2009 Microchip Technology Inc.

59 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意 甚至是非法破坏代码保护功能的行为 就我们所知, 所有这些行为都不是以 Microchip 数据手册中规定的操作规范来使用 Microchip 产品的 这样做的人极可能侵犯了知识产权 Microchip 愿与那些注重代码完整性的客户合作 Microchip 或任何其他半导体厂商均无法保证其代码的安全性 代码保护并不意味着我们保证产品是 牢不可破 的 代码保护功能处于持续发展中 Microchip 承诺将不断改进产品的代码保护功能 任何试图破坏 Microchip 代码保护功能的行为均可视为违反了 数字器件千年版权法案 (Digital Millennium Copyright Act) 如果这种行为导致他人在未经授权的情况下, 能访问您的软件或其他受版权保护的成果, 您有权依据该法案提起诉讼, 从而制止这种行为 提供本文档的中文版本仅为了便于理解 请勿忽视文档中包含的英文部分, 因为其中提供了有关 Microchip 产品性能和使用情况的有用信息 Microchip Technology Inc. 及其分公司和相关公司 各级主管与员工及事务代理机构对译文中可能存在的任何差错不承担任何责任 建议参考 Microchip Technology Inc. 的英文原版文档 本出版物中所述的器件应用信息及其他类似内容仅为您提供便利, 它们可能由更新之信息所替代 确保应用符合技术规范, 是您自身应负的责任 Microchip 对这些信息不作任何明示或暗示 书面或口头 法定或其他形式的声明或担保, 包括但不限于针对其使用情况 质量 性能 适销性或特定用途的适用性的声明或担保 Microchip 对因这些信息及使用这些信息而引起的后果不承担任何责任 如果将 Microchip 器件用于生命维持和 / 或生命安全应用, 一切风险由买方自负 买方同意在由此引发任何一切伤害 索赔 诉讼或费用时, 会维护和保障 Microchip 免于承担法律责任, 并加以赔偿 在 Microchip 知识产权保护下, 不得暗中或以其他方式转让任何许可证 商标 Microchip 的名称和徽标组合 Microchip 徽标 Accuron dspic KEELOQ KEELOQ 徽标 MPLAB PIC PICmicro PICSTART rfpic SmartShun 和 UNI/O 均为 Microchip Technology Inc. 在美国和其他国家或地区的注册商标 FilterLab Linear Active Thermistor MXDEV MXLAB SEEVAL SmartSensor 和 The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的注册商标 Analog-for-the-Digital Age Application Maestro CodeGuard dspicdem dspicdem.net dspicworks dsspeak ECAN ECONOMONITOR FanSense In-Circuit Serial Programming ICSP ICEPIC Mindi MiWi MPASM MPLAB Certified 徽标 MPLIB MPLINK mtouch nanowatt XLP PICkit PICDEM PICDEM.net PICtail PIC 32 徽标 PowerCal PowerInfo PowerMate PowerTool REAL ICE rflab Select Mode Total Endurance TSHARC WiperLock 和 ZENA 均为 Microchip Technology Inc. 在美国和其他国家或地区的商标 SQTP 是 Microchip Technology Inc. 在美国的服务标记 在此提及的所有其他商标均为各持有公司所有 2009, Microchip Technology Inc. 版权所有 Microchip 位于美国亚利桑那州 Chandler 和 Tempe 与位于俄勒冈州 Gresham 的全球总部 设计和晶圆生产厂及位于美国加利福尼亚州和印度的设计中心均通过了 ISO/TS-16949:2002 认证 公司在 PIC MCU 与 dspic DSC KEELOQ? 跳码器件 串行 EEPROM 单片机外设 非易失性存储器和模拟产品方面的质量体系流程均符合 ISO/TS :2002 此外, Microchip 在开发系统的设计和生产方面的质量体系也已通过了 ISO 9001:2000 认证 2009 Microchip Technology Inc. DS01164A_CN 第 59 页

60 全球销售及服务网点 美洲 亚太地区 亚太地区 欧洲 公司总部 Corporate Office 2355 West Chandler Blvd. Chandler, AZ Tel: Fax: 技术支持 : 网址 : 亚特兰大 Atlanta Duluth, GA Tel: Fax: 波士顿 Boston Westborough, MA Tel: Fax: 芝加哥 Chicago Itasca, IL Tel: Fax: 克里夫兰 Cleveland Independence, OH Tel: Fax: 达拉斯 Dallas Addison, TX Tel: Fax: 底特律 Detroit Farmington Hills, MI Tel: Fax: 科科莫 Kokomo Kokomo, IN Tel: Fax: 洛杉矶 Los Angeles Mission Viejo, CA Tel: Fax: 圣克拉拉 Santa Clara Santa Clara, CA Tel: Fax: 加拿大多伦多 Toronto Mississauga, Ontario, Canada Tel: Fax: 亚太总部 Asia Pacific Office Suites , 37th Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel: Fax: 中国 - 北京 Tel: Fax: 中国 - 成都 Tel: Fax: 中国 - 香港特别行政区 Tel: Fax: 中国 - 南京 Tel: Fax: 中国 - 青岛 Tel: Fax: 中国 - 上海 Tel: Fax: 中国 - 沈阳 Tel: Fax: 中国 - 深圳 Tel: Fax: 中国 - 武汉 Tel: Fax: 中国 - 厦门 Tel: Fax: 中国 - 西安 Tel: Fax: 中国 - 珠海 Tel: Fax: 台湾地区 - 高雄 Tel: Fax: 台湾地区 - 台北 Tel: Fax: 澳大利亚 Australia - Sydney Tel: Fax: 印度 India - Bangalore Tel: Fax: 印度 India - New Delhi Tel: Fax: 印度 India - Pune Tel: Fax: 日本 Japan - Yokohama Tel: Fax: 韩国 Korea - Daegu Tel: Fax: 韩国 Korea - Seoul Tel: Fax: 或 马来西亚 Malaysia - Kuala Lumpur Tel: Fax: 马来西亚 Malaysia - Penang Tel: Fax: 菲律宾 Philippines - Manila Tel: Fax: 新加坡 Singapore Tel: Fax: 泰国 Thailand - Bangkok Tel: Fax: 奥地利 Austria - Wels Tel: Fax: 丹麦 Denmark-Copenhagen Tel: Fax: 法国 France - Paris Tel: Fax: 德国 Germany - Munich Tel: Fax: 意大利 Italy - Milan Tel: Fax: 荷兰 Netherlands - Drunen Tel: Fax: 西班牙 Spain - Madrid Tel: Fax: 英国 UK - Wokingham Tel: Fax: 台湾地区 - 新竹 Tel: Fax: /26/09 DS01164A_CN 第 60 页 2009 Microchip Technology Inc.

untitled

untitled C 8051 MCU SPI EEPROM Alexandru Valeanu Microchip Technology Inc. Microchip Technology 25XXX EEPROM SPI 25XXX EEPROM SO 25XXX EEPROM 3MHz 20 MHz SPI HOLD 25XXX EEPROM EEPROM MCU HOLD 25XXX EEPROM SPI EEPROM

More information

00872a.book

00872a.book 从 MCP2510 升 级 至 MCP2515 作 者 : 介 绍 Pat Richards Microchip Technology Inc. 开 发 MCP2510 独 立 CAN 控 制 器 的 初 衷 是 赋 予 CAN 系 统 和 模 块 设 计 人 员 更 多 的 灵 活 性, 允 许 他 们 为 自 己 的 应 用 选 择 最 好 的 处 理 器 使 用 MCP2510 不 会 使 设

More information

untitled

untitled N1113 8051MU I 2 EEPROM lexandru Valeanu Microchip Technology Inc. Microchip Technology 24XXX EEPROM 2 SL 24XXX EEPROM 24XXX EEPROM I 2 100 khz 1MHz 24XXX EEPROM 2 I 2 EEPROM 128 512 b 100 khz 1MHz 1.7V

More information

01262B.book

01262B.book 使用 C30 编译器实现单片机与片外串行 SRAM 的通信 作者 : 引言 Martin Bowman Microchip Technology Inc. 适用于 Microchip 的 dspic DSC 和 PIC24 系列单片机的 C30 编译器为寻址外部存储器提供了一个解决方案 该编译器支持这样的功能, 即允许用户按照访问 MCU 的片内存储器的方式来访问外部存储器 本应用笔记主要介绍如何使用

More information

Generic_Function_AN1166_Final.book

Generic_Function_AN1166_Final.book 嵌入式设备上的 USB 通用功能 AN1166 作者 : 引言 Bud Caldwell Microchip Technology Inc. 通用串行总线 (Universal Serial Bus, USB) 是一种简单的公共接口, 可以把外部设备连接到个人计算机或其他主机 为了以最小的付出获得其灵活性和功能, Microchip 提供了 USB 通用功能固件 通用驱动程序提供了非常简单的接口来读写与

More information

61127c_cn.book

61127c_cn.book 1 第 1 章 简 介 简 介 目 录 本 章 包 括 下 列 主 题 : 1.1 简 介... 1-2 1.2 本 手 册 的 目 标... 1-2 1.3 器 件 结 构... 1-2 1.4 开 发 支 持... 1-4 1.5 样 式 和 符 号 约 定... 1-4 1.6 相 关 文 档... 1-6 1.7 版 本 历 史... 1-7 2010 Microchip Technology

More information

41632B.book

41632B.book 互 补 波 形 发 生 器 (CWG) 可 配 置 逻 辑 单 元 (CLC) 和 数 控 振 荡 器 (NCO) 外 设 技 巧 与 诀 窍 简 介 Microchip 致 力 于 不 断 向 客 户 提 供 体 积 更 小 速 度 更 快 使 用 更 简 便 与 运 行 更 可 靠 的 创 新 产 品 我 们 的 闪 存 PIC MCU 已 广 泛 应 用 于 日 常 生 活 中 从 烟 雾 探

More information

61146A.book

61146A.book PIC32 2008 Microchip Technology Inc. DS61146A_CN Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Digital Millennium Copyright Act Microchip

More information

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC

,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC, LCD LC LCD PIC 单片机解决方案 集成 LCD 驱动器模块的 PIC 单片机 www.microchip.com/lcd ,Microchip Technology PIC LCD, PIC16F913/914/ 916/917/946 PIC18F6390/6490/8390/8490 PIC16F65J90/85J90 Microchip LCD LCD, Microchip 的优势 LCD PIC,

More information

MCP47x6_DaughterBoard.book

MCP47x6_DaughterBoard.book MCP47X6 PICtail Plus 子 板 用 户 指 南 DS51932B_CN 请 注 意 以 下 有 关 Microchip 器 件 代 码 保 护 功 能 的 要 点 : Microchip 的 产 品 均 达 到 Microchip 数 据 手 册 中 所 述 的 技 术 指 标 Microchip 确 信 : 在 正 常 使 用 的 情 况 下, Microchip 系 列 产 品

More information

CTMU Temperature Measurement AN.book

CTMU Temperature Measurement AN.book 利用 PIC MCU 中的 CTMU 测量温度 TB3016 作者 : 最新一代 PIC24F 和 PIC18F 器件包含的充电时间测量单元 (Charge Time Measurement Unit,CTMU) 使用恒流源来计算电容值的变化以及事件的间隔时间 运用半导体物理学的基本原理, 同样的电流源也可用来测量温度 这允许使用普通而廉价的二极管来取代相对昂贵的热敏电阻和温度传感器 本技术简介描述了使用

More information

21928a.book

21928a.book PS080, PowerTool 800 开发软件用户指南 2005 Microchip Technology Inc. DS21928A_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一

More information

21999a_cn.book

21999a_cn.book 1.5A 低 电 压 低 静 态 电 流 LDO 稳 压 器 MCP1727 特 性 输 出 电 流 能 力 为 1.5A 输 入 工 作 电 压 范 围 :2.3V 至 6.0V 可 调 输 出 电 压 范 围 :0.8V 至 5.0V 标 准 固 定 输 入 电 压 : - 0.8V 1.2V 1.8V 2.5V 3.0V 3.3V 和 5.0V 可 根 据 需 要 提 供 其 他 固 定 输

More information

Microsoft Word - DataAns.doc

Microsoft Word - DataAns.doc 一. 用量产工具将一个 U 盘做成带一个 CDROM 和一个 USBHD 只使用一个接口, 但是使用两个应用集合二. 数据分析 43.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 27.1.0 wvalue = 00 01 ( 高在后 ) 第一字节 00 索引号, 第二字节 01, 表示描述符的类型编号,table 9-5, 此处表示要取得设备描述符 43.0

More information

TB3109 PIC32MX 器件中与 USB 模块相关的更改 USB 模块中断位 ( 即 USBIF USBIE USBIP 和 USBIS 位 ) 的位置变化会影响 PIC32MX 器件上的 USB 协议栈操作 表 1 给出了所列 PIC32MX 器件系列中 USBIF USBIE USBIP

TB3109 PIC32MX 器件中与 USB 模块相关的更改 USB 模块中断位 ( 即 USBIF USBIE USBIP 和 USBIS 位 ) 的位置变化会影响 PIC32MX 器件上的 USB 协议栈操作 表 1 给出了所列 PIC32MX 器件系列中 USBIF USBIE USBIP 在 v2013-06-15 MLA USB 设备和主机协议栈中更新 PIC32MX 支持 TB3109 简介 我们提供适合 PIC32MX MCU 的 Microchip 应用程序库 (Microchip Libraries for Applications,MLA), 但未计划向 MLA 添加新功能 v2013-06-15 MLA USB 协议栈本质上支持所有适用的 PIC32MX MCU 器件

More information

HID_Class_AN1163_Final.book

HID_Class_AN1163_Final.book 嵌入式设备上的 USB HID 类 AN1163 作者 : 引言 人机接口设备 (Human Interface Device, HID) 是一类用在通用串行总线 (Universal Serial Bus,USB) 的设备 构成 HID 类的设备是人们可以用来控制计算机系统操作的设备 这样的设备包括但不只限于 : 鼠标 键盘 操纵杆 按钮及开关 人机接口设备除了提供来自人机接口的信息之外, 还提供各种类型的输出来表明计算机系统采取的操作

More information

untitled

untitled MCP3421 DS51683A_CN Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Microchip Digital Millennium Copyright Act Microchip Microchip Technology Inc. Microchip

More information

21498c_cn.book

21498c_cn.book 精密温度 - 电压转换器 特性 工作电压范围 : - TC147:2.7V 至 4.4V - TC147A:2.5V 至 5.5V 宽温度测量范围 : - -4 C 至 +125 C 温度转换精度高 : - 在 25 C 时为 ±2 C ( 最大值 ) 线性温度斜率 :1 mv/ C ( 典型值 ) 提供 3 引脚 SOT-23B 封装 低工作电流 : - 35 µa 典型值 应用 移动电话 电源过热关断控制

More information

70641A.book

70641A.book AN1299 调整指南 1.1 配置双电流检测电阻模式 本文档介绍了 AN1299 PMSM 无传感器 FOC 的单电流检测电阻三相电流重构算法 (DS01299A_CN) 中所述算法调整所需的步骤和设置 1. 第一步, 用户需完成 AN1078 中的调整过程, 其中介绍了在具体电机和硬件上运行滑模控制器 (Slide Mode Controller, SMC) 所需的全部步骤 2. 应用运行后,

More information

PIC18F65J90/85J90 Product Brief

PIC18F65J90/85J90 Product Brief 采用纳瓦技术内置 LCD 驱动器的 64/80 引脚高性能单片机 单片机的特殊性能 : 闪存程序存储器可承受 1000 次擦写 ( 典型值 ) 闪存数据保存时间为 20 年 ( 典型值 ) 软件控制下可自编程 中断具有优先级 8 x 8 单周期硬件乘法器 扩展的看门狗定时器 (Watchdog Timer, WDT): - 周期从 4 ms 到 131s, 可编程设定 通过两个引脚可进行在线串行编程

More information

21666b.book

21666b.book 具 有 关 断 功 能 的 80 ma 小 型 CMOS LDO TC1016 特 性 节 省 空 间 的 5 引 脚 SC-70 和 SOT-23 封 装 极 低 的 工 作 电 流, 利 于 延 长 电 池 寿 命 : 典 型 值 53 µa 很 低 的 电 压 差 (Dropout Voltage) 额 定 输 出 电 流 :80 ma 仅 需 一 个 1µF 的 陶 瓷 输 出 电 容 高

More information

01277A_cn.book

01277A_cn.book 使用 C32 编译器进行串行 SRAM 器件与 PIC32 MCU 的接口设计 作者 : 引言 Pinakin K Makwana Microchip Technology Inc. Microchip 的串行 SRAM 产品线提供了向应用添加附加 RAM 的一种新方法 这些器件采用 8 引脚小型封装以及 SPI 接口, 使设计人员提升系统的灵活性 Microchip Technology 的 23XXXX

More information

工作原理 脉冲血氧仪基于氧合血红蛋白 (HbO 2 ) 和脱氧血红蛋白 (Hb) 的红光 ( 波长为 nm) 和红外光 ( 波长为 nm) 吸收特性来监测人体血液的氧饱和度 (SpO 2 ) 脉冲血氧仪会交替地闪烁红光和红外光, 光线穿过手指到达光电二极管 HbO

工作原理 脉冲血氧仪基于氧合血红蛋白 (HbO 2 ) 和脱氧血红蛋白 (Hb) 的红光 ( 波长为 nm) 和红外光 ( 波长为 nm) 吸收特性来监测人体血液的氧饱和度 (SpO 2 ) 脉冲血氧仪会交替地闪烁红光和红外光, 光线穿过手指到达光电二极管 HbO 使用 Microchip 的 dspic 数字信号控制器 (DSC) 和模拟器件实现脉冲血氧仪设计 作者 : Zhang Feng Microchip Technology Inc. 简介 脉冲血氧仪是一种用于监测患者血氧饱和度和心率的非侵入式医疗设备 本应用笔记演示了如何使用 Microchip 的 dspic 数字信号控制器 (Digital Signal Controller, DSC) 和模拟器件来实现高精度脉冲血氧仪

More information

00686A.Book

00686A.Book 理解和使用监控电路 AN686 概要 本应用笔记讨论了什么是单片机监控器件, 为什么需要这些器件以及在选择这些器件时需要考虑的一些因素 监控器件属于一个很广的范畴, 它涵盖了上电复位 (Power on Reset,POR) 器件 欠压检测 (Brown-Out Detect,BOD) 器件和看门狗定时器器件 本应用笔记将仅讨论具有 POR 和 BOD 功能的监控器件 监控电路的工作 监控电路可用于几种不同的应用,

More information

0507A_Auto Tech_Microchip

0507A_Auto Tech_Microchip 汽 车 无 线 安 全 接 入 技 术 解 决 方 案 Youbok Lee 主 任 工 程 师 Willie Fitzgerald 产 品 营 销 总 监 Microchip Technology Inc. 引 言 全 球 汽 车 半 导 体 面 临 极 大 的 市 场 机 会, 而 汽 车 设 计 工 程 师 正 在 应 对 高 性 价 比 的 性 能 增 强 功 耗 小 尺 寸 和 安 全 性

More information

光 探 测 应 用 光 探 测 应 用 可 以 使 用 许 多 探 测 器, 例 如 光 电 二 极 管 光 电 晶 体 管 光 敏 电 阻 光 电 管 光 电 倍 增 管 电 荷 耦 合 器 件 等 本 应 用 笔 记 将 重 点 介 绍 光 电 二 极 管, 因 为 它 是 最 常 用 的 光

光 探 测 应 用 光 探 测 应 用 可 以 使 用 许 多 探 测 器, 例 如 光 电 二 极 管 光 电 晶 体 管 光 敏 电 阻 光 电 管 光 电 倍 增 管 电 荷 耦 合 器 件 等 本 应 用 笔 记 将 重 点 介 绍 光 电 二 极 管, 因 为 它 是 最 常 用 的 光 用 于 光 探 测 应 用 的 MCP649 运 放 AN494 作 者 : 简 介 Yang Zhen Microchip Technology Inc. 许 多 光 探 测 应 用 中 经 常 使 用 低 输 入 偏 置 运 算 放 大 器 ( 运 放 ), 以 降 低 电 流 误 差 和 提 高 输 出 信 号 的 精 度 以 下 为 典 型 的 光 探 测 应 用 : 烟 雾 探 测 器 火

More information

技 术 文 件

技  术  文  件 技术文件 技术文件名称 :IAlert 接口使用说明 技术文件编号 : 版 本 :V1.0 共页 ( 包括封面 ) 拟制 审核 会签 标准化 批准 中兴通讯股份有限公司 XX 软件模块详细设计说明 版本号 修改记录 文件编号 版本号 拟制人 / 修改人 拟制 / 修改日期 1 V1.0 胡曦 2005-08-12 新建 更改理由 主要更改内容 ( 写要点即可 ) 注 1: 每次更改归档文件 ( 指归档到事业部或公司档案室的文件

More information

01018A.book

01018A.book 使用 C18 编译器进行 SPI 串行 EEPROM 与 PIC18 单片机的接口设计 作者 : 引言 Chris Parris Microchip Technology Inc. Microchip Technology 生产的 25XXX 系列串行 EEPROM 兼容 SPI 通信标准, 最大时钟频率范围从 3MHz 到 20 MHz 许多时候, 在设计利用串行 EEPROM 器件的应用时, 使用非专用

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

39697b.book

39697b.book 第 9 章看门狗定时器 (WDT) 目录 本章包括下列主题 : 9.1 简介...9-2 9.2 WDT 工作原理... 9-3 9.3 寄存器映射... 9-7 9.4 设计技巧... 9-8 9.5 相关应用笔记... 9-9 9.6 版本历史... 9-10 9 看门狗定时器 (WDT) 2010 Microchip Technology Inc. DS39697B_CN 第 9-1 页 PIC24F

More information

00966A.book

00966A.book SPI 串行 EEPROM 与 PICmicro 单片机的接口设计 作者 : 引言 Martin Kvasnicka Microchip Technology Inc. 目前市场上有许多种单片机用在嵌入式控制系统设计中, 这些嵌入式控制系统中的很大一部分都要用到非易失性存储器 由于串行 EEPROM 具有封装尺寸小, 存储容量灵活, 对 I/O 引脚要求低, 和低功耗低成本等特点, 已成为非易失性存储器的首选

More information

2.0 MHz, 500 mA Synchronous Buck Regulator

2.0 MHz, 500 mA Synchronous Buck Regulator 2.0 MHz 500 ma 同 步 降 压 稳 压 器 MCP1603 特 性 典 型 效 率 大 于 90% 输 出 电 流 最 高 为 500 ma 低 静 态 电 流 = 45 µa ( 典 型 值 ) 低 关 断 电 流 = 0.1 µa ( 典 型 值 ) 可 调 输 出 电 压 : - 0.8V 至 4.5V 固 定 输 出 电 压 : - 1.2V 1.5V 1.8V 2.5V 和

More information

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

01236B.book

01236B.book 使用 C3 和定时器连接 dspic33 DSC 和 PIC24 MCU 与兼容 UNI/O 总线的串行 EEPROM 作者 : 简介 Martin Kvasnicka Microchip Technology Inc. 随着嵌入式系统小型化的趋势, 市场对于减少器件间通信所用 I/O 引脚数的需求也与日俱增 Microchip 开发的 UNI/O 总线正满足了这一需求, 这一个低成本且易于实现的解决方案,

More information

MCP Phase Energy Meter Reference Design Using PIC18F2520 Users Guide

MCP Phase Energy Meter Reference Design Using PIC18F2520 Users Guide 跟踪接口工具包规范 跟踪接口工具包 简介 MPLAB REAL ICE 在线仿真器跟踪接口工具包 (AC2446) 可与具有跟踪连接器的 PIC32 接插模块 (PIM)( 表 1-1) 配合使用 具有跟踪连接器的 PIC32 PIM 支持 PIC32 指令跟踪 请参见仿真器文档了解关于 PIC32 指令跟踪的更多信息 表 1-1: PIC32 PIM 列表 * PIM 编号 PIM 名称 跟踪连接器

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

00513D_CN.FM

00513D_CN.FM 使用 PIC16C54 实现模数转换 AN513 作者 : 简介 本应用笔记介绍了一种使用 PIC16C5X 系列单片机实现模数转换 (Analog to Digital,A/D) 的方法 仅需 5 个外部元件即可实现该转换器, 且可通过软硬件配置使转换分辩率达到 6 到 10 位且转换时间不短于 250 µs 这一方法可用于电压和电流转换且使用软件校准技术来补偿由于时间和温度漂移以及元件误差造成的精度误差

More information

01096B.book

01096B.book 使用 C30 编译器进行 SPI 串行 EEPROM 与 dspic33f 和 PIC24F 的接口设计 AN1096 作者 : 引言 Martin Kvasnicka Microchip Technology Inc. Microchip 的 25XXX 系列串行 EEPROM 均与 SPI 兼容, 其最大时钟频率在 3 MHz 到 20 MHz 的范围内 许多时候, 当设计利用串行 EEPROM

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

水晶分析师

水晶分析师 大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

2 12

2 12 SHENZHEN BRILLIANT CRYSTAL TECHNOLOGIC CO.,LTD. The specification for the following models Graphic LCM serial communication control board CB001 PROPOSED BY APPROVED Design Approved TEL:+86-755-29995238

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

Rotork new IQ brochure

Rotork new IQ brochure Rotork IQ Rotork IQ 3 40 4 5 6 7 Rotork 8 10 12 14 16 18 20 Rotork Rotork Rotork Controls Ltd, Bath, UK 2 Rotork Controls Inc, Rochester, USA Rotork IQ Rotork IQ IQ Rotork IQ Rotork IQ IQ Rotork IQ IQ

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

Using Microchip’s Micropower LDOs

Using Microchip’s Micropower LDOs 使用 Microchip 的微功率 LDO AN765 作者 : 简介 Paul Paglia, 公式 1: Microchip Technology Inc. = V REF [( ) 1] V REF = 1.20V Microchip Technology, Inc 的微功率 LDO 系列采用低电压 CMOS 工艺技术 这些 LDO 提供与双极型稳压器类似的纹波抑制和压差特性, 但效率却显著提高了

More information

SMSC LAN8700 Datasheet

SMSC LAN8700 Datasheet Microchip LAN9252 SDK 与 Beckhoff EtherCAT SSC 集成 AN1916 作者 : Kansal Mariam Banu Shaick Ibrahim Microchip Technology Inc. 简介 Microchip LAN9252 是一款集成双以太网 PHY 的 2/3 端口 EtherCAT 从控制器 (EtherCAT Slave Controller,ESC)

More information

01476A.book

01476A.book 结合 CLC 和 NCO 实现高分辨率 PWM AN1476 作者 : 简介 Cobus Van Eeden Microchip Technology Inc. 虽然许多应用可以使用分辨率低于 8 位的 PWM, 但是有一些应用 ( 例如灯具调光 ) 由于人眼灵敏度的原因需要较高分辨率 背景 传统的 PWM 使用定时器来生成规则的开关频率 (T PWM ), 然后使用纹波计数器来确定在脉冲结束之前,

More information

93004A.book

93004A.book 用 dspic DSC MCPWM 模块驱动交流感应电机 作者 : Jorge Zambada Microchip Technology Inc. 如图 1 所示, 电机绕组的电感对 PWM 电压源的电流进行滤波 正如下文即将介绍的, 基于该原理我们可利用 PWM 信号产生正弦波来对三相 ACIM 进行通电 引言 本文档概括介绍了采用 dspic3f 电机控制数字信号控制器系列芯片实现的电机控制 PWM

More information

33023A.book(31001A_cn.fm)

33023A.book(31001A_cn.fm) 1 第 1 章 简 介 简 介 目 录 本 章 包 括 下 面 一 些 主 要 内 容 : 1.1 简 介...1-2 1.2 本 手 册 的 宗 旨... 1-3 1.3 器 件 结 构... 1-4 1.4 开 发 支 持... 1-6 1.5 器 件 种 类... 1-7 1.6 格 式 和 符 号 的 约 定... 1-12 1.7 相 关 文 档... 1-14 1.8 相 关 应 用 笔

More information

800 mA Fixed-Output CMOS LDO with Shutdown

800 mA Fixed-Output CMOS LDO with Shutdown I 2 C 7/8-7 128 129-8 256 257 4 R AB - 5 kω - 1 kω - 5 kω - 1 kω 75Ω - 5 ppm -7 C - 15 ppm I 2 C - 1 khz - 4 khz - 3.4 MHz / TCON 1.5V 2.5 ua 12.5V SCL SDA - 2.7V 5.5V - 1.8V 5.5V -3 db 2 MHz 5. kω -4

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

「兆豐商業銀行」原交通銀行客戶重要權益手冊

「兆豐商業銀行」原交通銀行客戶重要權益手冊 行 益 行 95 年 8 錄 1 1 參 4 6 金 7 陸 金 7 7 8 錄 行 行 18 錄 行 行 19 行 行 益 行 行 行 95.8.21 行 行 Mega International Commercial Bank Co., Ltd. 行 017 北 路 123 金 樓 行 不 行 行 行 行 行 更 行 更 行 連 參 錄 不 益 益 不 利 行 行 利 不 行 www.ctnbank.com.tw

More information

RW Focus Asia Whitepaper CH1029

RW Focus Asia Whitepaper CH1029 F CUSASIA 1 Robert Walters Focus Asia Whitepaper Matthew Bennett Robert Walters 2 03 04 06 08 10 13 13 14 3 4 5 Robert Walters Focus Asia Whitepaper 6 7 Robert Walters Focus Asia Whitepaper 8 9 Robert

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

Cost_Effective C Handbook

Cost_Effective C Handbook HT66FB5x0 实现 D Joystick 的程序范例 (C 语言 ) 文件编码 :AN0S 简介 HT66FB5x0 系列 MCU 为 A/D Flash USB 8-Bit MCU, 本文将介绍如何使用 HT66FB550 编 写 USB D Joystick C 语言程序范例, 供读者参考 工作原理 Joystick 简介 Joystick, 通常翻译成摇杆或操纵杆, 是一种游戏控制器,

More information

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD Leica MC170 HD Leica MC190 HD 5 6 7 8 11 12 13 14 16 HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD 22 23 24 26 Leica MC170 HD Leica MC190 HD ( ) 28

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

Rotork E120E IQ brochure

Rotork E120E IQ brochure Rotork IQ IQ IQ 3 7 IP68(3-8 )NEMA 9 6 11 IQ 12 1 16 18 Rotork Controls Ltd, Bath, UK 2 Rotork Controls Inc, Rochester, USA IQ IQ IQ PCIQ-Insight IQ IQ IQ IP67 IQ - EEx ia IIC T ( ) Insight IrDA TM 9 (RS232-IrDA

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

01

01 ZEBRA 技术白皮书 条码编码 101 相关知识介绍 引言 20 70 数据 80 20 90 (JIT) AIAG EIA HIBCC HAZMAT 条码的优势提高数据准确性 99% 85% / / 提升效率 / 2 Zebra Technologies 保持一致性 ID 改进库存和资产管理 成本 / 效益分析 ID ID ID (ERP) RFID Zebra Technologies 3 ID

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor 1 4.1.1.1 (Load) 14 1.1 1 4.1.1.2 (Save) 14 1.1.1 1 4.1.2 (Buffer) 16 1.1.2 1 4.1.3 (Device) 16 1.1.3 1 4.1.3.1 (Select Device) 16 2 4.1.3.2 (Device Info) 16 2.1 2 4.1.3.3 (Adapter) 17 2.1.1 CD-ROM 2 4.1.4

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

目录 简介 概念 解决方案 / 实现 相关资源... 7 Microchip 网站... 8 变更通知客户服务... 8 客户支持... 8 Microchip 器件代码保护功能... 8 法律声明... 9 商标... 9 DNV 认证的质量管理体系

目录 简介 概念 解决方案 / 实现 相关资源... 7 Microchip 网站... 8 变更通知客户服务... 8 客户支持... 8 Microchip 器件代码保护功能... 8 法律声明... 9 商标... 9 DNV 认证的质量管理体系 什么是 ICM? 如何将 ICM 用于加密 简介 完整性检查监控器 (Integrity Check Monitor,ICM) 是一个 DMA 控制器, 可使用 Cortex M7 MCU 内存 (ICM 描述符区 ) 中的传输描述符在多个存储区上执行哈希计算 ICM 集成了用于哈希的安全哈希算法 (Secure Hash Algorithm,SHA) 引擎 基于 SHA 的哈希适合用于密码验证 质询哈希身份验证

More information

JLX

JLX PRODUCT:LCD MODULE. Model No.: JLX177-006 Product Type: 1.77 inch QVGA TFT Modoule. 产品规格书 晶联讯研发研发部 : Written By Checked By Approved By 客户名称 : 结构电子核准 地址 : 深圳市宝安区西乡宝安大道东华工业区 A3 栋 6 楼电话 :0755-29784961 Http://www.jlxlcd.cn

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

MESSAGE LG LG 900 Cleveland Motion HORNER APG % LG ( 900 Cleveland Motion Controls HORNER APG % 2

MESSAGE LG LG 900 Cleveland Motion HORNER APG % LG (  900 Cleveland Motion Controls HORNER APG % 2 http://www.lgis.com.cn 2003.09.15 LG Tel: 010-64623254 Fax: 010-64623236 Tel: 021-62784371 Fax: 021-62784301 Tel: 020-87553412 Fax: 020-87553408 Homepage: Http://www.lgis.com.cn LG MASTER-K120s 2003 04

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2 PowerBuilder 9 PowerBuilder Native Interface(PBNI) PowerBuilder 9 PowerBuilder C++ Java PowerBuilder 9 PBNI PowerBuilder Java C++ PowerBuilder NVO / PowerBuilder C/C++ PowerBuilder 9.0 PowerBuilder Native

More information

01019A.book

01019A.book EEPROM 耐擦写能力教程 作者 : 基本术语 David Wilkie Microchip Technology Inc. 耐擦写能力 (Endurance) ( 指 EEPROM) 的定义中包含一些需要明确定义和理解的词语和短语 从以下段落可以看出, 不同厂商使用不同的标准 耐擦写循环 (Endurance Cycling) 是所有厂商 ( 和一些客户 ) 采用的测试方法, 用以确定产品经过多少次

More information

图 1 给出了 WWDT 的框图 为确保在最坏情况下能够通过程序主循环, 需要为定时器设置延时 定时器可通过控制寄存器进行配置 在定时器达到其设定的最大计数值并发生上溢前, 用户的应用程序应定期发出 CLRWDT 指令 如果用户的应用程序未能成功通过 CLRWDT 指令复位定时器, 则看门狗将发生上

图 1 给出了 WWDT 的框图 为确保在最坏情况下能够通过程序主循环, 需要为定时器设置延时 定时器可通过控制寄存器进行配置 在定时器达到其设定的最大计数值并发生上溢前, 用户的应用程序应定期发出 CLRWDT 指令 如果用户的应用程序未能成功通过 CLRWDT 指令复位定时器, 则看门狗将发生上 PIC 单片机的窗口看门狗定时器 TB3123 作者 : Ashutosh Tiwari Microchip Technology Inc. 简介 窗口看门狗定时器 (Windowed Watchdog Timer, WWDT) 是 PIC 单片机的增强型看门狗定时器 该定时器是 PIC 单片机现有看门狗定时器 (Watchdog Timer, WDT) 的扩展 Microchip 的 WDT 具有可配置的时间阈值上限和固定的时间阈值下限

More information

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

}; P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ,   string imagedata; if(0!= read_image(a.jpg,imagedata)) { return -1; } string rsp; ytopen_sdk m_sd tencentyun-youtu c++ sdk for 腾讯云智能优图服务 & 腾讯优图开放平台 安装 运行环境 Linux 依赖项 - curl-7.40.0, 获取更新版本 https://github.com/bagder/curl - openssl-1.0.1k, 获取更新版本 https://github.com/openssl/openssl 构建工程 工程采用 CMake 构建 1.

More information

LayoutPhyCS_cn.book

LayoutPhyCS_cn.book 电容触摸传感器布板和物理设计指南 AN1102 作者 : 介绍 本应用笔记用于说明 AN1101 电容触摸传感简介 中介绍的电容触摸解决方案的布板和物理设计 电容触摸系统的布板和物理设计是设计过程中尤为重要的部分 良好的布板可以使软件实现更为简单 取决于实际应用, 布板可能非常简单, 也可能很复杂, 但相同而简单的设计指南将适用于所有的布板 焊盘外形和尺寸 一般规则 当设计电容触摸按键时, 焊盘的形状并不很重要

More information

MCP1630

MCP1630 可 用 单 片 机 控 制 的 高 速 脉 宽 调 制 器 特 性 高 速 PWM 操 作 ( 电 流 检 测 至 输 出 有 12 ns 延 时 ) 工 作 温 度 范 围 : - -4 C 至 125 C 精 确 峰 值 电 流 限 制 (±5%)(MCP163) 电 压 模 式 和 平 均 电 流 模 式 控 制 (MCP163V) CMOS 输 出 驱 动 器 ( 直 接 驱 动 MOSFET

More information

untitled

untitled XP248 1 XP248 XP248 DCS PLC SCnet SCnet DCS SCnet DCS 1.1 XP248 Modbus HostLink Modbus XP248 4 DB25 XP248 MODBUS XP248 SCControl XP248 4 RS232 RS485 4 32 XP248 COM0-COM1 COM2-COM3 1200 19200bit/s 5 8 1

More information

PIC32 Starter Kit User’s Guide

PIC32 Starter Kit User’s Guide PIC32 入门工具包用户指南 2010 Microchip Technology Inc. DS61159B_CN 请注意以下有关 Microchip 器件代码保护功能的要点 : Microchip 的产品均达到 Microchip 数据手册中所述的技术指标 Microchip 确信 : 在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一 目前, 仍存在着恶意

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

00992A.book

00992A.book 用 dspic30f2010 控制无传感器 BLDC 电机 AN992 作者 : 概述 Stan D Souza Microchip Technology 本应用笔记介绍了如何使用 dspic30f2010 数字信号控制器控制无传感器的 BLDC 电机 应用中采用的技术是基于另一 Microchip 应用笔记 : dspic30f 在无传感器 BLDC 控制中的应用 (AN901) 本文介绍了如何将

More information

文件名

文件名 MICROCHIP PIC10F200/202/204/206 6 8 FLASH PIC10F200 PIC10F202 PIC10F204 PIC10F206 RISC CPU 33 12 8 8 4MHz 1 s 4MHz 1% TM ICSP TM ICD POR DRT WDT RC MCLR I/O /CMOS < 350 A @ 2V 4 MHz 100 na @ 2V FLASH 10000

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

物理传感器布线设计 基本设计要素包括传感器的尺寸 传感器相对于接地层和 / 或其他低阻抗走线的位置, 以及 mtouch/righttouch 器件中的具体设置 在遵守几个简单准则的前提下, 可以对器件进行独特的设计, 来检测用户接近或附近金属物体和高介电常数物体的移动 要实现具有高信号强度和低噪声

物理传感器布线设计 基本设计要素包括传感器的尺寸 传感器相对于接地层和 / 或其他低阻抗走线的位置, 以及 mtouch/righttouch 器件中的具体设置 在遵守几个简单准则的前提下, 可以对器件进行独特的设计, 来检测用户接近或附近金属物体和高介电常数物体的移动 要实现具有高信号强度和低噪声 Microchip 电容式接近检测设计指南 AN1492 作者 : 简介 Xiang Gao Microchip Technology Inc. 接近检测为用户提供了一种无需物理接触即可与电子设备进行交互的新方法 该技术可提升产品美感, 改进用户体验并降低功耗 为实现接近检测, 人们已使用了许多方法 : 电磁 IR 光学 多普勒效应 电感和电容 每种方法均有各自的优势和局限性 电容传感方法的原理是检测传感器上由于用户触摸或接近而产生的电容变化

More information

93002A.book

93002A.book 使用 QEI 模块测量速度和位置 GS002 作者 : 引言 本文档给出了电机控制系列 dspic30f 数字信号控制器中正交编码器 (Quadrature Encoder Interface, QEI) 模块的概述 还提供了一个需要测量转子速度和位置的典型电机控制应用的代码示例 QEI 模块 Jorge Zambada Microchip Technology Inc. 正交编码器 ( 又称增量式编码器或光电式编码器

More information

RW Salary Survey 2015 - China A4

RW Salary Survey 2015 - China A4 2015 中国 2014年 中国政府实施从纯制造业和基础设施行业向高科 技行业的转型 加强专业服务和消费者领域发展 以出口 刺激经济增长 由于政府的投资政策重新定位 我们看到越来越多的研发 中心在国内成立 更多国际专业服务公司进入中国市场 奢侈品及零售品牌进驻苏州 杭州 南京和成都等二线城 市 带动了当地市场的招聘需求 纵观总体经济 经济普遍增长 就业市场前景乐观 雇员 与雇主信心增强 2014年前三季度GDP增长率达7.4%

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

FPGAs in Next Generation Wireless Networks WPChinese

FPGAs in Next Generation Wireless Networks WPChinese FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000

More information

本实验需要用到两个特征值, 两个特征值的属性各不相同, 我们同样在 SimpleGATTProfile 中新建即可, 接下来就开始吧 新建特征值表 : 表 3.3 串口透传特征值属性 长度 属性 UUID 功能 (byte) SIMPLEPROFILE_CHA R6 15 可读可写 FFF6 服务器

本实验需要用到两个特征值, 两个特征值的属性各不相同, 我们同样在 SimpleGATTProfile 中新建即可, 接下来就开始吧 新建特征值表 : 表 3.3 串口透传特征值属性 长度 属性 UUID 功能 (byte) SIMPLEPROFILE_CHA R6 15 可读可写 FFF6 服务器 串口透传 前言 : 有了上面的基础, 接下来就可以打造无线串口功能了 实现平台 :WeBee CC2540 模块及功能底板 图 3.117 网蜂 CC2540 模块及功能底板实验现象 : 两台 PC 通过串口连接 CC2540, 通过设置好串口调试助手, 就可以相互收发信息 也可在一台 PC 利用两个串口实现这个功能 实验讲解 : 整个实验用到两个模块, 一个作为服务器 一个作为客户端, 重点为下面两个方向

More information

24FJ256GB210 PB rev A.book

24FJ256GB210 PB rev A.book 带有 USB OTG 的 16 位 64/100 引脚闪存单片机产品简介 通用串行总线特性 : 兼容 USB v2.0 On-The-Go (OTG) 双重功能 可作为主机或外设 在主机模式下 USB 可低速 (1.5 Mb/s) 和全速 (12 Mb/s) 运行 在设备模式下 USB 可全速运行 用于 USB 的高精度 PLL 最多支持 32 个端点 ( 双向 16 个 ): - 端点缓冲器可在首个

More information

2 PIC PIC 1 / CPU PIC MCU PIC RC

2 PIC PIC 1 / CPU PIC MCU PIC RC 2 PIC PIC 1 /... 2-2 2... 2-3 3... 2-4 4... 2-4 5... 2-4 6 CPU... 2-5 7 PIC MCU... 2-6 8 PIC16... 2-6 9... 2-7 10... 2-7 11 RC... 2-7 12... 2-8 13... 2-8 14 NOP... 2-9 15 PMD... 2-9 16... 2-10 17 WDTWDT...

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 1 2 1 2 3 4 5 6 7 8 9 10 3 1 150 2 150 1 1 1.1 1.1.1 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.4 1.4.1 CPU 1.4.2 I/O 1.4.3 I/O 1.5 1.5.1 CISC RISC 1.5.2 1.5.3 1.6 1.6.1 1.6.2 N 1.6.3 2 2.1 2.1.1 2.1.2 2.1.3

More information