無線通信模組ESP32-C3芯片樂鑫技術方案LED調光驅動開發非易失性存儲,LED 調光驅動開發在了解 LED驅動的基礎知識后,便可以基于 ESP32-C3 芯片開發 LED調光驅動,該驅動的開發主要包括操作 LED燈開關、亮度、顏色、色溫控制等功能 API的開發。在日常生活中,通常都希望在下一次開燈時,燈的顏色、亮度、色溫和當前的狀態保持一致,這就需要保存當前的狀態,這個功能可依靠無線通信模組ESP32-C3芯片樂鑫技術方案ESP-IDF 中的非易失性存儲 (NVS) 來實現。在編寫驅動程序的代碼前,還需要了解 ESP32-C3 芯片的 PWM 外設和編程方式,以及非易失性存儲。
非易失性存儲
無線通信模組ESP32-C3芯片樂鑫技術方案ESP-IDF 中的非易失性存儲可以通過調用 esp_partition.h 中的 API 來使用主 Flash的部分存儲空間,用于在主 Flash 中存儲鍵值對格式的數據。由于 NVS 存儲是永久性的,因此即便設備重啟或斷電,存儲的數據也不會丟失。NVS 在 Flash 中有一個專門的分區,該分區用來存儲數據,NVS 支持多種數據類型的存儲,如整型、以 NULL 結尾的字符串和二進制數據等。NVS 經過了專門設計,不但可以防止設備斷電帶來的數據損壞,而且還可以將寫入的數據分布到整個 NVS 中,以處理 Flash 磨損的問題。
NVS 適合存儲一些較小的數據,而非字符串或二進制大對象 (BLOB) 等較大的數據。如果需要存儲較大的 BLOB 或者字符串,則考慮使用基于磨損均衡庫的 FAT 文件系統。在物聯網工程項目中,NVS 既可以存儲產品的唯一性的量產數據,也可以存儲任何與應用程序相關的用戶數據。
下面將介紹幾個 NVS 的關鍵概念:鍵值對、命名空間、安全性、篡改性及魯棒性。
1.鍵值對
NVS 的操作對象為鍵值對,即鍵:值 (key:value),其中的鍵是 ASCII 字符串,當前支持的大鍵長為 15 個字符,值可以為以下幾種類型:
整型:uint8_t,int8 tuint16 t,int16 t,uint32 t、int32 t,uint64 t和int64_t.
以0 結尾的字符串。
可變長度的二進制數據。
2.命名空間
為了減少不同組件之間鍵名的潛在沖突,NVS 為每個鍵值對分配給了一個命名空間。命名空間的命名規則遵循鍵名的命名規則,即多可占用 15 個字符。命名空間的名稱是通過調用nvs open()或nvs open from part()等函數指定的,函數調用后將返回一個不透明句柄,該句柄用于后續調用nvs get *()、nvs set *()nvs commit()等函數。這樣一個句柄就關聯了一個命名空間,某個命名空間中的鍵名就不會與其他命名空間中相同鍵名發生沖突了。請注意,不同 NVS 分區中具有相同名稱的命名空間將被視為不同的命名空間。
3.安全性、篡改性及魯棒性
NVS 在加密后,數據能夠以加密的形式存儲。如果未啟用NVS 加密,則任何具有 Flash 物理訪問權限的用戶都可以修改、擦除或添加鍵值對。NVS 加密后,如果不知道相應的 NVS 加密密鑰,則無法修改或添加鍵值對并將其標識為有效鍵值。但是,擦除操作沒有相應的防篡改功能。無線通信模組ESP32-C3芯片樂鑫技術方案當 Flash 處于不一致狀態時,NVS 會嘗試進行恢復。在任何時間關閉設備電源后重新上電,都不會導致數據丟失;但如果關閉設備電源時正在寫入新的鍵值對,則該鍵值對就可能丟失
LED PWM 控制器
ESP32-C3的PWM 控制器可以生成6 路獨立的數字波形,具有如下特性:
具有6個獨立的PWM生成器 (即6個通道)。
具有4個獨立定時器,可實現小數分頻。
占空比可自動漸變(即PWM 占空比可逐漸增加或減小,無須 SP32-C3 干預),漸變完成時產時產生中斷。
PWM 的輸出信號相位可調節。
在Lightsleep 低功耗模式下可輸出 PWM信號。
PWM信號的大精度14位。
4個定時器具有相同的功能和運行方式,下文將 4 個定時器統稱為 Timerx(x 的范圍是0~3)個。PWM 生成器的功能和運行方式也相同,下文將統稱為 PWMn (n 的范圍是0~5S)。4個定時器可獨立配置(可配置時鐘分頻器和計數器大值),每個定時器內部都有一個時時基計數器(即基于基準時鐘周期計數的計數器)。每個 PWM生成器都選擇4個定時器中的一個,以該定時器的計數值為基準生成 PWM 信號。要生成PWM 信號,無線通信模組ESP32-C3芯片樂鑫技術方案PWM 生成器 (PWMn)就需選擇一個定時器 (Timerx)。每個PWM 生成器均可單獨配置,在 4個定時器中選擇一個輸出 PWM 信號。PWM 生成器主要包括一個高低電平比較器和兩個選擇器。PWM 生成器將比較定時器的 14位計數值 (Timerx_cnt)與高低電平比較器的值 (Hpointn 和 Lpointn),如果定時器的計數值等于Hpointn 或 Lpointn,PWM 信號可以輸出高電平或低電平。
PWM 生成器可以漸變 PWM 信號的占空比,即由一種占空比逐漸變為另一種占空比。如果開啟了占空比漸變功能,Lpointn 的值會在計數器溢出固定次數后遞增或遞減。
LED PWM 編程
了解了無線通信模組ESP32-C3芯片樂鑫技術方案ESP32-C3的PWM 控制器后,還需要根據ESP-IDF 提供的LEDPWMAPI對PWM控制器進行配置,讓 PWM 控制器按照預期的行為進行控制。PWM 控制器的配置可分三步完成。
(1)定時器的配置。指定 PWM 信號的頻率、占空比分辨率。
(2) 通道配置。綁定定時器和輸出 PWM 信號的 GPIO。
(3)驅動 LED。輸出 PWM 信號來驅動 LED,可通過軟件控制或硬件漸變功能來改變 LED的亮度。