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
    +关注

    关注

    146

    文章

    16004

    浏览量

    343500
  • usb
    usb
    +关注

    关注

    59

    文章

    7419

    浏览量

    258009
  • CDC
    CDC
    +关注

    关注

    0

    文章

    55

    浏览量

    17667
  • 编译
    +关注

    关注

    0

    文章

    613

    浏览量

    32371
  • SDK
    SDK
    +关注

    关注

    3

    文章

    965

    浏览量

    44680

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

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

收藏 人收藏

    评论

    相关推荐

    全志XR806 FreeRTOS快速开发入门

    RTOS 快速开发入门 XR806 是颗高集成度无线应用MCU,其集成了ARMv8-M 内核、IEEE 802.11b/g/n Wi-Fi 子系统、BLE 5.0子系统、电源管理系统、高级别的安全
    发表于 03-01 10:49

    怎样快速生成“无源电感Pcell”?

    怎样快速生成“无源电感Pcell”?
    的头像 发表于 12-06 16:13 503次阅读
    怎样<b class='flag-5'>快速</b><b class='flag-5'>生成</b>“无源电感Pcell”?

    手把手带您使用MCUXpresso Config Tools生成USB组合设备

    手把手带您使用MCUXpresso Config Tools生成USB组合设备
    的头像 发表于 10-31 16:55 745次阅读
    手把手带您使用<b class='flag-5'>MCUXpresso</b> <b class='flag-5'>Config</b> <b class='flag-5'>Tools</b><b class='flag-5'>生成</b><b class='flag-5'>USB</b>组合设备

    MCUXpresso调试其它工具链生成的项目

    MCUXpresso调试其它工具链生成的项目
    的头像 发表于 10-31 16:42 246次阅读
    用<b class='flag-5'>MCUXpresso</b>调试其它工具链<b class='flag-5'>生成</b>的项目

    MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异

    MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异
    的头像 发表于 09-28 17:05 570次阅读
    <b class='flag-5'>MCUXpresso</b> IDE下<b class='flag-5'>生成</b>镜像文件的方法及其与IAR,MDK差异

    如何在MCUXpresso IDE中测量能耗?

    如何在MCUXpresso IDE中测量能耗?
    的头像 发表于 09-19 16:40 289次阅读
    如何在<b class='flag-5'>MCUXpresso</b> IDE中测量能耗?

    NUC240如何用散装转移类型进行USB通信

    执行USB 散装设备和用于与该设备进行通信的PC侧应用程序。 PC侧程序通过调用 散装API 执行对
    发表于 08-30 08:46

    何用散装转移类型进行USB通信

    执行USB 散装设备和用于与该设备进行通信的PC侧应用程序。 PC侧程序通过调用 散装API 执行对
    发表于 08-22 07:11

    1分钟揭秘:激发MCU潜力,新版MCUXpresso工具集是如何做到的?

    全新MCUXpresso工具集 恩智浦 新版MCUXpresso 推出之后,引起了小伙伴们浓厚的兴趣。其丰富多样的工具和资源赋予开发人员更强的可扩展性、可用性和可移植性,为嵌入式开发带来全新
    的头像 发表于 06-30 08:05 325次阅读

    Config Tools v13.1(DEB 包)缺少python目录怎么解决?

    最新的 Config Tools v13.1(DEB 包)缺少 python 目录。 以下是安装后 bin 目录的样子: ls /opt/nxp/i.MX_CFG_v13.1/b
    发表于 06-08 09:40

    MCUXpresso不支持Clocks工具吗?

    我已经下载并安装了 MCUXpresso Config Tools v13.1,并将其与最新的 iMX8M-Plus SDK (SDK_2_13_0_MIMX8ML8xxxKZ)
    发表于 05-31 08:54

    何用proc sql生成宏变量?

    上节我们讲了PROC SQL的基本结构,以及一些sql命令的使用,这节我们主要讲一下case...when...、order by 、group by 、update、delete语句以及如何用proc sql生成宏变量。
    的头像 发表于 05-19 16:13 1508次阅读
    如<b class='flag-5'>何用</b>proc sql<b class='flag-5'>生成</b>宏变量?

    如何使用带有虚拟com端口的串行管理器MCUXpresso

    是否可以使用串行管理器库为虚拟 com 端口设置 shell?这是我使用 cdc usb 文档中的代码进行的配置,除了我使用的是 config
    发表于 05-17 11:00

    如何使用mcuxpresso为lpc55s28生成usb虚拟com?

    我需要帮助使用 mcuxpresso 为 lpc55s28 生成 usb 虚拟 com。示例代码有效,但通过新项目的外围选项卡会产生很多错误。任何允许使用 usb 端口作为虚拟 com
    发表于 05-04 08:06

    如何在MCUXpresso IDE中生成.bin文件?

    是盟友,我们在哪里闪存代码 0x00000000?,0x60000000 我们如何在 MCUXpresso IDE 中生成 .bin 文件?
    发表于 04-26 06:55