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

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

3天内不再提示

学技术 | LPC5516 USB 代码的一些说明

大大通 2023-02-13 14:19 次阅读

概述

在前两篇文章中,我们针对 LPC 的键鼠项目开发时,对于 LPC USB 代码流程的讲解,让大家对于代码的架构以及流程有所了解。在本篇中以及后续的文档中不定期将对于之前没有说明的部分进行补充说明,大家可以当做番外篇或者 DLC 来看。

DLC内容

1. 在使用原厂的 SDK demo 时,大家应该能够发现一个情况:在编译下载键鼠的例程到开发板之后,只要设备通过 USB 线接上电脑上电后,就会不停地画框(鼠标例程)或者上下翻页(键盘例程)。例程中是通过在三个地方中添加函数来实现的,由于键鼠两个例程都是相同的位置,我这边就以鼠标例程来进行说明。其中我们可以在例程中找到主要实现鼠标画框的函数为USB_DeviceHidMouseAction,如下图所示:

baea90f4-a8d3-11ed-ad0d-dac502259ad0.png

主要调用的三个地方分别为:kUSB_DeviceHidEventSendResponse、kUSB_DeviceEventSetConfiguration以及kUSB_DeviceEventSetInterface 这三个地方进行调用。

其中kUSB_DeviceHidEventSendResponse 这个事件是在设备发送完 USB 数据之后底层回报的事件,用以通知数据发送完成或者取消的结果,而例程中在这里添加发送函数的作用是循环发送鼠标数据。流程如下图所示:

bb15a28a-a8d3-11ed-ad0d-dac502259ad0.png

而剩下的两个事件就是在设备上电工作时进行 USB 配置完成后开始传输的时间,处理流程如下:

bb43e956-a8d3-11ed-ad0d-dac502259ad0.png

其中可以看出当底层协议栈接收到主机端设置配置或者接口请求之后,会通过这两个事件通知到应用程序中,可以准备发送 USB 数据了。如果在开发代码时,可以将 USB_DeviceHidMouseAction 函数干掉,或者修改成符合自己需要的发送函数,并且将这三个事件中调用该函数的代码干掉,其中在 kUSB_DeviceEventSetInterface以及kUSB_DeviceEventSetConfiguration 函数中添加相关的标志位,用于提示可以准备发送数据了,而 kUSB_DeviceHidEventSendResponse 事件中可以根据通知结果添加自己对应的后续操作。

2. 在开发项目的过程中,还有一个常用的功能需要添加的,就是当主机休眠时,设备需要执行 Suspend 以及后续的 Resume 的唤醒功能。对此,SDK 中有一个相关的例程

dev_suspend_resume_hid_mouse 可以参考,首先需要在 .h 中将 USB 的 Lowpower 功能打开,如下图所示:

bb757e3a-a8d3-11ed-ad0d-dac502259ad0.png

这样的话才能确保到相应的 Suspend 以及 Resume 的事件能够在 SDK 中运行,具体可以例程搜索 USB_DEVICE_CONFIG_LOW_POWER_MODE。其中代码中会在 USB 中断 USB_DeviceLpcIp3511IsrFunction 中查询 USB device 的状态寄存器 DEVCMDSTAT 中关于 DSUS_C bit,如下图所示:

bbb23e38-a8d3-11ed-ad0d-dac502259ad0.png

如果 DSUS_C 位被置 1 就说明设备将处于这三个状态中:需要进入 Suspend 状态;设备断开连接;设备接收到 Resume 信号。那么如何区别这些状态咧?就需要继续查看寄存器中 DSUS bit,如下图所示:

bbe308c4-a8d3-11ed-ad0d-dac502259ad0.png

当DSUS bit 置1,则表明设备已经超过 3ms 没有发送 SOF 信号来维持活跃状态,需要执行 Suspend 操作,而DSUS bit没有置 1 而 DSUS_C bit 置 1,则表明设备接收到了 Resume 信号,需要执行 Resume 操作。在通过 SDK 中标准和类驱动中,最后传输到应用程序中是USB_DeviceCallback 函数中 kUSB_DeviceEventSuspend 以及 kUSB_DeviceEventResume,SDK 是在这两个事件中通过设置对应的标志位,然后通过一个任务不断查看这些标志位来进行对应的操作。

总结

在本篇中主要是描述了键鼠例程中发送函数的流程和对应事件,以及如何修改添加自己的发送函数;还有就是关于 USB 主机关机休眠时,设备执行 Suspend & Resume 操作时的流程。后续会随着对于 USB 的深入了解再继续推出补充说明。

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

    关注

    60

    文章

    7947

    浏览量

    264786
  • 代码
    +关注

    关注

    30

    文章

    4790

    浏览量

    68651
收藏 人收藏

    评论

    相关推荐

    USB/UART桥接器的应用优势

    切都要归功于USB/UART桥接器——它们是嵌入式系统中的强大工具。无论您是从事调试、物联网还是工业应用,了解此桥接器都可以简化硬件集成并提高通信可靠性。以下是USB/UART桥接如何简化这些连接以及
    的头像 发表于 12-03 13:52 226次阅读
    <b class='flag-5'>USB</b>/UART桥接器的应用优势

    一些常见的动态电路

    无论是模电还是数电,理论知识相对来说还是比较枯燥,各种电路原理理解清楚不算容易,换种生动形象的方式或许会增加一些趣味性,也更容易理解这些知识。下面整理了一些常见的电路,以动态图形的方式展示。 整流
    的头像 发表于 11-16 09:26 371次阅读
    <b class='flag-5'>一些</b>常见的动态电路

    分享一些常见的电路

    理解模电和数电的电路原理对于初学者来说可能比较困难,但通过一些生动的教学方法和资源,可以有效地提高学习兴趣和理解能力。 下面整理了一些常见的电路,以动态图形的方式展示。 整流电路 单相桥式整流
    的头像 发表于 11-13 09:28 317次阅读
    分享<b class='flag-5'>一些</b>常见的电路

    LED驱动器应用的一些指南和技巧

    电子发烧友网站提供《LED驱动器应用的一些指南和技巧.pdf》资料免费下载
    发表于 09-25 11:35 0次下载
    LED驱动器应用的<b class='flag-5'>一些</b>指南和技巧

    【龙芯2K0300蜂鸟板试用】IO和串口脚本测试遇到一些问题

    这会没有报错哈,还提示我们怎么用,但是想想说明里面测试的是串口0 和串口3,但是实际我们接的是串口1,2,3,再根据log提示,可能我们需要改下测试命令,经过我的几次尝试后,最终串口测试成功,希望文档尽可能的在完善一些
    发表于 09-01 22:28

    关键指南针-NXP USB CDC_VCOM虚拟串口例程

    最近有小伙伴反应USB中的 usb_examples/usb_device_cdc_vcom 例程(USB虚拟串口VCOM)中的一些使用问题
    的头像 发表于 07-25 09:17 2036次阅读
    关键指南针-NXP <b class='flag-5'>USB</b> CDC_VCOM虚拟串口例程

    咨询一些关于LED灯具的问题

    各位大佬,咨询一些关于LED灯具的问题 120W的吸顶灯,用的非隔离式电源,用不到1年,灯具就会闪烁、频闪或不亮,主要是什么原因造成的?是不是驱动芯片太差?
    发表于 07-02 22:33

    esp32-s2的usb只支持host模式不能作为usb-hid设备被pc使用吗?

    S2的usb只支持host模式不能作为usb-hid设备被pc使用嘛? WiFi tof百度搜索不到有效的信息,能否提供一些技术原理上的说明
    发表于 06-25 07:04

    细谈SolidWorks教育版的一些基础知识

    SolidWorks教育版是款广泛应用于工程设计和教育领域的三维建模软件。它具备直观易用的操作界面和强大的设计功能,为学生提供了个学习和实践的平台。在本文中,我们将详细探讨SolidWorks教育版的一些基础知识,帮助初学者
    的头像 发表于 04-01 14:35 344次阅读

    一些有关通信电路的资料?

    有关嵌入式之间DSP、ARM、FPGA三者之间和这三款芯片和外部电路之间通信的一些资料,比如说芯片之间的并行通信和芯片和外部电路之间的串行通信,MODBUS、DP、CAN等,一些一些常用的通信协议的
    发表于 03-03 18:53

    对于绘制USB DRP架构的一些疑问求解

    我正在绘制新系统的架构,对此有一些疑问: 1) 通常左侧板有 20V 固定电源,将通过 TypeC 端口向右板提供 20V。 a) Vbus 通过 Mosfets 直接连接到 20V,如果谈判失败
    发表于 02-23 06:31

    有关射频技术无线传输的一些问题

    ,如无线电波,微波,米波,这些频率段的信号是怎么由设备产生的,尤其是一些高频波高达几个HZ? 3、蓝牙传输技术,快牙,华为最新研究的近距离无线传输技术叫什么的,电脑近距离建立的局域网技术
    发表于 02-03 14:42

    一些无功补偿装置SVG的资料

    一些SVG电路原理和功能码相关的技术说明书,想了解一些SVG的工作原理和工作过程
    发表于 02-03 10:13

    PSOC Creator 4.4中是否有一些设置可以阻止strtok操作?

    我需要一些帮助才能开始使用这个功能。 我做了个简单的代码,意图用逗号作为分隔符来标记字符串。 我尝试在 PC 上模拟以下代码并将其改编为 PSoc5LP: [i]int 主要 ()
    发表于 01-24 08:31

    有关通信协议时一些问题?

    工业上应用到许多种协议,按通信同时刻发送的数据位数分为串行通信和并行通信,首先我见并行通信多在芯片之间进行通信,而串行通信则在外部设备和芯片之间进行的一些通信,对于常见的串行通信,比如
    发表于 01-14 00:58