在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RTT zephyr_polling SPI Bluenrg2數據傳輸測試

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

RTT 那邊的 Kconfig 配置完成,項目的基本開發內容就完成了。然后再對協議棧在 Bluenrg2 芯片上采用 SPI 作為 HCI 的數據傳輸進行測試。

數據傳輸使用的是 zephyr_polling 的 thoughput Example。

配置

軟件包配置

數據傳輸

數據吞吐例程內部邏輯是將接收到的數據轉發回中心設備。主要提供了兩個 GATT 服務:write 和 notify。前者用于接收中心設備發來的數據,后者用于向連接的中心設備發送數據。

輸入zephyr運行Example。

手機端使用 BLE調試寶(類似的BLE APP應該都行)連接設備,開啟notify服務:

1.jpg

數據傳輸

數據吞吐例程內部邏輯是將接收到的數據轉發回中心設備。主要提供了兩個 GATT 服務:write 和 notify。前者用于接收中心設備發來的數據,后者用于向連接的中心設備發送數據。

輸入zephyr運行Example。

手機端使用 BLE調試寶(類似的BLE APP應該都行)連接設備,開啟notify服務:

1.jpg

連續發送數據:

1.jpg

收發數據沒有丟包。

串口打印如下:

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

數據傳輸測試

數據傳輸測試首先是保證傳輸的穩定性,保證沒有丟包誤碼。在保證可靠的前提下,再對數據傳輸的速率進行測試。測試包括雙工的收發速率測試和單口的傳輸速率測試。

測試傳輸的單個數據包大小為 20 字節。

這里有一個測試方案的問題,一開始使用的方案不對,測得的數據不能保證準確性(沒有保證可靠傳輸),在社區導師的幫助下才得到了比較準確的測試結果。

測試單口傳輸速率
單口傳輸的話需要把 thoughput 例程中的發送關閉。此時由于沒有給 APP 端反饋,為了保證可靠傳輸,需要在接收處對接收的數據進行計數,并啟動一個軟件定時器,定時打印計數。將打印得到的接收字節數與 APP 端的發送字節數對比,二者相符則可以基本保證可靠傳輸。再根據打印的計數,計算傳輸速率。

exampleperipheral_throughputthroughput_service.c
關閉發送:

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;
}
在接收處添加計數

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;
}
使用協議棧的軟件定時器打印計數:

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后第一次執行 之后50s為周期執行

這里存在一個如何同步計數的問題。人點擊APP端發送的開始和停止時需要反應時間的,需要回避開始和結束。

首先是計數速率的時候,只能取不包含開始和結束的時間段內的計數來計算。

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

采取的方案是啟動協議棧,并在 APP 端連接后,開始連續發送測試數據包。計數的打印為 25s 后第一次執行,之后 50s 為周期執行。四次打印后結束發送,等待最后一次打印。將 5 次打印的計數求和,與APP端的發送數對比。然后取中間三次 50s 打印的字節數計算傳輸速率。

經過實際測試,APP 端 2 ms 發送間隔下,在長時間的連續發送下會產生丟包,需要將發送間隔上調至 3 ms 才能保證壓測之下沒有丟包。

20字節 間隔 2ms 傳輸持續 200s

協議棧端計數接收到 1494160 字節數據,但 APP 端發出 75046 個數據包,1500920 字節數據。

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

單個數據包大小為 20 字節,APP 端 3ms 發送間隔,測試打印:

[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

接收到的數據包為 17180+213960+211220+212000+57080 = 711440 字節,與APP端相符。

1.jpg

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

測試雙工的收發速率

數據吞吐例程內部邏輯是將接收到的數據轉發回中心設備。在APP端保證發出和收到的字節數相同就能基本保證可靠性,然后再計數固定時間內傳輸的字節數即可得到傳輸速率。

同時收發的條件下,需要將發送間隔設置到 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端收發數相符,沒有丟包。打印的計數和為151600,與APP端相符。

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

雙工傳輸的速率并不理想,查看傳輸時的時序圖,發現傳輸所占用的時間比例很少,協議棧有很大的優化空間。

1.jpg

問題

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

此外 APP 端給芯片發送數據的時候是通過 write GATT 服務進行的,寫入的時候會檢查接收緩沖區大小,如果滿了,應當等待有空閑才會發送(實際去查看APP端的日志,即使將間隔設定為 1 ms,發送的間隔也不會是 1 ms,而是會根據實際情況浮動)。這種機制下,丟包是不應該的。

這兩個問題有待之后去改進。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接收器
    +關注

    關注

    14

    文章

    2473

    瀏覽量

    71978
  • 定時器
    +關注

    關注

    23

    文章

    3251

    瀏覽量

    114959
  • SPI接口
    +關注

    關注

    0

    文章

    258

    瀏覽量

    34409
  • BLE技術
    +關注

    關注

    0

    文章

    28

    瀏覽量

    5890
  • RTThread
    +關注

    關注

    8

    文章

    132

    瀏覽量

    40903
收藏 人收藏

    評論

    相關推薦

    RTT_Zephyr_Polling BlueNRG2 SPI使用說明

    在RT-Thread平臺下,利用 BlueNRG2 藍牙芯片運行 RTT_Zephyr_Polling 協議棧。使用 SPI 作為 HCI 傳輸方式。
    的頭像 發表于 09-21 14:54 ?1318次閱讀
    <b class='flag-5'>RTT_Zephyr_Polling</b> <b class='flag-5'>BlueNRG2</b> <b class='flag-5'>SPI</b>使用說明

    RTT平臺zephyr_polling軟件包SPI Bluenrg2芯片宕機問題與修復

    項目的代碼測試完成之后,準備收尾時,出現了問題。清除掉開發過程中用來調試的print打印之后,zephyr_polling 的 HCI 突然不能正常工作了,之前測試可用的 zephyr_pol
    的頭像 發表于 09-25 17:08 ?1115次閱讀
    <b class='flag-5'>RTT</b>平臺<b class='flag-5'>zephyr_polling</b>軟件包<b class='flag-5'>SPI</b> <b class='flag-5'>Bluenrg2</b>芯片宕機問題與修復

    RTT zephyr_polling軟件包 Bluenrg2藍牙芯片啟動流程

    在用標準的 HCI 指令控制設備進行藍牙操作之前,需要提前通過 VS Command 對設備進行配置,只有正確配置好的設備才能正常使用。
    的頭像 發表于 09-27 11:19 ?1415次閱讀
    <b class='flag-5'>RTT</b> <b class='flag-5'>zephyr_polling</b>軟件包 <b class='flag-5'>Bluenrg2</b>藍牙芯片啟動流程

    如何用Ubuntu qemu跑zephyr_polling的藍牙?

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

    DSP2812的SPI數據傳輸

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

    關于數據傳輸接口

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

    Modem數據傳輸標準

     Modem數據傳輸標準 數據傳輸標準是指MODEM的
    發表于 12-28 13:29 ?1021次閱讀

    基于SPI總線的無線數據傳輸系統設計

    基于SPI總線的無線數據傳輸系統設計   摘要: 通過基于SPI總線的無線數據通信設備,利用無線數據收發芯片NRF905和51單片機STC
    發表于 03-13 11:42 ?3795次閱讀
    基于<b class='flag-5'>SPI</b>總線的無線<b class='flag-5'>數據傳輸</b>系統設計

    數據傳輸速率是什么意思

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

    CC2500如何實現無線數據傳輸?(2

    CC2500無線數據傳輸實現_2
    的頭像 發表于 08-16 01:15 ?4760次閱讀

    SPI是什么 SPI數據傳輸

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

    SPI數據傳輸有哪些方式

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

    RT-Thread平臺 zephyr_polling軟件包 Bluenrg2 藍牙芯片啟動流程

    地址:RTT_PACKAGE_zephyr_polling 前面已經完成了 SPI 接口的實現,要讓 zephyr_pollingBluenrg2 上運行起來,下一步是實現其特殊
    的頭像 發表于 09-27 18:40 ?920次閱讀
    RT-Thread平臺 <b class='flag-5'>zephyr_polling</b>軟件包 <b class='flag-5'>Bluenrg2</b> 藍牙芯片啟動流程

    RTT平臺zephyr_polling軟件包SPI Bluenrg2丟包問題排查

    在對協議棧在 Bluenrg2 芯片上采用 SPI 作為 HCI 的數據傳輸進行測試的時候,發現存在丟包問題。
    的頭像 發表于 10-23 15:41 ?656次閱讀
    <b class='flag-5'>RTT</b>平臺<b class='flag-5'>zephyr_polling</b>軟件包<b class='flag-5'>SPI</b> <b class='flag-5'>Bluenrg2</b>丟包問題排查

    探索SPI單線傳輸模式中時鐘線與數據傳輸的簡化

    探索SPI單線傳輸模式:時鐘線與數據傳輸的簡化之道 在當今的嵌入式系統和微控制器通信中,串行外設接口(SPI)因其高速、全雙工和同步的特點而廣受歡迎。然而,隨著設備尺寸和復雜性的不斷減
    的頭像 發表于 05-28 18:26 ?1195次閱讀
    主站蜘蛛池模板: 天堂网最新版www中文| 久久福利网| 超级碰碰青草久热国产| 成人久久精品| 一级网站在线观看| 天天摸天天爽天天澡视频| 特污兔午夜影院| 国产天天色| 34pao强力打造免费永久视频| 亚洲网站在线观看| 在线天堂中文新版www| 天天射综合网站| 日本a级影院| 久久综合狠狠综合久久| 国产人免费人成免费视频| 夜干夜夜| 亚洲四虎永久在线播放| 亚洲激情| 人人射人人干| 国产玖玖| 日日干天天干| 狼色视频在线观免费观看| 很黄很暴力 很污秽的小说| 四虎影院免费视频| 美女黄18| 亚洲第一视频| 国产逼逼视频| 老司机色网| 特别黄的免费视频大片| 伦理一区二区三区| 最近免费| 国产成+人+综合+亚洲欧美丁香花| 中文字幕一区二区三区有限公司 | 黄色地址| 天天插天天操天天射| 性欧美hd| 优优国产在线视频| 欧美1区| 夜夜爽夜夜爱| 欧美猛交xxxx免费看| 五月婷婷深深爱|