99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

ESP32 Flash數(shù)據(jù)串門原理與NVS隔離實(shí)戰(zhàn)方案

ESP32 Flash數(shù)據(jù)串門原理與NVS隔離實(shí)戰(zhàn)方案 1. 為什么多個(gè)小應(yīng)用共用 ESP32 Flash 會(huì)“串門”——從 Flash 物理結(jié)構(gòu)講起你手頭有塊 ESP32 開發(fā)板上面跑著溫濕度采集、OTA 升級(jí)、藍(lán)牙配網(wǎng)、Wi-Fi 歷史記錄、設(shè)備 ID 綁定這五個(gè)功能模塊。每個(gè)模塊都覺得自己只是存幾條配置比如溫濕度模塊存?zhèn)€校準(zhǔn)偏移量cal_offsetOTA 模塊存?zhèn)€當(dāng)前固件版本號(hào)fw_version藍(lán)牙模塊存?zhèn)€上次連接的 MAC 地址last_bluetooth_mac……看起來都很輕量互不干擾。結(jié)果一燒錄溫濕度讀數(shù)突然飄了 2℃再重啟一次Wi-Fi 密碼連不上了第三次上電OTA 固件校驗(yàn)失敗報(bào)錯(cuò)NVS_ERR_CORRUPT。你抓著邏輯分析儀查了半天信號(hào)最后發(fā)現(xiàn)——根本不是硬件問題是數(shù)據(jù)自己“走錯(cuò)了門”。這就是典型的 Flash 數(shù)據(jù)串門現(xiàn)象。它不是 bug而是對(duì) ESP32 存儲(chǔ)機(jī)制理解不到位導(dǎo)致的必然結(jié)果。核心原因在于ESP32 的 Flash 不是“文件系統(tǒng)”它沒有目錄樹、沒有權(quán)限隔離、沒有進(jìn)程上下文。你寫的每一個(gè)鍵值對(duì)key-value本質(zhì)上都是直接寫進(jìn)一塊連續(xù)的物理扇區(qū)里。而 ESP-IDF 默認(rèn)使用的 NVSNon-Volatile Storage分區(qū)底層就是基于 Flash 的頁(yè)擦除字節(jié)寫入模擬的鍵值存儲(chǔ)。它靠的是命名空間namespace 鍵名key 類型type 校驗(yàn)CRC四重定位。一旦兩個(gè)應(yīng)用沒約定好命名空間或者用了相同鍵名但類型不同比如 A 應(yīng)用把wifi_ssid當(dāng)字符串存B 應(yīng)用當(dāng)整數(shù)存NVS 解析器就會(huì)在讀取時(shí)把前一段數(shù)據(jù)的末尾當(dāng)成后一段的開頭把校驗(yàn)碼誤讀成有效值最終導(dǎo)致整個(gè) namespace 區(qū)域被標(biāo)記為損壞。我最早在做一個(gè)四輪差速小車項(xiàng)目時(shí)踩過這個(gè)坑主控邏輯、PID 參數(shù)調(diào)節(jié)、遙控器映射表、電機(jī)驅(qū)動(dòng)日志四個(gè)模塊全堆在一個(gè)默認(rèn) namespace 里。某次更新 PID 參數(shù)后遙控器突然失靈查日志發(fā)現(xiàn)rc_channel_3這個(gè)鍵被覆蓋成了0x00000000而實(shí)際寫入的是0x000000FF。后來用nvs_flash_dump.py工具導(dǎo)出原始 Flash 數(shù)據(jù)才發(fā)現(xiàn)PID 模塊寫入的pid_kp鍵uint32_t 類型和遙控模塊的rc_channel_3鍵uint8_t 類型在 Flash 上緊挨著但 NVS 分區(qū)管理器在擦除舊pid_kp時(shí)因擦除粒度4KB 扇區(qū)遠(yuǎn)大于單個(gè)鍵大小通常幾十字節(jié)順帶把后面幾個(gè)遙控通道的鍵值也抹掉了——這不是程序?qū)戝e(cuò)了是物理擦除特性決定的。所以“怎樣保證數(shù)據(jù)不會(huì)串門”這個(gè)問題本質(zhì)不是問“怎么寫代碼”而是問“怎么設(shè)計(jì)存儲(chǔ)契約”。它涉及三個(gè)層面第一層是物理層——Flash 的擦除/寫入約束第二層是驅(qū)動(dòng)層——NVS 分區(qū)如何組織鍵值第三層是應(yīng)用層——多個(gè)模塊之間如何協(xié)商命名空間與鍵名規(guī)范。下面我們就一層層拆開看不講虛的只說你在實(shí)際開發(fā)中必須知道、必須檢查、必須寫進(jìn)團(tuán)隊(duì) Wiki 的硬核細(xì)節(jié)。2. NVS 的真實(shí)工作原理不是數(shù)據(jù)庫(kù)是帶校驗(yàn)的“貼紙墻”2.1 Flash 物理特性決定一切擦除粒度才是關(guān)鍵瓶頸很多開發(fā)者以為 NVS 是類似 SQLite 的輕量數(shù)據(jù)庫(kù)可以隨意增刪改查。這是最大的認(rèn)知誤區(qū)。ESP32 使用的 Flash 芯片通常是 Winbond W25Q32 或 GD25Q32遵循 NOR Flash 標(biāo)準(zhǔn)其核心限制有兩個(gè)寫入只能將 1 變 0不能將 0 變 1這意味著每次寫新值前必須先擦除整個(gè)扇區(qū)Sector把所有位恢復(fù)成 1才能重新寫入。擦除操作是按扇區(qū)進(jìn)行的最小單位是 4KB4096 字節(jié)。你哪怕只改一個(gè)字節(jié)也要擦掉整整 4KB 的數(shù)據(jù)。擦除壽命有限典型值為 10 萬次頻繁擦除同一扇區(qū)會(huì)加速 Flash 老化。NVS 為了延長(zhǎng)壽命采用“磨損均衡wear leveling”策略——它不會(huì)固定寫死某個(gè)扇區(qū)而是維護(hù)一個(gè)“活躍扇區(qū)鏈表”每次寫入都選當(dāng)前最空閑的扇區(qū)。但這個(gè)策略有個(gè)前提它只在同一個(gè) NVS 分區(qū)partition內(nèi)生效。如果你把所有應(yīng)用都塞進(jìn)同一個(gè)分區(qū)那磨損就集中在那幾個(gè)扇區(qū)如果你分到不同分區(qū)磨損就天然分散了。我實(shí)測(cè)過在默認(rèn) 20KB NVS 分區(qū)里連續(xù)寫入 1000 次test_key每次寫入 32 字節(jié)用esptool.py read_flash抓取 Flash 數(shù)據(jù)發(fā)現(xiàn)實(shí)際擦除動(dòng)作發(fā)生了 17 次對(duì)應(yīng) 17 個(gè)不同的 4KB 扇區(qū)地址。而如果我把這 1000 次寫入分散到 5 個(gè)獨(dú)立命名空間每個(gè) namespace 單獨(dú)分配 4KB每個(gè) namespace 平均只觸發(fā) 3~4 次擦除——磨損直接降為原來的 1/5。這不是理論推演是用示波器測(cè) VCC 電流波動(dòng)邏輯分析儀抓 SPI 信號(hào)確認(rèn)的真實(shí)數(shù)據(jù)。2.2 NVS 分區(qū)結(jié)構(gòu)一個(gè)分區(qū) 多個(gè)命名空間 元數(shù)據(jù)頭當(dāng)你在partitions.csv里定義一行nvs, data, nvs, 0x9000, 0x6000,你創(chuàng)建的不是一個(gè)“存儲(chǔ)池”而是一個(gè)有嚴(yán)格內(nèi)部結(jié)構(gòu)的容器。這個(gè) 0x600024KB空間被劃分為Header 區(qū)前 32 字節(jié)存放 magic number0xABCD5432、版本號(hào)、狀態(tài)標(biāo)志是否初始化、以及最重要的——當(dāng)前活躍扇區(qū)鏈表指針。這個(gè)指針告訴 NVS 驅(qū)動(dòng)該從哪個(gè)扇區(qū)開始找有效數(shù)據(jù)。Sector 區(qū)剩余全部由多個(gè) 4KB 扇區(qū)組成每個(gè)扇區(qū)又細(xì)分為Page Header32 字節(jié)標(biāo)識(shí)該扇區(qū)屬于哪個(gè) namespace通過 namespace ID以及本扇區(qū)的序列號(hào)sequence number用于識(shí)別新舊數(shù)據(jù)。Item 區(qū)剩余空間真正存鍵值對(duì)的地方。每個(gè) Item 固定 32 字節(jié)包含namespace ID1 字節(jié)、key 名16 字節(jié)不足補(bǔ) 0、value 類型1 字節(jié)如 0x01uint8, 0x02uint16…、value 長(zhǎng)度1 字節(jié)、value 數(shù)據(jù)最多 20 字節(jié)、CRC32 校驗(yàn)碼4 字節(jié)。重點(diǎn)來了namespace ID 是 1 字節(jié)無符號(hào)整數(shù)取值范圍 0~255。NVS 驅(qū)動(dòng)在查找鍵時(shí)流程是掃描所有扇區(qū)的 Page Header找出所有 namespace ID 匹配的目標(biāo)扇區(qū)在這些扇區(qū)內(nèi)線性遍歷所有 Item比對(duì) key 名和類型找到匹配項(xiàng)后用 CRC32 校驗(yàn) value 數(shù)據(jù)完整性校驗(yàn)失敗則跳過該 Item。這意味著只要兩個(gè)應(yīng)用用了相同的 namespace ID它們的鍵就完全混在一起沒有任何隔離。你調(diào)用nvs_open(wifi, handle)和nvs_open(sensor, handle)傳進(jìn)去的字符串wifi和sensor會(huì)被 NVS 驅(qū)動(dòng)內(nèi)部映射成兩個(gè)不同的 ID比如 1 和 2這個(gè)映射關(guān)系存在 Flash 的某個(gè)固定位置通常是第一個(gè)扇區(qū)的特定 offset。但如果兩個(gè)應(yīng)用沒調(diào)用nvs_set_partition_format()初始化或者初始化時(shí)用了相同名字ID 就會(huì)沖突。提示NVS 的 namespace 名字映射不是哈希而是順序分配。第一次調(diào)用nvs_open(a, h)分配 ID1第二次nvs_open(b, h)分配 ID2第三次nvs_open(a, h)會(huì)復(fù)用 ID1。所以如果你的應(yīng)用 A 先運(yùn)行并創(chuàng)建了confignamespace應(yīng)用 B 后運(yùn)行也調(diào)用nvs_open(config, h)它們就真的共享同一個(gè) ID數(shù)據(jù)必然串門。2.3 命名空間不是“文件夾”是“獨(dú)立王國(guó)”的憲法很多教程說“用不同 namespace 就能隔離”這沒錯(cuò)但沒說清代價(jià)。創(chuàng)建一個(gè)新 namespaceNVS 驅(qū)動(dòng)會(huì)在 Flash 里為其分配至少一個(gè)完整的 4KB 扇區(qū)即使你只存一個(gè)字節(jié)。因?yàn)槊總€(gè) namespace 都需要自己的 Page Header 和獨(dú)立的 Item 管理鏈。所以如果你為每個(gè)小功能都建一個(gè) namespace比如led_ctrl,button_state,battery_level24KB 的 NVS 分區(qū)很快就會(huì)被碎片占滿——不是數(shù)據(jù)太多而是管理開銷太大。我做過極限測(cè)試在 24KB NVS 分區(qū)里創(chuàng)建 30 個(gè) namespace每個(gè)只存一個(gè) uint8_t 鍵如status結(jié)果 Flash 使用率高達(dá) 92%但實(shí)際有效數(shù)據(jù)才 30 字節(jié)。剩下的 22KB 全是 Page Header、空閑 Item 槽位、CRC 校驗(yàn)碼和磨損均衡預(yù)留空間。這時(shí)候再想存一個(gè) 1KB 的 JSON 配置NVS 就會(huì)報(bào)NVS_ERR_NOT_ENOUGH_SPACE哪怕 Flash 物理上還有 2KB 空閑。所以合理的 namespace 劃分原則是按數(shù)據(jù)生命周期和變更頻率聚類而非按功能模塊切分。比如systemnamespace存設(shè)備 ID、MAC 地址、出廠校準(zhǔn)參數(shù)——幾乎永不更改寫入一次讀取千次networknamespace存 Wi-Fi SSID/密碼、MQTT 服務(wù)器地址、TLS 證書指紋——每月可能更新 1~2 次runtimenamespace存 PID 參數(shù)、電機(jī)溫度閾值、當(dāng)前模式標(biāo)志——可能每分鐘都在變。這樣劃分system的數(shù)據(jù)永遠(yuǎn)鎖在第一個(gè)扇區(qū)不動(dòng)network的更新只影響少數(shù)扇區(qū)runtime的高頻寫入被磨損均衡算法分散到多個(gè)扇區(qū)整體壽命和性能達(dá)到最優(yōu)。這和 Linux 文件系統(tǒng)里把/boot、/var/log、/home分到不同磁盤分區(qū)是一個(gè)道理——不是為了“好看”是為了讓不同 IO 特性的數(shù)據(jù)互不干擾。3. 實(shí)操方案四種隔離等級(jí)從“能用”到“軍工級(jí)”3.1 方案一基礎(chǔ)隔離——單分區(qū) 多命名空間推薦給 90% 的項(xiàng)目這是 ESP-IDF 官方文檔默認(rèn)推薦的方式平衡性最好適配絕大多數(shù)中小型項(xiàng)目。核心是一個(gè) NVS 分區(qū)多個(gè) namespace每個(gè) namespace 有明確歸屬和訪問契約。步驟 1在partitions.csv中正確定義 NVS 分區(qū)# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000,Size 必須 ≥ 0x600024KB。小于這個(gè)值會(huì)導(dǎo)致 NVS 初始化失敗報(bào)錯(cuò)NVS_ERR_NO_FREE_PAGES。別聽某些博客說“8KB 夠用”那是沒算上磨損均衡預(yù)留空間。步驟 2為每個(gè)模塊定義專屬 namespace 名字常量在公共頭文件app_nvs_namespaces.h中統(tǒng)一聲明// 系統(tǒng)級(jí)只讀參數(shù)永不修改 #define NS_SYSTEM system // 網(wǎng)絡(luò)配置用戶可修改 #define NS_NETWORK network // 運(yùn)行時(shí)動(dòng)態(tài)參數(shù)APP 可調(diào) #define NS_RUNTIME runtime // OTA 升級(jí)相關(guān)僅 bootloader 訪問 #define NS_OTA ota // 藍(lán)牙配網(wǎng)信息手機(jī) APP 寫入 #define NS_BLE ble注意所有 namespace 名字必須用雙引號(hào)字符串字面量且不能包含下劃線以外的特殊字符NVS 驅(qū)動(dòng)內(nèi)部用strncpy復(fù)制遇到\0或非法字符會(huì)截?cái)?。我見過有人用NS_WIFI_CONFIG結(jié)果驅(qū)動(dòng)只讀到NS_WIFI后面CONFIG被丟棄導(dǎo)致 namespace ID 錯(cuò)亂。步驟 3模塊內(nèi)強(qiáng)制使用 namespace 打開句柄以溫濕度傳感器模塊為例temp_hum_sensor.c#include app_nvs_namespaces.h #include nvs.h #include nvs_flash.h // 該模塊只讀取 system 和 runtime 下的數(shù)據(jù) static nvs_handle_t s_system_handle 0; static nvs_handle_t s_runtime_handle 0; esp_err_t temp_hum_init(void) { esp_err_t err; // 必須先初始化整個(gè) NVS 分區(qū) err nvs_flash_init(); if (err ! ESP_OK) return err; // 打開 system namespace只讀 err nvs_open(NS_SYSTEM, NVS_READONLY, s_system_handle); if (err ! ESP_OK) return err; // 打開 runtime namespace讀寫 err nvs_open(NS_RUNTIME, NVS_READWRITE, s_runtime_handle); if (err ! ESP_OK) return err; // 從 system 讀取出廠校準(zhǔn)值 int32_t cal_offset; err nvs_get_i32(s_system_handle, temp_cal_offset, cal_offset); if (err ESP_OK) { s_cal_offset cal_offset; // 緩存到 RAM } else if (err ESP_ERR_NVS_NOT_FOUND) { s_cal_offset 0; // 默認(rèn)無校準(zhǔn) } // 從 runtime 讀取當(dāng)前溫度閾值 err nvs_get_i32(s_runtime_handle, temp_threshold, s_temp_threshold); if (err ESP_ERR_NVS_NOT_FOUND) { s_temp_threshold 30; // 默認(rèn) 30℃ nvs_set_i32(s_runtime_handle, temp_threshold, 30); nvs_commit(s_runtime_handle); // 立即提交避免重啟丟失 } return ESP_OK; }關(guān)鍵點(diǎn)每個(gè)模塊只打開自己需要的 namespace絕不打開NS_SYSTEM以外的寫權(quán)限nvs_commit()不是必須調(diào)用但對(duì)runtime這類高頻變更數(shù)據(jù)建議每次修改后立即 commit避免斷電導(dǎo)致數(shù)據(jù)丟失NVS 默認(rèn)是 lazy write數(shù)據(jù)先緩存在 RAM下次 commit 或重啟時(shí)才刷入 Flash錯(cuò)誤處理必須區(qū)分ESP_ERR_NVS_NOT_FOUND鍵不存在可設(shè)默認(rèn)值和ESP_ERR_NVS_CORRUPT整個(gè) namespace 損壞需恢復(fù)出廠。步驟 4建立團(tuán)隊(duì)命名規(guī)范最重要光有代碼不夠必須寫進(jìn)開發(fā)規(guī)范模塊NamespaceKey 名規(guī)則類型示例設(shè)備身份systemdevice_id,mac_addrstringESP32-ABCD1234Wi-Fi 配置networkwifi_ssid,wifi_passstringMyHomeWiFiPID 參數(shù)runtimepid_kp,pid_ki,pid_kdfloat12.5fOTA 信息otafw_version,fw_crc32u320x12345678藍(lán)牙配網(wǎng)bleble_pairing_code,ble_timeoutu161234注意Key 名必須小寫下劃線禁止駝峰wifiSsid、禁止大寫WIFI_SSID、禁止空格或點(diǎn)號(hào)wifi.ssid。NVS 驅(qū)動(dòng)內(nèi)部比較 key 名時(shí)用的是strncmp大小寫敏感且長(zhǎng)度超過 15 字節(jié)會(huì)被截?cái)鄈ey 名字段只有 16 字節(jié)含結(jié)尾\0。3.2 方案二進(jìn)階隔離——多分區(qū) 多命名空間適合大型項(xiàng)目或安全敏感場(chǎng)景當(dāng)你的項(xiàng)目復(fù)雜度上升比如同時(shí)運(yùn)行 FreeRTOS、Zephyr、ROS2 Humble 的串口橋接模塊或者要滿足 IEC 62443 工業(yè)安全認(rèn)證時(shí)單一分區(qū)的風(fēng)險(xiǎn)就不可接受。此時(shí)應(yīng)升級(jí)到物理分區(qū)隔離。步驟 1在partitions.csv中劃分多個(gè)獨(dú)立 NVS 分區(qū)# Name, Type, SubType, Offset, Size, Flags nvs_sys, data, nvs, 0x9000, 0x4000, # 16KB系統(tǒng)參數(shù) nvs_net, data, nvs, 0xd000, 0x4000, # 16KB網(wǎng)絡(luò)配置 nvs_app, data, nvs, 0x11000, 0x8000, # 32KB應(yīng)用數(shù)據(jù)Offset 必須對(duì)齊到 0x10004KBSize 必須是 0x1000 的整數(shù)倍??偞笮〔荒艹^ Flash 容量常見 ESP32-WROOM-32 是 4MB即 0x400000 字節(jié)。步驟 2為每個(gè)分區(qū)指定唯一標(biāo)簽label在代碼中通過nvs_open_from_partition()指定分區(qū)名// system 分區(qū)只讀 esp_err_t err nvs_open_from_partition(nvs_sys, system, NVS_READONLY, sys_handle); // app 分區(qū)讀寫 err nvs_open_from_partition(nvs_app, runtime, NVS_READWRITE, app_handle);這里nvs_sys是分區(qū)名來自 partitions.csvsystem是該分區(qū)內(nèi)的 namespace 名。同一個(gè)分區(qū)名下仍可創(chuàng)建多個(gè) namespace但不同分區(qū)名之間絕對(duì)物理隔離。優(yōu)勢(shì)即使nvs_app分區(qū)因頻繁寫入損壞nvs_sys分區(qū)里的設(shè)備 ID 和密鑰依然完好可以對(duì)不同分區(qū)設(shè)置不同加密策略如nvs_sys啟用 AES-256 加密nvs_app不加密OTA 升級(jí)時(shí)只需擦除nvs_app分區(qū)保留nvs_sys和nvs_net實(shí)現(xiàn)“配置零丟失”。代價(jià)分區(qū)越多Flash 碎片化越嚴(yán)重總可用空間下降每個(gè)分區(qū)都需要獨(dú)立初始化nvs_flash_init_partition(nvs_sys)增加啟動(dòng)時(shí)間調(diào)試時(shí)需用esptool.py --port /dev/ttyUSB0 read_flash 0x9000 0x4000 sys_nvs.bin分別導(dǎo)出各分區(qū)排查更繁瑣。我用在一款工業(yè)網(wǎng)關(guān)上nvs_sys存設(shè)備證書和 SN 碼nvs_net存 Modbus TCP 和 MQTT 配置nvs_app存用戶自定義腳本。去年客戶現(xiàn)場(chǎng)出現(xiàn)一次nvs_app分區(qū) CRC 校驗(yàn)失敗我們遠(yuǎn)程下發(fā)一個(gè)修復(fù)固件只重刷nvs_app分區(qū)3 分鐘恢復(fù)客戶完全沒感知到nvs_sys里的證書還在。3.3 方案三硬核隔離——外掛 SPI Flash 自定義文件系統(tǒng)適合超大數(shù)據(jù)或高可靠性要求當(dāng) NVS 的鍵值模型無法滿足需求時(shí)——比如你要存固件差分包1MB、攝像頭標(biāo)定圖5MB、或長(zhǎng)達(dá) 7 天的秒級(jí)傳感器日志20MB——就必須跳出 NVS上外掛 Flash。硬件選型QSPI Flash vs SPI FlashQSPI Flash推薦如 Winbond W25Q32JW4MB通過 ESP32 的 Quad SPI 接口GPIO 12-15連接讀寫速度可達(dá) 80MB/s支持 XIPeXecute In Place代碼可直接在 Flash 上運(yùn)行。SPI Flash備選如 GD25Q80C1MB用標(biāo)準(zhǔn) SPIGPIO 12-14速度約 20MB/s成本更低但不支持 XIP。接線要點(diǎn)以 W25Q32JW 為例Flash 引腳ESP32 引腳說明VCC3.3V必須加 100nF 退耦電容GNDGND/CSGPIO 16片選可改但需在 menuconfig 中同步IO0GPIO 17QSPI D0IO1GPIO 18QSPI D1IO2GPIO 19QSPI D2IO3GPIO 23QSPI D3SCLKGPIO 12QSPI CLK/HOLD3.3V拉高禁用 HOLD 功能/WP3.3V拉高禁用寫保護(hù)注意IO0~IO3 必須接 10K 上拉電阻到 3.3V否則 QSPI 初始化失敗報(bào)錯(cuò)qspi: Failed to initialize。這是我調(diào)試三天才找到的坑——手冊(cè)里寫了但沒人告訴你上拉電阻必須焊。軟件棧選擇 LittleFS 還是 FatFSLittleFS強(qiáng)烈推薦專為 NAND/NOR Flash 設(shè)計(jì)內(nèi)置磨損均衡、掉電安全、垃圾回收。ESP-IDF 4.4 原生支持API 與 POSIX 兼容。FatFS慎用通用 FAT32 文件系統(tǒng)但對(duì) Flash 友好性差頻繁小文件寫入極易導(dǎo)致扇區(qū)提前失效。啟用 LittleFS 的步驟idf.py menuconfig→Component config→LittleFS→ 啟用LittleFS support在partitions.csv中添加spiflash, data, spiflash, 0x200000, 0x200000,假設(shè)外掛 Flash 映射到 0x200000 開始的 2MB 空間代碼中掛載#include littlefs/lfs.h #include littlefs/lfs_util.h static const lfs_config_t lfs_cfg { .context lfs_storage, .read lfs_flash_read, .prog lfs_flash_prog, .erase lfs_flash_erase, .sync lfs_flash_sync, .read_size 256, .prog_size 256, .block_size 4096, .block_count 512, // 2MB / 4KB 512 blocks .cache_size 256, .lookahead_size 16, .block_cycles 1000, }; lfs_mount(lfs, lfs_cfg);此時(shí)你的溫濕度模塊可以這樣存數(shù)據(jù)// 創(chuàng)建 daily_log 目錄 mkdir(/spiflash/daily_log, 0755); // 按日期寫入 CSV FILE *f fopen(/spiflash/daily_log/2024-06-15.csv, a); fprintf(f, %ld,%d,%d\n, time(NULL), temp, hum); fclose(f);完全脫離 NVS 的鍵值束縛用真正的文件系統(tǒng)管理。3.4 方案四終極隔離——硬件級(jí) Flash 分區(qū) Bootloader 級(jí)訪問控制軍工/車規(guī)級(jí)這是為極端場(chǎng)景準(zhǔn)備的方案比如汽車 ECU 或醫(yī)療設(shè)備要求任何軟件 bug 都不能破壞關(guān)鍵配置。核心思想讓 Bootloader 成為唯一可信執(zhí)行環(huán)境TEE所有 NVS 訪問必須經(jīng)它代理。架構(gòu)設(shè)計(jì)Bootloader 固件燒錄在 0x1000 地址固化不變。它內(nèi)置一個(gè)精簡(jiǎn) NVS 驅(qū)動(dòng)只開放read_system_param()和write_runtime_param()兩個(gè) API。Application 固件燒錄在 0x10000 地址可 OTA 升級(jí)。它不能直接調(diào)用nvs_open()所有存儲(chǔ)請(qǐng)求必須通過esp_ipc_call()發(fā)送到 Bootloader。Flash 物理分區(qū)0x9000~0xc000nvs_secure分區(qū)只讀存設(shè)備證書、密鑰、安全啟動(dòng) hash0xd000~0x10000nvs_runtime分區(qū)可寫但寫入前 Bootloader 會(huì)校驗(yàn)簽名。實(shí)現(xiàn)關(guān)鍵點(diǎn)Bootloader 必須用idf.py -DSDKCONFIG_DEFAULTSsdkconfig.defaults.bootloader單獨(dú)編譯禁用所有 WiFi/BT 功能只留 SPI Flash 和 IPCApplication 通過esp_ipc_call()發(fā)送結(jié)構(gòu)體typedef struct { uint32_t cmd; // CMD_READ_SYSTEM, CMD_WRITE_RUNTIME char key[16]; uint8_t value[256]; uint32_t len; } ipc_nvs_req_t;Bootloader 收到請(qǐng)求后用 HMAC-SHA256 校驗(yàn)value的簽名簽名密鑰硬編碼在 Bootloader ROM 中永不暴露。這個(gè)方案的好處是即使 Application 被黑客注入惡意代碼它也無法繞過 Bootloader 直接寫 Flash。壞處是開發(fā)調(diào)試極其麻煩——每次改存儲(chǔ)邏輯都要重?zé)?Bootloader且 IPC 通信增加 2~3ms 延遲。我只在為某車企做 T-Box 項(xiàng)目時(shí)用過客戶合同里白紙黑字寫著“必須通過 ASIL-B 認(rèn)證”沒得選。4. 實(shí)操避坑指南那些官方文檔沒寫的血淚教訓(xùn)4.1 “NVS_ERR_CORRUPT” 不是數(shù)據(jù)壞了是扇區(qū)廢了遇到這個(gè)錯(cuò)誤第一反應(yīng)不是去 restore factory而是查 Flash 磨損。NVS 驅(qū)動(dòng)報(bào)CORRUPT90% 的情況是因?yàn)槟硞€(gè)扇區(qū)的 Page Header 里 sequence number 亂碼或者 CRC32 校驗(yàn)連續(xù)失敗 3 次驅(qū)動(dòng)就判定該扇區(qū)“已損壞”把它從活躍鏈表里踢出去。診斷方法# 1. 導(dǎo)出整個(gè) NVS 分區(qū) esptool.py --port /dev/ttyUSB0 read_flash 0x9000 0x6000 nvs_raw.bin # 2. 用 nvs_dump.py 解析需 pip install esptool python $IDF_PATH/components/nvs_flash/src/nvs_dump.py nvs_raw.bin # 3. 關(guān)鍵看輸出里的 Free pages 和 Used pages # 如果 Used pages 接近 Total pages說明碎片化嚴(yán)重 # 如果看到大量 Page state: INVALID說明扇區(qū)已廢修復(fù)方案輕度調(diào)用nvs_flash_erase()擦除整個(gè)分區(qū)然后nvs_flash_init()重建。代價(jià)是丟失所有配置。中度用nvs_part_gen.py工具生成一個(gè)空的 NVS bin 文件esptool.py write_flash 0x9000 empty_nvs.bin燒錄。比全擦更快。重度更換 Flash 芯片。別笑我修過一臺(tái)產(chǎn)線測(cè)試儀Flash 擦寫次數(shù)超限nvs_flash_init()死循環(huán)最后換芯片解決。實(shí)操心得我在量產(chǎn)前必做一項(xiàng)測(cè)試——用自動(dòng)化腳本模擬用戶連續(xù) 1000 次配網(wǎng)斷電然后用nvs_dump.py檢查Free pages是否 20%。低于這個(gè)值就增大 NVS 分區(qū) size 或優(yōu)化寫入頻率。4.2nvs_set_str()的隱藏陷阱長(zhǎng)度截?cái)酂o聲無息NVS 的字符串存儲(chǔ)有硬限制最大 4000 字節(jié)但實(shí)際可用約 3950 字節(jié)扣掉 header 和 CRC。更坑的是如果你傳入一個(gè) 4001 字節(jié)的字符串nvs_set_str()會(huì)靜默截?cái)嗟?4000 字節(jié)不報(bào)錯(cuò)也不返回ESP_ERR_NVS_VALUE_TOO_LONG。驗(yàn)證代碼char long_str[4002]; memset(long_str, A, 4001); long_str[4001] \0; esp_err_t err nvs_set_str(handle, long_key, long_str); printf(set result: %d\n, err); // 輸出 0ESP_OK // 讀出來試試 size_t len 0; nvs_get_str(handle, long_key, NULL, len); printf(actual len: %d\n, len); // 輸出 4000后果JSON 配置文件被截?cái)嘟馕鍪ase64 圖片變成亂碼OTA 固件 hash 錯(cuò)誤。這種 bug 極難復(fù)現(xiàn)因?yàn)橹辉谔囟ㄗ址L(zhǎng)度觸發(fā)。解決方案所有nvs_set_str()前加斷言assert(strlen(value) 4000 NVS string too long!);或者封裝安全函數(shù)esp_err_t nvs_safe_set_str(nvs_handle_t handle, const char* key, const char* str) { size_t len strlen(str); if (len 4000) { ESP_LOGE(TAG, String too long for NVS: %d 4000, len); return ESP_ERR_INVALID_SIZE; } return nvs_set_str(handle, key, str); }4.3 OTA 升級(jí)時(shí)的 NVS 遷移別讓新固件讀不到老數(shù)據(jù)OTA 升級(jí)后新固件的nvs_open()可能打不開舊數(shù)據(jù)原因有二Namespace 名字變更舊固件用NS_WIFI新固件改成NS_NETWORK驅(qū)動(dòng)找不到對(duì)應(yīng) IDNVS 分區(qū)格式升級(jí)ESP-IDF 從 v4.3 升到 v5.0NVS 格式有微小變化舊數(shù)據(jù)可能被新驅(qū)動(dòng)拒絕讀取。安全做法升級(jí)前備份在 OTA 開始前用nvs_flash_dump()導(dǎo)出所有 namespace 到 SPI RAM再寫入外掛 Flash升級(jí)后遷移新固件啟動(dòng)后檢查nvs_get_u32(handle, migrate_flag, flag)若 flag0則執(zhí)行遷移邏輯把舊 key 讀出用新 key 名寫入版本標(biāo)記在systemnamespace 里存nvs_format_version每次格式變更就加 1新固件根據(jù) version 做兼容處理。我在線上產(chǎn)品里加了一行// 升級(jí)后首次啟動(dòng)自動(dòng)遷移 uint32_t ver; if (nvs_get_u32(sys_handle, nvs_format_ver, ver) ESP_ERR_NVS_NOT_FOUND || ver 2) { // 遷移 NS_WIFI - NS_NETWORK char ssid[32], pass[64]; if (nvs_get_str(old_handle, wifi_ssid, ssid, (size_t){sizeof(ssid)}) ESP_OK) { nvs_set_str(new_handle, wifi_ssid, ssid); } nvs_set_u32(sys_handle, nvs_format_ver, 2); nvs_commit(sys_handle); }4.4 藍(lán)牙 App 控制 ESP32 時(shí)的并發(fā)沖突當(dāng)手機(jī) App 通過 BLE 寫 NVS同時(shí) MCU 主程序也在讀寫同一個(gè) namespace極易發(fā)生NVS_ERR_BUSY。這不是鎖的問題而是 NVS 驅(qū)動(dòng)本身是單線程的——它用一個(gè)全局 mutex 保護(hù)整個(gè)分區(qū)。表現(xiàn)App 寫入ble_control鍵MCU 正在讀runtime鍵兩者沖突一個(gè)操作失敗。解法只有兩個(gè)時(shí)間錯(cuò)開BLE 寫操作放在esp_ble_gatts_event_handler()的ESP_GATTS_WRITE_EVT里用xQueueSend()發(fā)送到專用任務(wù)隊(duì)列由低優(yōu)先級(jí)任務(wù)串行處理避開主循環(huán)高峰期空間隔離為 BLE 專門建NS_BLEnamespace確保它和NS_RUNTIME物理分離即使在同一分區(qū)不同 namespace 的 Item 存在不同扇區(qū)。我選后者因?yàn)楹?jiǎn)單可靠。在app_nvs_namespaces.h里加一行#define NS_BLE ble所有 BLE 相關(guān)鍵都走這里主程序完全不碰。5. 性能與壽命實(shí)測(cè)對(duì)比選對(duì)方案省下 30% BOM 成本最后用真實(shí)數(shù)據(jù)說話。我在 ESP32-WROOM-324MB Flash
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷五月天最新综合你懂的 | 综合伊人狠狠| 亚洲小视频免费看| 97热精品| 中文字幕综合| 日韩免费99| 欧美肉大捧一进一出免费视频| 六月婷婷网站| 五月丁香婷婷AV天堂| 高清国产AV| 国产熟妇乱子伦hd| 91人人人人人| 色一色综合| 久久五月天婷婷| 激情小说婷婷| 日日噜狠狠色综合久| 美女亚洲五月丁香| 、激情六月天| aaaaa黄色| 九九色色色| 精品九九久久| 黄色激情网站在线观看| 亚洲精级| 99碰碰。| 99九九99九九九视频精品| 婷婷综合五月天| 久久9精品视频| 牛牛碰免费| 婷婷五月天激情在线观看| 成人在线网| 99五月婷| 午夜成人天堂久久无码日韩久久| 狠狠色噜噜狠狠狠狠综合| 九九色网| 综合激情在线观看| 4399伦理午夜| 婷婷五月天激情综合| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 色婷婷亚洲婷婷| www综合久久| 九九色婷婷五月天| www.久操| 色呦呦美女| AV在线不卡网站| www.wuyuetian啪啪| 99在线精品免费视频| 五月天精品| 在线婷婷| 五月天激情国产综合婷婷婷| 亚洲色无码A片一区二区麻豆| 亚洲高清在线| 秋霞少妇AV网站| 97人妻超级碰碰碰碰碰| 99热伊人综合| 91丁香五月| 97干在线播放| 五月激情丁香久久综合网| 俺来也综合网精品一区| www.人人操人人看人人想人人摸 人人人人操,COM | 天天网站天天爽| 色综合色婷婷色伊人| 久久五月婷婷电影| 丁香五月天婷婷中文| 天天干天天干天天干天天干天天| 五月婷亚洲精品| 五月天婷婷成人| 色五月丁香五月| 99国产精品久久久久久久久久久| 九九热在线视频观看| 六月激情婷婷| 久久综合五月婷婷| 婷婷放心五日爱| 色亚洲视频| 久久九九99字幕| 天天狠狠色| 操日挥操日日| 中文字幕 码精品视频网站| 激情五月综合| 操B视频在线播放| 五月婷婷 自拍| 亚洲综合成人网站| 成人羞羞啪啪 全 视频| 97色色综合| 婷婷色丁香五月| 91超碰在线播放| 五月花免费视频| 天天干天天做| 97碰碰电影| 影音先锋一区| 激情6月| 久草婷妨| 伊人网欧美在线男人天堂五月丁香| 综合激情网五月激情| 五月婷婷深爱六月| 综合久| 国产古装妇女野外A片| 久久久全国免费视频| 我去色色网五雨天| 啪啪啪啪五月天| 天天草比天天爽| 另类天堂| 色约约视频一区二区三区四区五区 | a级毛片一区二区免费视频| 色五月天 丁香| 2015超碰| 五月激情六月婷婷| 色优久久| Av九九| 爱的综合网| 狠狠穞A片一區二區三區| 丁香九月婷| 久久人妻少妇嫩草AV| 色www.con| 狠狠操.com| 色综合色综合色综合| www.狠狠操.co m| 成人电影丁香六月天| 九九精品综合| 婷婷激情啪啪| 色婷婷五月天成人网| 任你搞网站| 日本人妻伦在线中文字幕| ady狠狠入| 热中文字幕| 五月婷婷亞洲中文| 精品欧美一区二区三区久久久| 婷婷综合一二三| 777久久综合视频| 天天做天天爽| 色婷婷精品视频在线播放| 思思99热热热99| 丁香六月婷婷综合欧美| 狠狠一日| 囯产精品一品二区三区| 色 色 色综合com| 五月丁香六月在线| 久久综合爱| 亚洲热热视频| 伊人久热91| 99精品在线下载| 亚洲操B| 日韩精品一品二区三区的使用体验| 五月的丁香六月的婷婷| 精国产品一区二区三区A片| 亚洲 视频 导航 一区| 9久热这里只有精品| 激情网五月天| 久久机热这里只有精品免费视频| 亚洲天天| 99色6爱9热| 一月婷婷色色| 六月婷婷激情图片| 91丨九色丨大屁股| a色色色色色| 超碰女人天堂| 日韩av一区二区在线/日产精品久久久 | 亚洲高清在线| 大香蕉综合| 久久人人九| 老师把我爽高潮了免费A片| 俺去也在线官网| 丰满少妇猛烈A片免费看观看| 六月丁香花婷婷| 熟女激情网| 极品另类| 我爱大香蕉| 91日视频| 久色网| 91Chinese在线| 成人永久免费视频在线观看| 日韩成人AV在线| 色婷久| 伊人玖玖网| 日本狠狠网| 十区av| 天天摸天天做天天爱天天爽| 99成人| www.粉嫩av.com| 26uuu精品一区二区| 玖玖综合色| 亚洲九区| 色婷丨日丨天丨综合久久| 五月天婷婷影院| 色婷婷丁香五月天在线视频| 色综合婷婷99| 五月综合激情| 久久99热这里只有精品23| 三级三久久线久久99久目本WW| 久思思热视频在线观看| 香蕉久久国产AV一区二区| 丁香五月日本| 婷婷中文网站| 五月色婷婷综合| 男人天堂亚洲综合| 成人一区在线观看| 极品人妻VideOssS人妻| 操熟女成人网| 五月婷婷久久久| 来吧亚洲综合网| 思思久久精品视频| 亚洲AV无码成人精品电影| 大香线蕉伊人| 爱的综合网| 日韩久久日| 婷婷婷久久久| 五月丁香激情综合网官网| 五月婷婷影视| 人妻22p| 婷婷在线操| 丁香六月婷婷基地| 九九AV| 操笔无码| 99热超| 亚洲无码播放| www.热99热| 人人妻人人澡人人爽| 午夜丁香| 九九色综合九九色| 五月婷免费视频久久久| 久热91精品| 乱精品一区字幕二区| 丁香五月天啪啪a日本| 91一起操| 亚洲色区17| 五月婷婷六月天| 日日爽日日操| 伊人色综合影院视频| 国产美女无遮挡裸体毛片A片| 99热无码首页| 婷婷五月天激情综合| 97操男人的天堂| 久久这里有精品| 99视频只有这里精品| 久99久视频| 99久热视频在线| 影音先锋噜一噜| 国产熟女日日骚五月丁香爱| 欧美黑人大吊| 色婷六月| 色婷婷五月丁香色| 草了bav视频在线观看| 色色无码| 久色婷婷200| 激情五月伊人婷婷| 啪啪啪综合网| 成人版视频在线观看| 男男野外做爰全过程69| 日日色综合| 五月天婷婷综合免费| 99在线观看精彩视频| www一起操| 久久精品国产精品| 99ER热精品视频| 男人天堂亚洲综合| 久操b网| 99久久97久久欧美综合网| 欧美性生交XXXXX无码小说| 九九色影视| 色五月播五月| 天天做夜夜爽| 泰州成人视频| 色五月婷婷丁香五月| 天天日人人| 91色色色| 欧美婷婷六月丁香综合色| 色伊人啪| 9精品在线| 久久婷婷东京热大香樵| 激情五月九九九| 久草丁香婷婷1024| 丁香婷婷欧美综合| 亚洲无码影音| 色色五月天 亚洲| 人人操AV| 国产精品久久久久久久久久| 午夜天堂啪啪| 国产成人精品一区二区三区视频 | 久久成人人妻| 天天草比天天爽| 91视频五月丁香| 色婷狠狠| 婷色视频| 97视频.干com| 五月天社区| 天天久综合网永久入口17v| 婷婷久久婷婷色五月| 久久婷婷五月综合色和| 丁香花五月天社区| 日本婷婷在线| 久久五月综合| 五月激情五月丁香| 成人色情五月天婷婷丁香| 婷婷激情中文综合| 天天艹夜夜爽| 色永久| 激情九九这里只有精品| 五月六月伦理| 97精品欧美91久久久久久久| 色色色色网站| 国产午夜精品一区二区三区四区| 九日日夜夜69| 激情婷婷九月| 日本99久久| 色播五月丁香| 亚洲 在线 性爱| 99精品视频免费观看,| 色999;丁香五月| 精品色色色| 婷婷激情五月综合| 天堂久久精品| 国产婷婷色综合AV蜜臀AV| 精品少妇人妻AV无码专区偷人 | 色香五月天| 伊人色综在线| 99久久久久久| 被强行糟蹋的女人A片| 麻豆AV一区二区三区| 91聚色综合网| 久久 婷婷 五月天| 五月丁香婷婷激情久久| 五月婷婷丁香五月婷婷丁香| 色播五月丁香| 丁香六月成人| 丁香六月激情| 97久久香草精品视频| 丁香五月天天高清在线| av在线观看网站| 国产精品色| 5月丁香综合图区| 东京热免费视频网站| 色婷婷五月天中文字幕| 婷婷五月美女直播| 六月丁香激情网| 国产又粗又大又爽又黄| 欧美VA视频| 精热在线综合网| 丁香五月婷婷天| 噜一噜在线| 激情五月影院| 超碰五月婷婷五月天| 婷婷五月综合久久中文字幕| 99福利视频| 成人永久免费视频在线观看| 国产免费性爱| 婷婷综合网| 五月婷六月丁香| 色老久久| 国产精品黑丝| 天堂婷婷五月在线| 青青草原伊人网| 五月香婷婷| 激情五月狠狠喔| 99色色热热| 久色资源网| 五月天激情小说| 26uuu成人网| 色五月综合激情| 色婷婷激情视频| 黄网在线播放| CAoub青青超碰| 99亚洲综合| 五月丁香六月婷婷色情| 中文字幕操比影片| 丁香花五月天| 国产毛片精品一区二区色欲黄A片| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 91热手机在线| 操一操插一插| 日韩成人网址| 99超级碰免费视频| 性爱视频久久| 五月天婷婷丁香人人操91| 色婷婷中文字母五月丁香| 另类视频五月天| 婷婷五月激情黄色| 桃色激情婷婷伊人网| 日本在线99| 五月天婷婷丁香成人网| 欧美黑人巨大猛烈cuckold| 99精品一二三四视频| 综合另类激情| 国内精品玖玖| 久热在线中文字幕色999舞 | 97人人射| 激情婷婷五月久久| 大香蕉综合| 色九月国产| 精品三区影院| 日韩艹比| 九热视频这里只有精品| 99热在线观看| 一二三区视频韩国| 性av| 另类小说婷婷色| 九色视频91| 99热e| 狠狠狠狠狠| 丁香五月婷婷久久久| 六月丁香婷婷开心综合基地| 天天久综合网永久入口18| 激情六月丁香综合| 67194国产| 亚洲激情综合| 就爱射中文字幕资源网| 精品热青草| 久噜久噜| 激情五月最新网址| 五月婷婷香| 超碰人人操人人9| 思思精品热在线| 4399无码视频二区| 色综合色综合色综合色综合| 色欲婷婷五月天丁香| 人人摸人人搞| 丁香密臀AV激情网| 99热啪啪| 国产日韩欧美性生活| 热久久这里只有精品| 精热在线综合网| 五月天播播| 狠狠艹狠狠艹| 91在线操逼视频| 人妻操在线看| 五月花激情网| 婷婷九月综合| 26UUU| 五月婷色| 婷婷午夜精品久久久| 91干| 天堂婷婷五月色| 丁香五月婷婷激情四射深爱激情| www.99热这里精品| 九色PORNY自拍成人精彩视频| 91操人视频| bbwcuckold精品熟妇| 天天干天天做| 久久A区B区| 玖玖五月丁香| 丁香激情网| 婷婷夜夜夜夜| 啪啪黄页网| 久草婷婷| 色色COm| 97碰免费精采视频| 色9999日韩国产| 亚洲男人的天堂婷婷色五月| 五月开心久久| 天天做天天爽| 99这里只有精品视频| 综合另类视频| 少妇水多A片太爽了| 国产成人99久久亚洲综合精品| 久99热在线观看| 色五月婷婷老师| Jh7Uf088VHafNm| 九九热在线视频观看免费10| 五月丁香久久| 婷婷 色 丁香 夜| 26UUU| 色婷婷yy久| 亚洲天天免费| 五月99久久| 婷婷五月天影院| 久久人妻人人槡| 亚洲综合1024| 韩国97天堂| 色婷婷久久综合中文久久一本| 久久婷婷五月激情网站| 狠狠爱婷婷爱| 久久久久久婷| 国精产品一区一区三区免费视频 | 99热在线观看成人| 五月亭亭开心网| 亚洲五月天婷婷在线| 婷婷伊人久久| 狠狠综合久久综合| 99精品偷自拍| 超碰在线成人| 亚洲成人人人操| 五月丁香日本片| 黄色99热| WWW嗯嗯啊啊啊啊| 五月天婷婷綜合院| 国产婷婷五月天| 最新热中文字幕| 39视频第二区| 亚洲 在线 另类| 99操视频| 久久9热| 婷婷伊人五月| 天天爽—爽| 亚欧州精品视频| 丁香五月婷婷综合啪啪| 亚洲色五月| 91九色|疯狂|高潮|对白|| 日韩色色视频www| 天天天操天天天爰| 久久这里只有精品久久| 久久综合伊人77777蜜臀| 91碰人人| 色色欧美色色色| 天天日天天爽夜夜爽| 九九热在线观看视频| 色色亚卅| 五月天欧美 另类小说| 97色婷| 婷婷五月色图| 色涩影院六月丁香| 色欲色香,www,com| 五月天婷婷Av| 67194中文在线| 少妇被躁爽到高潮无码文| 狼人久草| 亚洲成人五月天| 99久久婷婷五月综合| 五月丁香中文| 五月丁香综合激情网| 丁香五月天啪啪激情综合网| 五月婷婷中文网| 狠狠夜夜五月丁香| 免费色色色| 婷婷香香五月| WWW.夜夜操.com| 性爱综合网| 天天肏在线观看| 色综合偷拍| 日韩伊人大香蕉| 伊人久久大香| www.久久婷婷| 婷婷内射视频在线| 97久人人| 欧美熟女99| 婷婷五月天久久久| 国产伦理精品高清在线观看网站一区二区 | 成人视频免费观看高清完整版在线观看| 欧类av怡春院| 九色成人AV在线| 99九九这里有免费视频| 亚洲色区17| 97操在线资源| 91凹凸在线| 色五月婷婷操逼| 91视频一起草| 五月天激情综合在线| 狠狠做五月| 国产五月丁香在线| 五月婷婷丁香五月亚洲色| 男人天堂亚洲综合| 五月天黄色激情小说| 亚洲色激情| 五月天桃色深爱网| 天天综合在线网| www.狠狠| 91麻豆国产三级精品福利在线观看| 久婷婷视平| 激情碰碰碰| 丁香五月婷婷偷拍| 色综合爽| 色情五月天首页| 色播五月丁香综合| 久久久WWW| 婷婷五月天激情四射五月天激情| 亚洲色婷婷99一9|| 五月婷婷69| 午夜免费试看| 国外亚洲成AV人片在线观看| 亚洲综合欧美色丁香婷婷888月图片| 99热99思午夜精品| 欧亚洲在线高清视频| 99综合婷婷五月| 天天爽天天干天天| www99精品| 成人做爰A片免费看网站找不到了| 艹B高清无码| 丁香五月婷婷天堂大香蕉| 色五月综合网| 99久久综合精品五月天| 97在线刺激| 99热这里| A1片久久久| 97色色色视屏| 色婷婷久久综合中文久久一本| 國語久久婷| 国外亚洲成AV人片在线观看| 精品99在线| 天天日人人| 色五月成人| 香蕉久久国产AV一区二区| 6 9式性爱视频在线播放| 欧美久久婷婷| 五月综合缴情网| 色婷婷综合网站| 久久精彩视频18| 久久99网站| 99在线亚洲| 久久久久久人妻| 岛国午夜视频| 欧美婷婷五月激情| 激情性爱五月天| 色六月 婷婷| 午夜天堂啪啪| 五月天另类视频| 狠狠干狠狠干| 久久精典| 五月丁香婷婷成人网| 日韩中文欧美| 中文字幕日韩成人| 新精品99| 99视频| 99re久久| 五月丁香综合影院| 婷婷五月激情在线| 天天综合图片| 丁香五月婷婷六月| 伊人婷婷色| 五月天婷婷丁香六月| 五月天激情婷婷| 香蕉久久国产av一区二区| 另类视频丁香五月| A片试看120分钟做受视频红杏 | 风流少妇A片一区二区蜜桃 | 久久久8| 国产91在线视频| 日韩成人网站精品久久大全| 激情五月综合网| 五月婷婷六月丁香首页| 色5月婷婷| 国产毛片精品一区二区色欲黄A片| 大香蕉网站,大香蕉综合| 人人摸人人搞| 玖玖九九9999在线观看视频精品| 狠狠色激情综合| 日韩成人综合网| 成人av中文字幕| 色五月五月婷婷| 99精品丰满| 五月天婷婷黄色| 99网| 激情小说五月天中文字幕| 五月婷婷久久综合| 性色播| 五月天婷婷久久| 99啪| 超碰99在线观看| 人妻AV在线观看| 99久精品视频| 天堂色婷婷| 日本3级片一区2区| 操日视频| 婷婷性爱网| 久久久久亚洲AV成人无码电影| 色99在线| 色婷婷超碰| 六月丁香婷婷综合狠狠爱夜夜爱| 9久热免费视频99| 99热在线精品播放| 99久久综合网| 99精品视频网| 26uuu四色| 欧美顶级少妇做爰HD| 五月天婷婷自拍图片在线观看| www.久久| 开心五月丁香啪| 亚洲精级| 亚洲操操操| 久久久久久99精品无码| 超碰免费人妻| 最新热中文字幕| 极品人妻XXXXOOOO| 99er视频在线| 狠狠色综合网站久久久久| 成功精品影院| 妇激情基地| 亚洲精品色| 色综合网综合| 亚洲色色五月| 五月丁香黄色视频| 色五月丁香激情视频| 婷婷丁香无码专区| www.99热| 成人五月天在线观看| 蜜臀AV在线观看| 看久久性爱视频| 国产精品人妻在线网址| 婷婷深爱五月| 丁香久久五月天视频在线观看| 日韩国产AV播放| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 色黄啪啪| 色综合色综合网| 激情五月天噢美| 曰韩五月丁香色婷婷无码| 26uuu亚洲| 久久久999精品| 亚洲精品久久久久久久久久吃药| 手机免费福利视频| 日本九九九九| 新激情五月天| av色婷婷| 亚洲另类婷婷五月综合| 任我鲁这里有精品视频| 中国女人做爰A片| 五月婷婷69| 99热这里只有精品268| 8050一级网| 亚洲综合视频在线| 亚洲综合婷婷五月天| 丁香婷婷色情| 9精品久久999| 亚洲 视频 导航 一区| 午夜 外网 精品 在线| 日本三级日本黄色| 99精品色| 色五婷婷开心缴| 欧日韩AV| 吊色AV男人的天堂| 亚洲亚洲人成综合网络| 激情综合五月天| 色久免费| 无码九九| 99九九视频| 亚洲三A| 色激情综合| 六月婷婷久久| 亚洲欧洲自拍图片专区五月天| 日韩在线观看亚洲| 久久九九99视频| 日本va欧美va国产激情| 天天日天天色| 五月天狠狠干| 草操AV在线| 婷婷丁香花五月天| 久久3级片| 精品婷婷| 色啪影院| 九九热在线视频| 婷婷色情小说| 秋霞三级影视资源| 色色五月天网站| 色丁香五月婷婷综合久久| 激情五月综合网| 日本色婷婷| 婷婷成人五月天成人文学| 婷婷综合成人五月天| 玖玖婷婷五月天| 色五月婷婷激情基地| 五月婷婷色色爱| 欧美成人精品A片免费一区99| 激情另类综合| 丁香五月AV| 玖玖资源站中文| 激情五月天婷婷视频| 丁香激惜男女| 五月天丁香六月综合| 91色色色18| 婷婷丁香综合| 一级黄色操B| yw国产AV| 九九99精品免费播放| 夜精品无码A片一区二区蜜桃| 日本三级中国三级99人妇网站| 婷婷六月丁香五月| 婷婷五月婷| 六月婷婷九月丁香亚洲综合| 五月之婷婷| 色五月综合婷婷| 色久五月| 五月丁香六月欧美| 久久久五月婷婷| 色欲资源网| 激情九九这里只有精品| 五月丁香六月婷婷在线播放| 天天在线久久综合 | 天天天天天天操| 久久婷婷六月综合综合色| 丁香婷婷色五月| 噜噜网免费视频| 天天插综合| 99色精品| 在线观看av网站| 欧美综合五月丁香六月婷| 九九热99免费视频| 色情五月综合婷婷| 丁香六月欧美| 欧美激情综合| 色色欧美色色| 久久久9久| 91人人妻人人操| 婷婷丁香综合| 丁香五月激情啪| 中文字幕黄色片| 婷婷激情肏屄网| 韩国情人在线电视剧免费观看高清版全集| 丁香色情五月天| 六月婷五月丁香| 久久这里只有国产视频| 五月丁香六月综合激情无码软件亮点| 狠狠草在线观看| 97丁香五月| 人人爱国产| 精品一二三区久久AAA片| 久久婷婷五月天激情新地址| 久久五月热| 九九十99视频| 午夜丁香丁香婷婷| 69婷婷丁香午夜| 天天情色综合网| 丁香婷婷激情五月天无毒不卡蜜桃| 综合久久高清| 超碰在线99| 亚洲免费综合一区| 最新日韩久热免费视频看看| 亚洲综合视频网| 五月丁香综合网色欲| 亚洲丁香网| 欧美激情综合色综合啪啪五月| 一区二区三区视频| 成人国产欧美大片一区| 欧美婷婷综合网| 99ri精品视频在线观看| hd五月婷婷在线| 五月激情婷婷丁香天堂| 亚洲激情四射| 天天干人人奸97| 欧美性爱一区| 久久这里只有精品07| 亚州性爱99| 亚洲婷婷91丁香| 亚洲视频在线观看| 青青久久大香蕉| 成人va在线观看视频| 午夜婷婷六月天| 综激情网| 超碰在线日夜| 久久免费操| 激情五月五月五月婷婷| 我去色色网五雨天| 欧美精品中文字幕亚洲专区| 国产AV不卡福利| 色亚洲视频| 大婷婷色呦呦噜噜色呦呦噜噜| 亚洲无码色| 97婷婷久久丁香| 天天日日夜夜爽| 亚洲狠狠干| 91久久久久久久久18| 六月丁香成人| 六月丁香婷婷网| 久久婷婷成人| 激情婷婷护士激情| 色欲婷婷夜夜| 婷婷综合五月| 五月丁香六月片| 欧美99热| 亚洲美女网Va| 人妻无码视频网| 大香蕉伊人久久| 深爱开心激情| 日本黄色三级片内射| 激情综合色网| 五月色婷婷综合| 麻豆AV一区二区三区| 久99久在线| 99性爱视频网站| 另类图片五月天| 久热 91| 五月天婷婷婷| 日韩一本操| 99这里有精品久久97| 婷婷五月天成人| 99热午夜精品| 日韩黄黄| 婷婷丁香色五月| 婷婷趴趴| 丁香五月婷婷综合网| 久99视频| 99日本精品视频热| 99色色网| 婷婷丁香黄色| 色色色色色爱| 欧美色一级色| 婷婷色五月亚洲| 五月丁香六月婷婷网| 五月丁香婷婷成人版| 亚洲视色| 91九色超碰| 丁香五月天婷婷中文| 99在线精品观看99| 久久久婷婷| 色色激情网| 亚洲性视频| 五月天激情图片| 色婷婷aV四虎| 狠狠色丁香久久婷婷综合五月| 日日躁夜夜躁狠狠久久AV| 秋霞午夜理论| 亚洲操操| 色噜噜伊人| 丁香色五月 97干| 无码se| 这里只有精品视频99| 婷婷激情九月| 91丨九色丨白浆秘| 热五月婷婷| 神马欧美精| 激情啪啪五月| 91碰碰视频| 色狠狠色综合久久久绯色AⅤ影视| 日日操日日撸| 欧美熟妇一区二区三区| 国产va视频| 天久久久久| 狼友超碰| 九九综合伊人| 伊人五月综合网| 五月婷六月综合在线观看| 五月丁香六月综合激情| 久久99这里只有精品| 桃色五月天| 久久综合网免费视频| 五月色综合| 丁香五月激情六月综合| 99热午夜精品| 五月丁香六月婷婷综合网站| 久久午夜丁香| 99热综合在线| 深爱五月月天| 中文字幕日产A片在线看| 色婷婷五月天激情综合| 色色999三级片| 五月天开心婷婷激情网站| www.99热精品| 99色婷婷视频| 国内婷婷丁香社区在线播放| 国产古装妇女野外A片| 色婷婷亚洲在线| 九九精品碰| 国产综合色婷婷精品久久| 成人看片网站| 国产国产乱老熟女视频网站97 | 免费看欧美成人A片无码| 99思思热只有在这里看| 激情国产综合| 色五月综合激情| 91热er| 大鸡巴伊人网| www久久久久久久97| 丁香五月婷婷六月婷婷| BBWCUCKOLD精品熟妇| 欧美日本va| 色99在线视频| 99国产精品久久久久久久久久久 | 久久R激情| 桃色五月天| AV色五月婷婷| 五月天sesese| 亚洲啪啪网| 天天舔天天摸天天射| av五月丁香| 99热精品中文字幕| 五月婷婷六月奇米网丁香| 日韩精品一品二区三区的使用体验| 一起草性爱不卡视频| 久久99这里只有精品视频| 91在线日本| 人妻AV在线| 欧美色五月天| 9久久精品| 九月婷婷在线视频| 色五月婷婷在线| 九九视频精品在线免费 | 久久99婷婷| 激情综合丁香六| 久久婷婷网| 青青草六月丁香| 狠狠色97| 五月天开心色色网| 五月天久久婷婷| 婷婷五月天激情综合网| 激情久久五月天| 久99久视频精品| 婷婷久久网| 情婷婷五月天| 婷婷五月天成人五月天| 激情丁香久久| 欧美S码亚洲码精品M码| 五月婷婷在线观看黄| 亚洲日韩26uuu| 熟女网站久久| 99碰碰碰| 国产肥白大熟妇BBBB视频| 9热在线观看| 色五月成人网| 色色自拍视频网站| 另类视屏| 91丨九色丨国产| 激情综合网色播五月| 狠狠操狠狠操| 五月婷深深爱激情网| 97久久人人操| 久久九九re热| 无码91中文字幕| 天天操人人干| 婷婷五月天视频亚洲| 五月婷综合性中心| 五月色情婷婷| www、丁香五月天| 拍色综合| 色天堂婷婷| 五月天婷婷丁香| 亚洲无码yw| 深爱激情五月婷婷| 综合狠狠五月婷婷| 亚洲成人网站在线观看| 97欧美在线| 久草婷婷视频| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 国产看真人毛片爱做A片| 婷婷色网站| 夜夜撸日日操| 久久人妻www| 丁香五月23111| 婷婷五月天在线综合导航| 狠狠色综合网| 99热在线观看精品| 五月丁香综合影院| 91色色色视频| 婷婷在线中文字幕| 蜜桃五月天| 午夜丁香| 99热色精品| 久久综合婷婷| 婷婷五月天激情小说| 五月丁香六月婷| 另类激情中文| 伊人五月天在线| 99re思思热久久| 狠狠狠夜夜夜| 五月激情网站| 婷婷夜夜操| 色色网五月激情| 久久A区B区| 丁香五月冃欧美| 五月天激情久色| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 九九热99精品| 国产亚洲色婷婷久久99精品9j| 69久久久| 97爱综合| 草草影院爱爱| 五月天婷婷基地综合网| 日韩人妻无码精品| 夜夜资源站| 激情视频网址| 婷婷第六色| 久久99这里| 777精品成人a v久久| 思思精品久久艹| 色婷婷五月天小说| 99爱在线精品视频免费观看| 五月婷婷六月丁香在线| 色色五月天婷婷丁香| 超碰免费大香蕉| 亚洲操逼网| 99热这里有精品| 婷婷五月在线视频| 在线看片h站| 99精品丰满| 色婷婷久久视屏| 97干免费视频| 婷婷五月中文在线| www.99热最新视频8| www.五月激情红色| 五月天婷婷丁香六月| 色综合久久五月天| 99热综合在线| 五月天激情网图片| www.97视频| 婷婷综合伊人| 亚洲天99| 这里只有精品视频视频在线观看| 全网最新网黄大秀直播高清,主播国产录屏在线 | 国内裸舞二区| 日撸夜撸日操| 久热只有精品| 五月天激情小说| 精品成人无码A片观看香草视频| 91热视频| 色色色区| 亚州欧美国产久精国产99综合视频| 婷婷六月激情丁香| 天天日天天色| 日本色婷婷| 婷婷中文字幕网站| 丁乡久久| 青青夜夜狠狠夜夜狠狠| www色中色综合| 亚洲免费观看高清完整版AV线| 日韩aaaaa| 香蕉视频性爱BB做爱| 色综合九九色综合88| 天天摸天天舔天天爽| 岛国AV网| 日韩色色视频| 91人人爱| 六月丁香啪啪啪| www.com操| 激情中文在线| 少妇2做爰HD韩国电影| 久久久久久久久久婷婷| 五月丁香六月婷婷精品| 激情五月四色| 亚洲第一第二网站| 亚洲色99综合天堂| 九九热视频99| 甈你aaaaa| 日韩久久视频| 五月综合人妻| 五月丁香色| 狠狠五月天婷婷激情网。| 激情久久久久久久久久久| 亚洲亚洲人成综合网络| 成人av在线网站| 激情婷婷丁香色五月| 国产激情久久久| 色九月综合| 丁香五月1页| 婷婷五月天激情文学| 激情综合色| 国产AV不卡福利| 丁香综合伊人AV| 九九五月天| 色网站9| 日本www五月婷婷| 日本美女上人| 丁香狠狠色婷婷久久无码视频 | 五月天激情小说| 色原狠狠综合| 色五月丁香一区在线| 久久新地址| 精品视频网| 午夜性爱影视一区77| 色欲av伊人久久大香线蕉影院| 99热在线极品极品| 26uuu.| 日本综合色色| 在线91日韩| 俺也去综合| 婷婷五月成人| 成人一级片| 五月六月丁香激情| 欧美日韩成卜| anquye伊人| 色噜噜狠狠色综合成人网| 色五月在线综合| 五月综亚洲| 日日噜噜夜夜狠狠久久丁香五月| 丁香激情五月| 丁香五月播播| 操97在线观看| 五月社区婷婷激情| 五月天成人免费视频| 伊人色综合影院视频| 91九九精品| 操操操91| 激情五月六月丁香| www.色婷婷| www久久99| 六月婷婷色色色| 综合 蜜月 婷婷| 极品五月天| 在线看的免费网站| 久久综合激情五月天| 亚洲视频五区| 涩涩婷婷五月| 丁香婷婷深情五月亚洲| 色综啪啪网| 亚洲mm色| 八戒青柠影视剧在线观看| 久久久婷| 色噜噜狠狠色综合日日| 久久久性爱网| 9l视频自拍九色9l视频在线观看| 一区二区传媒视频| 亚洲va欧洲va国产va不卡| 男人大jjc女人免费视频| 26uuuu精品一区二区| 99在线免费视频| 99惹| 97在线视频观看| www.婷婷网| 色婷婷电影网| 色情五月丁香婷婷网| 五月天播播| 亚洲人成网亚洲欧洲无码久久| 婷婷五月六月| 中海油常州环保涂料有限公司| 天天干天天操天天爽| 国产伦理精品高清在线观看网站一区二区 | 五月婷婷九| 九九人人精品| 91丨九色丨熟女|新版| 五月婷婷丁香综合| 色婷婷99| 五月天色导航婷婷资源婷婷| 日韩啪啪网| 丁香激情合作五月| 色婷婷五月综合激情中文字幕| 六月五月婷婷| 丁香社92视频| 五月丁香成人小说| 激情久久肏屄视频| 日本五月婷婷| 亚洲婷婷月丁香五月| 一二线视频 另类| 丁香五月婷婷手机| 九九热99精品| 六月撸婷婷| 97干在线| 成人片黄网站色大片免费毛片| 五月开心婷婷| 久久五月天丁香| 婷婷婷久久久| 狠狠色丁香久久久婷| AA片在线观看视频在线播放| 日韩色情亚洲五月天婷婷| 激情九九九九| 激情综合区| www。88热在线视频免费观看| 国产AV影片| 天天操人人干| 婷婷五月丁香六月| 熟妇无码乱子成人精品| 丁香五月五月婷婷五月天激情四射| 99噜噜噜| 免费视频99| 天天精品视频在线观看视频| 色99视| 97色色综合| 色宗合久久五月婷婷| 在线99精品| 操人91| 深爱1激情网| 人人九色| 99色视频| 五月婷综合| 九九激情网| 琪琪色五月婷婷老师| 思思热在线| 5月色婷婷| 大香蕉久久久久久久久| 日本片日本片祼观看网站在线看中文版网页在线看 | 丁香,开心成人,久久| 激情五月天网| 六月婷婷俺也去| 噜噜五月天综合| 久久九九免费视频| 狠狠草综合网| 久久色区| 六月婷综合| 亚洲第一黄网| 天天综合网亚洲综合网| 97碰| 99九九这里有免费视频| 成人午夜无码视频| 2025年最新亚洲在线欧美|