首页 > 其他分享 >USB—CH32x作为USB设备时的通信机制和注意事项

USB—CH32x作为USB设备时的通信机制和注意事项

时间:2023-06-27 11:15:49浏览次数:44  
标签:USB 中断 NAK ACK 主机 设置 注意事项 CH32x

USB设备的数据交互机制围绕中断来展开
核心机制:设备准备好状态和数据,主机下发命令,硬件根据寄存器的设置自动立即回复,然后进入相应中断

 

SETUP:SETUP必须回复ACK,主机收到设备的ACK,MCU进入对应的SETUP中断
中断里,设备解析SETUP中的命令,然后准备相关的数据,设置对应的寄存器
例如获取描述符,首先将对应的描述符放到端点0的BUF里,然后设置长度,最后设置ACK
下次主机发IN包的时候,硬件就会直接回复这个数据,然后进入IN的发送完成中断
(如果描述符的长度比较长,主机会分多个IN包获取,需要在端点0的IN中断里,接着准备没有发完的数据)

 

IN:设备上传数据
需要MCU先准备好数据,设置长度和ACK,等到主机下发IN包时,硬件自动把准备的数据上传,然后进入对应端点的IN中断,设置NAK,翻转toggle(同步传输不需要翻转,也不需要ACK)
这个过程中,例程用了一个busy的标志位,目的是为了防止上次的数据还没有发出去,被下一次的覆盖了。
busy是在IN的中断里清除的,在实际使用中,这个busy的标志位,还需要在其他设置为NAK的地方也清除一下,例如初始化的地方USBHS_Device_Endp_Init里,SETUP中的clear feature命令里,也可以不用busy标志位,直接判断寄存器是不是设置的NAK

 

OUT:主机下发数据
RX_CTRL默认都是设置为了ACK,所以主机下发OUT时,会回复ACK,然后进入OUT中断,处理下发的数据,翻转toggle。
不过为了防止MCU来不及处理,出现丢包的情况,在USB的中断里会自动回复NAK,这个设置是默认开启的,主机收到NAK后会自动重发。
中断里自动回NAK,这个机制,在测USB速度的时候,由于MCU在中断里运行的太慢,会导致速度大幅降低,需要提高时钟频率,提高代码的优化等级去解决(默认的优化等级是高的),目的是加快中断里的运行速度,清除对应的标志位,下一包OUT来了回复ACK。

 

标签:USB,中断,NAK,ACK,主机,设置,注意事项,CH32x
From: https://www.cnblogs.com/wchmcu/p/17508110.html

相关文章

  • redis-分布式锁注意事项
    lockKey:商品标识value:当前线程标识1.确保每把锁同一时间能且仅能上一次setnx(setifnotexists):当锁不存在时才上锁redisTemplate.opsForValue().setIfAbsent(lockKey,value)没加上锁需要返回错误码直接让其重试2.上锁成功后,需要在之后将锁释放redisTemplate.delete(l......
  • fastadmin 一键操作注意事项,导入excel注意事项
    生成文件控制器名cms/Xxx模型名cms/Xxx生成菜单找到控制器,一键生成导入的注意事项1.另存为csv格式用csv导2.字段名,对应上3.可以在import控制器里,进行数据校验4.安装fileinfo扩展5.关于文本和科学计数法的处理......
  • 集成AMD Xilinx的standalone的例子到FreeRTOS时,关于中断的注意事项
    集成AMDXilinx的standalone的例子到FreeRTOS时,关于中断的注意事项。FreeRTOS也可以说是standalone的程序。因此可以方便的把AMDXilinx的standalone的例子,集成到FreeRTOS。但是对于中断的处理,要小心。FreeRTOS会初始化中断控制器。对于使用中断模式的standalone的程序,也会初始......
  • GP232RNL——USB到UART桥接控制器
    GP232RNL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空间,将RS232接口转换为USB接口。GP232RNL包括一个USB2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整的调制解调器控制信号的异步串行数据总线(UART),集成在SSOP28封装中,不......
  • DPU54——低功耗4口全速USB集线器芯片
    DPU54是一款高性能、低功耗4口全速USB1.1HUB控制器,上行端口兼容全速12MHz模式,4个下行端口兼容全速12MHz、低速1.5MHz两种模式。DPU54采用状态机单事务处理架构,而非单片机架构,多个事务缓冲区,这样减小了芯片的系统响应时间,用最少的硬件资源实现了USB1.1全速传输。 01主要特性......
  • Linux usb 4. Device 详解【转】
    转自:https://blog.csdn.net/pwl999/article/details/120997525文章目录1.简介2.PlatformLayer2.1PlatformDevice2.2PlatformDriver3.UDC/GadgetLayer3.1GadgetBus3.2GadgetDevice3.2.1EndpointAlloc3.2.2EndPointAccess3.2.3UDCControl3.3GadgetDriver(Con......
  • 在 ISO 镜像中注入 USB 4 驱动和 NVMe 驱动,您需要执行以下步骤
    在ISO镜像中注入USB4驱动和NVMe驱动,您需要执行以下步骤:准备驱动程序:首先,您需要获得所需的USB4驱动和NVMe驱动的适当版本。这些驱动程序通常由硬件制造商提供,您可以从他们的官方网站或支持页面下载相应的驱动程序。解压ISO镜像:使用适当的工具(如PowerISO、UltraISO......
  • 【FFMPEG】用到的命令和注意事项
    编译安装选项:./configure--extra-cflags="-fPIC"--enable-nonfree--enable-pic--enable-shared (注意顺序,一般把-i写到最后是不会错的) 1 把raw文件转化为图片,注意raw文件的后缀要正确:ffmpeg-s4982*1080-pix_fmtrgba-iout.rawout.png 2把h264......
  • USB鼠标过一段时间后失灵问题的修复
    现象:USB鼠标计算机锁屏一段时间后,不能动了,拔下来重新插上后,又恢复正常了。原因:这是系统默认USB电源管理造成的。一段时间不用后,自动关闭了USB电源。解决方法:1、进入设备管理器在计算机-右键菜单中进入管理功能,或者从控制面板里点击“系统——硬件——设备管理器”。2、找到“USBR......
  • CH340芯片USB转TTL的坑
    #USB转TTL不能识别#USB转TTL没有ttyUSB 不说过程了,直接说结论我买的这个ch340的usb转ttl,在ubuntu20上面叫/dev/ttyCH341USB0最开始我也经历了驱动重新编译安装和brltty独占的问题(如果你们这两个没处理掉问题就去百度,很多文章都写了)最靠谱的还是去/dev下面找 多出......