OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5051|回复: 4

USB缓冲区描述表地址问题

[复制链接]

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
发表于 2015-7-24 19:57:51 | 显示全部楼层 |阅读模式
5金钱
手册上说由于APB1总线按32位寻址,那么位于缓冲区的缓冲区描述表也应该是32位的

当USB_BTABLE为0时,缓冲区描述表位于缓冲区的首地址 0x40006000

每4个字节存放一个地址寄存器,连续4个应该是16字节。

描述表的寻址方式,手册给了两种



那么地址偏移这个就可以看懂了。那么问题来了 相对于USB模块的USB本地地址到底是个什么玩意?

但是手册上又说供应用程序使用的分组缓冲区地址需要乘以2才能得到缓冲区在微控制器中的真正地址。这又怎么搞?

我看官方的库关于这个地址的算法是
#define _pEPTxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8  )*2 + PMAAddr))
那也就是使用USB本地地址寻址时候需要乘以2

用地址偏移是不是就不需要乘以2了?

就算是这样 那为什么BTABLE还需要乘以2?

还有一个疑问,缓冲区描述表里存放的地址能不能是USB缓冲区以外的内存区域?

[mw_shl_code=c,true]void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes) { uint32_t n = (wNBytes + 1) >> 1;/* /2*/ uint32_t i; uint32_t *pdwVal; pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr); for (i = n; i != 0; i--) { *(uint16_t*)pbUsrBuf++ = *pdwVal++; pbUsrBuf++; } }[/mw_shl_code]
这是另外一个问题,这段代码中是将PMA内存复制到用户buff 但是一个类型是16位一个类型是32位,这样不会丢失数据么?

最佳答案

查看完整内容[请看2#楼]

好吧 今天又看了一天 全都明白了 usb的缓冲区,由于是32位寻址,所以每次都是32位对其。usb将发送或者收到的数据按字处理,所以只用到了32位寻址的低16位,而且是低字节在前,所以才会有x2这么一说。因为要保证32位对齐。 也就是当读或写的时候会有16位类型的指针与32位类型的的指针,用户buff按16位寻址,usb缓冲区用32位寻址。 而usb本地地址,是相当于把每次的32位寻址当作是16位的,所以少了一倍。 也就是说虽然有51 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
 楼主| 发表于 2015-7-24 19:57:52 | 显示全部楼层
好吧 今天又看了一天 全都明白了

usb的缓冲区,由于是32位寻址,所以每次都是32位对其。usb将发送或者收到的数据按字处理,所以只用到了32位寻址的低16位,而且是低字节在前,所以才会有x2这么一说。因为要保证32位对齐。
也就是当读或写的时候会有16位类型的指针与32位类型的的指针,用户buff按16位寻址,usb缓冲区用32位寻址。

而usb本地地址,是相当于把每次的32位寻址当作是16位的,所以少了一倍。

也就是说虽然有512字节的缓冲区给usb使用,但是实际上只可以用一半的空间。

描述表能不能保存缓冲区以外的地址还不知道。

回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
 楼主| 发表于 2015-7-24 20:02:47 | 显示全部楼层
BTABLE乘2或许可以这么理解,因为BTABLE是8字节对其,为了描述表的16字节,所以需要乘2来对对齐,
但是这两种计算地址的方式 到底怎么搞!!!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-7-25 11:17:22 | 显示全部楼层
帮顶....
回复

使用道具 举报

42

主题

358

帖子

0

精华

高级会员

Rank: 4

积分
890
金钱
890
注册时间
2014-8-16
在线时间
193 小时
 楼主| 发表于 2015-7-25 18:22:02 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原大哥 对USB没研究么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-21 19:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表