搜索

[AT32F403/403A] STM32和AT32 USB Bulk传输吞吐量测试与分析

[复制链接]
493|9
 楼主 | 2020-7-10 22:53 | 显示全部楼层 |阅读模式
本帖最后由 tanmingjin 于 2020-7-10 22:52 编辑

测试STM32F103AT32F403 USB Bulk传输速度

这两款芯片都只支持USB2.0 Full SpeedUSB的总线频率为12MHz
如下是USB2.0 Spec的定义:
1速度.png

当设备需要有大量数据传输的时候,此时就可以选择Bulk传输。
如下是USB2.0 Full speed Bulk 传输速度理论值,按照每次传输最大字节64 Byte,
那么1秒可以传输1216000 Byte的有效数据,约为1.16MB/s。
2最大速度.png

下面来看一下STM32F103和AT32F403 USB Bulk实际的吞吐量:
如下我们通过抓USB总线上的数据包来分析,通过一个帧间隔SOF(1ms)内数据的多少来计算USB可以达到的吞吐量。
用此方法计算出来的吞吐量可能并不代表我们应用中实际的吞吐量,实际应用中会受到主机以及设备端数据处理的影响。
测试程序都使用虚拟串口Demo程序,Demo可以在对应厂商官网下载,将Demo发送和接收部分做一下处理。
上位机使用使用串口工具发送和接收数据。

发送部分:每次发送完成之后写入64 Byte数据
void EP1_IN_Callback(void)
{
  uint8_t buffer[64];
  UserToPMABufferCopy(buffer, ENDP1_TXADDR, 64);
  SetEPTxCount(ENDP1, 64);
  SetEPTxValid(ENDP1);
}

接收部分:接收到数据之后,将数据拷贝出来之后就继续接收下一包数据
void EP3_OUT_Callback(void)
{
uint8_t buffer[64];
usb_Receive_length = GetEPRxCount(ENDP3);
PMAToUserBufferCopy(buffer, ENDP3_RXADDR, usb_Receive_length);
SetEPRxValid(ENDP3);
}

1. 单一IN传输 (设备上传数据到PC)
如下图:在一个帧间隔内
AT32F403上传了13个64Byte的数据,理论上1ms可以上传 64Byte*13=832Byte,1s可以上传832000 Byte
STM32F103上传了12个64Byte的数据,理论上1ms可以上传 64Byte*12=768Byte,1s可以上传768000 Byte
实际应用中可能会收到主机的影响。
IN.png

2. 单一OUT传输(设备接收主机数据)
如下图:在一个帧间隔内
AT32F403接收了11个64Byte的数据,理论上1ms可以接收 64Byte*13=704Byte,1s可以接收704000 Byte
STM32F103接收了9个64Byte的数据,理论上1ms可以接收 64Byte*12=576Byte,1s可以接收576000 Byte
实际应用中可能会受到主机的影响。
OUT.png
USB2.0 理论上1ms可以传输19个64Byte的数据,分析这里OUT传输速度比较低的原因是当主机传完一个
数据包之后,会马上发起下一个数据,但此时USB设备端并没有处理完成上一个数据包(将数据包拷贝到内存)。
这样就导致设备会回复主机NAK,造成带宽浪费,如下图:
NAK.png

3. IN&OUT同时传输

如下图:在一个帧间隔内
AT32F403传输了18个64Byte的数据,理论上1ms可以接收 64Byte*18=1152Byte,1s可以传输1152000 Byte
STM32F103传输了15个64Byte的数据,理论上1ms可以接收 64Byte*15=960Byte,1s可以传输960000 Byte
IN&OUT.png

总结:
对于USB来说,不管是AT32F403还是STM32F103,USB总线频率12MHz是固定的,也就是总线传输的速度其实是
相同的,实际测试出来的传输吞吐量有差异,实际上是因为AT32F403(系统时钟最大支持200MHz)和STM32F103(系统时钟最大支持72MHz)
在数据处理阶段的速度不一样,例如,OUT传输时,都是从USB缓冲区将数据拷贝到内存,AT32F403拷贝数据更快,
就能更快的接收下一包数据,总的吞吐量就更高。


使用特权

评论回复
| 2020-7-10 22:59 | 显示全部楼层
强,看来AT32F403主频高的优势在usb bulk传输速度测试上会带来质的飞跃。

使用特权

评论回复
| 2020-7-11 14:20 | 显示全部楼层
我测试的结果,几乎没有差异。 尤其是,数据包较小的时候,at的 没有st的快

使用特权

评论回复
 楼主 | 2020-7-11 23:06 | 显示全部楼层
zhifeng 发表于 2020-7-11 14:20
我测试的结果,几乎没有差异。 尤其是,数据包较小的时候,at的 没有st的快 ...

这边的测试都是按照MCU支持的最高系统时钟测试的,STM32F103跑72MHz,AT32F403跑192MHz。如果系统时钟相同,测试的结果基本上是没有差异

使用特权

评论回复
| 2020-7-12 09:07 | 显示全部楼层
说的就是 72 对比192的呀

使用特权

评论回复
 楼主 | 2020-7-12 15:00 | 显示全部楼层
zhifeng 发表于 2020-7-12 09:07
说的就是 72 对比192的呀

从实际应用来讲,总线速度是固定的,满负荷运行的话,那么对吞吐量影响最大的就是软件的处理速度了。不知你那边测试的最大吞吐量能到多少

使用特权

评论回复
| 2020-7-12 18:36 | 显示全部楼层
就像楼上说的总线速度是固定的,所以主频的优势不可能完全体现在单一外设上,主频的优势最大的好处是处理比较繁重的任务时才能体现

使用特权

评论回复
| 2020-7-21 11:20 | 显示全部楼层
这个usb协议分析是什么软件?

使用特权

评论回复
| 2020-7-21 22:02 | 显示全部楼层
谢谢分享【STM32和AT32 USB Bulk传输吞吐量测试与分析】

使用特权

评论回复
 楼主 | 2020-7-22 08:52 | 显示全部楼层
hexenzhou 发表于 2020-7-21 11:20
这个usb协议分析是什么软件?

用的 TELEDYNE LECROY Mercury T2 USB2.0协议分析仪,可以在网上搜一下。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表