0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用MCUXpresso Config Tools来快速生成一个可用的USB

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2021-10-28 09:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言

本文介绍了如何使用MCUXpresso Config Tools来快速生成一个可用的USB composite device的demo,以便节省时间直接进行USB应用层的开发,而不必关注USB协议栈及底层的配置。文详细介绍了如何利用Config Tools生成USB Composite Device工程的全部步骤,并且还会介绍,如何将这些代码porting到IAR等不同IDE中进行开发。

组合设备介绍

USB的composite类是指在一个USB设备中,实现多个不同功能的特殊USB类,如一个设备实现鼠标加键盘或者U盘加键盘的功能。

实际上,USB composite类几乎可以将任意的USB功能进行组合,并且组合的数量也不局限于两个,只要端点资源够多,可以组合三个或多个功能于一个设备上。

在USB中,还存在有一种compound device的概念,它与composite device都可以译作复合设备或组合设备,但是它们是两个完全不同的概念。

USB compound device(USB复合设备)中内嵌Hub和多个功能,每个功能都是独立的USB设备,有独立的VID与PID,从实现层面上讲就是一个物理设备实现了一个Hub和多个物理设备。

USB composite device(USB组合设备)中只有一套VID与PID,通过不同的接口将这同一个设备定义为不同的功能的组合。而不同功能的实现依赖于不同的类接口的合并。

环境搭建

本文使用i.MX RT1060-EVK板作为演示对象,所使用的MCUXpresso IDE(以下简称MCUX)版本为v11.4.0,其中内置了v10.0.0版本的Config Tools,使用内置的Config Tools所生成的工程,可以直接在MCUXpresso IDE内编译下载,下一章将会介绍如何将生成的代码集成到IAR中进行编译下载运行。

在使用MCUXpresso生成工程时需要加载SDK到MCUXpresso环境中,本文使用的SDK版本为2.10.0。

以下例子是生成了一个包含CDC VCOM、MSC、HID Mouse三个类功能的组合设备。

配置工程

首先需要创建工程。

进入MCUXpresso IDE界面后,点击New project进入创建工程界面,选择evkmimxrt1060板,点击next,进入config界面,点击middleware选项卡,选中USB Device和USB PHY选项, USB Common Header会被自动勾选,最后点击Finish完成工程创建。

具体步骤如下图:

44512c88-378b-11ec-82a8-dac502259ad0.png

完成工程的创建后,选择ConfigTools选项卡下的Peripherals,进入工程配置界面,在左侧Components窗口下,点击Middleware右侧的加号,弹出选择界面,在选择界面中选中USB,点击OK。操作步骤如下图所示。

44a32362-378b-11ec-82a8-dac502259ad0.png

此时,我们已经将USB中间件添加进入配置,刚添加进入后会发现右下角的Problems界面内会报两条错误,为了解决其中的时钟错误,首先还是在ConfigTools选项卡内,选择Clocks,进入Clock配置界面,选择Clock Outputs界面中的USBPHY1 PLLclock,然后在右侧的Details界面内Enable USBPHY1 clock output,具体步骤如下图所示。

450ced60-378b-11ec-82a8-dac502259ad0.png

返回Peripherals界面,时钟的错误已经消除,下面开始添加USB的功能接口,在刚才添加的USB1的主界面内根据自己的需求修改device的VID及PID。点击Supported interfaces选项旁边的加号,添加一个interface,会生成一个interface0,默认新添加的interface的类都是DFU,在右侧Class下拉菜单中选择想要实现的组合设备中的第一个类。

此处需要注意的是,CDC VCOM的实现需要用到两个子类interface,分别是用于管理和控制的通信类接口CIC与用于传输数据的数据接口类DIC,在Config Tools中需要分别添加两个interface组成来一个CDC VCOM的功能。添加两个interfaces,分别设置类为CIC VCOM及DIC VCOM。Config Tools添加interfaces时,是按照顺序使用端点号及interface号,这里我们不修改任何参数,直接使用默认的数据,如果应用层有特殊需要的,也可以修改端点的相关参数来满足需求。

第一个CDC VCOM类的功能添加完成后,开始添加第二个MSC类的interface,仍然是点击加号,修改Class为MSC,其余的配置都保持默认。最后进行HID类的配置,仍然是点击加号,添加新的interface,修改Class为HID,在右侧的Present下拉框内选择Mouse,需要使用自定义HID报告的应用可以选择None,并且自己进行Endpoints和report的配置。所有配置过程如下图所示:

4575eb4e-378b-11ec-82a8-dac502259ad0.png

在所有类的interfaces添加完成后,点击上方菜单中的UpdateCode,在弹出的对话框中,可以看到本次配置对哪些文件产生了影响,此处需要注意的是,需要前两个board文件夹下的4个文件的默认勾选去除掉,然后点击OK,完成代码的生成。具体步骤如下图所示。

45cac6aa-378b-11ec-82a8-dac502259ad0.png

在生成完成代码后,MCUX会自动跳转回工程开发界面,打开source目录下的与工程同名的.c文件,在头文件处添加’ #include “usb_device_composite.h”’,并且将主循环里的内容替换为USB_DeviceTasks();。

修改的步骤如下图所示。

46133f66-378b-11ec-82a8-dac502259ad0.png

完成上述修改后即可编译下载到RT1060-EVK板上进行测试。下载完成后按下EVK板的reset键,连接USB1口到PC的USB口,打开设备管理器可以看到生成了一个新的composite device,并且同时,还可以在各个设备类下面查找到实现的相应的设备,并且这些设备的PIDVID相同,都是在配置界面内所配置的PIDVID,如下图所示。

4655fa04-378b-11ec-82a8-dac502259ad0.png

移植到IAR环境

先要准备一个IAR的工程。

在SDK生成器中下载一个带有完整的USB stack的SDK包,然后在同样的页面内下载一个Standalone的示例工程,如下图所示。

466af7c4-378b-11ec-82a8-dac502259ad0.png

根据所要生成的Composite Device所含的类的种类,选择SDK中的某单一类的工程,例如,本应用笔记中的Composite Device包含了三个类,在生成单独的工程时,选择dev_hid_mouse_bm的工程。

接下来需要添加和删除一些文件

上一节中生成的工程中,只包含了HID类的相关文件,所以我们需要朝工程内添加两部分的文件,以实现composite device的功能。

第一部分的文件是USB stack相关的文件,这也是为什么我们需要一个完整的SDK包的原因,从SDK包的middlewareusboutputsourcedeviceclass目录中将MSC类及CDC类相关的文件添加到工程中。如下图所示。

46d5831e-378b-11ec-82a8-dac502259ad0.png

第二部分文件是由Config Tools生成的文件,这部分文件在MCUX的工程目录下能够找到,将Config Tools生成的文件复制到IAR工程目录下,并且如下图所示将它们添加进工程。

470d7602-378b-11ec-82a8-dac502259ad0.png

在完成文件的添加后还需要把原本source目录下的文件从工程中去除,以免除本来工程里的文件与工具所生成的文件产生的冲突。由于使用的基工程是HID Mouse的demo工程,还需要将usb目录下的dcd目录下的文件从工程中去除,否则工程会报错。

需要注意的是,在把所有的文件添加进工程以后,需要在配置里将保存相应头文件的目录添加到include directories中。

完成上述工作后,即可编译下载,运行效果与前一章的效果一致。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18618

    浏览量

    387406
  • usb
    usb
    +关注

    关注

    60

    文章

    8372

    浏览量

    281761
  • CDC
    CDC
    +关注

    关注

    0

    文章

    58

    浏览量

    18512
  • 编译
    +关注

    关注

    0

    文章

    688

    浏览量

    34950
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1094

    浏览量

    51206

原文标题:手把手带您使用MCUXpresso Config Tools生成USB组合设备

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    恩智浦MCU教程 基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植

    本篇还是以移植RT-Thread Nano到MCUXpresso IDE为主,移植的代码可以在nxpic.org.cn论坛搜索到。
    的头像 发表于 08-21 09:49 6244次阅读
    恩智浦MCU教程 基于<b class='flag-5'>MCUXpresso</b>和FRDM-MCXA346的RT-Thread Nano移植

    恩智浦MCU MCXN947 基于MCUXpresso Config tools创建IIC的教程步骤

    MCXN947是NXP推出的高性能微控制器,支持丰富的通信接口,如I2C。借助MCUXpresso Config Tools,开发者可快速配置I2C外设,
    的头像 发表于 05-22 09:40 1817次阅读
    恩智浦MCU MCXN947 基于<b class='flag-5'>MCUXpresso</b> <b class='flag-5'>Config</b> <b class='flag-5'>tools</b>创建IIC的教程步骤

    何用QT开发USB3.0上位机?

    何用QT开发USB3.0上位机
    发表于 05-21 06:54

    如何在不使用USB控制器的情况下对CYPD2119-24LQXI自定义配置进行编程?

    我想要编程(如果可能的话通过 SWD)自定义但相当基本的“Type-C 到 DP”AltMode 适配器功能,到安装在自定义 PCB 上的CYPD2119-24LQXI设备上。 我已经下载了
    发表于 05-13 06:35

    为什么找不到MCUXpresso的SDK?

    我有LPC1769的 LPCXpresso 板,现在我需要 SDK,但我找不到 MCUXpresso 的 SDK,并且 LPCExpresso v2.07 的链接不起作用,“系统当前不可用”。
    发表于 04-03 08:17

    MCUXpresso_24.12.148/FRDM-K22F调试会话启动速度非常慢,怎么解决?

    任何错误消息。加载速度非常慢。加载 Debug 会话后,调试似乎以正常的响应速度进行。 如果我构建并调试 NXP 示例项目,则 Debug 会话几乎立即出现 - 只需几秒钟。 我在 Ubuntu 22.04 上构建。 请问我该如何加
    发表于 04-02 08:26

    FRDM-MCXN947为什么无法使用配置工具修改示例项目中使用的led_blinky LED?

    配置工具。 4. 旦打开,Config 工具就会报告 Clocks 和 Pin 中的许多错误。(大约 20 错误)。我是 NXP、MCUXpresso 和 VSCode 的新手,所
    发表于 03-24 07:59

    MCUxpresso IDE中收到错误:检测到0可用的SWD设备,怎么解决?

    中收到以下错误: 错误:检测到 0 可用的 SWD 设备。 我可以通过什么方式从这个阶段恢复 MCU ?
    发表于 03-21 07:22

    用hal库通过usb做了hid复合设备,想问问怎么才能通过蓝牙实现hid设备?

    新手刚刚接触stm32,想请教大佬, 最近用hal库通过usb做了hid复合设备,想问问怎么才能通过蓝牙实现hid设备 我用cubemx直接就给我
    发表于 03-11 08:16

    恩智浦发布新版MCUXpresso SDK

    对于使用恩智浦无线微控制器 (如RW61x和MCX W) 及软件平台的开发人员,在GitHub发布的MCUXpresso SDK 24.12.00是向前迈出的重要步。最新的SDK版本得到了显著的改进,旨在加速产品开发,增强代码的可视化,并通过现代开源工具提高效率。
    的头像 发表于 02-21 14:20 4469次阅读
    恩智浦发布新版<b class='flag-5'>MCUXpresso</b> SDK

    用Reality AI Tools创建模型

    在第二步采集到的数据基础之上,用Reality AI Tools创建模型。
    的头像 发表于 01-22 14:23 2903次阅读
    用Reality AI <b class='flag-5'>Tools</b>创建模型

    MCUXPresso for VS Code插件 从0开始打造HelloWorld

    篇中Zephyr的Hello 2025,Hello World,小编为大家介绍了使用MCUXPresso for VS Code插件导入
    的头像 发表于 01-16 09:20 1680次阅读
    用<b class='flag-5'>MCUXPresso</b> for VS Code插件 从0开始打造HelloWorld

    借助谷歌Gemini和Imagen模型生成高质量图像

    快速发展的生成式 AI 领域,结合不同模型的优势可以带来显著的成果。通过利用谷歌的 Gemini 模型制作详细且富有创意的提示,然后使用 Imagen 3 模型根据这些提示生成高质
    的头像 发表于 01-03 10:38 1351次阅读
    借助谷歌Gemini和Imagen模型<b class='flag-5'>生成</b>高质量图像

    使用MCUXpresso for VS Code插件开发Zephyr的hello world

    本期来到Zephyr实战经验演练,小编带着大家起使用MCUXpresso for VS Code插件开发属于Zephyr的hello
    的头像 发表于 01-03 09:21 1785次阅读
    使用<b class='flag-5'>MCUXpresso</b> for VS Code插件开发Zephyr的hello world

    使用DAC38J84的config47和config48输出固定的数据时没有输出,为什么?

    我使用DAC38J84的config47和config48输出固定的数据时没有输出,我的配置如下: sifdac_ena =1;When asserted the DAC ou
    发表于 01-03 07:09