1. Cơ Sở Lý Thuyết & Nguyên Lý Ngoại Vi Phần Cứng
Trong các hệ thống nhúng thời gian thực, tính ổn định và khả năng tái lập tín hiệu phụ thuộc trực tiếp vào cách cấu hình ngoại vi phần cứng. Thay vì sử dụng phương pháp bit-banging hoặc ngắt phần mềm vốn dễ bị jitter khi RTOS chuyển ngữ cảnh, chúng ta sử dụng ngoại vi RMT (Remote Control) hoặc TWAI (CAN-Bus) tích hợp sẵn trong silicon của ESP32.
#include "driver/rmt_rx.h"
#include "esp_log.h"
#define IR_RX_GPIO_NUM 5
#define IR_RESOLUTION_HZ 1000000 // 1MHz resolution (1 tick = 1us)
rmt_channel_handle_t rx_channel = NULL;
rmt_rx_channel_config_t rx_config = {
.clk_src = RMT_CLK_SRC_DEFAULT,
.resolution_hz = IR_RESOLUTION_HZ,
.mem_block_symbols = 64, // 64 words hardware ringbuffer
.gpio_num = IR_RX_GPIO_NUM,
};
ESP_ERROR_CHECK(rmt_new_rx_channel(&rx_config, &rx_channel));
ESP_LOGI("CHOTDIY_IR", "RMT Rx Channel initialized with 1us resolution.");2. Bảo Toàn Trạng Thái NVS & Phục Hồi Lỗi CRC-32
Trước khi lưu bất kỳ cấu hình hoặc lệnh học nào vào bộ nhớ NVS, firmware luôn đính kèm mã kiểm tra toàn vẹn CRC-32. Nếu xảy ra sụt áp hoặc mất điện đột ngột giữa chu kỳ ghi Flash, hệ thống tự động phát hiện bản ghi hỏng khi boot và khôi phục về trạng thái an toàn (Fail-safe State).