打印
[STM32F1]

USB端点缓冲区硬件访问越界

[复制链接]
466|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
deru_qq|  楼主 | 2020-4-1 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 deru_qq 于 2020-4-3 08:43 编辑

调试VCP时发现的这个问题,用的是STM32F103C8,VCP接收使用了双缓冲端点,BUF0地址为0xE0,BUF1地址为0x120,分别对应实际的内存地址0x400061C0和0x40006240,接收长度都是64字节;仿真器调试发现,进入了端点的OUT中断后,假如刚刚接收使用的是BUF0,并且接收到的数据包长度为n,会发现,BUF0的偏移地址(n*2)和(n*2+1)里面的内容被修改了,如果n=64,那么(n*2)和(n*2+1)这两个地址就会延伸到BUF1的前2个字节,假如此时BUF1的内容还没有被读取,接收到的数据就会被破坏。对于BUF1也是如此,只不过受影响的是下一个端点的缓冲区。

这个问题不只是针对双缓冲,单缓冲同样有这个问题,只不过一般不会影响正常运行

有兴趣的朋友可以试一下,直接在端点OUT中断中设置断点就可以观察到

ST在相关的手册上好像没有描述过这个过程,但是却很明确的说设置的缓冲区不会溢出,接收数据包长度超过设置值时会被截断,大家一起来验证一下啊

使用特权

评论回复
沙发
mmuuss586| | 2020-5-17 21:54 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

132

帖子

2

粉丝