天天看點

nrf52 ESB通信協定底層探讨nrf52 ESB通信協定底層分析

這裡寫自定義目錄标題

  • nrf52 ESB通信協定底層分析
    • RADIO 資料包配置
    • ESB向導

nrf52 ESB通信協定底層分析

此文主要探讨nrf52832 2.4G RADIO資料傳輸過程,以及esb協定的實作。

以下讨論可能有了解偏差,同時本着共同學習共同進步的想法,歡迎大家指出并糾正。qq::2013462220

RADIO 資料包配置

無線電傳輸資料包的字段:前導碼-位址-資料單元-crc。資料包長度不能超過258位元組。

nrf52 ESB通信協定底層探讨nrf52 ESB通信協定底層分析

PREAMBLE:前導碼或者說幀頭,一個位元組長度(除了2M/s 藍牙模式),前導碼自動配置的,使用者不用設定。

ADDRESS:廣播位址由基位址(base)+字首位址(prefix )兩部分組成。基位址長度:2-4位元組,其長度可以通過寄存器PCNF1的BALEN位配置。

nrf52 ESB通信協定底層探讨nrf52 ESB通信協定底層分析

資料單元: 由S0,LENGTH,S1,PAYLOAD組成,這些字段可以通過寄存器配置用使用者自定義資料發送方式。(1)通過PCF1寄存器ENDIAN位小端大端存儲,(2)通過PCF0寄存器設定S0,S1,LENGTH位元組長度,當位元組長度配置成0位元組的時候,S0,S1,LENGTH 字段在記憶體中不申請記憶體,相當于不使用,這時隻有PAYLOAD字段。

CRC: 校驗碼,通過CRCCNF寄存器設定其位元組數以及生成方式。

ESB向導

這裡不做過多的探讨,因為網上資料不少,寫的也不錯。這裡我們主要探讨一下esb協定與radio之間的協定驅動方式。

(1)實作一個接收端多個發送端同時通信過程

nrf52 ESB通信協定底層探讨nrf52 ESB通信協定底層分析

支援星狀網絡拓撲實作一拖多的雙向鍊路是nrf52的一個特點,nrf52一個接收端能最多支援8個發送端。

8個邏輯通道(pipe)擁有單獨特定的傳輸實體位址,是以保證了資料不會錯亂。8個邏輯位址是如何和實體位址對應呢,如下圖邏輯位址的定義,第一章我們說了實體位址由base+prefix組成,是以通道0的位址是BASE0+prefix[0],其他的位址是BASE1+prefix[1]~[7]。然後發送端發送自己邏輯位址,接收端接收判斷收到資料包邏輯通道。

nrf52 ESB通信協定底層探讨nrf52 ESB通信協定底層分析

(2)資料發送最大位元組數252,第一章說過包總長度最大258位元組,前導碼和位址占6位元組。

(3)占用資源:

Radio (NRF_RADIO)

Timer: NRF_TIMER2 //這裡用到了發送資料的時候等待應答以及延時重發過程(具體流程下一章寫)

PPI channels 10, 11, 12, and 13 //與NRF_TIMER2聯合用到發送資料的時候等待應答以及延時重發

Software interrupt 0

(4)資料包識别與鑒定

tx發送資料包的時候通過crc和pid進行驗證。這裡說一下資料包前面的識别碼。

動态資料長度發送協定:使用者的資料打包過程中在底層是從m_tx_payload_buffer[2]開始的,m_tx_payload_buffer[0]用來存儲位元組長度,m_tx_payload_buffer[1]後兩位用來存pid和應答辨別,pid用來區分包是否為重發的包,如果不是重傳的包存入RX緩存,如果是重發的包丢掉。