stm32 usb数据缓冲区疑问

发布者:MysticEssence最新更新时间:2020-11-05 来源: eefocus关键字:stm32吗  usb  数据缓冲区 手机看文章 扫描二维码
随时随地手机看文章

USB不同的应用需要使用到的端点数和端点数据长度各不相同,如果为每个端点都单独规划一个存储区非常浪费。


所以STM32为USB模块提供了共512个字节的存储区,至于如何为每个端点分配使用这512B的空间,就是用户自己的事情了,这样存储区的分配就非常经济灵活。这512B空间的首地址是0x40006000。


你看到的#define ENDP2_RXADDR        (0xD8),这个0xD8就是在这512B空间里的偏移地址,说明端点2收到的数据将放在0x40006000 + 0xD8 * 2的地址空间里。至于为什么要×2,是因为这部分存储区是按照2字节访问的,即每存放1个字节的数据要占据2个字节的空间。所以这段存储区的地址是从0x40006000到0x400063FF。


至于如何定义端点2的发送缓冲区,就看你的应用了。你把端点2的接受缓冲区定义在0xd8,如果端点2的接收数据长度是64个字节,那就要为端点2的接收保留64个字节,端点2的发送缓冲区就要定义到0xd8+64之后的空间。

即:#define ENDP2_TXADDR        (0xD8+64),

当然也可以#define ENDP2_TXADDR        (0xD8+100)或是其他。


总之如何分配这段存储区,完全可以按照你应用的需求来做。



最近研究了下103VBT6的USB,看了很多次都看不明白,我开始怀疑我的阅读能力了。现有以下几点疑问请教大家 


1.缓冲区描述表在缓冲区内即0x4000 6000--0x400063FF。如果我只用端点0,那么端点0的缓冲区描述表为 

ADDR0_TX、COUNT0_TX、ADDR0_RX、COUNT0_RX所对应的地址为0x4000 6000--0x4000 6008 (USB_BTABLE = 0) 

现在有两人疑问: 

A.0x4000 6008以后的地址可不可以作缓冲区? 

B.如果给ADDR0_TX、COUNT0_TX赋个合适的值,会不会端点0的缓冲区在0x4000 6000--0x4000 6008内,从而覆盖了它的缓冲区描术表? 


2.为什么分组缓冲区地址(按字节编址)要乘以2才是缓冲区在MCU的地址,能不能举个例子说明? 


3.0x4000 6000--0x400063FF等于1024字节,为什么是512字节,是不是后一半没有使用,芯片为103VBT6?如果我有一个端 

点用了512字节缓冲区,那么缓冲区就用完了,是不是表示其他端点就没有缓冲区可用了,连缓冲区描述表都没有空间可分配了


1.A) 如果只使用端点0,0x4000 6010以后的地址可以作缓冲区。注意不是0x4000 6008以后的地址,原因请看下面的2)。 

1.B) 如果给ADDR0_TX、COUNT0_TX赋的值不合适,端点0的缓冲区有可能覆盖缓冲区描述表,所以请选择合适的值,以避免冲突。 


2)这是因为分组缓冲区是一个双端口的RAM,CPU一端需要使用32位方式访问,但USB模块一端使用16位方式访问。 

例如需要从0x4000 6010开始分配8个字节的缓冲区,则从CPU一端看,需要占用0x4000 6010、0x4000 6014、0x4000 6018和0x4000 601C开始的4个字的空间,即CPU端每4个字节的地址空间中,只有2个字节的地址空间对应实际的存储器,而另2个字节的地址空间没有对应到任何物理的存储器。 


3)1024字节与512字节的问题,请看上面的说明。 

如果有一个端点用了512字节缓冲区,那么缓冲区就用完了,表示其他端点就没有缓冲区可用了,连缓冲区描述表都没有空间可分配了。


关键字:stm32吗  usb  数据缓冲区 引用地址:stm32 usb数据缓冲区疑问

上一篇:STM32之DMA二
下一篇:使用STM32的USB模块中后对USB缓冲区的认识

推荐阅读最新更新时间:2024-11-09 10:53

Linux驱动之USB总线驱动程序框架简析
通用串行总线(USB)是主机和外围设备之间的一种连接。USB总线规范有1.1版和2.0版,当然现在已经有了3.0版本。USB1.1支持两种传输速度:低速为1.5Mbps,高速为12Mbps。USB2.0的传输速度可以高达480Mbps。USB2.0向下兼容USB1.1,可以将USB1.1的设备连接到USB2.0控制器上,也可以把USB2.0的设备连接到USB1.1控制器上。S3C2440的USB主机控制器支持USB1.1总线规范。 USB总线的拓扑结构如下图所示:USB主机控制器(USB Host Controller)通过根集线器(Root Hub)与其他USB设备相连。集线器也属于USB设备,通过它可以在一个USB接口上扩展出
[单片机]
Linux驱动之<font color='red'>USB</font>总线驱动程序框架简析
Linux下USB从(USB gadget) 驱动配置与使用
S3C2440提供了一个USB从接口,我们可以使用它来把2440模拟为一个U盘,直接从电脑上以盘符的形式访问2440 一、内核配置 USB SUPPORT * USB Gadget Support --- USB Peripheral Controller (S3C2410 USB Device Controller) --- S3C2410 USB Device Controller S3C2410 udc debug messages M USB Gadget Drivers M File-backed Storage Gadget 二、make zImage 生成z‫Im
[单片机]
英飞凌推出 EPR 电子标记电缆组件控制器,为USB-C无源电缆提供高达54 V的过压保护
【 2023 年 10 月 31 日,德国慕尼黑讯】 USB-C之所以能够在产业领域迅速普及,主要归功于其超薄的设计、对用户友好的通用连接器使用体验,以及能够支持 USB4、Thunderbolt 和 HDMI 等多种数据协议,因而用途十分广泛的优势特性。 此外,USB-C可支持高达240 W的充电功率,这一特性使其成为各种应用的首选电源连接器。现代移动设备对可靠的端到端供电和数据传输能力的需求日益增长,为了满足这一需求,英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)推出了功能更加强大的 USB-C电子标记电缆组件(EMCA)控制器 EZ-PD™ CMG2。该控制器旨在为支持EPR(Extend
[电源管理]
英飞凌推出 EPR 电子标记电缆组件控制器,为<font color='red'>USB</font>-C无源电缆提供高达54 V的过压保护
L-com 多种适配器现货库存,全面匹配USB、以太网等接口
作为L-com诺通的授权分销商,Heilind可为市场提供相关的产品服务与支持,此外也供应多家世界顶级制造商的产品,涵盖25种不同元器件类别, 并重视所有的细分市场和所有的顾客,不断寻求广泛的产品供应来覆盖所有市场。 适配器是连接系统中常见的产品之一,它不仅需要满足日常的接口转接,更要面对不同应用环境确保稳定传输。L-com诺通900多种适配器产品,不仅包含了USB、以太网、光纤、同轴、音视频、D-Sub等热门接口,也可选IEEE-488 GPIB等适配器,快速满足客户的紧急连接需求。 L-com受欢迎的适配器产品包括: 热门类别包括:以太网、同轴、USB、光纤、D-Sub、音视频等 D-Sub适配器可选9针
[网络通信]
L-com 多种适配器现货库存,全面匹配<font color='red'>USB</font>、以太网等接口
欧盟将统一便携智能设备充电接口
欧洲议会10月4日通过一项新规,要求从2024年底开始,所有手机、平板电脑等便携智能设备新机都使用USB Type-C的充电接口。 欧洲议会当天以602票赞成、13票反对的投票结果通过有关统一便携智能设备充电接口的法案。所有手机、平板电脑、数码相机、耳机、便携音箱、手持视频游戏机、电子阅读器、键盘、鼠标和便携式导航系统将在两年内统一充电接口。    这些年来,上述设备的充电接口五花八门,包括USB-A、Mini USB和Micro USB等多种类型。    不过,笔记本电脑统一充电接口的日期稍晚,从2026年起全部使用USB Type-C接口充电器。    支持者认为,统一充电接口将为消费者提供便利并降低成本。 预计苹果公
[手机便携]
OK6410A 开发板 (八) 5 linux-5.11 OK6410A usb 移植
s3c6410 有两个USB实例(板子也都引出来了), 分别是 USB host 和 USB OTG , 这里说的是 usb host 代码 : https://github.com/lisider/linux/tree/ok6410a-linux-5.11 提交id : dc485e937e8bccc1fc01b5e6d9025bf83b2b6f83 defconfig : arch/arm/configs/ok6410A_sdboot_mini_net_lcd_x11_usb_defconfig CONFIG_USB_NET_DRIVERS=y CONFIG_USB_HID=y CONFIG_USB_OHCI_LI
[单片机]
OK6410A 开发板 (八) 5 linux-5.11 OK6410A <font color='red'>usb</font> 移植
如何解决智能液晶显示屏USB下载失败的问题?
相信大家对USB并不陌生,USB即通用串行总线(Universal Serial Bus),是一种应用在PC机上的接口技术,用于规范电脑与外部设备的连接和通讯。被广泛地应用于个人电脑和移动设备等信息通讯产品,随着科技的发展,USB接口设备也日益增多,比如我们常见的键盘,鼠标,摄像头,游戏机、U盘等等。 Topway的液晶显示模块有丰富的接口。智能液晶显示模块在开发过程中,需要通过USB连接,将工程下载到智能液晶显示模块中进行调试,而多次插拔USB线后有可能会造成其无法识别和连接的情况,从而导致下载失败。以下下提供几种解决USB无法识别问题的解决按方法: Smart LCD外部供电时接入USB,出现电脑没有侦测到USB设备,
[嵌入式]
如何解决智能液晶显示屏<font color='red'>USB</font>下载失败的问题?
LINUX 3.0.8支持RT3070 USB Wifi(S3C6410)
在LINUX 3.0.8 目录下运行make xconfig, 如下图所示选上Ralink rt27xx/rt28xx/rt30xx (USB) support 这样就添加上了支持 RT3070 USB Wifi的驱动,保存并退出xconfig,然后make,得到新内核zImage。更新内核,接上usb wifi,将会看到 usb 1-1.3: new full speed USB device number 4 using s3c2410-ohci usb 1-1.3: New USB device found, idVendor=148f, idProduct=3070 usb 1-1.3: New USB device
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved