色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RTT zephyr_polling SPI Bluenrg2數(shù)據(jù)傳輸測(cè)試

冬至子 ? 來源:paradox ? 作者:paradox ? 2023-09-25 16:25 ? 次閱讀

RTT 那邊的 Kconfig 配置完成,項(xiàng)目的基本開發(fā)內(nèi)容就完成了。然后再對(duì)協(xié)議棧在 Bluenrg2 芯片上采用 SPI 作為 HCI 的數(shù)據(jù)傳輸進(jìn)行測(cè)試。

數(shù)據(jù)傳輸使用的是 zephyr_polling 的 thoughput Example。

配置

軟件包配置

數(shù)據(jù)傳輸

數(shù)據(jù)吞吐例程內(nèi)部邏輯是將接收到的數(shù)據(jù)轉(zhuǎn)發(fā)回中心設(shè)備。主要提供了兩個(gè) GATT 服務(wù):write 和 notify。前者用于接收中心設(shè)備發(fā)來的數(shù)據(jù),后者用于向連接的中心設(shè)備發(fā)送數(shù)據(jù)。

輸入zephyr運(yùn)行Example。

手機(jī)端使用 BLE調(diào)試寶(類似的BLE APP應(yīng)該都行)連接設(shè)備,開啟notify服務(wù):

1.jpg

數(shù)據(jù)傳輸

數(shù)據(jù)吞吐例程內(nèi)部邏輯是將接收到的數(shù)據(jù)轉(zhuǎn)發(fā)回中心設(shè)備。主要提供了兩個(gè) GATT 服務(wù):write 和 notify。前者用于接收中心設(shè)備發(fā)來的數(shù)據(jù),后者用于向連接的中心設(shè)備發(fā)送數(shù)據(jù)。

輸入zephyr運(yùn)行Example。

手機(jī)端使用 BLE調(diào)試寶(類似的BLE APP應(yīng)該都行)連接設(shè)備,開啟notify服務(wù):

1.jpg

連續(xù)發(fā)送數(shù)據(jù):

1.jpg

收發(fā)數(shù)據(jù)沒有丟包。

串口打印如下:

initialize rti_board_start:0 done
initialize drv_pm_hw_init:0 done
initialize rt_hw_spi_init:0 done
| /

RT - Thread Operating System
/ | 5.0.1 build Sep 20 2023 22:39:47
2006 - 2022 Copyright by RT-Thread team
do components initialization.
initialize rti_board_end:0 done
initialize stm32l4_hw_lptim_init:0 done
initialize finsh_system_init:0 done
msh >zephyr
zephyr_polling_init
bt_init_hci_driver
SPI_init_process device_name: spi10, spi_name: spi1, rate: 1000000, databits: 8, LSB_MSB: 1, Master_Slave: 0, CPOL: 0, CPHA: 1
SPI_init_process cs_pin_num: 1, irq_pin_num: 0
hci_driver_open, SPI_config_finish
I: (bt_hci_core)hci_init():3230: work start.
msh >prepare_event_process, step: 1
prepare_event_process, step: 2
prepare_event_process, step: 3
prepare_event_process, step: 4
prepare_event_process, step: 5
I: (bt_hci_core)hci_init_end():3205: work end.
E: (bt_smp)smp_self_test():5695: smp_self_test start
I: (bt_hci_core)bt_dev_show_info():3008: Identity: 02:80:e1:00:00:f5 (public)
I: (bt_hci_core)bt_dev_show_info():3042: HCI: version 5.2 (0x0b) revision 0x1222, manufacturer 0x0030
I: (bt_hci_core)bt_dev_show_info():3044: LMP: version 5.2 (0x0b) subver 0x0015
Bluetooth initialized
throughput_svc_init()
Advertising successfully started
I: (bt_hci_core)bt_sleep_prepare_work():4040: start
I: (bt_hci_core)bt_sleep_prepare_work():4046: end
I: (bt_hci_core)bt_sleep_wakeup_work_start():4058: start
I: (bt_hci_core)bt_sleep_wakeup_work_start():4061: end
I: (bt_hci_core)bt_sleep_wakeup_work_end():4072: start
I: (bt_hci_core)bt_sleep_wakeup_work_end():4074: end
Connected

數(shù)據(jù)傳輸測(cè)試

數(shù)據(jù)傳輸測(cè)試首先是保證傳輸?shù)姆€(wěn)定性,保證沒有丟包誤碼。在保證可靠的前提下,再對(duì)數(shù)據(jù)傳輸?shù)乃俾蔬M(jìn)行測(cè)試。測(cè)試包括雙工的收發(fā)速率測(cè)試和單口的傳輸速率測(cè)試。

測(cè)試傳輸?shù)膯蝹€(gè)數(shù)據(jù)包大小為 20 字節(jié)。

這里有一個(gè)測(cè)試方案的問題,一開始使用的方案不對(duì),測(cè)得的數(shù)據(jù)不能保證準(zhǔn)確性(沒有保證可靠傳輸),在社區(qū)導(dǎo)師的幫助下才得到了比較準(zhǔn)確的測(cè)試結(jié)果。

測(cè)試單口傳輸速率
單口傳輸?shù)脑捫枰?thoughput 例程中的發(fā)送關(guān)閉。此時(shí)由于沒有給 APP 端反饋,為了保證可靠傳輸,需要在接收處對(duì)接收的數(shù)據(jù)進(jìn)行計(jì)數(shù),并啟動(dòng)一個(gè)軟件定時(shí)器,定時(shí)打印計(jì)數(shù)。將打印得到的接收字節(jié)數(shù)與 APP 端的發(fā)送字節(jié)數(shù)對(duì)比,二者相符則可以基本保證可靠傳輸。再根據(jù)打印的計(jì)數(shù),計(jì)算傳輸速率。

exampleperipheral_throughputthroughput_service.c
關(guān)閉發(fā)送:

static void throughput_tx_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
{
bool notif_enabled = (value == BT_GATT_CCC_NOTIFY);
// tx_enable = notif_enabled;
// 修改為
tx_enable = 0;
}
在接收處添加計(jì)數(shù)

static ssize_t data_rx(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf,
uint16_t len, uint16_t offset, uint8_t flags)
{
...
recv_count += len;
return len;
}
使用協(xié)議棧的軟件定時(shí)器打印計(jì)數(shù):

struct k_timer count_work;
...
void count_timeout(struct k_timer *timer)
{
printf("count_timeout(): %dn", recv_count);
recv_count = 0;
}
...
k_timer_init(&count_work, count_timeout, NULL);
k_timer_start(&count_work, K_SECONDS(25), K_SECONDS(50)); // 25s后第一次執(zhí)行 之后50s為周期執(zhí)行

這里存在一個(gè)如何同步計(jì)數(shù)的問題。人點(diǎn)擊APP端發(fā)送的開始和停止時(shí)需要反應(yīng)時(shí)間的,需要回避開始和結(jié)束。

首先是計(jì)數(shù)速率的時(shí)候,只能取不包含開始和結(jié)束的時(shí)間段內(nèi)的計(jì)數(shù)來計(jì)算。

而可靠性保證的時(shí)候,并不需要在一次計(jì)數(shù)完成的時(shí)候剛好結(jié)束,往后再計(jì)數(shù)一個(gè)周期,將全部的計(jì)數(shù)結(jié)果加起來,能與APP端相符即可。

采取的方案是啟動(dòng)協(xié)議棧,并在 APP 端連接后,開始連續(xù)發(fā)送測(cè)試數(shù)據(jù)包。計(jì)數(shù)的打印為 25s 后第一次執(zhí)行,之后 50s 為周期執(zhí)行。四次打印后結(jié)束發(fā)送,等待最后一次打印。將 5 次打印的計(jì)數(shù)求和,與APP端的發(fā)送數(shù)對(duì)比。然后取中間三次 50s 打印的字節(jié)數(shù)計(jì)算傳輸速率。

經(jīng)過實(shí)際測(cè)試,APP 端 2 ms 發(fā)送間隔下,在長(zhǎng)時(shí)間的連續(xù)發(fā)送下會(huì)產(chǎn)生丟包,需要將發(fā)送間隔上調(diào)至 3 ms 才能保證壓測(cè)之下沒有丟包。

20字節(jié) 間隔 2ms 傳輸持續(xù) 200s

協(xié)議棧端計(jì)數(shù)接收到 1494160 字節(jié)數(shù)據(jù),但 APP 端發(fā)出 75046 個(gè)數(shù)據(jù)包,1500920 字節(jié)數(shù)據(jù)。

存在丟包情況。此時(shí)速率為 1494160 / 200 = 7470.8 byte/s

單個(gè)數(shù)據(jù)包大小為 20 字節(jié),APP 端 3ms 發(fā)送間隔,測(cè)試打印:

[16:49:11.997]收←◆Connected
[16:49:26.163]收←◆count_timeout(): 17180
[16:50:16.110]收←◆count_timeout(): 213960
[16:51:06.061]收←◆count_timeout(): 211220
[16:51:56.016]收←◆count_timeout(): 212000
[16:52:45.978]收←◆count_timeout(): 57080

接收到的數(shù)據(jù)包為 17180+213960+211220+212000+57080 = 711440 字節(jié),與APP端相符。

1.jpg

當(dāng)前條件下的可靠傳輸速率為 (213960+211220+212000) / (50 * 3) = 4247.87 byte/s

測(cè)試雙工的收發(fā)速率

數(shù)據(jù)吞吐例程內(nèi)部邏輯是將接收到的數(shù)據(jù)轉(zhuǎn)發(fā)回中心設(shè)備。在APP端保證發(fā)出和收到的字節(jié)數(shù)相同就能基本保證可靠性,然后再計(jì)數(shù)固定時(shí)間內(nèi)傳輸?shù)淖止?jié)數(shù)即可得到傳輸速率。

同時(shí)收發(fā)的條件下,需要將發(fā)送間隔設(shè)置到 25ms 才能保證傳輸不丟包。

[00:11:22.697]收←◆Connected
[00:11:37.647]收←◆count_timeout(): 4280
[00:12:27.610]收←◆count_timeout(): 36400
[00:13:17.572]收←◆count_timeout(): 36400
[00:14:07.530]收←◆count_timeout(): 36320
[00:14:57.484]收←◆count_timeout(): 36360
[00:15:47.440]收←◆count_timeout(): 1900

APP端收發(fā)數(shù)相符,沒有丟包。打印的計(jì)數(shù)和為151600,與APP端相符。

速率為 (36400+36400+36320+36360)/200 = 726.95 byte/s

雙工傳輸?shù)乃俾什⒉焕硐耄榭磦鬏敃r(shí)的時(shí)序圖,發(fā)現(xiàn)傳輸所占用的時(shí)間比例很少,協(xié)議棧有很大的優(yōu)化空間。

1.jpg

問題

首先是從時(shí)序圖可以看到 SPI 通信口的利用率不高,有優(yōu)化空間。

此外 APP 端給芯片發(fā)送數(shù)據(jù)的時(shí)候是通過 write GATT 服務(wù)進(jìn)行的,寫入的時(shí)候會(huì)檢查接收緩沖區(qū)大小,如果滿了,應(yīng)當(dāng)?shù)却锌臻e才會(huì)發(fā)送(實(shí)際去查看APP端的日志,即使將間隔設(shè)定為 1 ms,發(fā)送的間隔也不會(huì)是 1 ms,而是會(huì)根據(jù)實(shí)際情況浮動(dòng))。這種機(jī)制下,丟包是不應(yīng)該的。

這兩個(gè)問題有待之后去改進(jìn)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接收器
    +關(guān)注

    關(guān)注

    14

    文章

    2478

    瀏覽量

    72099
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3255

    瀏覽量

    115180
  • SPI接口
    +關(guān)注

    關(guān)注

    0

    文章

    259

    瀏覽量

    34491
  • BLE技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    5902
  • RTThread
    +關(guān)注

    關(guān)注

    8

    文章

    132

    瀏覽量

    40964
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RTT_Zephyr_Polling BlueNRG2 SPI使用說明

    在RT-Thread平臺(tái)下,利用 BlueNRG2 藍(lán)牙芯片運(yùn)行 RTT_Zephyr_Polling 協(xié)議棧。使用 SPI 作為 HCI 傳輸方式。
    的頭像 發(fā)表于 09-21 14:54 ?1372次閱讀
    <b class='flag-5'>RTT_Zephyr_Polling</b> <b class='flag-5'>BlueNRG2</b> <b class='flag-5'>SPI</b>使用說明

    RTT平臺(tái)zephyr_polling軟件包SPI Bluenrg2芯片宕機(jī)問題與修復(fù)

    項(xiàng)目的代碼測(cè)試完成之后,準(zhǔn)備收尾時(shí),出現(xiàn)了問題。清除掉開發(fā)過程中用來調(diào)試的print打印之后,zephyr_polling 的 HCI 突然不能正常工作了,之前測(cè)試可用的 zephyr_pol
    的頭像 發(fā)表于 09-25 17:08 ?1137次閱讀
    <b class='flag-5'>RTT</b>平臺(tái)<b class='flag-5'>zephyr_polling</b>軟件包<b class='flag-5'>SPI</b> <b class='flag-5'>Bluenrg2</b>芯片宕機(jī)問題與修復(fù)

    RTT zephyr_polling軟件包 Bluenrg2藍(lán)牙芯片啟動(dòng)流程

    在用標(biāo)準(zhǔn)的 HCI 指令控制設(shè)備進(jìn)行藍(lán)牙操作之前,需要提前通過 VS Command 對(duì)設(shè)備進(jìn)行配置,只有正確配置好的設(shè)備才能正常使用。
    的頭像 發(fā)表于 09-27 11:19 ?1471次閱讀
    <b class='flag-5'>RTT</b> <b class='flag-5'>zephyr_polling</b>軟件包 <b class='flag-5'>Bluenrg2</b>藍(lán)牙芯片啟動(dòng)流程

    如何用Ubuntu qemu跑zephyr_polling的藍(lán)牙?

    進(jìn)入 RT-Thread online packages → IoT - internet of things 目錄即可看到 zephyr_polling軟件包,勾選軟件包。
    的頭像 發(fā)表于 09-28 11:24 ?2011次閱讀
    如何用Ubuntu qemu跑<b class='flag-5'>zephyr_polling</b>的藍(lán)牙?

    DSP2812的SPI數(shù)據(jù)傳輸

    利用DAC8534芯片和2812的SPI接口實(shí)現(xiàn)多路DA轉(zhuǎn)換,但是DAC8534的數(shù)據(jù)傳輸是24位的,[8位(地址加通道選擇)+16位(數(shù)據(jù)16位精度)],但是SPI
    發(fā)表于 08-11 20:26

    關(guān)于數(shù)據(jù)傳輸接口

    單片機(jī)用于數(shù)據(jù)傳輸的外設(shè)有哪些?原諒在下孤陋寡聞,我所知道的有SPI、I2C,不知還有哪些?誰的數(shù)據(jù)傳輸速度最快?
    發(fā)表于 09-02 12:22

    Modem數(shù)據(jù)傳輸標(biāo)準(zhǔn)

     Modem數(shù)據(jù)傳輸標(biāo)準(zhǔn) 數(shù)據(jù)傳輸標(biāo)準(zhǔn)是指MODEM的
    發(fā)表于 12-28 13:29 ?1034次閱讀

    基于SPI總線的無線數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)

    基于SPI總線的無線數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)   摘要: 通過基于SPI總線的無線數(shù)據(jù)通信設(shè)備,利用無線數(shù)據(jù)收發(fā)芯片NRF905和51單片機(jī)STC
    發(fā)表于 03-13 11:42 ?3810次閱讀
    基于<b class='flag-5'>SPI</b>總線的無線<b class='flag-5'>數(shù)據(jù)傳輸</b>系統(tǒng)設(shè)計(jì)

    數(shù)據(jù)傳輸速率是什么意思

    數(shù)據(jù)傳輸速率是什么意思 數(shù)據(jù)傳輸速率是通過信道每秒可傳輸的數(shù)字信息量的量度。數(shù)據(jù)傳輸速率也稱為吞吐率。數(shù)據(jù)傳輸速率由很
    發(fā)表于 03-18 14:45 ?4994次閱讀

    CC2500如何實(shí)現(xiàn)無線數(shù)據(jù)傳輸?(2

    CC2500無線數(shù)據(jù)傳輸實(shí)現(xiàn)_2
    的頭像 發(fā)表于 08-16 01:15 ?4780次閱讀

    SPI是什么 SPI數(shù)據(jù)傳輸

    數(shù)據(jù)傳輸 SPI 的英文全稱為 Serial Peripheral Interface,顧名思義為串行外設(shè)接口。 SPI 是一種同步串行通信接口規(guī)范,主要應(yīng)用于嵌入式系統(tǒng)中的短距離通信。該接口由
    的頭像 發(fā)表于 07-21 10:03 ?8877次閱讀

    SPI數(shù)據(jù)傳輸有哪些方式

    SPI 數(shù)據(jù)傳輸可以有兩種方式:同步方式和異步方式。 同步方式:數(shù)據(jù)傳輸的發(fā)起者必須等待本次傳輸的結(jié)束,期間不能做其它事情,用代碼來解釋就是,調(diào)用
    的頭像 發(fā)表于 07-25 10:54 ?5252次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>數(shù)據(jù)傳輸</b>有哪些方式

    RT-Thread平臺(tái) zephyr_polling軟件包 Bluenrg2 藍(lán)牙芯片啟動(dòng)流程

    地址:RTT_PACKAGE_zephyr_polling 前面已經(jīng)完成了 SPI 接口的實(shí)現(xiàn),要讓 zephyr_pollingBluenrg2 上運(yùn)行起來,下一步是實(shí)現(xiàn)其特殊
    的頭像 發(fā)表于 09-27 18:40 ?958次閱讀
    RT-Thread平臺(tái) <b class='flag-5'>zephyr_polling</b>軟件包 <b class='flag-5'>Bluenrg2</b> 藍(lán)牙芯片啟動(dòng)流程

    RTT平臺(tái)zephyr_polling軟件包SPI Bluenrg2丟包問題排查

    在對(duì)協(xié)議棧在 Bluenrg2 芯片上采用 SPI 作為 HCI 的數(shù)據(jù)傳輸進(jìn)行測(cè)試的時(shí)候,發(fā)現(xiàn)存在丟包問題。
    的頭像 發(fā)表于 10-23 15:41 ?709次閱讀
    <b class='flag-5'>RTT</b>平臺(tái)<b class='flag-5'>zephyr_polling</b>軟件包<b class='flag-5'>SPI</b> <b class='flag-5'>Bluenrg2</b>丟包問題排查

    探索SPI單線傳輸模式中時(shí)鐘線與數(shù)據(jù)傳輸的簡(jiǎn)化

    探索SPI單線傳輸模式:時(shí)鐘線與數(shù)據(jù)傳輸的簡(jiǎn)化之道 在當(dāng)今的嵌入式系統(tǒng)和微控制器通信中,串行外設(shè)接口(SPI)因其高速、全雙工和同步的特點(diǎn)而廣受歡迎。然而,隨著設(shè)備尺寸和復(fù)雜性的不斷減
    的頭像 發(fā)表于 05-28 18:26 ?1241次閱讀
    主站蜘蛛池模板: 亚洲高清一区二区三区电影 | 日本漂亮妈妈7观整有限中 日本片bbbxxx | 97色伦图区97色伦综合图区 | 国产精品高潮AV久久无码 | 午夜国产免费视频亚洲 | 成人久久欧美日韩一区二区三区 | 搡女人免费免费视频观看 | 乱VODAFONEWIFI熟妇| 污到湿的爽文免费阅读 | 无码区国产区在线播放 | 伦理 电影在线观看百度影音 | 国产成人精品精品欧美 | 国产午夜视频在永久在线观看 | 色四房播播 | 色愁愁久久久 | 邻居的阿2中文字版电影 | 亚洲精品在线播放视频 | 免费国产网站 | 67194线在线精品观看 | 美女用手扒开粉嫩的屁股 | 亚洲 欧美 清纯 校园 另类 | 男人的天堂MV在线视频免费观看 | 欧美午夜免费观看福利片 | 国产午夜福利100集发布 | 久久久性色精品国产免费观看 | 免费看欧美一级特黄a大片 免费看欧美xxx片 | 超碰日韩人妻高清视频 | 久久强奷乱码老熟女 | 男人插曲女人的叫声 | 综合人妻久久一区二区精品 | 一进一出抽搐gif免费60秒 | 亚洲精品午夜VA久久成人 | 国产精品无需播放器 | 一级毛片免费下载 | 色呦呦人人视频 | 人妻系列合集 | 伊伊人成亚洲综合人网 | 美女一级毛片免费不卡视频 | 一级毛片直接看 | 久久综合中文字幕佐佐木希 | 99久久免费看少妇高潮A片 |