找回密码
 立即注册
查看: 505|回复: 8

USB在上一个数据包尚未处理时可以继续传输下一个数据包吗?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-11-24 03:48:44 | 显示全部楼层 |阅读模式
部分MCU资料可以看到说明,可以配置为双缓冲,以最大化吞吐率。
一个缓冲区在CPU处理数据时,USB使用另一个缓冲区传输数据。
USB的缓冲区可寻址,可由CPU直接访问。

而STC的USB和那些不一样,USB部分和CPU部分之间由一个异步FIFO连接。

这样做的好处显而易见,两者可以采用各自独立的时钟。
USB作为独立外设时钟48MHz是固定不能变的,

而MCU其它部分可以采用任意其它频率,
比如 45MHz, 44.2368MHz, 40MHz, 36.864MHz,
33.1776MHz, 24MHz, 22.1184MHz,12MHz, 11.0592MHz, 等灵活的较低频率。
这样功耗低,电磁辐射小。

看了STC的资料,有些地方不明白,FIFO能否容纳多个数据包?

即收到一个数据包,尚未处理,未清空FIFO时,
上位机再次发来一个OUT包,能否接受?
IN的处理同理。
无标题.png

数据手册中提了一句,FIFO中可以包含多个数据包,但是没有详细的说明。

按照提供的例程的处理逻辑,
收到OUT数据包,产生中断,读取收到数据包字节数,

从FIFO逐个字节读取并复制到一个缓冲区,清除OPRDY标志。
经实际测试,在清空FIFO清除OPRDY标志前,上位机发送OUT包是不成功的,会NAK。

直到OPRDY标志清除后,才可以成功发送下一包。

类似多包连发或其它MCU双缓冲这种效果能实现吗?







回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-11-24 10:08:53 | 显示全部楼层
就是如何理解这个自动缓存数据 ?
===我请同事来回答下

截图202411241008116298.jpg


截图202411241007243737.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-11-24 10:26:26 | 显示全部楼层
帮回答下
答复:

       我们的USB规格中没有双缓冲支持
       上一包数据没有处理完成前不会接收下一包数据


有单缓冲,一边读走?还可以一边收 ?
答复:

       FIFO就是缓冲区
       不能一边读一边收
       处理完成FIFO的当前数据包后,告诉USB硬件已处理完成,
       硬件就好自动接收下一包数据到FIFO



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2024-11-24 10:38:41 | 显示全部楼层
目前我公司的带USB功能的芯片,USB的所有端点的FIFO都不支持分割,
所以所有的端点都不支持双缓冲

硬件在接收一包数据到FIFO中后,会将OPRDY标志位置1
只要软件没有清除OPRDY标志,硬件就不会继续接收下一包数据
只有当软件处理完成FIFO中的数据后,将OPRDY清0
硬件就知道可以接收下一包数据了

IN包的处理方式也是一样,软件写入数据到FIFO后,将IPRDY后
在HOST没有从FIFO中取走前数据前,不能继续向FIFO中写数据
只有在HOST从FIFO中取走了数据,硬件自动将IPRDY标志为清零
软件才可以向FIFO继续写下一包数据

双缓冲是比较老旧的技术,后续我公司的USB会添加USB的DMA功能
USB DMA会连续接收多包数据,并自动存放到RAM中。
DMA相比双缓冲,数据接收能力要强很多。双缓冲最多可接收两包数据,
DMA则不仅仅只接收两包
只要RAM足够大,连续接收10包甚至100包都不是问题

点评

答复及时给力,后续是 DMA 时代了 [attachimg]65216[/attachimg] 期待这个DMA方阵当中出现 USB !!!  详情 回复 发表于 2024-11-24 10:55
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-11-24 10:55:22 | 显示全部楼层
zh*** 发表于 2024-11-24 10:38
目前我公司的带USB功能的芯片,USB的所有端点的FIFO都不支持分割,
所以所有的端点都不支持双缓冲

答复及时给力,后续是 DMA 时代了
{:5_300:}

截图202411241054409198.jpg

期待这个DMA方阵当中出现 USB !!!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-11-24 15:19:22 | 显示全部楼层
速度够快就行了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-11-24 15:40:19 | 显示全部楼层
了解了。
主要是手册中提到了FIFO可以包含多个数据包,以及USB DMA相关寄存器。
但又摸不透使用方法,故此多问。

点评

我们继续努力  详情 回复 发表于 2024-11-24 17:00
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-11-24 17:00:00 | 显示全部楼层
hea*** 发表于 2024-11-24 15:40
了解了。
主要是手册中提到了FIFO可以包含多个数据包,以及USB DMA相关寄存器。
但又摸不透使用方法,故此 ...

{:5_300:}
我们继续努力
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-11-24 19:57:32 | 显示全部楼层
学习
DebugLab
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 09:00 , Processed in 0.128998 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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