欧美成人午夜精品久久久,国产?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
返回資訊列表
大香蕉九九| 深爱激情丁香五月| 碰人人97| 丁香五月色情| 九九精品在线网| 亚洲人人艹| 99热这里只有精品2| 99热国产这里只有| AV在线大香蕉| 麻豆123区| 99操视频| 五月亚洲| 亭亭五月天黑人2014| 亚洲色图81p| 色播五月网| 亚洲人妻一区二区| 激情五月天在线| 日本丰满久久| 五月Huangsewang| 五月丁香婷婷爱| 亚洲色欲欧美一区二区三区| 亚洲午夜av| 变态另类色图| 久久久久久久久18久久| 国产69久久久欧美黑人A片| 热久精品| 日韩1区2区| 丁香五月天色| 九九热这里只有精品首页| 偷拍九九热| 婷婷色婷婷| 欧洲亚洲激情五月天在线| 色99在线看| 色情成人五月天| 亚洲秘 无码一区二区三区妃光/1| 狠狠色婷婷7| www.99热这里精品| 五月色亭丁香| 亚洲一级 片内射网站在线观看| 99精品在线观看视频| 思思久久精品| 久久超视频| 婷婷五月天综合小说网| 国产玖玖资源| 天天日天天色| www.天天干| 激情婷婷五月基地| 欧美丰满熟妇BBB久久久| 色色日本| 99九九在线精品热动漫| 色综合色色| www.色五月| 午夜做爱影院| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 777精品久无码人妻蜜桃| 丁香五月天激情免费在线观看AV777| 激情五月丁香综合蜜桃| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 五月丁香婷婷啪啪| 最新高清无码专区| 亚洲av| 亚洲av网站| www夜夜操| 婷婷五月天香蕉| 内射激情在线| 婷婷亚洲欧美丁香五月| 久大香蕉| 六月激情综合| 婷婷综合国产| 超级碰碰视频无码| 九九伊人网| 婷婷五月天在线看| 99视频热| 粉嫩av懂色av蜜臀av熟妇| 日本女人久久| 色婷婷五月天| av中文网| 久久九九中文字幕| 深爱激情四射| 五月天播播| 香蕉人在线香蕉人在线 | 99玖玖在线视频| 这里只有精品久久| 婷婷久久久| 免费观看全黄做爰的视频| 激情综合色婷婷啪啪五月天| 日韩av在线免费观看| 丁香婷婷综合激情五月色| 九九这里是免费的视频5| 午夜微拍福利| 中文字幕AV在线| 五月婷婷激情刺激| 婷婷婷婷色| 六九色综合婷婷五月天| 成人做爰A片免费看视频| 久久这里只有精品视频15| www.99久久久久99| 色婷婷色五月丁香| www久久99| 五月婷婷丁香六月| 97精品综合久久内射| 丁香五月色网| 色综合色色色色色| 五月色婷婷综合| 亚洲V国产V欧美V久久久久久| 丁香五月激情图片婷婷| 丁香婷婷啪啪| 五月天婷婷五月| 婷婷五月天国产在线播放| 色综合久久88色综合天天99| 爱操天堂| 久久国产性爱A V| 2w在线视频| 激情丁香五月婷婷| 日本波多野结衣视频| 五月丁香色综合| 色五月丁香六月资源站| 99色五月| 亚洲视频在线网| 一起草Av| 色五月在线视频观看| 丁香五月大香蕉| 激情五月婷婷色综合| 九色自拍| 久久丁香五月| 人妖色AV色综合| 美女天天久久| 99久久综合网| 97在线刺激| 九九热手机在线视频| 婷婷涩五月| 激情内射人妻1区2区3区| 老师的粉嫩小又紧水又多A片视频| 丁香六月婷婷色XXXXX| 97丁香花五月天激情小说| WWW.婷婷| jiuse91在线| 久久色五月天| 97色色色| 婷五月丁香俺| 天堂草在线看www| 久草五月| 立川无码av| 激情久久五月天| 午夜日日| 99人妻碰碰碰久久久久视| 五月J香蕉婷婷| 五月丁香婷婷在线综合蜜桃| AV九九| 中文av网| 91超级碰在线视频| 狠狠99| 依人大香蕉| 色色五月天网站| 天天日天天日天天搞| 欧美黑人巨大性生话| 亚洲蜜乳AV| 中文字幕色色| 丁香五月天成人网站| 色五月在线观看| 热五月婷婷| 婷婷播5月| www九月婷婷| 五月天亭亭俺也| 日本美女97在线视频| 六月丁香综合网| 激情五月六月婷婷| 婷婷五月天天| 97se在线视频| 激情中文在线| 色五月网址| 狠狠久久婷五月| 人人97碰| 欧美性色A片免费免费观看的| 91丨九色丨大屁股| 国产AV一区二区三区最新精品| 婷婷五月丁香基地在线视频官网| 五月婷婷六月天| 色五月丁香一区在线| 操一区| 大香蕉啪啪啪| 麻豆AV一区二区三区| 襙逼网| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 99热热热99精品丁香| 思思热99er在线视频| 婷婷五月丁香五月| 色偷偷色婷婷| 婷婷五月天成人五月天| 日韩九区| 狠狠色噜噜狠狠| 久久艹网| 中文av网站| 久久久久婷婷五月热综合| 久久色情| 五月丁花六月丁香综合| 久久婷婷五月综合成人d啪| 婷婷伊人网| 五月天综合久久丁香91| AA片在线观看视频在线播放| 久久色吧| 九九色精品| 五月天五月色| 欧美va视频| 丁香网站| 91se在线观看| 中文aV网| 亚洲五月天,激情视频| 五月日韩中文字幕| 丁香五月天堂| 毛片毛片毛片毛片| 色五月天中文字幕| 99re热99| 天天肏视奸| 99热国内精品| 色五月婷婷激情| 激情九月综合| 天啪色| 色欲一区二区三区精品A片| 亚洲人妻一区二区| 色的色综合| 96精品久久久久久久久| 婷婷综合另类| 国内久久久精品99| 欲色人妻| 婷婷五月欧美综合| 久久激情综合| 五月丁香色婷婷久久| 天天色综合色色色色色。| 97人人干。| 99ri在线视频| 国内外色色色色色成人视频| 五月花亭亭| 婷婷五月激情五月丁香五月| 日比网免费国产| 日本超碰在线| 中文字幕 码精品视频网站| 天天干天天干天天干天天干天| 大陆极品少妇内射AAAAAA| 色婷婷成人做爰A片免费看网站| 97在线视频观看| 亚洲99在线| 五月婷婷丁香六月| 超碰国产AV| 国产高潮A片羞羞视频涩涩| 天天综合五月天| 婷婷四色五月| 欧美五月丁香| 天天日天天爽夜夜爽| 26uuu国产精品| 人人爽天天莫| 五月天激情综合在线| 9热精品| 五月婷性爱| 熟女人妻视频| 五月天社区婷婷| 综合婷婷| 国自产拍偷拍精品啪啪一区二区| 99∨VTV| 五月婷婷色色| 婷婷五月花| 久久国产色| 婷婷无码视频| 天天操天天操天天操天天操天天操| 91九色精品| 亚洲成人电影在线免费观看| 伊人三级激情| www.婷婷,com| 狠狠干综合| 日本啪啪网| av激情在线| 五月天婷婷激情在线色图| 五月婷免费视频| 午夜福利8055| 五月天激情小说| 久热91| 亚洲网视屏| 五月丁香精品| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 大香蕉人人人| 婷婷的99视频网站| 国产1区2区3区在线观| www,五月天com| 伊人激情| 婷婷五月天香蕉| 五月婷婷免费看| 婷婷婷婷婷婷婷婷| 激情深爱五月天| 91操网| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 草草色情综合网| 日本WwW色偷偷丁香花久久久京东热| 亚洲V国产V欧美V久久久久久| 婷婷综合中文字幕| 99ri视频在线观看| 欧美婷婷综合| 久久婷五月| 国产美女无遮挡裸体毛片A片| 98国产精品综合一区二区三区| 色级停停| 999婷婷综合| 婷婷亚洲日本| www、色色色| 天天插天天插天天插| 激情99热| 久xxxx| 欧美精品999| 六月丁香婷| 五月丁香综合激情在线观看| 黄色激情五月天| 色婷婷中文在线| 99九九久久| 天天综合网站| 91视频五月丁香| 丁香婷婷六月激情文学| 色狠狠色噜噜AV天堂五区消防| 色爽九九| 国产精品A片在线| 99久.| 亚洲五月综合色播| 激情五月激情综合网| 色色综合网www| 超碰com| 色情播放| 久久婷婷色| 色噜噜狠狠色综无码久久合欧美| 黄网网站在线播放| 亚州操人在线视频| 色一色综合| 五月天婷婷av| 天天日夜夜爽| 99热第一页| 婷婷基地成人五月天| 五月丁香婷婷免费视频| 婷婷干| 这里只有精品偷拍| 色情丁香五月婷婷精品| 狠干综合| 婷婷五月天电影区小说区| 久热伊人| 激情黄色小说色五月| 久久久久亚洲A∨成人乱码电影| 五月婷婷av| 天天射影院| 国产综合视频婷婷| 六月婷婷视频| 91婷婷在线观看| 五月丁香色狠狠干大屄| 色色丁香| 99热久只有| 大香蕉五月天| 轮奸综合网| 婷婷五月精品中文字幕| 日本色色网站| 伊人五月综合网| 日韩小视频在线99| 久久久er热| 亚洲热视频| 9色视频在线| 成人版视频在线观看| 热久91| 五月婷婷激情中心| 日本97久久久精品| 婷婷爱五月天| 九九aV| 另类图片色五月| enecarbon-materials.com污K127封锁请涟系@wip1688 | 人妻激情视频| 色域五月婷婷丁香| 久久黄A片| www.激情| 五月激情婷婷图片基地| 高潮毛片又色又爽免费| 亚州性爱99| 新激情婷婷| 五月丁香婷婷伊人| 9999综合99综合人| 久久停停超碰| 好好日激情五月天| 国产特黄色精品一区二区三区精品无广告| 啄木鸟丝袜美女福利视频| 九九精品9| 精品乱码久久久久| 丁香五月婷婷啪啪| 嫩草AV久久伊人妇女超级A| 国产26uuu视频| 天天爱天天爽| 99亚洲欧洲| 久久久久久久久久久久久久久久一道本| 很很干在线视频| 美女久久天堂| 丁香六月啪啪| 久热只有这里精品| 精品人妻在线| 99re在线观看| 丁香六月高清视频| 人人爽欧美婷婷久久久五月丁香| www.日日夜夜.com| 丁香激情六月天婷婷| 万月丁香狠狠爱| 亚洲九九九九| 超碰九九热| 色婷婷五月天| 深爱五月日韩| 就要爱综合| 日韩在线看AV| 色情婷婷五月天| 婷婷五月天色综合翘| 亚洲黄网在线| 五月婷婷之综合激情| 超碰人人色| 在线视频婷婷| 99人碰碰碰| 色天天久婷婷| 婷婷97碰碰| 99爱精品| WWW.婷婷| 精品99爱免费视频在线观看| 五月丁香六月激情综合| www.玖玖九| 五月花激情| 青青草原精品久久| WWW.五月天9999| 一区二区传媒视频| 国外亚洲成AV人片在线观看| 99久久婷婷国产综合精品草原| 五月婷婷免费| 亚洲另类在线观看| 亚洲超级碰| 激情开心五月天| 黄色一级影片| 亭亭五月天成人| 五月婷丁香| 九九激情| 超碰在线网站9| 久久香蕉网| 激情深爱五月| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 成人片久久网站| 亚洲爱婷婷| 日本视频不卡123区| 97视频久久| 色五月婷激情| 色。 婷婷婷| 99爽视频| 婷婷五月天综合久久| 操日本99| 五月激情婷婷偷拍| 久久性爱99国产| 色色色色网| 久久久无码精品成人A片小说| 激情网第四色| 色色aⅤ網| 人妻久久久久久久久妻久久久久久久久 | 99在线观看| 久9免费视频| 婷婷色狠狠| 人妻丰满精品一区二区A片| 4399成人黄A片| 久婷婷色| 激情综合99| 激情丁香五月婷婷| 欧美性爱一区| 97碰| 99色色视频| 99ri精品| 国产色色视频| 五月丁香六月婷| 操一区| 大香蕉久操| 97色永久免费视频| 99久久9| 久久婷婷综| 久久99精品视频| 五月丁香激情四射| 天天做夜夜爽| 精品夜夜澡人妻无码AV| AA丁香综合激情| 综合色色色| 色婷婷五月天偷拍| 五月丁香色婷婷| 色五月亚洲| 色五月婷婷777| 激情性爱五月天网页| 日本黄 色 片| 久久日九九| 91婷婷丁香五月| www.yw尤物| 亚洲婷婷五月天综合| 久久这里都是精品免费| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 99成人免费热视频| 狼人婷婷久久| 久久婷婷视频| 婷婷99综合| 精品日本视频444| 婷五月天六| 日本一级特黄大片AAAAA级| 久久久WWW| 婷婷五月天中文字幕.| 91九色精品熟女内射| 婷婷大美在线| 99热6精品| 激情综合区| 专区无日本视频高清8| 色色综合网。| 激情四射网| Av狠狠色丁香婷| 天天日婷婷| 五月丁香色| 久久一热| 色99xx| 9 1大香蕉| 婷婷丁香五月天大香蕉| 亚洲网站在线鸭子av| 精品综合五月| 亚洲综合视频在线| 色欲AVV| 色综合色五月| 久久99热精品a片在线观看| 精品人妻一区| 久久ER视频com| 久久婷婷综合五月天| 国产操碰| 欧在线一区| 无码se| 亚州操人在线视频| 日韩成人综合网| 9色免费网| 丁香婷婷六月激情文学| 五月花婷婷| 五月天婷婷色| 97操在线视频| 狠狠色狠狠操| 玖玖婷婷五月天毛片| 日本美女上人| 久久一热| 久久久一级AAA| AV激情五月| 五月丁香成人网| 久久久天堂国产精品女人| 丁香五月激情啪| 这里只有精品视频99| 超碰人人色| 97日在线视频| 欧洲激情精品婷婷| 色五月播五月| 久久xx| 十一月婷婷激情四射| 热久综合| 五月天成人网婷婷| 日本人妻A片成人免费看片| 色婷在线视频| 天堂五月婷婷| 五月天色站| 森林影视大全,最好看的2019年视频| 91人人操人人爱| 青青草大香| 综合色天天| 天天日天天色| 狠狠色丁香五月婷巨| 亚洲啪啪网| 四季AV综合网| 激情婷婷六月天| 波多婷婷久久| 国产资源91在线| 婷婷综合九色伊人| 这里只有精品视频在线看| 少妇性BBB搡BBB爽爽爽视頻| 中文字幕+乱码+中文字幕在线观看| AV中文在线| 久久婷婷五月综合色奶水99啪| 色婷婷色五月天| 超碰免费人人肏| 五月丁香六月婷婷色| 免费做A爰片77777| 久久这里只有国产精品视频| 九九色网专区| 精品久久66| 色色综合五月| 激情亚洲婷婷| 久久曰曰| 色五月综合| 天天狠天天狠| 亚洲无码影音| 色五月丁香五月| 97久操视频| 久久人人九| 亚洲区视频| 婷婷五月色天| www 五月天 com| 天天日夜夜| 久久这里99| 亚洲天堂色| 激情欧美五月丁香| 情色五月天 网站| 五月丁香五月综合欧美| 大香蕉伊人99| 亚洲婷婷五月天在线激情综合网| 嫩草极品| 久久精热| 婷婷伊人綜合中文字幕小说| 国产真实乱了老女人视频| 亚州AV超碰人人操| www.97碰碰com| 少妇综合网| 五月天婷婷爱丁香中文字幕| 久久婷婷六月综合综合| 超碰91在线| 天天人人天天爽| 琪琪色网址| 爆乳熟妇一区二区三区爆乳照片| 色五月婷婷成人视频| 99视频热99| 乱色色色| 91久久久久久| 综合另类激情| 五月婷色| 婷婷五月丁香综合激情| 丁香亭亭久久| 婷婷六月久久| 99性爱视频| 狠狠插狠狠操| 婷婷五月天在线观看av| 久青草大香蕉| 五月天伊人| 五月丁香花激情综合网| 丁香婷婷网| 色婷婷丁香女女| 黄色三级日本| 久久性爱视频久久性爱视频| 淫荡家庭AV| 欧美三级大片AA在线看| 婷婷五月天伊人| 99久久激情视频| 久久综合激情五月天| 激情五月天.色网| www.丁香五月| 色噜噜狠狠色综合成人网| 色丁香综合影院| WWW久久久| 婷婷六月久久| 亚洲精品白浆高清久久久久久| 婷丁香五月天| 成人免费va| 天天上天天爽| 开心五月婷婷激情| 久久综合丁香| 色九九丁香九月色九九色| 亚洲视频一区| 91九色网| 91狠狠综合久久久| 久色五月丁香视频| www色五月天| 婷婷丁香五另类网站| 99热日韩| 色色色区| 丁香五月777| 中文字幕不卡视频| www.韩日视频| 色五月综合激情网| 狠狠插.com| 色99色| 四色永久成人网站| 激情综合网激情五月天| 婷婷六月色开 | 懂色av粉嫩AV蜜臀AV| 影视av久久久噜噜噜噜噜三级| 狠狠做深爱婷婷久久综合一区| 亚洲五月六丁香激情| 欧美婷婷综合| 九九偷拍网| 色五月激情图片| 99热这里只有精品9| 精品色| 婷婷五月天激情网| 色色色999| 色综合婷婷| 六月丁香综合| 午夜婷婷| www.婷婷五月天| 任你爽视频| 亚洲色婷婷| 婷婷激情综合网| 狠狠穞A片一區二區三區| 狠狠操狠狠插| 国产AV一区二区三区最新精品 | 9l视频自拍九色9l黑人| 91女人18毛片水多国产| www.无码com| 综合性爱网| 日韩久久色| av婷婷丁香 六月| 色黑鬼导航| 久久婷婷五月草视频在线播放| 伊人久久99| 日日色五月天| 思思热国产| 久久怕怕视频| 色婷婷成人| www久久99| 国产成人精品一区二三区熟女在线| 五月天大香蕉av| 亚洲精品另类| 操操自拍| www色五月| 天堂婷婷五月色| 激情五月四色| 五月婷婷激情性爱| 国产精品成人AV在线观看春天| 九九综合九| 操人视频91| 99re99热| 色五月丁香伊人| 超碰网站在线观看| 99ER热精品视频| 亚洲一二三网| 97干在线视频| 婷婷丁香五月亚洲综合网在线视频观看| rr天天操| 99热综合网| 婷婷狠狠干| 婷婷综合五月天| 无码G高清天| 日日天天干| 欧美在线视频99| 久久33视频| 五月天激情四射| 深爱五月日韩| 大香蕉综合网| 91综合网| 天天干,噜噜色,狠狠色| 激情五月天偷拍综合网| 久久婷五月综合| 亭亭玉月丁香| 都市激情蜜桃婷婷五月天| 午夜激情五月| 97干在线| 夜色爱爱亚洲| 婷婷六月激情啪啪| 久久婷婷色综合| 9久操| 丁香激情五月天| 婷婷丁香五月天影院| 色爱99| 播五月丁香三月婷婷| 丰满老熟妇BBBBB搡BBB| www.久久爱.com| 五月丁香色婷婷熟女| 婷婷伊人网| 亚洲AV第二区国产精品| 欧美激情五月| 国产精品久久欧美久久一区| 99久久玖玖| 亚洲丁香五月在线观看| 蜜桃人妻无码AV天堂三区| 91热视频色网站| 婷婷色中文| 五月丁香色婷婷伊人| 丁香六月婷婷| 五月天婷婷丁香人人操91| 五月天婷综合网站| 丁香久久| 91久久综合亚洲噜噜成人在线| 激情网综合| 色婷婷久久综合丁香五月| 婷婷五月色播网| 狠狠做五月| 久cao香蕉影院| 97超级操操| 丁香五月亚洲综合丝袜| 欧美婷婷精品激| 天天精品视频免费观看| 91日日日| 欧美久久网| 亚州色色色| 色色综合五月| 5月婷婷激情6月| 色五月激情网| 久久XX| 五月大香蕉| 久久9精品| 久久久久9| 狠狠色婷婷7777久| 色情五月丁香| www.91色| 伊人大香五月天| 婷婷欧美色| 18av天堂| 清色五月天| 奸逼视频| 色播五月丁香综合| 人妻肉射免费观看| 亚洲国产成人裸舞| 五月丁香六月婷婷综合网站 | 99re这里只有精品首页| 亚洲情a| 人人摸人人干人人做| www·五月天| 五月永久激情| 美国天天日天天操| 色五月婷婷小说亚洲中文字幕组| 日韩啊啊啊| 影音先锋自拍网| 五月天成人手机在线视频| 色级停停| 丁香五月天激情视频| 熟女网站久久| 色婷婷小说| 99热欧| 中文婷婷狠狠| 婷婷成人五月天| 久久综合中文| 热91久| 丁香激情五月少妇| 国产伦亲子伦亲子视频观看| 丁香午夜天| 婷婷五月丁香花综合| 亚洲综合五月| 色婷五月天网站| 婷婷六月久久| 五月天激情丁香| 亚洲色婷婷婷婷人人爽| 亚洲中文AV网站| 色婷婷亚洲婷婷| 丁香五月天婷婷久久| 最熟少妇乱码| 婷婷丁香十月| 欧美婷婷五月| 欧美日本97| 日日操天天操| 天天操夜夜操| 少妇婷婷五月天| 超碰99在线| 99久久婷婷五月天| 色玖玖综合网| 老美AA片| 9久久AV| 天天色天天爱天天舔| 色五月首页| 伊人热在线大香蕉| 99热这里都是精品| 五月婷婷免费视频| 99操视频| 婷婷五月天成人基地| 丁香五月777| 桃色成人网| 中文字幕在线免费| 襙比视频| 99操中文视频| 久久久日韩特色特黄AAAA| 美女五月天| 久久只有18视频| 99er这里只有精品| 婷婷色色丁香五月天| 久久综合99综合| 99网| 色五月大| 丁香五月六月欧美| 操笔无码| 99热这里只有精品1025| 色综合久久无码| 少妇被下春药玩弄A片| 超级碰 久久9| 婷婷五月天Av| 99热丁香| 91热久88| 六月丁香视频网站| 五月丁香综合中文| 26uuu欧美| 国产资源在线视频| 高清无码中文字幕aVDV| 婷婷午夜天| 99久久.www| 热这里| 91丨九色丨熟女高潮| 性色av大香综合| 夜夜夜叫天天天做| 天天干天天插| 九九人人精品| av色色国产| 字幕网AV中文字幕| ss五月天激情| 婷婷激情小说| 色爽九九| 丁香五月欧美| 色五月婷婷、老熟女| 99热加勒比| 色情婷| 免费成人中文字幕| 久久99免费视频| 成人色五月天婷婷| 99热综合在线| 五月天成人综合| 五月天久久www| 五月天激情婷婷丁香| AV网在线| 色爱亚洲| 日日做A爰片久久毛片A片英语 | 疯狂做受XXXX高潮A片| 五月色网| 婷婷九月激情| 99热这里只有精品青草| 色操b| 99re99热| www.狠狠操.com| WWW五月天| 婷婷综合网伊人| 丁香五月性爱| 五月丁香六月情| 无码少妇高潮喷水A片免费| 综合网色| 丁香五月电影| 武则天精品久久| 国产免费一区二区三区三州老师F1F1.CC | WWW99热| 欧美 日韩 成人 在线| 久久久五月天婷婷| 538久久| 精品一二三区久久AAA片| 五月婷婷在线丁香| 色婷婷九月| 第四色色六月色综合| 丁香五月激情网| 超碰精品国产首页| 丁香婷婷激情| 五月婷在线影院| 超碰女人天堂| 色狠狠色| 99热在线观看免费精品| 女性自慰系列第五页| 日产精品一线二线三线芒果| 婷婷九月激情| 天天干天天爽天天操| 免费久久这里只有精品99| 日韩成人网站精品久久大全| 丁香五月婷婷色| 天天射色五月天| 9精品久久999| 五月丁香婷婷成人综合网| 少妇伦子伦精品无吗| 婷婷中文字幕版| 九九热视频网站| 久久五月激情网| 99A片| 亚洲色五月| 欧美色片中文字幕久久久久| 六月婷婷AV| 九九热a| 久久亚洲婷婷| 大香蕉五月婷婷| 天天拍天天操| 国色天香成人网| 亚州第一A片| 99视频色在线观看| 亚洲色情网站| 久久这里只有精品热在99| 9色资源在线| 丁香婷婷五月天激情四射| 色9色| 性生活视频98791| 日操夜操天天操不卡| 五月婷婷深深爱| 伊人婷婷青青cao| 日韩AV中文在线观看| 亚洲99热| 激情人妻综合| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 天天综合网在线| 九九亚洲小视频| 欧美成人精品A片免费一区99| www.婷婷六月天| 婷婷五月天AV在| 激情婷婷丁香五月| 成人视频一区| 日本全黄一级999| 丁香五月激情澎湃一区| 日韩成人电影AV| 激情 婷婷| 另类综合国产| 五月婷婷开心网| 91精产品自偷自偷综合| 久久精彩视频99| 五月丁香六月激情欧美综合| 久久九九思思| 久久久er热| 99碰超| 久99精品视频| 囯产精品一品二区三区| 丁香久久| www色婷婷| 网色99| 丁香五月黄色| 99秘 在线| 五月天伊人综合| 色情综合| 欧美日韩五月婷婷| 99热在线免费观看精品| 丁香五月激情婷婷| 精品亚洲国产成AV人片传媒| 国产av一区二区三区| 超碰色色综合| 97操女视频| 久久精品99国产精品日本| 久久538| 色青青视频| 色五月婷婷大香蕉| 九九热狼人| 99热都是精品| 99热这里是精品| 色综合五月在线| 丁香五月婷婷久久综合激情网 | 老司机视频lsj爱就色| 丁香六月婷婷| 第五色色色婷婷| 色婷婷六月精品| 99五月丁香丁| 99热人人操人人操| 亚洲精品一区中文字幕乱码| 五月色婷婷中文字幕| 久久九九免费视频| 激情丰满熟妇五月| 99这里只有免费的精品| 九色自拍| 六月丁香婷婷大香蕉| 色爆五月| 极品人妻VIDEOSSS人妻| 黄色AV日韩| 激情四射婷婷| 五月丁香六月情| 久99久热只有精品国产99| 99免费热在线精品| 九九伊人网| xx久久| 国洲夜色亚热在线久久| 影音先锋日本三级资源| 狠狠久久婷五月| 日韩黄色电影| 激情久久五月网| 激情播丁香| 亚洲夜五月| 色五月激情综合网| 久久精彩视频99| 成人做爰高潮A片免费视频| 久久婷婷亚洲| 91碰碰碰| 婷婷五月天男人影院色色网| 色婷婷色和| 久热超碰91| 婷婷五月天777| 精品一区二区三区免费毛片爱| 欧美丁香婷婷五月| 婷婷五月婷| 亚洲色模骚货| 丁香五月天资源网| 日本va欧美va欧美精品88| 深爱激情网综合| 六月狠狠综合| 激情五月天小说| 天天色天天爱天天爱天天爱y| 五月亭亭六月天| 久草热视频在线观看| av中文网站| 五月激情综| 激情六月天| 五月天丁香成人| 97视频久久| 婷婷五月天成人网| 99热在线播放| www色五月| 丁香五月激情综合| 色狠狠色噜噜AV天堂五区| 综合色图婷婷| 久久99草五月婷婷| 狠狠综合久久综合| 青青草Avb在线| 九色自拍| 99免费综合网| 婷婷永久在线| 玖玖资源天天无码| 婷婷草| 免费亚洲婷婷五月| 91丁香五月| 九九精品99| 专区无日本视频高清8| 欧美精品在线观看| 青青操日本摸摸看看| 婷婷色情五月| 美女网黄| 色婷婷五月六月丁香综合视频| 六月丁香婷婷尤物| 狠狠色噜噜狠狠亚洲A∨| 色婷婷先锋| 人人爽天天莫| WWW99热| 久9视频| 五月婷婷综合久久| www久久久| 97人妻人人| 狠狠色综合网| 丁香五月六月婷婷殴美综合| 色综合色色色色色| 中文字幕成人影视| 99日韩| 97色五月丁香婷婷| 亚洲欧洲国产精品| www。88热在线视频免费观看| 亚洲九九在线| 婷婷丁香五月激情密臀av| 超碰在线国产| 五月婷婷伊| 久操大| 五月婷婷co.m| 嫩BBB槡BBBB搡BBBB视频| 日本色五月| 亚洲另类在线观看| 激情婷婷五月综合| 五月丁香色情| 日日操,天天操| 色婷婷基地| 久久99精品视频| 久久日韩婷婷五月| 99惹| 天天日天天草| 天天爽天天操| www激情网站| 婷婷中文字幕版| 亚洲婷婷激情综合激情999精品| 色婷网| 婷婷五月天性爱视频| 丁香丁婷五月激情| 五月婷婷亞洲中文| 久久这里只有精品热在99| 色色欧美色色色| 伊人久久艹| 五月婷婷色激情| 99欧州偷拍视频| 大香蕉久久视频久久视频| 五月综合激情| 有哪些A片网站| 激情网五月天| 美欧日韩国产成人在战| 无码色色色| 婷婷五月天激情诱惑| 婷婷激情社区| 婷婷五月天六月丁香| 99久久激情视频| 色婷婷久综合久久一本国产AV| 人人摸人人摸| 欧美色五月| 五月丁香久人妻中文| 国产在线黄色| 婷婷综合五月天| 色色欧美。| 五月丁香六月激情综合网| 五月丁香婷婷激激激综合网色播| 六月婷婷激情| 91视频五月丁香| 不卡影院午夜理论片| 激情六月天| www.婷婷五月| 中文av网| 九月丁香很很色| 性婷婷| 五月综合丁香婷婷| 欧美婷婷丁香五月| www色五月天| 精品一二三区久久AAA片| 啪啪综合| 激情五月天在线视频| 天堂美国久久| wwxx日本| 操人91| 婷婷97碰碰| 色五月婷婷九月| 久久久全国免费视频| 日韩成人综合网| 丁香六月婷婷综合| 五月婷久草| 新激情五月天色播| 国产精产国品一二三在观看| 五月激情视频| 婷婷成人AV| 激情五月天情色| 中文字幕婷婷五月天在线观看| 丁香涩涩爱| 亚洲xx在线| 久久成人综合五月天| 亚洲乱码日产精品BD| 丁香六月婷婷综情欧美| 婷婷九九| 婷婷色基地在线看 | 激情网综合| 不卡在线中文字幕无| 色月视频| 婷婷五月天激情网| 欧美va精品va老师va| 天堂综合久久| g00d人体西西| 婷婷六月天| 色吧婷婷| 亚洲第一综合| av操一操| 荷兰av一级| 激情五月丁香社区| 五月天激情久色| 内射在线CHINESE| 艹| 九月丁香网婷婷| 能直接看的AV网站| 五月婷婷丁香| 色噜噜丁香| 另类视屏| 色婷婷五月网| 婷婷五月天视频| 97色碰碰公开视频| 97人人射| 五月丁香六月婷婷操操操| 国外亚洲成AV人片在线观看| 久久精彩视频99| 天天撸夜夜爽| 97luluse| 精品久久人妻| 大香蕉AV在线| 丁香五月激情五月| 激情五婷精品网在线观看网址| 色日本五月天| 婷婷丁香成人在线视频| 天天噜日日噜综合无码| 操一区| 搡BBBB搡BBB搡18| 丁香五月婷婷亚洲另类| 欧美A片在线视频免费观看| 99热在线只有精品| 天堂久久性| 五月香婷婷| 五月丁香激情综合啪| 日本不卡高字幕在线2019| 激情九九这里只有精品| 国内久久久精品99| 九九精品99| 啪啪干伊人婷婷| 天天日中文| 五月婷婷在线免费观看| 亚洲旡码| 丁香六月婷婷| 色综合色综合色综合| 综合色五月| 97福利视频| 国产五月天激情小说| 97涩婷婷婷婷基地| 91在线日| 热99只有精品| 九九色之九九色之88| 国产激情视频在线观看| 婷婷五月丁香伊人| 九九热这里只有精品9| www.综合久久.com| 狠狠干无码| 色五月天丁香婷婷色| 成功精品影院| 97艹| www.天天日| 久操福利| www.国产色| 色综合大香蕉|