首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么USB CDC在接收数据时挂起?

USB CDC(Communication Device Class)在接收数据时挂起的原因及解决方法

基础概念

USB CDC(Communication Device Class)是一种USB类规范,用于定义通信设备,如调制解调器、以太网适配器等。它允许设备通过USB接口进行数据传输和通信。

可能的原因

  1. 缓冲区溢出:接收缓冲区已满,新的数据无法被接收。
  2. 数据传输速率不匹配:发送端和接收端的数据传输速率不匹配,导致接收端无法及时处理数据。
  3. 中断处理问题:中断处理程序未能及时响应或处理接收到的数据。
  4. 硬件故障:USB接口或相关硬件出现故障。
  5. 驱动程序问题:USB CDC驱动程序存在bug或不兼容。

解决方法

  1. 检查缓冲区大小
    • 确保接收缓冲区足够大,能够容纳预期的数据量。
    • 示例代码(C语言):
    • 示例代码(C语言):
  • 调整数据传输速率
    • 确保发送端和接收端的数据传输速率匹配。
    • 示例代码(C语言):
    • 示例代码(C语言):
  • 优化中断处理程序
    • 确保中断处理程序能够及时响应和处理接收到的数据。
    • 示例代码(C语言):
    • 示例代码(C语言):
  • 检查硬件
    • 检查USB接口和相关硬件是否正常工作。
    • 使用硬件诊断工具进行测试。
  • 更新驱动程序
    • 确保使用的USB CDC驱动程序是最新的,并且与系统兼容。
    • 可以从设备制造商的官方网站下载最新的驱动程序。

应用场景

USB CDC广泛应用于需要通过USB接口进行通信的设备,如调制解调器、以太网适配器、打印机等。

参考链接

通过以上方法,可以有效解决USB CDC在接收数据时挂起的问题。如果问题依然存在,建议进一步检查硬件和驱动程序,或者咨询设备制造商的技术支持。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第4章_USB 设备编程

接收接收只要接收到连续 的 6 个 1 后,直接将后面的 0 删除即可恢复数据的原貌。 NRZI 数据格式如上图所示。...Host 和设备都会维护自己的数据包切换机制,当数据包成功发送或者接收数据包 类型切换。当检测到对方使用的数据包类型不对时,USB 系统认为发生了错误。...第 117 行把接收到的数据 LCD 上显示处来。...4.7.8 上机实验 烧写运行程序后,接上 USB 线,电脑上可以识别出 USB 串口,查看设备管理器,可 以看到如下设备: 使用串口工具打开这个串口, 可以连续不断接收数据,如下所示: 串口工具上发送数据..._t len, uint32_t timeout); 开发板接收USB 串口数据,以下回调函数被调用: static UINT ux_device_class_cdc_acm_read_callback

18910

单片机外围模块漫谈之五,USB开发,这个错误你犯了吗?

那么用户代码里如何收发USB数据的呢?...我们usbd_cdc_interface.c里关注下面这些就够了: uint8_t UserRxBuffer[APP_RX_DATA_SIZE]; //USB下发数据缓冲区 uint8_t UserTxBuffer...[APP_TX_DATA_SIZE]; //需要发给USB上位机的数据缓冲区 下面这个函数是用户用来处理接收缓冲区数据的,初始化时需要传递给USB驱动,然后驱动收到USB下发的数据后会回调此函数。...例程中此函数把接收数据转发给了USART2。当然你也可以什么都不做。 static int8_t CDC_Itf_Receive(uint8_t * Buf, uint32_t * Len); ?...我们可以用下面这个函数: USBD_CDC_TransmitPacket(&USBD_Device); 注意此数据是先放入IN端点,然后等待IEPINT中断发生才被取走发送。 ?

66520
  • odrive教程(处理器2O11接口)

    使用此功能之前,请确保可以接收这种协议的局限性。 ASCII协议默认UART上启用,也可以通过USB和native protocol一起启用。 有关更多详细信息,请参见ASCII 格式协议。...要使ODrive启动进入位置控制模式,请参见如何配置启动程序。 RC PWM 输入 您可以直接使用RC接收器来控制ODrive。 如果某些GPIO引脚未分配给其他功能,则它们可用于PWM输入。...我们希望Axis-1500到1500编码器计数范围内移动。 确保RC接收器上设置故障保护功能,以便在遥控器和接收器之间失去连接接收器为两个轴的速度设定值输出0(或对您来说最安全的输出)。...端口 注意:如果您使用的我们提供的库,无需纠结本节中描述的细节,只需大概了解即可。 USB 本节假定您熟悉通用USB体系结构,尤其是诸如“配置”,“接口”和“端点”之类的术语。...USB上,ODrive提供单一配置,该配置是由CDC设备(虚拟COM端口)和特定于供应商的设备组成的复合设备。 什么是USB复合设备? 复合设备是通过接口关联描述符对接口进行分组的设备。

    1.2K10

    STM32CubeMX 真的不要太好用

    第三步,把我们需要的外设和中间件库选上,有 USB 接口,GPIO 接口,FREERTOS 和 USB_DEVICE 的支持,最后如下图: 配置的时候有以下几点要注意的: 1、时钟的配置 RCC 选项...定时器来实现的,而由于这里我们选用了 FreeRTOS,它使用的心跳时钟 Cortex 内核上的移植都是依赖于 SysTick 定时器,这里会有冲突,这一点点击生成代码按钮 STM32CubeMX...发送接口比较简单,经阅读 ST 对虚拟串口的实现了解到往 USB 发送数据,使用 CDC_Transmit_FS 接口即可,所以实现如下: int vSerialPutString(xComPortHandle...当然加上超时机制就更好了,这里勉强先这样吧,哈哈哈 第四步,对接数据接收。...这里稍微有点麻烦,CDC数据 CDC_Receive_FS 以 callback 的方式传上来的,应该是使用中断接收,我们串口终端是一个线程通过 xSerialGetChar 接口来获取数据的,

    1.3K10

    高通SDX12平台:LINUX上MBIM功能异常

    但由于windows下是ok的,因此抓取windows下mbimd和gsi log对比发现:mbimd中,会设置data format数据格式,windows下是成功,而在linux下是失败的,linux...cdc_mbim驱动cdc_mbim_bind中会去调用cdc_ncm驱动中的cdc_ncm_bind_common函数: \drivers\net\usb\cdc_mbim.c static int...中调用cdc_ncm_setup去启动设备,cdc_ncm_setup中会调用cdc_ncm_update_rxtx_max进行rx和tx size的更新: static int cdc_ncm_setup...,合理范围(2048<=val<=32768)内调用USB_CDC_SET_NTB_INPUT_SIZE命令进行参数的设置: { … val = cdc_ncm_check_rx_max(dev, new_rx...2.7 MBIM_NTB_DEFAULT_IN_SIZE 通过进一步分析模块内gsi代码,可得出在gsi_setup中处理USB_CDC_GET_NTB_ PARAMETERS命令是将mbim_gsi_ntb_parameters

    2.6K20

    USB协议简介「建议收藏」

    USB设备 低功耗总线供电设备:最大功耗不超过100mA 高功耗总线供电设备: 枚举最大功耗不超过100mA,枚举完成配置结束后功耗不超过500mA 设备枚举过程中,通过设备的配置描述符向主机报告它的供电配置...(看到的波形变化是总线上发送0000 0001经过NRZI编码后的波形) Resume信号:20ms的K状态+低速EOP 主机挂起设备后可通过翻转数据线上的极性并保持20ms来唤醒设备,并以低速...状态切换到K状态 EOP:持续2位间的SE0信号,后跟随1位间的J状态 Keep alive即低速EOP信号 1.4 USB插入检测和速度检测: 主机通过设备D+或D-上的1.5K上拉来检测设备的连接和断开事件...:每帧(或微帧)开始发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。...如果设备检查到数据正确,但端点处于挂起状态,返回STALL。如果检测到有错误(如校验错误,位填充错误),则不做任何响应,让主机等待超时。

    2K20

    零基础开发USB转串口

    [在这里插入图片描述] Core采用的Soc芯片是Nordic半导体公司的Nrf52840芯片,内置USB控制器,所以我们可以通过软件的方式将Core改造成USB转Uart串口透传工具,方便我们开发中使用...--配置Uart0串口波特率为115200并开始工作 LIB_Uart0Config("BAUDRATE_115200") --配置USBCDC模式开始工作 LIB_UsbConfig("CDC")...--开始大循环 while(GC(1) == true) do --查询是否收到来自USB端口的数据,如果收到就通过Uart0转发出去 usb_recv_flag,usb_recv_tab =...LIB_UsbCdcRecv() if usb_recv_flag == 1 then --收到一包USB数据 LIB_Uart0Send(usb_recv_tab) end...== 1 then --收到一包Uart数据 LIB_UsbCdcSend(uart0_recv_tab) end end 如果感兴趣,上面代码中出现的LIB开头的库函数可以<a

    2.1K00

    2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    1个字符将引发一个接收数据的OnComm事件 m_ctrlComm.put_InputLen(0); //设置当前接收数据长度为0 m_ctrlComm.get_Input();//...   因为 接收数据是一段一段接收的从缓冲区  所以我们一次性接收够了我们就跳出来  要是一直接收肯定会炸的  不信可以自己试试哈哈哈哈哈哈 还有这里有时候会出现一个问题,就是  串口传输数据的时候回丢包...     有时候单步调试的时候却不会丢包 丢字节   STM32   单片机51都有可能出现这种情况  (串口调试助手收发大量数据是怎样处理的,新手求教,写了一个串口调试助手,接收数据会丢帧,串口通讯...,丢包严重是什么问题,为什么串口单步调试正常,全速会丢包)这是因为因为CPU处理速度太快导致FIFO中数据早就被读完了,RBR为空,而后续的数据不能及时到达被MCU抛弃掉了。...  让缓冲区有点东西接收 下面是绘制图片调用的函数: 第一个是 位图的数据操作辅助用的    第二是将图片数据LOAD   bool CMFCApplication2Dlg::InitalImage

    3K30

    硬件笔记(8)----USB学习笔记5

    如果您正在阅读或创建您自己的描述符,那么请注意,传输数据字段,优先传输最低有效位。许多参数的长度均为 2个字节。请确保先发送低字节,然后再发送高字节。 ?...例如,USB UART 具有两个与其相关的接口:控制接口和数据接口。IAD 通知主机这两个接口与同一个功能(USBUART)相关,并属于通信设备类别(CDC)。并非所有情况下都需要使用该描述符。...如果设备支持 MS OS 描述符,接收字符串描述符后,Windows 需要额外的信息。如果不支持 MS OS 描述符,则设备会发出“STALL”错误指示,作为握手响应。...对于支持 USB 2.0 的 PSoC 系列产品中,只有 PSoC 4200L 设备能够支持 LPM 特性,因此,它也支持 BOS 描述符。LPM 是从 USB 挂起模式中得到优越化的特性。...它允许设备以数十纳秒的转换延迟进入和退出低功耗模式(而挂起模式进入/退出需要 3-20 纳秒的延迟)。

    1.7K20

    USB 协议层数据格式

    描述数据按照传输顺序从左到右列出来。 2.2 SYNC 域 Host 发出 SOP 信号后,就会发出 SYNC 信号:它是一系列的、最大传输频率的脉冲,接收方使用它来同步数据。...Host 会对当前帧号进行累加计数,每帧或每微帧开始,通过 SOF 令牌包发送帧号。...为什么要引入 DATA0、DATA1 这些不同类型的数据包?【为了纠错】。 Host 和设备都会维护自己的数据包切换机制,当数据包成功发送或者接收数据包类型切换。...发送上一次的数据 设备再次接收到 DATA0 数据包,它就知道:哦,这是【重传的数据包】 数据包大小不同传输模式下有不同规定,格式如下: 最大数据有效载荷:低速设备为 8 字节,全速设备是 1023...NAK:Host 发送数据给设备,设备可以回应 NAK 表示"我还没准备好,没办法接收数据";Host 想读取设备的数据,设备可以回复 NAK 表示"我没有数据给你"。

    44540

    usb协议开发_基于事件驱动的架构

    数据传输阶段:依据令牌阶段的IN或OUT传输,来决定数据传输为DATA0或DATA1来进行数据传输 c) 握手阶段:接收信息的一方发送ACK信号以表示接收成功;若为NAK,表示发送失败;STALL...,并传递给上层的设备端驱动软件;同时也接收来自上层的非USB格式数据流,进行相应的数据处理后传递给USB主机控制器驱动。...当A、B设备完成数据交互之后,A、B设备之间的USB OTG电缆进入挂起状态,如下图所示: 当B设备写入b_bus_req,向A设备发起HNP请求。...subsys_initcall(usb_init)告诉我们,usb_init才是真正的初始化函数,而usb_exit将是整个USB子系统结束的清理函数。...USB主机和USB设备之间进行数据交互,USB设备本身并没有总线控制权,U盘被动地接收USB主机发送过来的信息并做出响应。

    2K30

    USB OTG简单介绍

    USB2.O规范中也添加了USB嵌入式设备的标准——On-The-Go(OTG),它使外设能够主机和设备之间相互切换,即当其连接至PC,它是1个USB设备,而与其它USB设备相连接,它便作为USB...那么,当2个DRD互连,哪个设备作为主机,为什么要作为主机?为了解决这两个问题,OTG中提出了新的协议——主机协商协议(HNP)。...为了节省电源,OTG标准中,当电源总线没有使用时,同意A类设备挂起电源总线。当1个B类设备要工作,它必须通过某种方法通知A类设备向电源总线供电。...当A类设备挂起VBUS后,B类设备进入休眠状态。...当B类设备须要再次工作,它可以通过向数据线发送1个脉冲信号(Data-linePulsing)或向电源总线发送一个脉冲信号(VBUSPulsing)来请求A类设备向电源总线供电。

    1.3K20

    【STM32H7】第2章 ThreadX USBX协议栈介绍

    Microsoft2019年4月18日以未公开的价格购买了Express Logic。...知识补充: 通用主控制器接口(UHCI): 由 Intel 生产,适用于 USB 1.0 和 USB 1.1。使用 UHCI 需要得到 Intel 的许可。该控制器支持低速模式和全速模式。...扩展型主控制器接口(EHCI): USB-IF 要求发布单一主控制器规范后,已经生产了该控制器,它适用于 USB2.0。...2.3.4 USBX设备类支持 USBX 设备支持大多数流行类,包括 CDC/ACM、CDC/ECM、DFU、HID、PIMA (PTP/MTP) (w/MTP)、RNDIS 和 STORAGE。...当相机或手机连接到打印机时,打印机为 USB 主机,照相机为 USB 设备。 然而,使用 Pictbridge ,相机显示为主机,而且命令是从相机驱动的。 相机是存储服务器,打印机是存储客户端。

    61410

    【STM32F429】第2章 ThreadX USBX协议栈介绍

    Microsoft2019年4月18日以未公开的价格购买了Express Logic。...知识补充: 通用主控制器接口(UHCI): 由 Intel 生产,适用于 USB 1.0 和 USB 1.1。使用 UHCI 需要得到 Intel 的许可。该控制器支持低速模式和全速模式。...扩展型主控制器接口(EHCI): USB-IF 要求发布单一主控制器规范后,已经生产了该控制器,它适用于 USB2.0。...2.3.4 USBX设备类支持 USBX 设备支持大多数流行类,包括 CDC/ACM、CDC/ECM、DFU、HID、PIMA (PTP/MTP) (w/MTP)、RNDIS 和 STORAGE。...当相机或手机连接到打印机时,打印机为 USB 主机,照相机为 USB 设备。 然而,使用 Pictbridge ,相机显示为主机,而且命令是从相机驱动的。 相机是存储服务器,打印机是存储客户端。

    74330

    【STM32F407】第2章 ThreadX USBX协议栈介绍

    Microsoft2019年4月18日以未公开的价格购买了Express Logic。...知识补充: 通用主控制器接口(UHCI): 由 Intel 生产,适用于 USB 1.0 和 USB 1.1。使用 UHCI 需要得到 Intel 的许可。该控制器支持低速模式和全速模式。...扩展型主控制器接口(EHCI): USB-IF 要求发布单一主控制器规范后,已经生产了该控制器,它适用于 USB2.0。...2.3.4 USBX设备类支持 USBX 设备支持大多数流行类,包括 CDC/ACM、CDC/ECM、DFU、HID、PIMA (PTP/MTP) (w/MTP)、RNDIS 和 STORAGE。...当相机或手机连接到打印机时,打印机为 USB 主机,照相机为 USB 设备。 然而,使用 Pictbridge ,相机显示为主机,而且命令是从相机驱动的。 相机是存储服务器,打印机是存储客户端。

    42420
    领券