當(dāng)前位置: 首頁 > 工業(yè)電子產(chǎn)品 > 其他電子產(chǎn)品 > IoT物聯(lián)網(wǎng) > IoT傳感器
發(fā)布日期:2022-05-25 點(diǎn)擊率:51
包數(shù)據(jù)的時(shí)候才會(huì)啟動(dòng)射頻、PLL和PA模塊,可以減少功耗。。
如下圖為數(shù)據(jù)發(fā)送流程:
從上圖可以看出,LoRa發(fā)送前一直處于待機(jī)狀態(tài),在初始化Tx模塊后,將待發(fā)送數(shù)據(jù)(Payload)寫入FIFO,然后切換到發(fā)送狀態(tài)將數(shù)據(jù)通過LoRa調(diào)制成信號(hào)發(fā)送出去,等到發(fā)送完成后,會(huì)產(chǎn)生TxDone中斷,同時(shí)再次切換為待機(jī)狀態(tài),完成一個(gè)發(fā)送流程。。
需要注意:
靜態(tài)配置寄存器只有在睡眠、待機(jī)模式才可寫
LoRa的FIFO只有在待機(jī)模式下才可寫
通過發(fā)送Tx模式請(qǐng)求,開始數(shù)據(jù)的發(fā)送
發(fā)送操作完成后,可手動(dòng)將設(shè)備設(shè)為睡眠模式,或者重新向FIFO寫入數(shù)據(jù),以便稍后再次進(jìn)行Tx操作
(1)將FifoPtrAddr 設(shè)置為 FifoTxPtrbase
(2)將PayloadLength寫入FIFO(RegFifo)
LoRa接收有兩種模式:
單一接收
連續(xù)接收
整體流程如下圖:
單一模式下,LoRa在給定的時(shí)間窗內(nèi)搜索前導(dǎo)碼,如果該時(shí)間窗結(jié)束時(shí)還未收到,則芯片會(huì)產(chǎn)生RxTimeout中斷信號(hào),同時(shí)切換回待機(jī)模式。。時(shí)間窗長(zhǎng)度在RegSymbTimeout定義,必須為4~1023個(gè)符號(hào),缺省值為5。。
在Payload接收完成后,如果CRC無效,則會(huì)產(chǎn)生RxDone以及PayloadCrcError中斷信號(hào)。。然而即使CRC無效,仍然可以在FIFO中寫入數(shù)據(jù),以便后續(xù)進(jìn)行處理。。RxDone中斷產(chǎn)生后芯片會(huì)切換回待機(jī)模式。。
當(dāng)RxDone或RxTimeout中斷信號(hào)產(chǎn)生時(shí),LoRa都會(huì)自動(dòng)切換到待機(jī)模式,因此,只有在數(shù)據(jù)包到達(dá)時(shí)間窗已知的情況下才使用Rx單一接收模式,而在其他情況下,應(yīng)使用Rx連續(xù)模式。
單一接收模式下數(shù)據(jù)包處理流程如下:
連續(xù)模式下,LoRa調(diào)制解調(diào)器會(huì)持續(xù)的掃描信道來搜索前導(dǎo)碼,如果檢測(cè)到后,LoRa都會(huì)在收到數(shù)據(jù)之前對(duì)該前導(dǎo)碼進(jìn)行檢測(cè)及跟蹤,然后繼續(xù)等待檢測(cè)下一前導(dǎo)碼。。。
如果前導(dǎo)碼長(zhǎng)度超過RegPreambleMsb和RegPreambleLsb設(shè)定的預(yù)計(jì)值(按照符號(hào)周期測(cè)量),則前導(dǎo)碼會(huì)被丟棄,并重新開始前導(dǎo)碼搜索。。但這種場(chǎng)景不會(huì)產(chǎn)生中斷標(biāo)志,與單一Rx模式相反,在連續(xù)Rx模式下,當(dāng)產(chǎn)生RxTimeout中斷時(shí),設(shè)備不會(huì)進(jìn)入待機(jī)模式,這時(shí),用戶必須在設(shè)備繼續(xù)等待有效前導(dǎo)碼的同時(shí)直接清除中斷信號(hào)。。
注意:被解調(diào)的字節(jié)是按照接受序列寫入數(shù)據(jù)緩存區(qū)的。換言之,新數(shù)據(jù)包的第一個(gè)字節(jié)會(huì)在上一個(gè)數(shù)據(jù)包的最后一個(gè)字節(jié)之后立即寫入。。在這種模式下,接受地址指針將不會(huì)重置。因此,MCU必須對(duì)地址指針進(jìn)行處理,以保證FIFO數(shù)據(jù)緩存不會(huì)溢出。。
在連續(xù)模式下,被接受數(shù)據(jù)包的處理流程如下:
(1)在睡眠或待機(jī)模式下,選擇RxCOUNT模式
(2)收到有效報(bào)頭Header后,緊接著會(huì)產(chǎn)生RxDone中斷。芯片一直處于RXCONT模式,等待下一個(gè)LoRa數(shù)據(jù)包。
(3)檢查PayloadCrcError標(biāo)志,以驗(yàn)證數(shù)據(jù)包的完整性
(4)如果數(shù)據(jù)包被正確接受,則可以讀取FIFO
(5)接收過程(2-4)可重復(fù)
在連續(xù)操作模式下,僅可查看最后一個(gè)接受數(shù)據(jù)包對(duì)應(yīng)的狀態(tài)信息。。換言之,應(yīng)在接受到下一個(gè)RxDone信號(hào)之前讀取對(duì)應(yīng)寄存器。
為從FIFO中讀取接受的Payload數(shù)據(jù),用戶必須保證狀態(tài)寄存器RegIrqFlags中的ValidHeader、PayloadCrcError、RxDone以及RxTimeout中斷信號(hào)未觸發(fā),以確保數(shù)據(jù)包接受成功終止。(既不應(yīng)設(shè)置任何標(biāo)志)
如果發(fā)送錯(cuò)誤,應(yīng)跳過一下步驟,同時(shí)丟棄數(shù)據(jù)包。為從FIFO中提取有效數(shù)據(jù),要根據(jù)一下寄存器:
RegRxNbBytes:表示到現(xiàn)在為止,已接受到的字節(jié)數(shù)
RegFifoAddrPtr:標(biāo)志LoRa接收數(shù)據(jù)寫入FIFO位置的動(dòng)態(tài)指針
將RegFifoAddrPtr設(shè)置為RegFifoRxCurrentAddr,表示將FIFO指針指向FIFO中最后接收的數(shù)據(jù)包存儲(chǔ)位置。可以通過RegRxNbBytes讀取RegFifo中的數(shù)據(jù),以提取數(shù)據(jù)包的Payload
或者,可以手動(dòng)將RegFifoAddrPtr設(shè)置為RegFifoRxByteAddr減去RegRxNbBytes的值,使該指針從當(dāng)前數(shù)據(jù)包開始,一直指向最后接受的數(shù)據(jù)包的存儲(chǔ)位置。。。
LoRa調(diào)制解調(diào)器會(huì)根據(jù)尋址自動(dòng)過濾接受到的數(shù)據(jù)包。。Sx127x支持基于Payload的前幾個(gè)字節(jié)對(duì)數(shù)據(jù)包進(jìn)行軟件過濾。。下面以4字節(jié)地址為例,該地址長(zhǎng)度可變
數(shù)據(jù)包過濾的目的是:確定數(shù)據(jù)包是否是發(fā)往該設(shè)備的Payload,如果不是,則芯片之后切換回睡眠模式。
軟件數(shù)據(jù)包過濾的步驟如下:
LoRa在單一/連續(xù)接收模式下,可以啟用接收機(jī)超時(shí)功能,以便接收機(jī)在預(yù)先定義好的時(shí)間內(nèi)監(jiān)聽是否收到有效數(shù)據(jù)包。。定時(shí)器會(huì)在接受模式開啟實(shí)啟動(dòng),并在RegIrqFlags中查詢RxTimeout中斷信號(hào)。。
在Rx單一模式下,RxTimeout中斷后芯片會(huì)待機(jī),并且之后如果再次進(jìn)入Rx前,必須清除該中斷信號(hào)。。而在Rx連續(xù)模式下,雖然產(chǎn)生中斷信號(hào),但芯片卻會(huì)一直處于Rx連續(xù)模式。因此需要在Rx連續(xù)模式下,MCU定期清除該中斷信號(hào)。。
設(shè)定的超時(shí)時(shí)間值為符號(hào)周期的整數(shù)倍,計(jì)算公式如下:
TimeOut = LoRaRxTimeout * Ts
下一篇: PLC、DCS、FCS三大控