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

    文章

    17134

    浏览量

    351015
  • usb
    usb
    +关注

    关注

    60

    文章

    7939

    浏览量

    264497
  • CDC
    CDC
    +关注

    关注

    0

    文章

    57

    浏览量

    17800
  • 编译
    +关注

    关注

    0

    文章

    657

    浏览量

    32853
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1035

    浏览量

    45905

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

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

收藏 人收藏

    评论

    相关推荐

    使用MCUXPresso插件开发Zephyr

    应广大读者朋友的热情邀请,我们特别策划了“Zephyr领进门”系列介绍(共十篇),旨在为大家深度剖析Zephyr OS——这备受瞩目的开源实时操作系统。从使用MCUXPresso插件进行开发
    的头像 发表于 11-28 09:41 245次阅读

    在macOS Sierra上安装Pro Tools 10

    在 macOS Sierra 上安装 Pro Tools 10 
    发表于 11-25 14:48 0次下载

    在DRA7xx器件上使用CONFIG-FS的USB复合小工具

    电子发烧友网站提供《在DRA7xx器件上使用CONFIG-FS的USB复合小工具.pdf》资料免费下载
    发表于 10-10 09:26 0次下载
    在DRA7xx器件上使用<b class='flag-5'>CONFIG</b>-FS的<b class='flag-5'>USB</b>复合小工具

    ModusToolbox™ 3.2 Dashboard工程生成错误的原因?

    生成工程时,出现如下错误: Opening project creator from C:/Users/XXX/ModusToolbox/tools_3.2/project-creator
    发表于 07-26 06:30

    何用flash_download_tools_v3.6.5_0烧录程序?

    /ESP8266_RTOS_SDK/examples/get-started/project_template拷贝到了另外目录,并生成了partitions_singleapp.bin
    发表于 07-09 06:11

    何用C++创建简单的生成式AI模型

    生成式AI(Generative AI)是种人工智能技术,它通过机器学习模型和深度学习技术,从大量历史数据中学习对象的特征和规律,从而能够生成全新的、完全原创的内容,包括文本、图像、音频和视频等。与传统的基于规则或模板的
    的头像 发表于 07-05 17:53 850次阅读

    如何快速生成Modbus指令?教程来啦

    适用型号该笔记适用于标准Modbus协议产品(MA01系列、ME31系列、M31系列、ME15-AXAX8080)。二功能简介功能说明:Modbus指令快速生成教程旨在帮助用户快速
    的头像 发表于 06-28 08:21 1227次阅读
    如何<b class='flag-5'>快速</b><b class='flag-5'>生成</b>Modbus指令?教程来啦

    esp32生成makefile的时候,始终提示出错,为什么?

    我买了esp32的开发板,我下载sdk只有, 在执行cmake . 来生成makefile的时候,始终提示出错, 错误提示如下: CMake Error at tools/cmake
    发表于 06-26 06:16

    下载编译usb_cdc_4g_module示例报usb_print_config_descriptor错的原因?

    \'_usb_get_config_desc\': D:/_______________________PROJECTS/ESP_PRJs/esp-iot-solution/components/usb
    发表于 06-14 06:37

    用PSOC4芯片设计信号发生器,用什么软件去进行仿真?

    请问下,就是我用PSOC4芯片设计信号发生器,那么我应该用什么软件去进行仿真,就比如
    发表于 06-03 07:31

    在界面有改动前点击生成代码是可以的,但是加了textArea后生成就失败了的原因?

    在我界面有改动前我点击生成代码是可以的但是我就随便加了textArea然后点生成程序就失败了,把界面上添加的textArea后再点击生成
    发表于 04-01 08:11

    种1.10 USB-PD快充电源静电浪涌保护方案

    PD的全名叫做USB Power Delivery Specification,是USB的标准化组织推出的快速充电的标准。
    的头像 发表于 03-25 10:26 475次阅读
    求<b class='flag-5'>一</b>种1.10 <b class='flag-5'>USB</b>-PD快充电源静电浪涌保护方案

    何用stm32生成pwm同时在其pwm低电平中心触发adc?

    何用stm32生成pwm同时在其pwm低电平中心触发adc
    发表于 03-20 07:25

    全志XR806 FreeRTOS快速开发入门

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

    何用小安派-Eyes-S1做一个电子木鱼?

    2024年的第篇教程来了,本篇学习如何添加LVGL事件,并制作完成电子木鱼(小美苦苦哀求,我略微出手而已)。祝大家2024积德累功,心想事成!接下来看看如何用小安派-Eyes-S
    的头像 发表于 01-13 15:18 1019次阅读
    如<b class='flag-5'>何用</b>小安派-Eyes-S1做<b class='flag-5'>一个</b>电子木鱼?