sx1268 中文_STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
單片機型號:STM32L053R8T6
本系列開發(fā)日志,將詳述SX1268驅(qū)動程序的整個設(shè)計過程,本篇介紹芯片喚醒驅(qū)動程序。
一、RxDutyCycle模式
在講述本篇內(nèi)容之前,我們先來看一下SX1268的一種模式RxDutyCycle,譯為中文為接收占空比模式。其可使用SetRxDutyCycle命令進入RxDutyCycle模式,我們來看一下該命令的詳細解釋。
該命令具有2個參數(shù),從字面的意思可以看出,1個是指接收周期時間,另1個是指睡眠周期時間。我們可分析出,該命令是在RX模式和SLEEP模式之間自動轉(zhuǎn)換的一種模式,其目的是為了節(jié)省芯片功耗。如果在使能外部中斷后,則單片機可以進入睡眠態(tài),SX1268大部分時間也是睡眠,而且可自動喚醒,功耗則大幅度節(jié)省。
When this command is sent in STDBY_RC mode, the context (device configuration) is saved and the chip enters in a loop
defined by the following steps:(當從STDBY_RC模式進入時,器件配置信息會被保存,芯片循環(huán)以下步驟)
The chip enters RX and listens for a packet for a period of time defined by rxPeriod(芯片在RX模式持續(xù)rxPeriod所定義的時間)
The chip is looking for a preamble in either LoRa? or FSK(芯片自動搜索LoRa或FSK報頭)
Upon preamble detection, the timeout is stopped and restarted with the value 2 * rxPeriod + sleepPeriod(搜索到前導碼,超時停止,并以2 * rxPeriod + sleepPeriod的時間重新開始)
If no packet is received during the RX window (defined by rxPeriod), the chip goes into SLEEP mode with context saved
for a period of time defined by sleepPeriod(經(jīng)過rxPeriod時間未收到包,芯片則將配置信息保存后進入SLEEP模式,其時間由sleepPeriod確定)
At the end of the SLEEP window, the chip automatically restarts the process of restoring context and enters the RX
mode, and so on. At any time, the host can stop the procedure(睡眠結(jié)束后,芯片恢復配置信息重新啟動,進入RX模式,如此周而復始。在任何時候,主機都可停止該循環(huán))
循環(huán)可以通過以下方式中止:
在RX模式接收到1包數(shù)據(jù),芯片置位RX_DONE標志位,中斷主機,并進入STDBY_RC模式
芯片在RX模式接收到SetStandby命令(睡眠模式時接收不到的,必須通過拉低NSS進行喚醒)
SLEEP模式時間:sleepPeriod * 15.625 μs
RX模式時間:rxPeriod * 15.625 μs
在RX模式時,接收到前導碼,則定時器將進入SLEEP模式的時間調(diào)整為2 * rxPeriod + sleepPeriod,應確保在這段時間內(nèi)接收到前導碼和報頭,公式如下:
二、芯片喚醒
接下來,我們再看模式轉(zhuǎn)換圖,有3種模式需要喚醒,上電或復位、睡眠模式、RxDutyCycle模式。這3種模式,都先進入STARTUP模式,再進入STDBY模式。上電或復位操作與睡眠模式操作的方式是相同的,RxDutyCycle也存在睡眠模式,所以我們均需考慮使用NSS拉低的方式將其喚醒。
三、喚醒函數(shù)
在看一次喚醒時序圖,NSS拉低后可將芯片喚醒。具體解釋:可以通過NSS的下降沿使得芯片從sleep模式喚醒。下降沿發(fā)生后,芯片內(nèi)部的穩(wěn)壓器都將打開。芯片開始初始化,然后具備接收第1個SPI命令的能力。這意味著NSS下降沿到SCK上升沿之間的延時,需考慮喚醒序列和芯片的初始化。在睡眠模式和初始化階段,BUSY引腳為高電平,以表明芯片不能夠接收1個新的命令。一旦芯片進入了STDBY_RC模式,BUSY引腳將變低,此時主機可以發(fā)送命令。整個過程同樣適用于上電啟動和硬復位。
程序如下:
void CSX1268::SX126xWakeup(void)
{
this->Select();
SX126xWaitOnBusy();
this->Deselect();
SX126xWaitOnBusy();
}
四、SX126xCheckDeviceReady函數(shù)
有了上述準備后,我們再來看一下SX126xCheckDeviceReady函數(shù),程序如下。開始判斷當前模式是否是SLEEP或RxDutyCycle模式,如果是先進行喚醒操作,然后將天線打開;如果不是,直接等待BUSY為低就緒即可。上電或復位,與從SLEEP模式喚醒的操作是相同的,我們只需在程序的起始,將模式設(shè)定為SLEEP模式即可。
void CSX1268::SX126xCheckDeviceReady(void)
{
if((SX126xGetOperatingMode() == MODE_SLEEP) || (SX126xGetOperatingMode() == MODE_RX_DC))
{
SX126xWakeup();
// Switch is turned off when device is in sleep mode and turned on is all other modes
SX126xAntSwOn();//打開天線開關(guān),此函數(shù)就是將相應的引腳設(shè)置為輸出,還需仔細探討
}
SX126xWaitOnBusy();
}
在這里又牽扯到天線打開與關(guān)閉函數(shù),我們將在下一篇日志中介紹。
總結(jié)
以上是生活随笔為你收集整理的sx1268 中文_STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PG修改表字段长度报错 cached p
- 下一篇: su灯光插件_su各种插件合集