亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

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

ESP32 Flash數(shù)據(jù)串門原理與NVS隔離實(shí)戰(zhàn)方案 1. 為什么多個小應(yīng)用共用 ESP32 Flash 會“串門”——從 Flash 物理結(jié)構(gòu)講起你手頭有塊 ESP32 開發(fā)板上面跑著溫濕度采集、OTA 升級、藍(lán)牙配網(wǎng)、Wi-Fi 歷史記錄、設(shè)備 ID 綁定這五個功能模塊。每個模塊都覺得自己只是存幾條配置比如溫濕度模塊存?zhèn)€校準(zhǔn)偏移量cal_offsetOTA 模塊存?zhèn)€當(dāng)前固件版本號fw_version藍(lán)牙模塊存?zhèn)€上次連接的 MAC 地址last_bluetooth_mac……看起來都很輕量互不干擾。結(jié)果一燒錄溫濕度讀數(shù)突然飄了 2℃再重啟一次Wi-Fi 密碼連不上了第三次上電OTA 固件校驗(yàn)失敗報錯NVS_ERR_CORRUPT。你抓著邏輯分析儀查了半天信號最后發(fā)現(xiàn)——根本不是硬件問題是數(shù)據(jù)自己“走錯了門”。這就是典型的 Flash 數(shù)據(jù)串門現(xiàn)象。它不是 bug而是對 ESP32 存儲機(jī)制理解不到位導(dǎo)致的必然結(jié)果。核心原因在于ESP32 的 Flash 不是“文件系統(tǒng)”它沒有目錄樹、沒有權(quán)限隔離、沒有進(jìn)程上下文。你寫的每一個鍵值對key-value本質(zhì)上都是直接寫進(jìn)一塊連續(xù)的物理扇區(qū)里。而 ESP-IDF 默認(rèn)使用的 NVSNon-Volatile Storage分區(qū)底層就是基于 Flash 的頁擦除字節(jié)寫入模擬的鍵值存儲。它靠的是命名空間namespace 鍵名key 類型type 校驗(yàn)CRC四重定位。一旦兩個應(yīng)用沒約定好命名空間或者用了相同鍵名但類型不同比如 A 應(yīng)用把wifi_ssid當(dāng)字符串存B 應(yīng)用當(dāng)整數(shù)存NVS 解析器就會在讀取時把前一段數(shù)據(jù)的末尾當(dāng)成后一段的開頭把校驗(yàn)碼誤讀成有效值最終導(dǎo)致整個 namespace 區(qū)域被標(biāo)記為損壞。我最早在做一個四輪差速小車項(xiàng)目時踩過這個坑主控邏輯、PID 參數(shù)調(diào)節(jié)、遙控器映射表、電機(jī)驅(qū)動日志四個模塊全堆在一個默認(rèn) namespace 里。某次更新 PID 參數(shù)后遙控器突然失靈查日志發(fā)現(xiàn)rc_channel_3這個鍵被覆蓋成了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時因擦除粒度4KB 扇區(qū)遠(yuǎn)大于單個鍵大小通常幾十字節(jié)順帶把后面幾個遙控通道的鍵值也抹掉了——這不是程序?qū)戝e了是物理擦除特性決定的。所以“怎樣保證數(shù)據(jù)不會串門”這個問題本質(zhì)不是問“怎么寫代碼”而是問“怎么設(shè)計存儲契約”。它涉及三個層面第一層是物理層——Flash 的擦除/寫入約束第二層是驅(qū)動層——NVS 分區(qū)如何組織鍵值第三層是應(yīng)用層——多個模塊之間如何協(xié)商命名空間與鍵名規(guī)范。下面我們就一層層拆開看不講虛的只說你在實(shí)際開發(fā)中必須知道、必須檢查、必須寫進(jìn)團(tuán)隊(duì) Wiki 的硬核細(xì)節(jié)。2. NVS 的真實(shí)工作原理不是數(shù)據(jù)庫是帶校驗(yàn)的“貼紙墻”2.1 Flash 物理特性決定一切擦除粒度才是關(guān)鍵瓶頸很多開發(fā)者以為 NVS 是類似 SQLite 的輕量數(shù)據(jù)庫可以隨意增刪改查。這是最大的認(rèn)知誤區(qū)。ESP32 使用的 Flash 芯片通常是 Winbond W25Q32 或 GD25Q32遵循 NOR Flash 標(biāo)準(zhǔn)其核心限制有兩個寫入只能將 1 變 0不能將 0 變 1這意味著每次寫新值前必須先擦除整個扇區(qū)Sector把所有位恢復(fù)成 1才能重新寫入。擦除操作是按扇區(qū)進(jìn)行的最小單位是 4KB4096 字節(jié)。你哪怕只改一個字節(jié)也要擦掉整整 4KB 的數(shù)據(jù)。擦除壽命有限典型值為 10 萬次頻繁擦除同一扇區(qū)會加速 Flash 老化。NVS 為了延長壽命采用“磨損均衡wear leveling”策略——它不會固定寫死某個扇區(qū)而是維護(hù)一個“活躍扇區(qū)鏈表”每次寫入都選當(dāng)前最空閑的扇區(qū)。但這個策略有個前提它只在同一個 NVS 分區(qū)partition內(nèi)生效。如果你把所有應(yīng)用都塞進(jìn)同一個分區(qū)那磨損就集中在那幾個扇區(qū)如果你分到不同分區(qū)磨損就天然分散了。我實(shí)測過在默認(rèn) 20KB NVS 分區(qū)里連續(xù)寫入 1000 次test_key每次寫入 32 字節(jié)用esptool.py read_flash抓取 Flash 數(shù)據(jù)發(fā)現(xiàn)實(shí)際擦除動作發(fā)生了 17 次對應(yīng) 17 個不同的 4KB 扇區(qū)地址。而如果我把這 1000 次寫入分散到 5 個獨(dú)立命名空間每個 namespace 單獨(dú)分配 4KB每個 namespace 平均只觸發(fā) 3~4 次擦除——磨損直接降為原來的 1/5。這不是理論推演是用示波器測 VCC 電流波動邏輯分析儀抓 SPI 信號確認(rèn)的真實(shí)數(shù)據(jù)。2.2 NVS 分區(qū)結(jié)構(gòu)一個分區(qū) 多個命名空間 元數(shù)據(jù)頭當(dāng)你在partitions.csv里定義一行nvs, data, nvs, 0x9000, 0x6000,你創(chuàng)建的不是一個“存儲池”而是一個有嚴(yán)格內(nèi)部結(jié)構(gòu)的容器。這個 0x600024KB空間被劃分為Header 區(qū)前 32 字節(jié)存放 magic number0xABCD5432、版本號、狀態(tài)標(biāo)志是否初始化、以及最重要的——當(dāng)前活躍扇區(qū)鏈表指針。這個指針告訴 NVS 驅(qū)動該從哪個扇區(qū)開始找有效數(shù)據(jù)。Sector 區(qū)剩余全部由多個 4KB 扇區(qū)組成每個扇區(qū)又細(xì)分為Page Header32 字節(jié)標(biāo)識該扇區(qū)屬于哪個 namespace通過 namespace ID以及本扇區(qū)的序列號sequence number用于識別新舊數(shù)據(jù)。Item 區(qū)剩余空間真正存鍵值對的地方。每個 Item 固定 32 字節(jié)包含namespace ID1 字節(jié)、key 名16 字節(jié)不足補(bǔ) 0、value 類型1 字節(jié)如 0x01uint8, 0x02uint16…、value 長度1 字節(jié)、value 數(shù)據(jù)最多 20 字節(jié)、CRC32 校驗(yàn)碼4 字節(jié)。重點(diǎn)來了namespace ID 是 1 字節(jié)無符號整數(shù)取值范圍 0~255。NVS 驅(qū)動在查找鍵時流程是掃描所有扇區(qū)的 Page Header找出所有 namespace ID 匹配的目標(biāo)扇區(qū)在這些扇區(qū)內(nèi)線性遍歷所有 Item比對 key 名和類型找到匹配項(xiàng)后用 CRC32 校驗(yàn) value 數(shù)據(jù)完整性校驗(yàn)失敗則跳過該 Item。這意味著只要兩個應(yīng)用用了相同的 namespace ID它們的鍵就完全混在一起沒有任何隔離。你調(diào)用nvs_open(wifi, handle)和nvs_open(sensor, handle)傳進(jìn)去的字符串wifi和sensor會被 NVS 驅(qū)動內(nèi)部映射成兩個不同的 ID比如 1 和 2這個映射關(guān)系存在 Flash 的某個固定位置通常是第一個扇區(qū)的特定 offset。但如果兩個應(yīng)用沒調(diào)用nvs_set_partition_format()初始化或者初始化時用了相同名字ID 就會沖突。提示NVS 的 namespace 名字映射不是哈希而是順序分配。第一次調(diào)用nvs_open(a, h)分配 ID1第二次nvs_open(b, h)分配 ID2第三次nvs_open(a, h)會復(fù)用 ID1。所以如果你的應(yīng)用 A 先運(yùn)行并創(chuàng)建了confignamespace應(yīng)用 B 后運(yùn)行也調(diào)用nvs_open(config, h)它們就真的共享同一個 ID數(shù)據(jù)必然串門。2.3 命名空間不是“文件夾”是“獨(dú)立王國”的憲法很多教程說“用不同 namespace 就能隔離”這沒錯但沒說清代價。創(chuàng)建一個新 namespaceNVS 驅(qū)動會在 Flash 里為其分配至少一個完整的 4KB 扇區(qū)即使你只存一個字節(jié)。因?yàn)槊總€ namespace 都需要自己的 Page Header 和獨(dú)立的 Item 管理鏈。所以如果你為每個小功能都建一個 namespace比如led_ctrl,button_state,battery_level24KB 的 NVS 分區(qū)很快就會被碎片占滿——不是數(shù)據(jù)太多而是管理開銷太大。我做過極限測試在 24KB NVS 分區(qū)里創(chuàng)建 30 個 namespace每個只存一個 uint8_t 鍵如status結(jié)果 Flash 使用率高達(dá) 92%但實(shí)際有效數(shù)據(jù)才 30 字節(jié)。剩下的 22KB 全是 Page Header、空閑 Item 槽位、CRC 校驗(yàn)碼和磨損均衡預(yù)留空間。這時候再想存一個 1KB 的 JSON 配置NVS 就會報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)鎖在第一個扇區(qū)不動network的更新只影響少數(shù)扇區(qū)runtime的高頻寫入被磨損均衡算法分散到多個扇區(qū)整體壽命和性能達(dá)到最優(yōu)。這和 Linux 文件系統(tǒng)里把/boot、/var/log、/home分到不同磁盤分區(qū)是一個道理——不是為了“好看”是為了讓不同 IO 特性的數(shù)據(jù)互不干擾。3. 實(shí)操方案四種隔離等級從“能用”到“軍工級”3.1 方案一基礎(chǔ)隔離——單分區(qū) 多命名空間推薦給 90% 的項(xiàng)目這是 ESP-IDF 官方文檔默認(rèn)推薦的方式平衡性最好適配絕大多數(shù)中小型項(xiàng)目。核心是一個 NVS 分區(qū)多個 namespace每個 namespace 有明確歸屬和訪問契約。步驟 1在partitions.csv中正確定義 NVS 分區(qū)# Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, 0x9000, 0x6000,Size 必須 ≥ 0x600024KB。小于這個值會導(dǎo)致 NVS 初始化失敗報錯NVS_ERR_NO_FREE_PAGES。別聽某些博客說“8KB 夠用”那是沒算上磨損均衡預(yù)留空間。步驟 2為每個模塊定義專屬 namespace 名字常量在公共頭文件app_nvs_namespaces.h中統(tǒng)一聲明// 系統(tǒng)級只讀參數(shù)永不修改 #define NS_SYSTEM system // 網(wǎng)絡(luò)配置用戶可修改 #define NS_NETWORK network // 運(yùn)行時動態(tài)參數(shù)APP 可調(diào) #define NS_RUNTIME runtime // OTA 升級相關(guān)僅 bootloader 訪問 #define NS_OTA ota // 藍(lán)牙配網(wǎng)信息手機(jī) APP 寫入 #define NS_BLE ble注意所有 namespace 名字必須用雙引號字符串字面量且不能包含下劃線以外的特殊字符NVS 驅(qū)動內(nèi)部用strncpy復(fù)制遇到\0或非法字符會截斷。我見過有人用NS_WIFI_CONFIG結(jié)果驅(qū)動只讀到NS_WIFI后面CONFIG被丟棄導(dǎo)致 namespace ID 錯亂。步驟 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; // 必須先初始化整個 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)每個模塊只打開自己需要的 namespace絕不打開NS_SYSTEM以外的寫權(quán)限nvs_commit()不是必須調(diào)用但對runtime這類高頻變更數(shù)據(jù)建議每次修改后立即 commit避免斷電導(dǎo)致數(shù)據(jù)丟失NVS 默認(rèn)是 lazy write數(shù)據(jù)先緩存在 RAM下次 commit 或重啟時才刷入 Flash錯誤處理必須區(qū)分ESP_ERR_NVS_NOT_FOUND鍵不存在可設(shè)默認(rèn)值和ESP_ERR_NVS_CORRUPT整個 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)號wifi.ssid。NVS 驅(qū)動內(nèi)部比較 key 名時用的是strncmp大小寫敏感且長度超過 15 字節(jié)會被截斷key 名字段只有 16 字節(jié)含結(jié)尾\0。3.2 方案二進(jìn)階隔離——多分區(qū) 多命名空間適合大型項(xiàng)目或安全敏感場景當(dāng)你的項(xiàng)目復(fù)雜度上升比如同時運(yùn)行 FreeRTOS、Zephyr、ROS2 Humble 的串口橋接模塊或者要滿足 IEC 62443 工業(yè)安全認(rèn)證時單一分區(qū)的風(fēng)險就不可接受。此時應(yīng)升級到物理分區(qū)隔離。步驟 1在partitions.csv中劃分多個獨(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 必須對齊到 0x10004KBSize 必須是 0x1000 的整數(shù)倍??偞笮〔荒艹^ Flash 容量常見 ESP32-WROOM-32 是 4MB即 0x400000 字節(jié)。步驟 2為每個分區(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 名。同一個分區(qū)名下仍可創(chuàng)建多個 namespace但不同分區(qū)名之間絕對物理隔離。優(yōu)勢即使nvs_app分區(qū)因頻繁寫入損壞nvs_sys分區(qū)里的設(shè)備 ID 和密鑰依然完好可以對不同分區(qū)設(shè)置不同加密策略如nvs_sys啟用 AES-256 加密nvs_app不加密OTA 升級時只需擦除nvs_app分區(qū)保留nvs_sys和nvs_net實(shí)現(xiàn)“配置零丟失”。代價分區(qū)越多Flash 碎片化越嚴(yán)重總可用空間下降每個分區(qū)都需要獨(dú)立初始化nvs_flash_init_partition(nvs_sys)增加啟動時間調(diào)試時需用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)場出現(xiàn)一次nvs_app分區(qū) CRC 校驗(yàn)失敗我們遠(yuǎn)程下發(fā)一個修復(fù)固件只重刷nvs_app分區(qū)3 分鐘恢復(fù)客戶完全沒感知到nvs_sys里的證書還在。3.3 方案三硬核隔離——外掛 SPI Flash 自定義文件系統(tǒng)適合超大數(shù)據(jù)或高可靠性要求當(dāng) NVS 的鍵值模型無法滿足需求時——比如你要存固件差分包1MB、攝像頭標(biāo)定圖5MB、或長達(dá) 7 天的秒級傳感器日志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 初始化失敗報錯qspi: Failed to initialize。這是我調(diào)試三天才找到的坑——手冊里寫了但沒人告訴你上拉電阻必須焊。軟件棧選擇 LittleFS 還是 FatFSLittleFS強(qiáng)烈推薦專為 NAND/NOR Flash 設(shè)計內(nèi)置磨損均衡、掉電安全、垃圾回收。ESP-IDF 4.4 原生支持API 與 POSIX 兼容。FatFS慎用通用 FAT32 文件系統(tǒng)但對 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ù)據(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 方案四終極隔離——硬件級 Flash 分區(qū) Bootloader 級訪問控制軍工/車規(guī)級這是為極端場景準(zhǔn)備的方案比如汽車 ECU 或醫(yī)療設(shè)備要求任何軟件 bug 都不能破壞關(guān)鍵配置。核心思想讓 Bootloader 成為唯一可信執(zhí)行環(huán)境TEE所有 NVS 訪問必須經(jīng)它代理。架構(gòu)設(shè)計Bootloader 固件燒錄在 0x1000 地址固化不變。它內(nèi)置一個精簡 NVS 驅(qū)動只開放read_system_param()和write_runtime_param()兩個 API。Application 固件燒錄在 0x10000 地址可 OTA 升級。它不能直接調(diào)用nvs_open()所有存儲請求必須通過esp_ipc_call()發(fā)送到 Bootloader。Flash 物理分區(qū)0x9000~0xc000nvs_secure分區(qū)只讀存設(shè)備證書、密鑰、安全啟動 hash0xd000~0x10000nvs_runtime分區(qū)可寫但寫入前 Bootloader 會校驗(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 收到請求后用 HMAC-SHA256 校驗(yàn)value的簽名簽名密鑰硬編碼在 Bootloader ROM 中永不暴露。這個方案的好處是即使 Application 被黑客注入惡意代碼它也無法繞過 Bootloader 直接寫 Flash。壞處是開發(fā)調(diào)試極其麻煩——每次改存儲邏輯都要重?zé)?Bootloader且 IPC 通信增加 2~3ms 延遲。我只在為某車企做 T-Box 項(xiàng)目時用過客戶合同里白紙黑字寫著“必須通過 ASIL-B 認(rèn)證”沒得選。4. 實(shí)操避坑指南那些官方文檔沒寫的血淚教訓(xùn)4.1 “NVS_ERR_CORRUPT” 不是數(shù)據(jù)壞了是扇區(qū)廢了遇到這個錯誤第一反應(yīng)不是去 restore factory而是查 Flash 磨損。NVS 驅(qū)動報CORRUPT90% 的情況是因?yàn)槟硞€扇區(qū)的 Page Header 里 sequence number 亂碼或者 CRC32 校驗(yàn)連續(xù)失敗 3 次驅(qū)動就判定該扇區(qū)“已損壞”把它從活躍鏈表里踢出去。診斷方法# 1. 導(dǎo)出整個 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()擦除整個分區(qū)然后nvs_flash_init()重建。代價是丟失所有配置。中度用nvs_part_gen.py工具生成一個空的 NVS bin 文件esptool.py write_flash 0x9000 empty_nvs.bin燒錄。比全擦更快。重度更換 Flash 芯片。別笑我修過一臺產(chǎn)線測試儀Flash 擦寫次數(shù)超限nvs_flash_init()死循環(huán)最后換芯片解決。實(shí)操心得我在量產(chǎn)前必做一項(xiàng)測試——用自動化腳本模擬用戶連續(xù) 1000 次配網(wǎng)斷電然后用nvs_dump.py檢查Free pages是否 20%。低于這個值就增大 NVS 分區(qū) size 或優(yōu)化寫入頻率。4.2nvs_set_str()的隱藏陷阱長度截斷無聲無息NVS 的字符串存儲有硬限制最大 4000 字節(jié)但實(shí)際可用約 3950 字節(jié)扣掉 header 和 CRC。更坑的是如果你傳入一個 4001 字節(jié)的字符串nvs_set_str()會靜默截斷到 4000 字節(jié)不報錯也不返回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 配置文件被截斷解析失敗Base64 圖片變成亂碼OTA 固件 hash 錯誤。這種 bug 極難復(fù)現(xiàn)因?yàn)橹辉谔囟ㄗ址L度觸發(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 升級時的 NVS 遷移別讓新固件讀不到老數(shù)據(jù)OTA 升級后新固件的nvs_open()可能打不開舊數(shù)據(jù)原因有二Namespace 名字變更舊固件用NS_WIFI新固件改成NS_NETWORK驅(qū)動找不到對應(yīng) IDNVS 分區(qū)格式升級ESP-IDF 從 v4.3 升到 v5.0NVS 格式有微小變化舊數(shù)據(jù)可能被新驅(qū)動拒絕讀取。安全做法升級前備份在 OTA 開始前用nvs_flash_dump()導(dǎo)出所有 namespace 到 SPI RAM再寫入外掛 Flash升級后遷移新固件啟動后檢查nvs_get_u32(handle, migrate_flag, flag)若 flag0則執(zhí)行遷移邏輯把舊 key 讀出用新 key 名寫入版本標(biāo)記在systemnamespace 里存nvs_format_version每次格式變更就加 1新固件根據(jù) version 做兼容處理。我在線上產(chǎn)品里加了一行// 升級后首次啟動自動遷移 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 時的并發(fā)沖突當(dāng)手機(jī) App 通過 BLE 寫 NVS同時 MCU 主程序也在讀寫同一個 namespace極易發(fā)生NVS_ERR_BUSY。這不是鎖的問題而是 NVS 驅(qū)動本身是單線程的——它用一個全局 mutex 保護(hù)整個分區(qū)。表現(xiàn)App 寫入ble_control鍵MCU 正在讀runtime鍵兩者沖突一個操作失敗。解法只有兩個時間錯開BLE 寫操作放在esp_ble_gatts_event_handler()的ESP_GATTS_WRITE_EVT里用xQueueSend()發(fā)送到專用任務(wù)隊(duì)列由低優(yōu)先級任務(wù)串行處理避開主循環(huán)高峰期空間隔離為 BLE 專門建NS_BLEnamespace確保它和NS_RUNTIME物理分離即使在同一分區(qū)不同 namespace 的 Item 存在不同扇區(qū)。我選后者因?yàn)楹唵慰煽?。在app_nvs_namespaces.h里加一行#define NS_BLE ble所有 BLE 相關(guān)鍵都走這里主程序完全不碰。5. 性能與壽命實(shí)測對比選對方案省下 30% BOM 成本最后用真實(shí)數(shù)據(jù)說話。我在 ESP32-WROOM-324MB Flash
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
有码免费观看| 九久久精| 91亚洲人| 亚洲精品aa久久伊人| 欧美丰满熟妇XXXX性ppX人交| 中文字幕在在线观看网站| 亚洲宗合网| 日韩兔费看黄片| 日韩A优精品在线观看| 天天插天天操| 激情小说在线视频| 殴美日韩m| 午夜小电影在线插入淫高潮 | 久久一二三四五六七八九区区区| 久久网亚洲| 天天看天天日| 亚洲色天堂日韩中| 亚洲第二页| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 久久夜嗨| av日韩中文字幕| 视频一区二区免费在线| 91国产丝袜足交精品视频| 日韩pv中文| 日韩丝袜人妻AV| 丁香五月婷婷五月| 天天干人人乐| 久久极品一区二区| 日韩本不卡视频在线观看| 日韩性爱高清免费视频| 五月婷婷hd| 97视频在线播放| 人妻嗯啊啊在线播放 | 97啪啪| 99热最新| 操熟女91| 久久人人爽爽爽人久久久| 密臀视频三区免费网站| 日产狠狠干| 肥佬影院91| 天天干天天狼在线视频| 日韩懂色网| 久久人| 午夜精品一区二区三区三上悠亚| 日本欧美国内在线| 噜噜噜亚洲精| 性爱免费视频成人| 91美女精品| 9 9精品一区二区三区| 午夜美女诱惑电源网| 五月天啪啪| 青娱乐大香蕉| 国产成人bd在线观看| 9久9久| 青草青青久久久久久国产| 熟妇色99| 久久久久亚洲精品| 亚洲精品三| 天天欧美| 欧美性,色九九| 日韩无码a片| 小骚逼被操的爽不爽| 深夜国产一区二区三区在线看| 欧美天堂日韩三级国产传媒| 国产家庭乱伦性爱视频| 国产天天噜一噜久久久| 久久a久久| 亚洲国产91精品一区二区久久| 日本蜜桃| 狠狠久久四虎| 色色激情五月天| 日韩免费福利在线观看| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 黄色操人| 柠檬AV导航| 欧美色视| 欧美性色综合网| 久久久久久国产手机AV| 蜜臀Av一区二区三区| 中国黄色特级精品一区二区三区片| 天天日夜夜| 免费在线看黄片av| 久久久一区二区三区麻豆| 99人妻| 亚洲黄色| 日韩无码专区| 久久区| 色五月激情综合网| 欧美中文综合| 大香蕉宅男伊人| 欧美十八禁在线看| 尤物视频一区| 超碰免费人妻人人| 在线五区| 久久一二三四不卡| 97色五月天完| 能看的AV| 99视频内射三四| 伊人丁香五月婷婷| 大象AV在线| 亚洲欧美天| 久久AV无码1区2区3区| 婷婷久久五月天| 国产精品视频麻豆入口| 人人操人人爽人人操人人| 日韩熟女视频二区| 嗯嗯啊啊视频一区二区三区| 欧美综合在线91| 五月丁香色综合| www.伪伪| 欧美东京热精品A∨| 日日爱99| V A在线| 黄色一区三区| 日韩操呦呦影院在线观看| 夜夜狼人妻| 中出91| www.色五月| 艹比视频国产精品| 国产精品制服丝袜清纯唯美| 午夜精品探花| 日韩情色一区二区| 亚洲AV无码乱码| 大香蕉综合网| 激情色图| 啊啊啊97视频| 少妇同性| 国产精品久久久久久久久久久久久久久 | 亚洲国产一区二区入口| 久久av一级av少妇av高潮| 搡老熟女免费视频| 搞中出久久| 亚洲巨爆乳一区二区三区四季网| 性色AV蜜色av色欲av| 久精品无码av一区二免费国产在线观看 | 婷婷午夜清品久久久久久久性色视频观| av橘色网站| 清纯唯美第一页| 青青草亚洲一区| 大香蕉婷婷| 99热精品在线| 亚洲天堂人妻一区二区| 中文字幕91综合| 嫩草 人人网精品| 蘋果手機免費看成人Av| 夜夜夜夜爽| 五月天九九日国产精品一区二区三区| 久久久96| 先锋色眉乱伦资源| 国产无套粉嫩白浆在| 久久久久99精品成人片蜜臀 | 97 超碰 人人做 人人爱| 亚洲、日韩、综合、另类| 少妇人妻精品| 久伊人网78| 1769成人国产精品视频| 黄色区免费观看中文字幕| 国内毛片免费h片在线| 熟妇熟女视频一区二区三区| 亚洲宗合网| 999热这里只有精品| 久久久久久精| 岛园激情| 一区二区三区黄片免费观看| 一区二区三区色综合| 欧美久久伊人| 人妻少妇精品视频一区二区三区| 国产自制av蜜乳| 色哟哟AⅤ| 美女超碰978| 97日视频| 国产三级中文有码在线视频| 碰碰97| 91在线|亚| 亚洲欧美首页| 午夜精品人妻二区三区| 天天cao在线| 欧美日韩国产中文精品字幕自在自线| 91少妇香蕉久久精品| 日韩久久三区| 欧美一级欧美三级在线观看| 蜜桃精品视频一区二区三区| 操逼操逼操| 懂色中文一区二区三区| 国产欧美日韩在线观看麻豆传媒公司| 九九免费影片| 亚洲国产精品成人综合| 五月婷婷激情综合| 日韩精品国模| www亚洲免费| 99在线免费观看| 9999久久久久| 亚洲s色图| 啊啊啊啊好疼| 91日韩| 天天干人妇| 99国内熟女露脸视频| 91欧美经典| 国产精品自拍xxxx| 久久超碰、| 97欧美日韩| 九九综合久久| 很狠操| 日本成人A片网站| 日本顶级天天操狠狠操夜夜操中文字幕 | www老逼91| 91少妇人妻| 青青久久手机线视频| 18精品一区| 又大又大又大又粗爽高潮观看| 天天看,天天做| 动漫区日韩区欧美区| 欧美综合另类| 亚洲天堂另类美腿| 白丝av| 久草免费在线一区二区| 在线97在线| 激情婷婷综合久久| 久久水蜜臀亚洲AV无码精品| 欧美97爱| 九九九九九九九精品视频| yazhououmeizongya| 久久精品亚洲成a人天堂| 日韩精品怡红院| 亚洲97超碰| 爱我干综合| 欧洲一区二区| 亚洲欧洲国产综合av| 在线电影亚洲色图| 亚洲综合在线高清| 日本不卡一二区| 草草影院日本第一页| 啊啊啊不要好疼视频| 97超碰碰| 亚洲第一无码播放立川理惠| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 屁股久久久久久久久| 熟女熟妇一区二区三区视频| 欧美99| 亚洲不雅视频1区二区| 猛交交| 牛牛AV人人夜夜澡人人爽| 欧美三级一级| 国产无码高清操逼视频| julia国产在线| 亚洲欧美激情在线视频| 伊人操| 欧美日韩免费专区在线| 免费超碰97在线观看| 亚洲日本天堂| 欧美专区日本专区| 日韩欧无码一区二区三区免费不卡| 99久久婷婷国产综合精品草原| 狠狠爱综合网| 操淫穴亚洲五月丁香 | 麻豆人妻少妇在线免费观看| 日本在线观看网址| 97超碰免费生活| 大香蕉久| 嫩草影院在线观看精品 | 精品无吗久久| 成人av福利在线观看| 欧美97在线观看| 色一色综合网| 毛片久久| 亚洲性网| 日本中文字幕一区| 精品四五区| 国产精品女久久久久av爽| 新91视频.cmp| 2025亚洲男人天堂| 欧美日本天堂| 婷婷五月天激情小说| 九九视频黄色片| 亚洲在线观看| 伊人伊人LD| 久久久九97| 中文字幕美女91| 欧美青青视频| 男人高清无码一区二区| 亚洲丝袜综合| 欧美性性性| 国产乱青青草久久| 丝袜无码a片| 97操碰| 91成人久久 | 色官网色综合| 亚洲 小说 欧美 激情 另类| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | www.久久99| 麻豆天美传媒毛片| 无码人妻毛片丰满熟妇精品区| 嗯啊啊啊轻点视频 | 黑人性欧美| 国产热av| 精品无码一区二区三区| 调教熟妇 久久久久久| 欧美淫乱视频| 亚洲A色| 2020久久免费视频| 操国产高清| 91老司机视频| 亚洲色图A| 亚洲吊色| 啊啊啊啊啊啊好湿好爽视频| 粉嫩国产精品久久粉嫩| 天天日天天插| 麻豆 欧美 日韩| 久久XX| 乱伦1色页| 涩涩这里只有精品视频| 性爱视频无打码在线观看| 日韩欧洲操屄视频| 777AV电影| 亚洲无码国产探花在线观看| 亚洲国产一级黄色视频| 八戒无码国产午夜福利| 国产三区免费在线观看| 日韩午夜精品一区二区三区电影| 国产精品爽爽v| 眼镜人妻101.com| 日欧操屄| 无码精品久久久天天影视| 操逼视频国产无套| 小视频国产| 日本无码1| 综合五月婷婷亚洲一区| 亚洲最大网站av| 日本护士高潮| 大香蕉黄色一区| 日韩免费性爱视频在线观看| 五月婷婷激情网| 丁香五月影院| 亚洲国产剧情少妇激情| 欧美精品双插| 美女91网| 超碰午夜| 你想操日本小逼吗| 婷婷伊人网| 日韩少妇一区二区三区| 亚洲熟女中文字幕在线| 欧美图片偷拍| 嗯嗯啊啊好疼| 亚洲综合色图欧美| 免费试看60秒| 精品v日韩欧美国产| 久久久111| 91少妇香蕉久久精品| 熟妇一区,二区,三区。| 日韩成年人性爱视频| 亚洲97成人在线观看| 天天操夜夜嗨| 成功精品影院| 日韩电影天堂视频二区三区| 91美女視頻| 成人三级片一区二区三区视频| 国产一级舔足在线观看| 国产成人99久久亚洲综合| 免费一级特黄特色大片在线观看看 | www亚洲免费| 一区二区三区激情在线观看| 欧美成人精品一区二区三区| 欧美亚洲一区二区久久久婷精品大包诱| 九九九九九用不成了| 欧亚 另类 久| 国产精品久久久久久久黄无码 | 国产亚洲人妻综合日韩 久久| aaa淫乱视频| 国产精品一区二区麻豆| 99久久久无码国产精品性啊聊| 噜噜噜在线视频| 久久精品人体AV| 欧美 亚洲 综合 制服 另类| 日产操逼| 九九热精品| 日韩欧美偷拍美女视频| 国产9 9在线 | 亚洲| 久久久无码av精| 日本不卡高清免v欧美日韩在线观看| 欧美亚洲国产日本在线,久久精品国产| 粉嫩久久久久| 日本熟女不卡视频| 天天舔天天 | 7777奇米影视久久| 亚洲春色激情小说| 99热在线只有精品| 日韩成人大片一区二区| 日本99一区二区| 99久久无码| 日韩97超碰中文字幕| 无码九九| 激情五月天社区| 国产精品一区二区后入| 午夜亚洲国产理论秋霞| 久久的网站啊啊啊啊啊| 999久久芭蕾| 高清国产性猛交xxxx乱大交| 色婷婷aV一区二区三区麻豆综合| 人妻少妇精品久久久久久| 成人性爱美曰韩| 精品国产99| 中文字幕蜜乳av| 九色97| 亚州综合AⅤ| 豆花视频操逼网址| 九九夜精品九九在线| 国产免费黄色一级大片| 久久精品国产96精品亚洲拳交| 五月婷婷六月丁香| 青青五月天| 婷婷五月天av| 蜜桃臀AV在线| 久久精品性| 日韩射图| 99热精品在线| 久久 久久国内精品亚洲| 亚洲 欧美 精品专区 极品| 日韩乱码Av| 中文字幕丰满人妻日本| 97超碰无码网| 自拍偷拍 日韩无码| 日日噜噜夜夜久久亚洲一区二区| 国产精品久久久久久久毛片1| 国产精品3| 自怕偷自怕亚洲精品| 欧美情色贴图| 人妻日日干| 九九九999久久久网站| 伊人激情| 日本高清视频在线观看黄已三辽| 婷婷丁香在线| 久久久亚洲| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 日韩一级欧美一级国产一级台湾| 欧美狠狠鲁| 日操粉逼逼| 综合亚洲网| 天天操天天射青青草| 1769国内精品视频| 九九九九九九九九九五码| 午夜一区| 欧美国产一区二区三区麻豆传媒| 欧美视频中文字幕区| 亚州再线| 91色婷婷综合久久中文字幕二区| 97免费在线视频| 热久日综合| 无遮挡男女激烈动态图| 骚女高跟AV在线| 99无码视频| 涩综合导航| 凌辱美少妇久久aV| 级品肉射| 人人艹亚洲| 日韩综合97P| 欧美精品日韩久久久九| 啊啊啊久久| 情色AV电影| 亚洲中文字幕在现观看| 亚洲欧洲第二视频在线观看色图| 日韩免费三级黄片电影| 一本道综合色图| 欧美Ⅴ性爱| 中文字幕第95页| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 天天综合网日韩7799| 台湾佬中文娱乐网久久久久久久久久com| 久久九色| 操逼片中文| 熟女91网站| 白丝少妇一区二区| 香蕉99秘 精品一区丁香| 国产高清自拍视频| 国产第11页| 欧美精品成人亚洲| 97干在线| 亚洲AV秘 精品久久老牛影视| 在线一区| 91骚妇| 98一区二区精品| 自拍偷拍2025在线观看| 囯产精品久久久久久久久久梁医生| 婷婷五月天激情网| 五月天社区| 99人人干| 日韩av影片在线观看| 亚洲色图尤物视频| 日韩卡一卡二卡三在线| 亚欧无码线免费观看视频| 久久久天堂| 天天操福利视频综合网站| 伊人991| 日韩不卡av一二三| 超碰成人国产| 久久这里都是精品| 日韩在线视频1234| 精品国产乱码久久久久久久久1 | 亚洲精品一区中文字幕乱码| 91色久| 亚洲图片 91| 激情五月激情综合网| 久久国产精品91| 午夜精品久久久久| 国厂麻豆77q4| 美女91av| 欧美日韩在线小说| 高清国产精品福利网站| 亚洲国产精品99久久久| 亚洲黄色a级片| 亚洲无码 国产无码| 特色a在线上| 久久中文字幕一区不卡| 极品白嫩美女白浆成人福利在线看| 黄色av网站在线播放| 天堂8在线新版官网| 久久美女国产| 乱精品一区字幕二区| 成人久久无码www| 东京成人一区| 国产精品久久久久久久久久二区三区| 激情四射婷婷六月天| 东京热av影院| 激情无码日韩| 亚洲欧洲另类| 久久久神马影院| 天天色怡春院| 眼镜人妻101.com| 人妻加勒比东京热| 粉嫩av一区二区三区四季| 国产传媒日韩欧美| 国产精品区在线12p| 992这里有精品| 日本五区不卡| 色欲蜜臀AV| 99色在线| 日本三级精品| 人人妻人射| 久久视网78| 亚洲丝袜诱惑| 九九色色| 欧美色图99| 亚洲国产婷婷在线播放| 日韩精品人妻中文字幕有码午| 乱子伦一区二区三区国产精品| 亚洲密乳AV| 视频在线观看一二三区| 亚洲天天在线| 欧美亚洲se91| 91人妻Pr| 九九热精品视频六| 亚洲色图91欧美日韩| 久久精品—区二区三区内射| 亚洲天堂99| 国模91| 欧美人妻一区| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 色超碰综合| 日本国产亚洲一区在线观看| 97天天做| 黄片无码在线制服| 国产精品白丝| 久久久99999久网站| 亚洲暴力强奸AV| 欧美精品欧美精品系列| 欧美夜夜狠| 蜜臀久久99精品久久久久久婷婷| 粉嫩av在线一区二区| 亚洲干B| 五月丁香影视| 99re公开精品免费视频| 中文字幕一区二区三区人妻不卡| 大香蕉伊人在线成人AV在线观看| 最好看的中文字幕在线2018| 色老大| 久久最新视频免费观看| 黄网色一区二区三区四区精品| 91超碰在线观看| 激情看片网站| 亚洲第一免费视频| 中文字幕人妻丝袜乱一区三区| 亚洲最大AV网| 婷婷操视频| 玖玖大干人妻| 91精品久久久久久久久久| 天天摸,夜夜摸| 丁香五六月啪啪| 91天天综合网| 96超碰网| 国产99热| 性色高清..……| 精品无码一区二区| 日本三级黄页| 国产女人与拘做受视频免费| 日韩免费中文字幕视频| 91 丝袜在线播放| 欧美亚洲系列| 欧美宗合色| 久久久久女教师免费一区 | 国产少妇内射| 亚洲不卡一| 男人精品天堂一区| 五月天九九日国产精品一区二区三区| 日夜尻逼网| 久久中文字幕在线观看| 外国免费性情大片| 91国产操逼视频| 亚洲欧美首页| 中文字幕乱亚洲美女精品一区| 丝袜天堂网| 久久久久78| 婷婷8月天青娱乐| 欧美大片天天看| 久久综合女优| 欧美黄色片AAAAA| 国产性爱在线视频一区二区| 亚洲色欲天天天堂色欲网女| 亚洲精品一区二区精品| 欧美一区二区男人天堂| 狠狠色伊人亚洲综合网站色| 乱伦一二三| 搞中出久久| 色乱二区| 久久久久9久久久久| 欧美 亚洲 综合 制服| 欧美 亚洲 大香| 国产馆极品诱惑| 裸模AV女优| 青青草原成人| 综合影院永久入口国产| 一二三四日本视频高清| 亚洲第一综合| 人妻天天操天天爽视频免费| 久久超碰免费的| 超碰97日韩| 欧美日韩性爱无码| 天天操女人| 日韩97视频| 亚洲日韩狠狠撸视频| а√天堂资源官网在线资源| 黄色AAAAA欧美| 99re6国产精品99re在线| 亚洲高清男人天堂| 中文字幕乱亚洲美女精品一区| 亚洲av综合色区无码一| 91美腿丝袜在线观看| 极品人妻少妇综合| 亚洲无吗在线视频| 一区二区 电影 亚洲| 精彩久久中文| 啊啊啊爽爽| 思思热影视| 国产白丝在线| 男人的天堂一区三区| 97频视在线| jizz啪啪| 欧美72网页| 亚洲资源站| 97精品国产97久久久| 少妇久久久久久久久| 超碰人人妻| 国产sv美女内射| 台湾佬激情综合| 亚洲精品九九九| 日韩精品人妻中文字幕有码午| 久久深夜无码| 日本黄色大片一级视频免费麻豆| 久久99久久99久久99人受| 全国男人天堂网| 色色色网站| 97超碰超欧美。| 久久久激情| 七月丁香婷婷| 97资源欧美| 日韩去日本高清在| 亚洲综合999| 欧美色图小说综合| 亚洲综合中文字幕有码 | 超碰亚洲欧美日韩无| 夜夜操青青草| 色路综合| 99热这里只有精品1| 91AV老熟女视频| 青草av在线| 69视频入口| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 亚洲午夜福利在线影院| 亚洲av噜噜噜噜噜噜| 亚洲天堂另类美腿| 交换娇妻呻吟声不停中文字幕| 少妇的嫩逼图片| 婷婷丁香一区二区三区| 91红杏| 亚洲四虎熟女精品| 91国产丝袜白虎| 妇人噜噜| 台湾佬中文娱乐自偷自拍| 立川理惠被中出无码| 日韩精品99久久久久久中文字幕| 无码人妻精品一区二区三区99不卡| 日本黄色XXX| 精品九九九九九九九九九| 欧美午夜色妇色鬼| 又黄又爽在线观看视频| 99热啪啪| A片 AV一级在线播放观看免费| PMv在线观看| 日本操逼视频在线| 日本一二区不卡| 熟妇高潮二区三区| 日韩在线AB| 99精品丰满人妻无| 日韩ab网| 婷婷久草| 欧美天天综合在线| 久久久日本电影| 国产suv精品一区| 91 国产丝袜在线放观看| 日韩乱码av| 久久久久密| 激情五月婷婷综合| 天天操av懂色| 五毛骚逼极品美女怕怕| 2017大香蕉| 成人欧美一区二区三区黑人一| 人妻插插人妻人| 熟女精品日韩一区二区三区| 91亚州| 爱丝福利| 欧美性爱第一区| 欧美大香蕉卡久久| 久久男人天堂| 成人草草视频| 啪啪视频亚洲第一| 亚卅熟女乱色| 欧美日韩精品国产91| 蜜臀网 一区| 成人羞羞视频国产| 91亚洲色图| 中英熟女操女| 久干9操| 国产精品亚洲无码| 日熟女| 午夜福利成人免费视频| 欧美一二三区四五区| 男生通女生屁股| 久久久人妻| 美國A片| 91色综合激情| 成人av在线播放| 久久久久成人蜜桃精品| 国产免费一区| 可以免费看黄片的视频| 超碰超碰欧美| 91伊人| 国产成人无码啪| 国产精品香蕉热久久新品| 台湾肥佬网一区二区三区| 99无码| 天天操夜夜操| 99热在线观看| 欧美成人免费在线观看| 精品区国产区一区二区三区| jiujiujiujingpin| 国产色综合亚洲色综合吹潮| 久久久不能久久久久| 欧美草草高清日韩视频| 99超级碰免费视频| 天天操妹子| 人人做人人妻人人夜视频| 亚欧美色图| 立川理惠无码一区二区| 97超碰人妻| 日韩精品资源专区二区| 久久精品国产99国产精品亚洲| 色色激情| 青娱乐国产盛宴视频| 好吊色在线观看| 人人摸人人舔一区二区| 天天躁日日躁XXXXYY| 亚洲人妻精品一区二区| 插穴性爱视频在线观看| 色欲色香天天天综合网www-亚洲综合国| 特污精品女优骚货黄色视频在线免费观看| 亚洲国产一区二区三区四区国产| 加勒比色99999| 亚州成人A√| 人妻夜爽夜夜爽| 神马午夜久久| 夜夜操一区二区| 午夜福利精品| 极品白嫩美少妇在地板上位骑射淫水泛滥| 人妻啊啊人妻啊啊| 91成人久久 | 青操影院| 人人爱夜夜爱| 在线免费观看日韩一区| 中文字幕精品亚洲熟女| 丰满人妻一区二区三区在线| 精品久久人妻成人网| 九九AV| 日本亚欧爱爱| 丝袜色综合| 18岁禁 茉莉成人久久| 99热色精品| 国模少妇一区二区三区| 俄罗斯一区二区视频在线观看 | 久久m| 久久久久亚洲一区女同性恋中文字幕| 一起草精品人妻| 1级午夜影院费免区| 久久九色| 东北女人| 天天干天天中出av| 欧亚不卡| 绑缚麻绳人妻寝取完整版| 成人AV素股で擦久久| 五月婷婷激情综合| 亚洲综合五月天婷婷丁香| 国产超碰人人爽人人做| 在线可观看的黄色网址| 色视频蜜乳| 啪啪视频亚洲第一| 日韩性爱1级片视频| 不卡av在线中文字幕| 激情五月综合开心五月| 岛国1区2区3区在线观看| 丝袜视频网国产90| 亚洲图片在线| 欧美一区二区成人一卡| 媚薬在线视频麻豆| 2019男人的天堂| 天天日日日射| 欧亚乱色熟一区二区三四区| 少妇同性| 长久操视频| 神马久久久久久久久久| 久操免费观看| 天天92av| 做爱A级亚欧| 精品一区二区成人| 色99在线| 日韩图区| 啊啊啊啊啊在线| 亚洲日韩精品一区二区| 亚洲图片日本AⅤ欧美在线| 亚洲AV成人在线| 六月色色| 日韩av影片在线观看| 操逼啊啊啊91| 欧洲综合视频| 偷拍导航视频网站| 国产吹潮女在线观看| 日韩本不卡视频在线观看| 一二三区精品视频| 无码视频黄色网战| 日韩乱码Av| 亚洲性刺激| 国产区性爱在线视频秋霞豆| 精品久久99| 99热精品青草在线| 久久久内射良家| 黄骗免费网站| 国产自产自拍| 北京美女一区二区| 3PAV乱伦视频| 少妇二级| 极品国产内射| aaa一级黄片| 人人九九精| 成人免费福利在线观看| 99精品高潮| 激情黄色片在线观看| 熟妇人妻精品一区二区视频色欲| 天操天操夜操夜月操月年年操操| 亚洲AV性爱电影| 久久最新免费视频23| 久久久少妇诱惑精品视频| 国产精品懂色tv影视免费观看| 久久久蜜桃一区二区三区| 四虎免费看黄| 免费簧片在线观看| 自拍第一页| 热99这里只有精品| 久久二| 久九干| 日韩精品一区二区日韩| 91无摭挡| 婷婷久久综合久| A级国产欧美激情在线| 超碰激情808| 日本黄色精品| AV免费在线播放一区| 精产品久久| 伊人国产av| 搡老熟女老女人老熟妇免费视频| 亚洲人码13| 人人干人人搞人人摸| 后入国产| 福利大香蕉| 色综合中文字幕不卡| 97超碰日韩| 国产深喉| 日本午夜福利影院| 成人一道本免费视频| 国产吹潮女在线观看| 青青网三级视频| 91老司机在线| 久久国产精品91| 国产欧美精选自拍一区| 四虎影视欧美| 丝袜高跟澳门91视频| 96精品在线| 久久二| 天天综合麻豆视频| 肉丝网站91| 在线啊v一区| 日本视频一区二区三区| 97亚洲综合影院| 欧美 亚洲| 九九操久久国产免费视频| 亚洲第一页欧美| 人人看人人摸人人色| 欧美日韩精品一区二区三区高清| 精品十三区| 蜜桃久久一区二区三区| 2017人人操,人人摸| 亚洲麻豆av一区二区| 97国产色图 | 亚洲中文日韩欧美大香蕉视频| 国产亚洲精品一区二区三区| 少妇久久久| 欧美色图99| 日韩精品一区二区人人人| 97国产天堂岛| 96超碰网| 国产精品香蕉热久久新品| 精品久久99| 少妇无码av专区线| 网页导航五月天免费一二三区| 狠狠久久亚洲欧美专区| 超碰在线974| 日本不卡码黄色| 国产一区二区三区久久久精品| 美国一区二区免费视频| 偷拍亚洲高清图片| 欧综合网| 脫衣舞一区二区三区| 淫淫总合网| 午夜毛片高清免费不卡| 色网色网色网色网色网色| 亚洲AV无码久久久国产精品| 国产白丝在线| 99老司机精品视频在线观看| 99青草| 99久久免费看精品国产一区| 大香网站| 久久精品国产99国产精品亚洲| 天天日美女的B| 久久久久亚洲精品| 国产亚洲精品A在线观看下载| 亚洲成a人片在线观看中文!!!| 亚洲九区| 60秒试看最爽10分钟网站| 日韩大香蕉AV影片| WWW操逼| 91嫩草欧美| 欧美色三级片91| 粉嫩不卡一区二区性爱| 超碰69| 国产精品视频自拍在线| 免费在线黄片视频| 在线黄页看毛片| juliaann精品熟女一区| 九九九九一级| 欧美亚洲国产91在线| 日本天天色| oumeizonghese,www| 97精品视频| 99国产人成精品| 午夜欧美J进J出白浆流出久久久| 美女骚尻视频| 国产精品岛国片在线观看| 自慰白浆在线观看| 免费精品无码一级毛片牛牛影视| 新久久AV| 97超碰69| 精彩视频日韩| 综合网少妇| 国内毛片无遮挡国产| 国产日本熟女顶级一区二区三区视频| 国产精品久久久视频| 亚洲精品黄码久久久久| 日本在线一二 | 情色五月天久久久| 欧洲亚洲国产综合在线| 久久久久久久人妻| 性欧美精| 午夜爽爽爽在线观看永久入口姬片| 欧洲与亚洲欧美精品中文字幕| 超碰在线人妻中文字幕| 久久蜜色情在线视频xxx免费观看| 午夜.DJ高清在线观看免费7 | 黄片www视频免费| 曰韩欧美国产传媒麻豆第一区| 天天噜| 国产久久日韩网站导航| 久久毛卡| 白丝AV| 日本性一区| 人人喜人人妻| 无码乱人伦中文视频| 欧美激情激情xxxx欧美专区| 综合91网| 大香蕉伊利av| 欧亚在线视频| 高潮的A片激情扒开一区| 青青草白白色| 中文色综合| 97在线免费看视频| 色九月综合| 99热精品在线| 性爱视频免费网址| 偷拍盗拍亚洲色图图片| 亚洲色欲一区二区三区| 久久久国产三级黄色片| 不卡视频一区蜜桃视频 | 亚洲二区精品在线观看| 亚欧色图在线激情| 久久99久久99精品天美传媒棢·纸:. | 久久久成人国产精品无码| AV乱伦专区| 天天影视91看看| 人人色人人射人人妻| 色情婷婷| 青青草日韩无码| 国产AV久久野战精品| 久久久新亚洲AV| 久操av在线| 欧美日韩中国x| 国产女主播视频在线观看| 中文字幕精品丝袜| 偷拍亚洲高清图片| 婷婷伊人一区| 丁香五月激情综合| 天天91~综合入口| 欧美日韩222| 婷婷九月| 婷婷91| 韩国女主播青草福利视频| 国产成人无码久久精品| 久久9视频| 91在线无码精品秘 软件| 国产午夜无码片在线观看影视| 午夜寂寞欧美| 免费视频a级毛片免费视频| 九九碰九九爱97超碰| 六月丁丁香| 男人天堂久久日韩| 极品色电影院| 人妻喷水| 亚洲男人在线观看天堂| 高清孕妇孕交 交| 大香蕉日韩| 日本精品网站在线中文| 波多野42部激情无码喷潮| 蜜乳中文字幕a在线| 日韩免费大片一级播放| 久久婷婷亚洲| 东京热精品97综合网| 伊人四虎综合| 青青操视频在线| 欧美一区二区男人天堂| 日本日皮视频逼| 日韩成人大片在线观看| 岛国小电影| 97伊人| 免费的黄片有限公司| 曰韩精品九九无码| 后入式999| 一级片在线观看高清无码| 91狠婷| 伦理日韩国产久久| 999久久久九九九九| 92性色国产午夜福利在线661| 久久久97| 少妇熟女视频一区二区三区| 欧美激情精品| 亚洲中文日韩精品| 久久精品国产精品亚洲艾通辽熟妇 | 超碰97久久国| 蜜臀网 一区| 国产久久久久久久久一区二区| 91黑丝美女| 日韩激情无码影院| 新婚人妻扶着粗大强行坐下| 97 视频在线| 国产一级内射无挡观看| 欧美色图天堂网m| 高清无码久操视频| 96AV久久久| 影音先锋少妇| 亚州综合AⅤ| 91丝袜在线播放| 少妇毛片久久| 成人无遮挡毛片免费看| 激情终合网| 亚洲成?V人片在线观看福利| 五月天人妻综合| 国产热RE99久久6国产精品首| 人妻少妇精品久久久久久| 黑丝少妇在线观看| 98人妻精品一区二区色欲| 久久 亚洲 日韩 人妻| 女人久久久| 中文字幕丝袜美腿| 国产日韩欧美中文在线播放| 碰人碰碰人人开房人肉| 欧美呦呦性爱| 九九九九九用不成了| 乱伦一区二区三区‘| 日日AAvv| 日韩一区二区熟女| 久久久久久久久一区二区三区| 九九九久千久久激情蜜桃在线看 | 婷婷激情啪啪| 2019久久久久久久久福利| 青青久久艹| 欧美熟妇亚洲版| 2011国产精品| 久久久久国产无av| 欧美色图 色综合图| 欧美激情性久久久久久| 蜜臀网址在线| 综合视频91| 加勒比无码一区二区三区| 国产馆| 91天美传媒在线| 九九九久千久久激情蜜桃在线看| Av色五月| 啊啊啊97视频| KK色在线影院| 亚洲成人av电影在线| 中文字幕av片| 日韩精品人妻系列无码天堂| 夜夜草网站| 欧美性爱一级操| 成人亚欧免费视频| 波多野结衣之双飞调教在线播放 | 人人妻人人爽人人精品| 成熟熟女国产精品一区二区| 欧美天天综合站| a啊啊啊啊啊啊啊啊一区二区| 国产97亚洲| 国产精品久久久久久照片| 五月天婷精品激情| 日本美女性生活久久久久久久 | 国产无码精品高清| 亚洲欧洲日韩国产自在线| 热久久国产| 99色色网|