历史上的今天
返回首页

历史上的今天

今天是:2024年11月05日(星期二)

正在发生

2020年11月05日 | stm32 usb数据缓冲区疑问

2020-11-05 来源:eefocus

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字节缓冲区,那么缓冲区就用完了,表示其他端点就没有缓冲区可用了,连缓冲区描述表都没有空间可分配了。


推荐阅读

史海拾趣

ETC1公司的发展小趣事

埃特斯是一家在ETC技术创新和市场应用方面均表现出色的企业。公司拥有一支高素质的研发团队,不断推出具有创新性的ETC产品和解决方案。同时,埃特斯还注重将创新技术应用于实际场景中,为客户提供高效、便捷的ETC服务。通过技术创新和市场应用的有机结合,埃特斯在ETC行业中树立了良好的口碑和品牌形象。

CyOptics Inc公司的发展小趣事

2013年4月,Avago宣布以约4亿美元的价格收购CyOptics Inc。这一收购标志着CyOptics的技术实力和市场地位得到了业界的进一步认可。Avago看中了CyOptics在InP光学芯片及组件领域的领先地位,希望借此增强其在新兴40G和100G企业及数据中心应用市场中的竞争力。收购完成后,CyOptics成为了Avago旗下光器件品牌,继续为市场提供高质量的光学产品。

AURORA公司的发展小趣事

AURORA公司一直致力于提升自动驾驶技术的安全性和可靠性。通过不断研发和创新,AURORA在自动驾驶算法、传感器融合、数据处理等方面取得了显著进展。公司的技术团队不断攻克技术难题,推动自动驾驶技术向更高等级迈进。同时,AURORA还积极与高校和研究机构合作,共同推动自动驾驶技术的研发和应用。

晨晶电子(Chenjing Electronics)公司的发展小趣事

晨晶电子始终将品质放在首位,坚持以客户为中心的服务理念。公司建立了严格的质量管理体系,从原材料采购到生产过程控制,再到产品出厂检验,每一个环节都严格把关,确保产品的品质稳定可靠。正是凭借这种对品质的执着追求,晨晶电子赢得了客户的广泛认可和好评,也为企业赢得了良好的口碑。

Cobham Semiconductor Solutions公司的发展小趣事

Cobham Semiconductor Solutions自成立之初,便以技术创新为核心驱动力。公司不断投入研发,推动半导体技术的突破。在某一关键时期,Cobham团队成功研发出一款具有革命性的低功耗芯片,不仅大幅提升了设备的性能,还降低了能耗,迅速在市场上获得了广泛应用。这一创新不仅为公司带来了可观的利润,还奠定了其在半导体行业的领先地位。

GC Electronics公司的发展小趣事
在安装完成后,进行调试测试,确保报警电路能够在水量不足或水温异常时准确报警。

问答坊 | AI 解惑

电容电感滤波原理

整流电路的输出电压不是纯粹的直流,从示波器观察整流电路的输出,与直流相差很大,波形中含有较大的脉动成分,称为纹波。为获得比较理想的直流电压,需要利用具有储能作用的电抗性元件(如电容、电感)组成的滤波电路来滤除整流电路输出电压中的脉 ...…

查看全部问答>

VC++定时器的复位问题

VC++中有可以复位定时器的API吗? killTimer(3);后再SetTimer(3,100,NULL); 可以复位吗? 主要是第一个问题。 谢谢…

查看全部问答>

ARM9开发IDE

现在各个公司,开发arm9 的时候都使用什么开发工具啊?linux下的 ADS吗?版本多少的?…

查看全部问答>

WinCe6运行程序后系统变慢

    俺的系统很奇怪,运行某些程序,比如摄像头抓取的程序、CorePlayer等之后系统就变慢,焦点从“我的设备”移开时图标会呈现一杠一杠的样子。     这是为啥呢?有人遇到过吗?…

查看全部问答>

求助、Keil新手编译问题。

程序: #include #include main() { SCON = 0x52; TMOD = 0x20; TCON = 0x69 TH1 = 0xf3; printf(\"text to output some words\\n\"); } 报错:TEXT2.C(10): 错误 C141: syntax error near \'TH1\'       目标没 ...…

查看全部问答>

Redboot下写入数据在内核读取出来数据不一致?

在Redboot下更新zImage文件,写入到1M,启动内核后,使用dd if=/dev/mtdblock1 of=kernel.img bs=512 count=4578 读取nand flash该区域内容,使用ultraedit比较zImage和kernel.img,数据有不一样的地方,只是个别字节不一样。 同样,在内核下写入c ...…

查看全部问答>

网络最佳兼职

假如你想创业但资金不多或想找个兼职请看这 与您现有的工作相容互补而不冲突             不需要受学历的限制        不需要特殊的专业技能        不需要受 ...…

查看全部问答>

FPGA 视频高手求兼职

本人从事视频ASIC的开发6年,精通H。264/电视信号/VGA编解码,此外,对去隔行,帧率变换(24FPS---〉50或60FPS),SCALER,OSD,JPG/BMP Encoder等也有深刻认识和实际工作经验。现承接视频方面的FPGA或IC设计兼职,还请社会各界朋友多多关照:) ...…

查看全部问答>

[TI原创]LM3S1138 测量频率、多路电压测量、信号发生

刚刚睡醒,到坛子里面逛逛,发个帖子,读书的时候弄的测量外界信号频率、多路电压测量、方波信号发生全部交互采用上位机方式实现,硬件电路未作前级的信号调理,主要是软件上实现基本功能,能够实现扩展,给需要的人参考需要设置电脑分辨率为1152*8 ...…

查看全部问答>