谷动谷力

标题: 【MCU应用笔记】NXP LPC5516 USB 代码流程讲解(上) [打印本页]

作者: 谷谷小师妹    时间: 2023-2-12 00:24
标题: 【MCU应用笔记】NXP LPC5516 USB 代码流程讲解(上)
【MCU应用笔记】NXP LPC5516 USB 代码流程讲解(上)




LPC5516 是 NXP LPC55XX 系列的一款 General MCU,具有 HighSpeed USB 功能,能够实现最高 8K Report Rate。在高端的电竞外设市场中有着巨大的优势。


在本文中,我们将会对 LPC5516 SDK 中的 USB 例程进行讲解,具体例程为 usb_device_composite_hid_mouse_hid_keyboard,因为这个例程是 LPC5516 实现 HID 功能,同时枚举成鼠标跟键盘,同时能够实现鼠标跟键盘的功能。具体 SDK 的下载,大家可以在 https://mcuxpresso.nxp.com/zh/welcome 官网中找到对应的开发板或者 MCU 进行下载就行了,这里就不再赘述了。
本文的 IDE 为 MCUXPresso,也是可以在官网中进行下载,网址如下https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE 接下来我们就来开始分析 USB 流程了。


在进行代码分析中,我们先对于例程的文件夹进行说明。文件夹如下图所示:



其中我们就对常用的几个文件夹进行说明:
在讲完文件夹的结构之后,我们再来介绍到一些关键参数的定义以及修改:
对于很多客户来说,他们拿到一份代码之后通常都会提出一个问题,这份代码的 USB 描述符我能改吗,在哪里改?对此,可以在上文提到的 sources 文件夹中的 usb_device_descriptor.c 中进行修改,如下图所示:






该图为关于鼠标的描述符定义。除此之外这个 C 文件中还有键盘的描述符定义,所以如果需要修改描述符就可以先定好描述符后对结构体进行替换就好了。
在该例程中默认是使用 Full Speed USB 的,Full Speed USB 特性是最多只能 1ms 发一次数据帧,所以只能最高做到 1K report rate。就有客户会问了,如果我要使用 High Speed USB 外设,而且要做 4K 甚至 8K Report  Rate的话是需要进行怎么样的代码改动?对此,可以在 sources 文件夹中的 usb_device_config.h 文件中进行修改,如下图所示:



可以通过这个宏来进行修改,目前 SDK 中是使用了一个 Full Speed USB,0 个 High Speed USB。
如果需要修改 USB 的 Report Rate 的话,则需要修改usb_device_descriptor.h 中的 Interval 参数,如下图所示:



其中分有 High Speed USB 以及 Full Speed USB 的 Interval 参数,这个参数会在 USB 一开始跟主机沟通时上报的,用于指示数据帧(Full Speed USB)或者数据微帧(High Speed USB)的上报间隔,时间公式为 T = 2^(Interval-1) 个最小单位,其中 Full Speed 数据帧的最小单位为 1ms; High Speed 数据微帧的最小单位为 125 μs。所以可以计算出上图中 Full Speed 的间隔为 8ms,High Speed 的间隔为 4ms。

由于篇幅的限制,在本文中我们就先介绍 USB 代码常用到或者需要修改到的内容,在下篇中,我们将会介绍 USB 枚举后对于 set report,get report 等操作时的代码流程,敬请期待。





欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2