0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

INGCHIPS BLE芯片如何获得最大吞吐量

桃芯科技 来源:桃芯科技 2023-07-12 16:56 次阅读

概述:文章第一部分先公布结论,第二部分是1M PHY吞吐率的实测过程与理论分析,第三部分是2M PHY的实测数据,第四部分是实操部分,喜欢BLE的朋友可以按照此部分的说明自己动手进行测试。

一、结论

使用INGCHIPS SDK中测试吞吐率的例程peripheral_throughput和central_throughput,使用两个开发板进行测试。

1M phy吞吐率≥93KBps;

2M phy吞吐率≥152KBps。

二、1MPHY

01 实测

为了最小化包头、包尾、校验等无法避免的数据开销,每一包数据MTU设置为247。 除去3bytes的ATT Header,则实际的ATT payload为244。 在central端连接参数使用默认值的情况下:

static initiating_phy_config_t phy_configs[] =              
{              
    {              
        .phy = PHY_1M,              
        .conn_param =              
        {              
            .scan_int = 200,              
            .scan_win = 180,              
            .interval_min = 50,              
            .interval_max = 50,              
            .latency = 0,              
            .supervision_timeout = 600,              
            .min_ce_len = 90,              
            .max_ce_len = 90              
        }              
    }              
};

对于1M phy来说,由主设备统计的吞吐率为:687104bps。 ad40a692-2091-11ee-962d-dac502259ad0.png    

使用蓝盒(ellisys)抓包:

ad6c0c6a-2091-11ee-962d-dac502259ad0.png

一包间隔为62.5ms(即50*1.25ms),观察其中的数据包发现,一个间隔有23包数据发出去。 实际发出的有效数据=23x244bytes=23x244x8bits=44896bits。 吞吐率=44896/0.0625=718336bps. 比串口统计的略大,仔细观察Ellisys窗口,发现每个连接间隔发满时,都有一次retry。在连接间隔的末尾,从设备没有回复主设备连接包,主设备进行了一次重传。

ad9044b8-2091-11ee-962d-dac502259ad0.png

也就是一个连接间隔实际只发了22包。

吞吐率=22x244x8/0.0625=687104,与串口的统计对应上了。

想要提升吞吐率,从上面的分析可以看到,有两个可以调整的地方,一个是每次重传的那一包,一个是连接间隔中空闲的6.116ms。

adb84576-2091-11ee-962d-dac502259ad0.png

6.116ms足够传2包数据(具体传送一包的时长,参照下面的理论分析部分)。

调整连接间隔

.interval_min = 51,
.interval_max = 51,

可以看到,每个连接间隔变成了63.75ms,比刚才多传了一包,24包(由于依然有一个retry包,有效包23包),连接间隔中浪费的时间4.89ms,比刚才的6.116ms少,本次吞吐率理论上比上次高。

adef0728-2091-11ee-962d-dac502259ad0.png

23x244x8/0.06375=704205

ae114c66-2091-11ee-962d-dac502259ad0.png

串口显示基本上两次718336,一次673440, (718336x2+673440)/3=703370,基本一致。 参数设置为

.conn_param =              
       {              
            .scan_int = 200,              
            .scan_win = 180,              
            .interval_min = 100,              
            .interval_max = 100,              
            .latency = 0,              
            .supervision_timeout = 600,              
            .min_ce_len = 200,              
            .max_ce_len = 200              
        }

ae3c7aa8-2091-11ee-962d-dac502259ad0.png

每个连接间隔125ms,传输有效包48包。

ae57394c-2091-11ee-962d-dac502259ad0.png

48x244x8/0.125=749568bps=93696Bps≈93KBps,

此时连接间隔的空闲时间为4.447ms,

基本上已经达到极限。

02 理论分析

BLE连接数据包分解如下:

ae76a656-2091-11ee-962d-dac502259ad0.png

当ATT payload设置为244,传输一包数据需额外传输的bytes数为:

1(preamble)+4(access address)+2(LL Header)+4(L2CAP Header)+3(ATT Header)+3(CRC)=17(因为不加密,所以没有MIC)。

一包总的数据长度为17+244=261bytes=261x8bits=2088bits。

对于1Mphy来说,传输1bit时间为1us,传输一包数据就需要2088us,即2.088ms。

ae9d0314-2091-11ee-962d-dac502259ad0.png

数据传输还有另外两个无法避免的时间开销:1)传输完一个数据包后,需要另一个设备回一个空包来保持数据传输;2)数据包之间需要有一个空闲时间来让协议栈完成数据处理,这个时间即T_IFS,150us。

aec4091e-2091-11ee-962d-dac502259ad0.png

空包的长度为1(preamble)+4(Access Address)+2(PDU)+3(crc)=10Bytes=80bits。

也就是说传输一个空包时间为80us,加上两个T_IFS,总共380us。

af2f219a-2091-11ee-962d-dac502259ad0.png

也就是说,传输244Bytes数据,实际花费的总时间=2088us+380us=2468us=2.468ms. 如果可以保持不间断地发送,吞吐率=244/0.002468=98865Bytes≈98KBps。 但是实际必然无法达到这个速度,就是由于上面说的,每一个连接间隔无法全部用于发送数据,即便让连接间隔是2.468ms的整数倍,协议栈也会留出一些空隙用于内部业务处理,对于Ingchips来说,这个间隙大约在4-6ms。 因此实测的93KBps已接近理论吞吐量的极限。 根据上面的分析,合理猜测如果把连接间隔无限拉长,可以最小化每个连接间隔空隙4-6ms的影响。但实际上,协议栈总需要时间来处理自己的事务,如果把连接间隔设的过长,且全部用于发送数据,协议栈就会在一定时间停止发送,且此连接间隔剩下的时间也不再用于发送数据,因此数据速率还会下降。

af4bd196-2091-11ee-962d-dac502259ad0.png

af719728-2091-11ee-962d-dac502259ad0.png

三、2MPHY

01 Ellisys抓包2M PHY 方法

如下图所示,勾选2M PHY

af963196-2091-11ee-962d-dac502259ad0.png

02 实测

在连接间隔设为60,152kBps以上。

具体过程不再赘述。

afcdce8a-2091-11ee-962d-dac502259ad0.png

四、实操

01 环境准备

硬件

INGCHIPS开发板两套,可以咨询INGCHIPS代理商购买(上面的胶棒天线需要自备)。

Micro USB线两条。

afe8521e-2091-11ee-962d-dac502259ad0.png

软件:

INGCHIPS SDK,下载最新版本。

串口调试工具,比如SSCOM。

02 测试过程

说明:

关于INGCHIPS SDK的下载和安装、开发软件环境的配置、例程的编译和固件下载等具体问题,桃芯官网提供了丰富的由浅入深的开发资料,前期搭建环境过程中可以参照。

http://www.ingchips.cn/intro/25.html

https://ingchips.github.io/docs/application-notes/
过程中遇到问题也可以咨询桃芯科技的代理商或原厂支持。

SDK安装好后,在两块开发板分别下载SDK提供的专门用于吞吐量测试的主从例程。

b091f008-2091-11ee-962d-dac502259ad0.png

连接主设备的串口,主设备上电会有打印,有相关调试指令的说明。

主设备扫描到从设备后,会自动进行连接。

之后发送测试指令(start m->s表示主设备发,从设备收),主设备的串口就会1秒钟发送一次实时吞吐率测试结果。

b0c4c41a-2091-11ee-962d-dac502259ad0.png

可以参照第二部分中,调整连接参数的配置,观察吞吐率的变化。如果有条件,也可以用Ellisys实时抓取连接过程,观察空中包的发送情况。 注意:测试时把两套开发板放在靠近的位置上,保证二者有稳定的信号连接,信号不稳或者太差会影响吞吐率,信号强度对吞吐率的影响欢迎小伙伴们自行测试。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47788

    浏览量

    409142
  • 吞吐量
    +关注

    关注

    0

    文章

    45

    浏览量

    12280
  • PHY
    PHY
    +关注

    关注

    2

    文章

    264

    浏览量

    51006
  • BLE
    BLE
    +关注

    关注

    12

    文章

    608

    浏览量

    58837
  • SDK
    SDK
    +关注

    关注

    3

    文章

    966

    浏览量

    44703
收藏 人收藏

    评论

    相关推荐

    网卡吞吐量测试解决方案

    随着互联网的迅速发展,计算机日益成为人们生活中不可或缺的部分。伴随着网络业务的丰富,用户对计算机网卡的要求也越来也高。如何对计算机网卡吞吐量进行合理的测试,已越来越成为众多计算机网卡生产厂家日益关注
    发表于 12-23 11:07

    无线测试之吞吐量测试

    无线网络测试之无线吞吐量测试方法、步骤
    发表于 06-25 08:40

    iperf固定吞吐量测试如何设置

    我有两个CYW43907演示,并下载控制台项目。我想使用IpFF命令来测试固定的UDP吞吐量。示例:IPEF-C 192.1680.1-P 5001 -I 2 -T 30 -U-B 60M,但客户端
    发表于 11-06 14:09

    如何从斯巴达6 lx 150获得41 mbps的吞吐量

    我正在研究斯巴达6 lx 150,我只是想知道可能是什么原因,一旦我获得41 mbps的吞吐量并再次尝试我得到0和几次尝试我再次获得41。prudhviranga以上来自于谷歌翻译以下为原文iam
    发表于 07-11 10:12

    请问是否有USB-UART或USB-SPI可从微芯片获得高达1MB/s的吞吐量

    MCP2200的最大uart速度为1MBaud,可能最大为100KB/s。是否有USB-UART或USB-SPI可从微芯片获得高达1MB/s的吞吐量
    发表于 07-15 06:10

    如何通过UBFS获得流式ADC数据的最高吞吐量

    的上方,PSoC似乎在几秒钟后就崩溃了,并且没有更多的USB数据进入PC。我错过了什么?人们通常使用另一种策略来通过UBFS获得流式ADC数据的最高吞吐量吗?任何帮助或提示赞赏!谢谢,费利克斯
    发表于 10-11 10:46

    USB CDC吞吐量问题

    我从论坛上阅读CDC的所有内容中得知,我的申请应该只是学术性的,并且迟疑不决。我的实时要求是在250毫秒内传输115200字节(吞吐量460800字节/秒)。从PIC32到PC。客户需要他们的PC
    发表于 10-14 15:52

    请问BLE 4.2连接(1中心和1外围设备)的最大理论有效载荷吞吐量是多少?

    BLE 4.2连接(1中心和1外围设备)的最大理论有效载荷吞吐量是多少?每个连接间隔可以发送最多四个分组,并且每个分组可以具有多达251字节的有效载荷。根据BLE规范,连接参数的允许范
    发表于 10-15 09:26

    如何计算延迟和吞吐量

    如何计算延迟和吞吐量?在ISE时序报告中,我们发现一个名为“最大组合路径延迟”的参数是否与最大时钟频率有关?
    发表于 03-19 08:55

    请问如何找到面积,延迟,吞吐量,功率?

    嗨,我的项目是基于芯片的VHDL设计和实现网络我使用Xilinx ISE和合成buti不知道如何找到(区域,延迟,吞吐量,功率)的设计我在附件中获得了报告中的信息(设计摘要,时间摘要)。那么内存使用是什么意思?如果他知道如何找到
    发表于 05-25 08:43

    提高BLE吞吐量的可行办法

    提高BLE吞吐量的可行办法如何实现更快的BLE吞吐量
    发表于 01-18 06:26

    如何通过触发模型提高吞吐量

    如何通过触发模型提高吞吐量
    发表于 05-11 07:00

    全志R128 BLE最高吞吐量测试正确配置测试

    影响。例如,R128设备支持蓝牙5.0,而蓝牙5.0版本后支持2M PHY,使用2M PHY会获得更高的数据吞吐量。 2、DLE(数据长度扩展): 在蓝牙4.2版本之后,BLE(蓝牙低功耗)开始支持DLE
    发表于 10-16 15:22

    全志R128 BLE最高吞吐量测试正确配置测试

    影响。例如,R128设备支持蓝牙5.0,而蓝牙5.0版本后支持2M PHY,使用2M PHY会获得更高的数据吞吐量。 2、DLE(数据长度扩展): 在蓝牙4.2版本之后,BLE(蓝牙低功耗)开始支持DLE
    发表于 10-26 16:46

    INGCHIPS BLE芯片如何获得最大吞吐量

    使用INGCHIPS SDK中测试吞吐率的例程peripheral_throughput和central_throughput,使用两个开发板进行测试。
    的头像 发表于 07-12 16:56 728次阅读
    <b class='flag-5'>INGCHIPS</b> <b class='flag-5'>BLE</b><b class='flag-5'>芯片</b>如何<b class='flag-5'>获得</b><b class='flag-5'>最大</b><b class='flag-5'>吞吐量</b>?