欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
天天夜夜爽| 99色婷婷视频| 日日骑夜夜撸| 天天se在线视频| 97精品综合久久| www.五月天社区| 婷婷五月激情综合| 亚州操操| 婷婷五月丁香花综合| 国产69久久久欧美黑人A片 | 综合网激情五月天| 五月婷婷亚洲天堂激情在线| 久久曰曰| 色色色综合网| 97精品欧美91久久久久久久| 精品久久婷婷| 亚洲无码成人网| 草草夜夜操| 五月丁香婷婷色色| 久久精品婷婷| 久久婷婷六月综合| 狠狠操狠狠| 六月丁香五月婷婷| 久草 tingting| 色婷婷综合网站| 噜噜色com| ,99视频久久| 五月婷婷中文字幕| 成人短视频在线| 开心久久网婷婷| 狠狠干五月| 色色丁香| 99精品丁香五月| 搡BBBB搡BBB搡18| www.超碰在线| 天天日天天舔| 国产乱人偷精品人妻A片| 五月婷婷影院| 99这里只有精| 国精产品一区一区三区免费视频| 538在线精品| 久久伊人大香蕉| 97久久久久| 日韩成人AV在线播放| 久久婷婷五月天蜜桃| 伍月婷婷六月丁香| 国产成人亚洲综合A∨婷婷| 丁香五月激情无码视频| 婷婷五月骚厕所| 5月婷婷激情6月| 亚洲丁香五月综合| 99热精这里只有精品| 日日夜夜狠狠婷婷色| 九九热AV| 五月丁香六月婷婷中合网| 婷婷爱在线观看| 色就是色婷婷五月亚洲激情| 五月天婷婷久色| anquye伊人| 最新热中文字幕| 一逼色综合| 99成人网一区| 天天干天天操天天上| 69五月天视频| 久久国产色| 激情婷婷六月天| 波多野结衣AV无码Porn| 日本色五月| 久久亚洲婷婷| 伊人九九九久| 久久激情综合| 六月丁香激情综合| 久9无码视频| 庭庭久久内射| 日99网站| 五月婷婷丁香六月 | 精品一二三区久久AAA片| 亚洲操操操| 超喷97免费在线视频| 超喷97免费在线视频| 午夜微拍福利| 五月香婷婷| 思思视频这里是精品| 99热这里只有精品2024| 在线天堂9| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | caop视频| 91精品国产91久久久久青草| 欧美激情2025| 色婷婷丁香| 婷婷在线视频| 九洲一级A片| 玖玖视频福利| 久久人妻视步| 丁香五月色| 伊人丁香在线| www.久久| 天天日综合| 久热99| 国产精品久久久久久妇女6080| 五月激情综合婷婷| 国产VA播放| www,av好吊操| 婷色五月| 在线你懂的亚洲欧| 五月丁香亭亭| 国产亚洲AV人片在线| 色999亚洲人成色| 中文字幕不卡网站| 26uuu欧美亚洲日韩| 亚洲婷婷视频| 九九热只有这里精品| 九色PORNY自拍成人精彩视频| 东京热人妻一区二区三区在线| 亚洲乱码日产精品BD| 狠狠搞狠狠操| 国产69久久久欧美黑人A片| 天天骑天天操| 少妇被躁爽到高潮无码文| 思思精品视频| 精品无码久久久久久久久| 狠狠狠狠狠| 色五月首页| 色婷婷香蕉| 久久婷婷五月综合色奶水99啪| 久热免费视频| 91热在线| 亚洲综合五月天| 婷婷丁香五月天激情| 337p大胆噜噜噜噜噜91Av| 99久.| 日韩久热| 成人做爰A片免费看视频| 国产精产国品一二三在观看| 色噜噜狠狠狠狠色综合久欧美| 99riAV成人在线视频| 97超级碰| 国产av影片| 粉嫩av懂色av蜜臀av熟妇| 九九亚洲综合| 一本道综合网| 激情图片五月天| 丁香美女五月天婷婷| 在线中文亚洲| 色情成人五月天| 精品少妇人妻AV无码专区偷人 | 色欲丁香| 日韩av手机在线观看| 99热草草| 99 re视频一区| 99久热| 久久久激情| 婷婷成人综合| 婷婷色丁香五月| 玖操97| 六月亚洲婷婷6月中文字幕| 激情5月婷婷狠狠干| 五月丁香成人| 婷婷丁香小说| 九九碰九九爱97| 亚洲五月天激情| 91狠狠综合久久久久久| 好大好粗嗯啊-一级黄色大片免费观看-成人AV| 国产婷婷综合在线免费视频| 青青热久久综合| 五月婷婷综合色啪首页| 五月天婷婷7米| 中文字幕精品在线观看| 色色激情五月天| 亚洲无AV在线中文字幕| 亚洲午夜一区二区| 日韩欧美四五区| 天天综合网网欲色| 五月天国产| 国产人妻777人伦精品HD| 国产麻豆视频| 天天噜日日噜综合无码| 亚洲久久婷婷| 香蕉久久国产AV一区二区| www久久艹| 色五月亚洲| 超碰免费人人肏| 99久在线精品| 婷婷激情丁香六月| 九九热99热| 国产黄大片在线观看画质优化| 91人人看| 五月激情啪啪| 久久丁香网| 五月丁香福利| 婷婷五月深深爱| 色五月五月婷婷| 99爱视频免费| 丁香五月激情综合婷综| www.伊人天堂偷偷婷婷| 婷婷五月综激情| 亚洲乱码日产精品BD| 久草婷婷视频| ss99热| 97性视频| 国产玖玖资源| 国产精品人成A片一区二区| 日韩精品一曲二曲三曲四曲五曲| 激情婷婷内射| 97碰超级人人看| 日韩av一区二区在线/日产精品久久久 | 影音先锋色婷婷| 五月婷婷色欲| 狠狠操.com| ji'qi'luan'ren'lun| 日日夜夜狠狠| 91热视频色网站| 综合色色婷婷| 风流少妇A片一区二区蜜桃| 狠狠综合色网| 涩五月色婷婷| 性做爰A片免费视频A片直播| 五月综合亚洲色| 久久五月天色| 六月色丁香婷婷| 99热播放| 久久激情天堂| 2015超碰| 五月婷婷之综合激情| 婷婷五月天影院| 五月99久久| 99.色| 国产激情综合五月久久| 丁香五月首页| 九月婷婷激情| 四月婷婷五月丁香| 青草五月天| 青草视频在线播放| 深爱激情四射| 婷婷五月天色色| 99丁香五月婷| h在线看免费版在线看| 久久婷婷午夜| 丁香五月 六月婷婷首页| 狠狠插狠狠操| 影音先锋按摩| 思思热精品在线| 六月婷婷七月丁香| 99熟女啪啪视频| 香蕉99网| 99色色色色| 五月丁香婷婷五月色| 六月丁香婷婷综合色播| 久久久人妻| 激情床戏| 大香蕉婷婷丁香天堂AV| 色色爽爽天天| 婷婷99狠狠躁天天| 五月丁香美女视频| 亚洲精品色| 欧美欧盟性爱网| 97在线精品视频| 色婷婷91| 婷婷五月天综合久久| www.99免费视频| 九九亚洲视频| 操婷婷基地| 99热这里只有精品86| 99久久综合狠狠综合久久| 久久午夜理论| 丁香五月天久久| 黄涩毛片| 五月丁香六月| 91九色国产熟女| 99亚洲欧洲| 青草视频在线播放| 热久久视频99| 大香伊人婷婷影院| 深爱激情五月天| 综合色吧| 婷婷五月天堂| 五月丁香久久网| 日日色综合| 狠狠做六月爱婷婷综合aⅴ| 五月丁香黄色视频| 天天综合亚洲综合网天天αⅴ| 99综合视频一体| 免费日韩99| 免费视频WWW在线观看网站| 色网站99| 亚洲xx在线| 五月激情网站| 91精品91久久久中77777久久玖玖九九 | 97碰人人操| 亚洲综合无码| 亚洲色色图片| 免費观看aV在线网址| 97婷婷五月天| 色婷婷婷婷| 久久久久人妻精品| 欧美va亚洲va在线播放| 天堂亚洲 在线| 欧洲色色| 综合五月天亚洲婷婷| 国产高潮A片羞羞视频涩涩| 国产精品久久久久久五月天加勒比| 99热99日天天干| 综合伊人久久| 99这里的视频都是精品| 丁香婷婷久| 丁香五月综合激情性爱| 性爱动图国产麻豆一区二区三区| 97人人操人人插| 久草热视频在线观看| 九九色院| 五月婷久久| 激情五月五月五月婷婷| 久99久视频免费观看| 久久九九色| 颜射 精品性爱av| 狠狠色婷婷综合开心影视| 婷婷五月丁香色综合| 在线不卡视频| www色哟哟| 久9热| 成人国产欧美大片一区| 亚洲天堂大香蕉| www.激情在线| 99色.com| 亚洲精品V天堂中文字幕| 五月天久久婷婷| 五月丁香色色网| 久久五月天激情| 成人AV中文字幕| 色色色综合视频| 激情五月天婷婷丁香| 狠狠干夜夜干| 夜夜躁爽日日| 五月婷色丁香| 91碰碰碰| 综合九九久久| 中文字幕丰满孑伦无码专区 | 另类激情中文| 呦呦v线| 五月天激情啪啪| 99re在线播放| 久久大香蕉| 久久人妻在线| 99r久久这里只有精品| 一区二区乱视频码| 四LLL少妇BBBB槡BBBB| 九九在线视频| 开心五月深爱激情| 久er7久热| 中文在线成人| 日本婷婷色| 五月的色婷婷高潮| 九九机热| 日日色五月天| 大香蕉啪啪啪| 久9无码视频| 日韩成人网址| 六月丁香久久| 天天做天天爱天天爽| 色97综合婷婷天天色| 中文字幕av亚洲| 亚洲天堂婷婷丁香| 激情五月综合| 停停五月色宗合| 五月天玖玖狠狠色色| 成人在线视频网| 婷婷色六月| 色婷婷丁香花五月天| 国产日比| 狠狠色丁香婷婷久久综合| 五月综合激情综合久| 婷婷亚洲色| 伊人玖玖网| 高清资源站日A美A欧亚…| 婷婷久久五月丁香| 天天爽天天爽| 亚洲欧美999| 狠狠999| 婷婷成人综合| 天天色播| 六月丁香婷| 99碰网站| www999日韩精品| 九九视屏| 在线成人视频免费| 大香蕉欧美在线| 青青久久五月天丁香婷婷| 五月丁香网站| 日本精品久久久久中文字幕| 少妇被下春药玩弄A片| 超碰久热| 色五月播五月| 99亚洲天堂| 六月丁香啪啪| 狠狠色狠狠操| www.minyis.com【JT】实力收量可预付QQ2101460746 | 丁香五月色| 激情丁香久久久久久| 久久久精品99| 色色丁香五月| 人人性久久| 91日韩美女被插视频| 第1影院之五月婷婷| 人人操碰| 婷婷丁香社区| 97色久| 97在线精品视频| 4399亚洲视频| 亚洲va欧美| 丁香婷婷六月婷婷六月婷婷六月婷婷| 色婷婷婷av| 久久久久久久综合狠狠综合| xx色综合| 欧美日本一区二区三区| 99在线精品免费视频| 国产精品VA在线| 久久狠狠干| 99re这里只有| 五月婷婷与六月丁香图片激情| 久久九九@| 日韩无码成人电影| 五月天激情国产综合婷婷婷| AⅤ网站在线看| 最新无毒无码AV| 五月婷婷亚洲天堂97色婷婷| 亚洲视频在线观看区| 九九热青青草| 日韩超碰在线| 日日天天操| 天天日,夜夜爽| 丁香五月色五月婷婷宗合| 色婷婷丁香五月色综合网| 天天操狠狠操| 亚洲性爱电影| 伊人激情AV一区二区三区| 免费无码毛片一区二区A片| 亚洲五月六月婷婷| 九热视频精品| 五月婷婷丁香啪啪| 99热精品一| 99惹精品视频| 另类专区在线| 中文字幕无码人妻少妇免费视频| 亚洲天堂有码| 九九Av| 欧洲激情五月天婷婷| 襙比视频| 欧美精品99| 26uuu最新地址| 女性自慰系列第五页| 婷婷综合网性| 色99婷婷五月天| 国产无遮挡又黄又爽免费网站| 婷婷伊人五月天| 婷婷综合在线| 欧美25p| 极品五月天| 九热在线这里有精品6| 久久99久久99精品免观看粉| 色娸娸综合网| 婷婷少妇激情| 丁香婷婷五月色成人网站| 天堂网操| 五月天婷婷激情四射综合| 亚洲蜜桃精久久久久久久久久久久| 日本欧美在线| 思思热视频在线观看| 丁香婷婷五月六月久久| 丁香六月在线| 六月激情婷婷| 五月婷婷丁香六月| 蜜乳av一级av| 91婷婷丁香五月亚洲| 欧美99| 久久久中文| 色五月激情五月| 一级性爱视频| 色婷婷综合视频| 99热在线播放| 亚洲国产精品二二三三区| 色五月情| 九月婷婷激情久久| 久久9热| 丁香五月www| 婷婷色六月| 六月婷婷综合久久| 久久香蕉网| 五月丁香综合| 天天综合天天做天天综合| 亚洲五月天伊人| 五月天五月婷五月激情网| 99精品免费欧美小视频 | 中国丰满熟女A片免费观| 香蕉久久国产AV一区二区| 超碰人妻在线| 丁香狠狠色婷婷久久无码视频| Www.se.久久| 黄色一极大片| 丁香午月AV中文字幕| 六月综和久久| 色爱五月天| 久久作爱| 极品人妻VIDEOSSS人妻| 丁香六月婷婷社区| 开心六月丁香五月婷婷| 久久五月激情| 九九精品热| 国精产品一区一区三区免费视频| 另类图片五月激情| 久热久色| 狠狠色婷婷777| www.婷婷五月天| 人人摸人人| 色99综合色88| 97香蕉久久超级碰碰高清版 | 久艹伊| www.婷婷网| 色婷婷综合网站| 久热一本| 九九草草逼| 色婷婷五月综合在线| 色色五月天婷婷| 五月天激情社区| 国産精品| 91fuliwang| 欧美精品999| 丁香五月丁香伊人| 天天操天天曰| 天堂无码人妻精品AV一区| Caoub青青超碰 | 婷婷五月天激情四射五月天激情| 人人干人人操人人摸| 五月丁香六月香香蕉| 最近中文字幕在线中文视频| www.91婷婷| 激情五月色综合国产精品| 久久久999精品| 亚洲AV成人无码精品| 99热福利| 五月丁香久| 狠狠干五月| 午夜婷婷丁香| www.狠狠操| 久久久天堂国产精品女人| 九九aV| 欧美婷婷成人| 67久久| 婷婷五月天av网| 国产乱轮一区二区三区| 丁香五月天激情小说| 日日操夜夜爽白洁| 九月婷婷丁香| 国产偷人爽久久久久久老妇APP| 91视频五月丁香| 精品人妻久久久| 夜夜躁爽日日| 婷婷五月天综合网| 99色五月| 婷婷五月色影视先锋| 婷婷丁香综合成人| 少妇人妻偷人精品无码视频新浪| 久久er免费视频| 色婷天天| 一本婷婷丁香久久| 五月丁香六月欧美| 欧美情色一区| 五月婷婷插一插| www色色com| 在线另类视频| 欧美婷婷日本| 午夜成人AV在线| 五月天色色婷婷| 久久性爱网| 国产精品蜜臀99| 密乳视频| 丁香五月激动深爱欧美| 婷婷五月天激情小说网站| 国产免费一区二区在线A片视频| 久久久人妻不卡| 婷婷丁香五月麻豆| 欧美久热| 丁香六月激情综合| 六月丁香婷婷亚洲中文玖玖| 色色热| 夜夜涩涩涩| 深爱激情五月天| 六月色丁香中文字幕| 丁香六月婷婷一区二区三区| 天堂成人A片永久免费网站| 噜噜色五月| 99re欧美精品| 9有码中文| 五月天婷爱综合| 日韩无码系列| 成人中文网| 97色色婷婷| 久草狼人| 另类图片五月天| 久久久久久丁香五月| 婷婷六月情| 最新婷婷五月丁香| 国产激情综合五月久久| 成人色站,在线视频,看片-SS1AV| 99热伊人| www.亭亭五月天| 婷婷激情五月视频| 亚州色色色| 五月天激情国产综合AV| 国产成人综合亚洲| 天天日天天干天天操| 91丨九色丨熟女|老版| 色情五月婷婷| 久久99久久99精品免观看软件| 婷婷丁香五月天操逼| 丁香六月伊人| 丁香色色色| 日韩色色视频| www.激情五月| 91操色| H亚洲| 99色热视频| 久久之人妻| 影音先锋高清无码资源网| 婷婷激情视频欧美视频自拍视频欧美剧| 超碰91人人操| 久久小说网| 另类视在线| www.夜夜夜| 久久婷婷五月综合一| 久久激情视频| 久久激情五月天| 99激情在线| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 久草大| 国产69久久久欧美黑人A片| 五月亭亭性| 婷婷五月天影院| 97色干在线观看| 玖玖五月丁香| 色婷婷五月天天天干天天操天天爽| 激情丁香六月| 欧美婷婷九月| 天堂婷婷综合| 四色五月婷婷| 成人永久免费视频在线观看| 99re热视频| 97人人草| 亚洲综合一区二区| 1024在线视频| 欧美性生交XXXXX无码小说| 激情伊人五月天| 色国产五月| 九九久久五月天| 夫妻超碰在线| 1级欧美日韩| 操操啪| 日韩成人免费电影| 男女免费视频999| av性爱在线| 天天综合 99久久婷婷| 丁香五月五婷| 婷婷五月天色网久| 99 频99热国里只有精品| 任你搞网站| 激情综合婷婷久久| 日本玖玖在线| 1024操逼| 色哟呦av| 4399啪啪视频| 日本91在线播放| 99热精品在线观看| 国产看真人毛片爱做A片 | xxxx五月天色色| 五月天久久色| 亚洲AV在线免费看| 婷婷影视久久| 色五月色开心开心五月| 丁香狠狠色婷婷久久无码视频| 风流少妇A片一区二区蜜桃| 在线成人视频免费| www.婷婷五月天| 久久香蕉丁香| 婷婷五月电影院| 九色91国产| 久久免费操| 久草大| 色婷婷社区| 五月综合婷婷网| 天天激情夜夜干| 五月丁香婷婷久久| 丁香婷婷久久老熟女综合网| 我要看激情五月天| 婷婷色激情五月天| 亭亭五月丁香五月天激情| 天天日夜夜曹| 中文字幕综合网| 五月婷婷激情综合| 五月激情婷婷在线| 国产亚洲精品久久久久久郑州| 成人国产欧美大片一区| 九九热精品| 色色色五月婷婷| 久久A极片| 国产精品美女久久久久AV超清 | 五月丁香久久网| 4399在线日本A片| 99综合色色色| 五月天婷婷激情春色小说| 伊人午夜综合色啪| 99福利导航| 99综合视频一体| 少妇人妻人伦A片| 第九色区AV在线| 亚洲天99| 97碰在线视频| 成人狠狠成人狠狠成人狠狠成人狠狠| 欧美色爱五月天| 99热官网精品在线| 国产XXXX搡XXXXX搡麻豆| Www.se.久久| 丁香蜜臀黄色婷婷五月天| 久久只有这里精品免费| www,婷婷五月天,com| 99婷婷综合| 久婷久婷| 丁香六月毛片| 在线观看免费狠狠色丁香香综合| 欧洲亚洲精品| 九九色网| 这里只有精品日韩精品| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 精品久久9| 国产乱妇无乱码大黄AA片| Caoub青青超碰 | 五月丁香综合激情| 涩 五月 婷婷 狠狠| 大香蕉啪啪啪| 欧美色色网| 五月丁香婷婷欧美| 久人操| 五月熟妇婷婷久久| 久久精品五月天| 欧美日本韩国亚洲| 婷婷在线精品| 色五月婷婷激情| 这里有精品| www.com.色色| 天天综合网亚洲综合网| 四色五月婷婷| 蜜乳AV成人| 色五月开心婷婷| 99热99精品| 91热久88| 天天激情视频| 色情综合网| www.99精品视频| 亚洲久久婷婷| 国产精品电影| 碰碰女| 26uuuavcom| 九九热这里| 91免费看片| 天天插天天插天天插| 欧美在线| 丁香五月天无码AV| 99re在线精品视频| 九热视频精品| 天天操天天操天天操天天操天天操| 成人精品视频99在线观看免费| 色五月天丁香| 中文字幕,综合,91| 日本少妇AA一级特黄大片| yazhouzonghesese| 五月婷婷激情| WWW色色色COm| 五月丁香婷中文| www.99热在线| 五月天激情婷婷| 色五月 激情婷婷 综合五月天| 一级二级香港秋霞欧美欧美秋霞| 免费无码毛片一区二区A片 | 亚洲av成人在线| 亚洲成人在线综合| 超碰97人人操| 欧美一级色| 91色五月| 狼人婷婷综合| 操日视频| 丁香六月啪啪啪| 婷婷五月综合网| 成人婷99最新| 香蕉久久国产AV一区二区| 五月伊人网| 国产67194| 亚洲精品成人| 色五月aV| 日韩99无码| 丁香五月天激情免费在线观看AV777| 丁香花狠狠婷婷亚洲中文字幕| 久久机热思思热| 99精品综合在线| 色婷婷在线视频| 非洲一级AV| 五月天啪啪| 69堂午夜视频最新地址| 色吧婷婷五月亚洲| 黄色AAAAA| 六月激情婷婷综合| 婷婷免费视频| 深爱激情五月天色婷婷| 精品热青草| 五月成人网站| 色情性爱视频网址| 香蕉AV777XXX色综合一区| 五月丁香六月花| 欧美性爱专区| 激情图片婷婷丁香五月| 欧美操人| 五月婷婷丁香91| 婷婷五月婷婷| 天天日日夜夜爽| 97色婷| 日韩婷婷五月天| 婷婷婷久久| 久久婷婷五月天| 免费看成人747474九号视频在线观看| WWW久久久| 天天日人人| 伊人丁香五月婷婷潮吹| 开心五月综合激情网| 色激情综合狠狠婷婷| www.夜夜操| 五月婷婷激情视频| 婷婷激情五月| 大香蕉婷婷婷| 五月天色不卡| 亚洲综合丁香五月天| H亚洲| www.色综合| 精品51XX| 色五月婷婷操逼| 久久99最新| 99超碰在线观看| 天天做天天爽| 狠狠狠色激情综合适合| 五月婷婷三级| 99视频综合网| 丁香五月性爱| 人人综合五月人人婷婷| 丁香婷婷五月色成人网站| 亚洲亚洲人成综合网络| 91丁香五月| 狠狠做六月爱婷婷综合aⅴ| 国产高清视频91九九九久久久| 婷婷五月综合在线| 99热这里只有精品最新网址| 五月总合激情网| 九九九九中文字幕| 成人做爰A片免费看视频| 2025天天操| 在线区区区| 丁香六月婷婷综合欧美| 婷婷五月天性色| 久久香蕉影院| 99精品无码| 久久久精久人妻| 久久网站观看免费欧洲国产| 久久久性爱视频| 1024成人免费看| 亚洲精品一区中文字幕乱码| 超碰在线免费| 婷婷婷婷色| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 久久综合影院| 国产视频色色色色色色色| 亚洲综合99| 婷婷在线激情| 99热无码精品| site:xiongshengzz.com| 99久久精品国产色欲| 人人操人人妻| 亚洲综合五月天婷婷| 五月婷久久| 亚洲超碰在线| 亚洲激情综合| 成人 在线 日韩| 五月天激情小说网| 婷婷开心激情| 午夜五月天| 欧美啄木乌丝袜人妻系列| 亚洲中文乱字字幕线在永久| VA国产在线综合网站| 五月婷五月婷伊人伊人五月婷| 在线日韩av| 中文字幕欧美精品久久| 三日本无码| 伊人久久婷婷五月综合97色| 中文字幕网伦射乱中文| 97碰啪啪| www色色色com| 亚洲综合婷婷| 久久久婷婷婷| 色色色国产| 婷香五月激情视频| 99热思思| www.五月天| 大香蕉久久| 婷婷丁香97| 啪啪激情网| 久99久在线| 97人妻碰碰中文无码久热丝袜| 中文字幕人妻在线| 五月丁香婷婷久久| 超黄亚洲瑟瑟网站| 丁香五月婷婷色综合基地| 亚洲色啪| 欧美色六月婷婷| 久色五月婷婷综合| 久久久久久久久久人妻| 五月婷婷丁香五月婷婷丁香| 天天爱天天爽| 91偷拍视频| 亚洲九九视频| 蜜桃人妻无码AV天堂三区| 伊人综合网站| 狠狠干狠狠操狠狠爱| CAOBIBI| 黄色成人网站在线播放| www.25五月婷婷| 噜噜噜噜在线| 五月天婷婷影院影院观看| 久久婷婷色色| 欧美性爱五月天| 国产一区二区av免费| 超碰在线资源| 五月天激情久久| 久久五月六月| 激情婷婷色五月| 婷婷深爱五月丁香| 99视频九九热| 人妻熟女一区二区AV| 字母不卡码人逼| 色九月婷婷综合| 久久激情综合| 啪啪六月婷婷| 99久久久久| 万月丁香狠狠爱| 中美月韩免费A片| 婷婷六月色丁香视频在线观看| 婷婷六月丁香激情综合| 天天婷婷综合亚洲亚洲| av大香蕉| 超碰97在线观看免费| www.色色五月天.com| 青青草蜜臀| 99综合| 五月婷婷五月天| 色色色色色色色色色色色色色五月天| 国产免费一区二区在线A片视频| 婷婷丁香久久五月综合| 五月天婷婷免费| 亚洲成av人影院| 97丁香五月| 亚洲婷婷丁香五月天激情小说| www.com五月天| 狠狠狠狠狠狠| 丁香五月色网| hd五月婷婷在线| 99九九在线精品热动漫| 99在线视频操999| 天天肏视频| 五月丁香亚洲婷婷| 欧美精品999| 天天色99| 日韩色五月| 婷婷五月天网| 婷婷久久精品| 九九热只有精品| 丁香六月激情综合| 秋霞AV淫| 天天久| 99热热热99精品丁香| 97色欧美| 久久精品亚洲一级牲爱综合| 久久九色| 在线成人网址| 五月婷婷在线免费| 国产成人AV不卡| 99国产er热视频| 婷婷五月色情| 美女爆乳18禁www久久久久久| 天天舔天天摸天天射| 97色婷婷成人综合在线观看| 色婷婷yy久| 天天综合天天做天天综合| 久久XX| 婷婷午夜精品久久久| 天天干天天干天天干天天干天| 在线观看国产高清视频免费网站| www.91九色| 色护士综合| 亚洲综合婷婷| 婷婷在线综合| 9久热在线精品| 色五月丁香总合网| 狠狠草在线观看| 91干视频| 国产午夜精品一区二区| 久草嫩草在线观看| 99精品22| 伦乱人妻| 人人摸人人干人人做| 97色在线视频| 黄网免费看| 久久丝袜婷婷| 色综合香蕉| 人人干av| 五月婷婷激情久久| www.色九月| 超级碰碰碰碰视频| 夜夜爽天天干| 99热综合| 婷婷五月天激情在线观看| 欧亚成人A片一区二区| 99亚洲综合| 丁香五月天电影| 亭亭玉立国色天香| 婷婷五月综合在线| 五月天堂婷婷| 日韩AV无码影片| 色婷婷五月六月丁香综合视频| 亚洲五月婷婷| 久久久久久久久久久久久久人妻视频| 公的粗大挺进了我的密道| 99热99日…..| 精品9197碰| 五月天婷婷视频| 99免费偷拍视频| 午夜丁香婷婷| 色色色地址| 久久综合99| 五月丁香六月婷婷综合网| 五月婷婷色欲| 天天插天天插天天插| 五月丁香婷婷99| 色欲久久久久久综合网综合网| 激情综合无码| 91九色在线| 99久久99热| 激情综合网激情五月俺也去| 成人超碰Av| 欧美 日韩 成人 在线| 高清无码入口| 婷婷五月天最新综合你懂的 | 久久九⑨| 五月天色色色| 婷婷亚洲五月色综合| 色五月婷婷影视| 91se在线视频| 午夜九九电影| 欧美色色日韩| 久久五月天婷婷| 五月婷婷在线观看| 欧洲亚洲午夜| 丁香五月成人| 99色亚洲| 色婷婷狠狠干| 丁香五月激情五月| 九热视频| 99er国产| 九九热在线视频观看免费10| 日日干日日| 色五月五月丁香| 人妻久热| 91性交在线播放| 欧美人妻一区二区| 久99热| 亚洲无码九九| 九色视频91| 午夜婷婷| 五月婷婷六月丁香综合视频在线| 色情开心五月| 九热免费视频| 97碰啪啪| www.狠狠色.com| 五月天婷婷成人网| 亚洲另类av| 性生生活大片又黄又| www.婷婷五月天| 99久久这里只有精品免费官网| 成人短视频在线免费观看| av国产精品| 大香蕉久艹| 激情五月婷婷丁香综合网| www.yw尤物| av一区二区电影免费在线观看| 色色色色色色色色综合网| 久久五月天婷婷| 激情五月天之六月婷婷| 婷婷情色五月天| 拍真实国产伦偷精品| 99超级碰碰| 激情五月,激情综合网| 操操操www.com| 青996青| www.91五月| 色婷婷香蕉| xxxx久| 狠狠xx| 国产婷婷五月天| 五月激情婷婷六月丁香| 欧美情月伍月天| 九色激情网| 男女啪啪做爰高潮无遮挡| 97在线精品| 久久这里只有精品热在99| 婷婷中文字幕| 久久久无码精品成人A片小说 | 色色成人網| 中文字幕婷婷| WWW.婷婷五月天.COM| 激情国产五月| 黑人糟蹋人妻HD中文字幕| 婷婷五月色情天| 九九色播五月丁香| 操操操AV| 婷婷伊人五月| 五月丁香久久网| 丁香五月最新网址| 综合www色| 色婷婷av综合网| Av狠狠色丁香婷| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 亚洲国产精品二二三三区| 丁香五月成人| 久久伊人五月天| 五月婷精品| www.jiujiujiu| 婷婷成人AV| 思思热久久艹| 色五月色五天色情网| 亚洲成人网站在线观看| www色五月| 日本一级一片免费视频 | 五月丁香成人网| 思思99热| 天天日天天肏天天奸| 五月丁香色色网| 五月婷婷啪| 热久久这里只有精品| 99久免费视频| 狠狠干激情五月| 九九热再线九九视频免费在线观看 | 国产97色在线| 色娸娸综合网| www.五月婷婷久久.com| 91色色色| 欧亚色色| 性小说五月天| 婷婷五月丁香五月天| 射久久丁香五月| 婷婷涩涩五月天| 九九大香视频| 99精在线| www.五月天社区| 久久婷婷丁香| 婷婷色五月天在线观看| 成人做爰A片免费看视频| 日韩av手机在线观看| 在线观看免费视频| 黄色av网站在线免费播放| 色一情一乱一乱一区9| 亚洲情色一区| 五月婷婷 六月丁香| 综合五月激情网| 天天干com| 91热视频色网站| 久久一热| 亚洲超碰青涩| 激情五月天的婷婷| xxxx五月| 久久66成人网站| 丁香五月婷婷综合精品素人| 九九热在线视频观看| 2025神马午夜福利| 色情五月| 婷婷五月天成人五月天| 五月天久久www| 美欧日韩国产成人在战| 伊人五月综合网| 超级碰碰碰久久网站| 26uuu丁香婷婷五月| 日韩精品一品二区三区的使用体验| 六月丁香啪啪| 开心五月婷婷在线| 九色视频91| 中文字幕乱码亚洲精品一区| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 五月天婷婷激情在线色图| 婷婷色网站| 亚洲精品第一国产综合亚AV | 91碰碰碰| 色噜噜狠狠狠综合曰曰曰| 伊人久久婷婷| 久婷婷视平| 97在线视频人妻九色| 亚洲精品小视频| 超碰免费人人| 激情婷婷护士激情| 色婷婷91激情小说| 婷婷综合在线| αv中文字幕在线观| 色玖玖| 肏日网在线看| 五月婷婷丁香伦理网| 丁香婷婷情色五月天| 夜夜操加勒比| 操逼毛片国语对白| 五月婷婷真爱激情网| 99视频自拍| 97黑人精品区| 天天做天天爱天天玩夜夜爽| 久操大香蕉| 91啪啪网| 五月天综合在线观看| 久久综合九九| 超碰在线精品| 99在线精品免费视频| 欧洲MV日韩MV国产| 久久98| 日本高清久| 综合久久十| 色婷婷婷综合五月天| 六月丁香av| 激情小说五月天| 超碰色综合| www夜夜| 久久丁香综合香蕉| 婷婷五月激情基地| 色噜噜狠狠色综合日日| 久久大香蕉视频| 五月婷婷伊人网| 大香蕉av在线| 色婷大香蕉| 这里只有精品视频99| 伊人玖玖网| 伊人大香蕉综合在线| 婷婷综合色五月天| 午夜无码熟熟妇丰满人妻| 操碰久| 亚洲va国产va天堂va综合va| 免费观看日韩成人av| 日韩六六久久电影| 国产精品第一国产精品| 激情六月下句是什么| 婷婷五月天av| 婷婷色网| 色99在线| www.91AV.COM| 99视频只有这里精品| 激情AV网| 国产成人va在线| 七月丁香五月婷婷在线| 六月色丁香中文字幕| 欧美性色A片免费免费观看的| 久久激情综合|