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

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

3天内不再提示

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

jf_pJlTbmA9 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2023-10-31 16:55 次阅读

引言

本文介绍了如何使用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完成工程创建。

具体步骤如下图:

wKgZomUD9dWAQCAEAAJjaEaI61w508.png

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

wKgaomUD9deAIN6-AAGlMl-jliQ418.png

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

wKgZomUD9dqAcwsrAALqi-52dpc085.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的配置。

所有配置过程如下图所示:

wKgZomUD9dyARR37AACq2WTq6F0548.png

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

具体步骤如下图所示。

wKgZomUD9d6AD1DiAACiZVZjKZI812.png

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

修改的步骤如下图所示。

wKgaomUD9d-AS_jmAAJo0wyhsBQ732.png

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

wKgZomUD9eGACUZgAAO0qi-WSQw446.png

移植到IAR环境

先要准备一个IAR的工程。

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

wKgaomUD9eKAdSB4AAMGEubH3D0962.png

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

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

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

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

wKgaomUD9eOAM9wAAAAzeV3ax_8467.png

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

wKgZomUD9eWAIqddAABN4mQ4wCI535.png

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

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

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

来源:恩智浦MCU加油站

审核编辑:汤梓红

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

    关注

    60

    文章

    7938

    浏览量

    264488
  • 环境搭建
    +关注

    关注

    0

    文章

    53

    浏览量

    9052
  • mcuxpresso
    +关注

    关注

    1

    文章

    40

    浏览量

    4174
收藏 人收藏

    评论

    相关推荐

    手把手教你SIMULINK代码生成

    FrancisZhao:专栏文章列表以及一些说明​zhuanlan.zhihu.comFrancisZhao:手把手教你代码生成(下):SIMULINK代码生成​zhuanlan.zhihu.com
    发表于 08-18 06:03

    手把手教你写批处理-批处理的介绍

    手把手教你写批处理-批处理的介绍
    发表于 10-25 15:02 69次下载

    手把手笔记本的系统安装

    手把手笔记本的系统安装 笔记本的系统安装和台式机的是一样的。Windows系统安装一般包括以下几个步骤
    发表于 01-20 13:52 1756次阅读

    美女手把手教你如何装机(中)

    美女手把手教你如何装机(中) 再来是硬碟的部份,这款机壳还不错,可以旋转支架~
    发表于 01-27 11:14 1463次阅读

    美女手把手教你如何装机(下)

    美女手把手教你如何装机(下) 接著下来就是今天的重头戏,开核萝!~
    发表于 01-27 11:16 2923次阅读

    手把手做光立方

    电子发烧友网站提供《手把手做光立方.doc》资料免费下载
    发表于 03-21 14:07 0次下载

    手把手教你安装Quartus II

    本章手把手把地教你如何安装 Quartus II 软件 ,并将它激活 。此外 还有USB -Blaster下载器的驱动安装步骤 。
    发表于 09-18 14:55 9次下载

    手把手教你如何开始DSP编程

    手把手教你如何开始DSP编程。
    发表于 04-09 11:54 12次下载
    <b class='flag-5'>手把手</b>教你如何开始DSP编程

    手把手教你学LabVIEW视觉设计

    手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手
    发表于 03-06 01:41 3130次阅读

    手把手教你玩USB开发资料汇总第一部分

    手把手教你玩开发—USB开发板资料,B站有视频教程
    发表于 09-09 15:48 21次下载

    手把手教你玩USB开发资料汇总第二部分

    手把手教你玩开发—USB开发板资料,B站有视频教程
    发表于 09-09 15:50 22次下载

    手把手教你开关电源PCB排板

    手把手教你开关电源PCB排板(新型电源技术)-分享一下开关电源PCB排板的基本要点及分析,以及例子讲解。绝对的手把手
    发表于 09-18 12:27 57次下载
    <b class='flag-5'>手把手</b>教你开关电源PCB排板

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

    引言 本文介绍了如何使用MCUXpresso Config Tools来快速生成一个可用的USB composite device的demo
    的头像 发表于 10-28 09:22 5267次阅读
    如何用<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 Config Tools Windows 64bit package 软件下载

    MCUXpresso Config Tools Windows 64bit package 软件下载
    发表于 12-07 13:06 17次下载
    <b class='flag-5'>MCUXpresso</b> <b class='flag-5'>Config</b> <b class='flag-5'>Tools</b> Windows 64bit package 软件下载

    手把手教你学FPGA仿真

    电子发烧友网站提供《手把手教你学FPGA仿真.pdf》资料免费下载
    发表于 10-19 09:17 2次下载
    <b class='flag-5'>手把手</b>教你学FPGA仿真