日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

STM32WB5x BLE OTA卡死原因分析與分層超時(shí)復(fù)位策略

STM32WB5x BLE OTA卡死原因分析與分層超時(shí)復(fù)位策略 前幾天又遇到一次典型的STM32WB5x BLE OTA卡死問題手機(jī)端顯示固件包傳輸?shù)揭话脒M(jìn)度條不再前進(jìn)設(shè)備側(cè)此時(shí)本來應(yīng)該在收包、寫Flash但就是沒有任何回包。等了幾分鐘手機(jī)端BLE連接超時(shí)斷開之后不管怎么掃描都找不到設(shè)備廣播。重新上電也一樣——好像固件升級(jí)把整臺(tái)設(shè)備送進(jìn)了某個(gè)“黑洞”狀態(tài)。這個(gè)問題的標(biāo)題很直接STM32WB5x BLE OTA gets stuck mid-update with no way to reconnect — is a firmware-side timeout/reset the right approach? 我先說結(jié)論不能用一套簡(jiǎn)單的 timeout reset 邏輯去掃尾但也不能完全不處理。關(guān)鍵是要找到卡在哪個(gè)階段、誰在卡、以及復(fù)位后從哪里啟動(dòng)。這篇文章就圍繞這個(gè)思路把 STM32WB5x 上 BLE OTA 卡死的原因、排查手段、分層超時(shí)設(shè)計(jì)和可落地的復(fù)位策略完整拆開聊。1. 卡死現(xiàn)場(chǎng)從“傳輸中”到“徹底失聯(lián)”的三種表現(xiàn)1.1 下載階段卡住數(shù)據(jù)傳著傳著就沒有ACK了第一種卡死最容易被誤判為“藍(lán)牙斷連”?,F(xiàn)象是手機(jī)APP通過 BLE 自定義服務(wù)向設(shè)備持續(xù)發(fā)送固件分片前面幾十個(gè)包都正常設(shè)備也回了 Write Response 或 Notify ACK在某個(gè)分片之后設(shè)備突然不回任何 Confirm 了。手機(jī)端要么等本次 GATT 寫操作超時(shí)要么等到 BLE 連接事件丟失最終報(bào)錯(cuò)斷開。這種卡在下載階段的問題根源幾乎都不在協(xié)議棧而在 M4 應(yīng)用核。STM32WB5x 的雙核架構(gòu)里M0 核負(fù)責(zé) BLE 協(xié)議棧M4 核負(fù)責(zé)用戶的業(yè)務(wù)代碼。GATT 寫請(qǐng)求來了M0 會(huì)把數(shù)據(jù)通過 IPCC 放進(jìn)共享內(nèi)存然后通知 M4 去取。M4 收到數(shù)據(jù)后要做的是把分片寫入目標(biāo) Flash。如果這段 Flash 寫入邏輯寫得很“霸道”——比如在擦寫整個(gè)扇區(qū)時(shí)長時(shí)間關(guān)中斷或者HAL_FLASH_Program一次寫入后再做 CRC 校驗(yàn)?zāi)敲?M4 處理完這個(gè)分片的時(shí)間可能超過 BLE 的連接間隔M0 側(cè)的 ACK 隊(duì)列就會(huì)越積越多。積壓到一定程度M0 的接收緩沖區(qū)滿協(xié)議棧開始丟棄新的 GATT 寫請(qǐng)求。手機(jī)端發(fā)出去的包沒人應(yīng)答連接事件也會(huì)因?yàn)闆]有及時(shí)交換空包而觸發(fā)鏈路監(jiān)督超時(shí)。此時(shí)設(shè)備并沒有死只是 M4 忙到忘記喂 BLE 協(xié)議??雌饋砭拖癖豢ㄋ懒?。1.2 安裝階段卡住FUS 一張接管設(shè)備直接消失第二種卡死比下載階段更迷惑人。所有固件分片都傳完了校驗(yàn)也通過了然后 APP 端發(fā)送“開始安裝”的命令設(shè)備收到命令后可能回了一幀 ACK然后連接斷開。此后無論怎么掃描設(shè)備再也不會(huì)廣播。重新上電也一樣設(shè)備仿佛人間蒸發(fā)。如果你用 ST-Link 接上芯片很可能會(huì)發(fā)現(xiàn) M4 還在跑但 M0 停在某個(gè) FUS 服務(wù)里——這時(shí)設(shè)備并不是“壞了”而是進(jìn)入了無線棧固件升級(jí)Wireless Stack Update的安裝流程。STM32WB5x 的 FUSFirmware Upgrade Service運(yùn)行在 M0 核上負(fù)責(zé)安全安裝無線棧固件、管理密鑰等。當(dāng) FUS 開始安裝或者擦寫無線棧區(qū)域時(shí)BLE 協(xié)議棧必然停止運(yùn)行所有無線活動(dòng)都會(huì)終止。這個(gè)階段本來就不應(yīng)該期望還能搜索到設(shè)備。問題在于FUS 安裝完成后可能需要幾秒到幾十秒一旦安裝失敗或 FUS 卡在某個(gè)內(nèi)部狀態(tài)設(shè)備就永遠(yuǎn)停留在“沒有無線??膳堋钡木置孀匀灰膊粫?huì)有廣播。1.3 復(fù)位后卡住看起來是醒了其實(shí)在裸奔第三種情況出現(xiàn)在“timeout/reset 已經(jīng)寫進(jìn)固件”的設(shè)備上。工程師發(fā)現(xiàn) OTA 卡住后在 M4 側(cè)加了一個(gè)看門狗或者收到“開始安裝”后倒計(jì)時(shí) 10 秒強(qiáng)制NVIC_SystemReset()。結(jié)果是設(shè)備確實(shí)能重啟但重啟后既不廣播、也不進(jìn)入正常應(yīng)用調(diào)試器連上去發(fā)現(xiàn)程序跑飛或死在 HardFault。這通常是復(fù)位后的啟動(dòng)入口出了問題。OTA 過程如果已經(jīng)把新的應(yīng)用固件寫入了當(dāng)前運(yùn)行分區(qū)但復(fù)位后 bootloader 沒有做“鏡像有效性檢查”直接跳轉(zhuǎn)到一個(gè)寫了一半或者 CRC 校驗(yàn)失敗的鏡像CPU 就會(huì)取指失敗卡在啟動(dòng)階段。還有更隱蔽的一種OTA 期間使用獨(dú)立看門狗 IWDG但喂狗邏輯放在主循環(huán)里。當(dāng) M4 阻塞等待 FUS 回復(fù)時(shí)主循環(huán)停擺IWDG 超時(shí)復(fù)位。運(yùn)氣好時(shí)復(fù)位后舊應(yīng)用還在但升級(jí)標(biāo)志被寫壞運(yùn)氣不好正趕上 Flash 擦寫中途復(fù)位導(dǎo)致 Flash 內(nèi)容不完整設(shè)備便再也沒能起來。2. 雙核架構(gòu)下的OTA到底是誰在“卡”誰2.1 先理清 M4、M0 和 FUS 的職責(zé)邊界要處理卡死問題首先得把 STM32WB5x 里的三角關(guān)系搞清楚。M4 核跑應(yīng)用邏輯也就是你寫的產(chǎn)品代碼M0 核跑 BLE 協(xié)議棧對(duì)外呈現(xiàn)為“無線核”。兩個(gè)核通過 IPCC 硬件單元和共享內(nèi)存通信。M4 不需要知道 BLE 連接的底層細(xì)節(jié)它只負(fù)責(zé)從共享內(nèi)存里取數(shù)據(jù)和發(fā)送命令。FUS 是 M0 上的一套系統(tǒng)服務(wù)類似一個(gè)運(yùn)行在無線核上的 mini bootloader。M4 可以通過 IPCC 向 FUS 發(fā)送命令比如查詢版本、安裝無線棧、刪除無線棧、管理安全密鑰等。FUS 有自己的安全狀態(tài)和錯(cuò)誤碼。當(dāng)執(zhí)行覆蓋無線棧區(qū)域的寫操作時(shí)FUS 會(huì)暫停當(dāng)前無線棧運(yùn)行因此 BLE 連接一定會(huì)斷。很多第一次做 STM32WB OTA 的人會(huì)以為“BLE OTA”就是把數(shù)據(jù)寫到 Flash 然后跳轉(zhuǎn)但實(shí)際上要區(qū)分升級(jí)對(duì)象升級(jí)用戶應(yīng)用固件數(shù)據(jù)寫入應(yīng)用分區(qū)通常與 FUS 無關(guān)。升級(jí)無線棧固件必須通過 FUS 或類似機(jī)制不僅要寫 M0 的代碼區(qū)域還要更新藍(lán)牙棧版本和配置。同時(shí)升級(jí)兩者先升級(jí)用戶應(yīng)用再升級(jí)無線?;蚍催^來中間需要明確的狀態(tài)管理。如果沒有做這個(gè)區(qū)分就會(huì)在應(yīng)用 OTA 過程中試圖調(diào)用 FUS或者在無線棧 OTA 過程中關(guān)閉了 FUS導(dǎo)致整個(gè)狀態(tài)機(jī)錯(cuò)亂。2.2 應(yīng)用固件OTA和無線棧OTA是兩條完全不同的路應(yīng)用固件 OTA 通常走雙 Bank 方案當(dāng)前從 Bank1 啟動(dòng)新固件寫入 Bank2寫完后置位切換標(biāo)志復(fù)位后 bootloader 檢查標(biāo)志并嘗試從 Bank2 啟動(dòng)如果 Bank2 無效則自動(dòng)回退 Bank1。這種方式的好處是即使新固件寫壞了Bootloader 還能救回來前提是 Bank1 的舊固件仍然可用。無線棧 OTA 就復(fù)雜一點(diǎn)。無線棧代碼和 FUS 安全性綁定不能由 M4 直接寫入只能讓 FUS 去處理。M4 要做的是把無線棧固件包傳給 FUS再由 FUS 完成校驗(yàn)、擦寫、安裝。這個(gè)過程中 M4 與 FUS 通過 IPCC 異步交互不能一邊等 FUS 一邊又把 BLE 協(xié)議棧殺掉。從調(diào)試角度看應(yīng)用 OTA 卡住大多能在 M4 用戶代碼里找到原因無線棧 OTA 卡住則要優(yōu)先查 FUS 返回的錯(cuò)誤碼和 M0 狀態(tài)。兩者排查手段完全不同所以“一堆 timeout 邏輯走天下”在雙核 OTA 里根本行不通。2.3 “無法重連”的深層原因往往不在BLE超參數(shù)而在于狀態(tài)機(jī)遇到設(shè)備不能重新連接時(shí)很多人的第一反應(yīng)是調(diào) BLE 廣播參數(shù)縮短廣播間隔、打開可發(fā)現(xiàn)模式、延長連接超時(shí)。這些參數(shù)調(diào)整可能有效但治標(biāo)不治本。真正的深層原因往往是沒有把 OTA 狀態(tài)持久化。比如OTA 下載了一半設(shè)備復(fù)位舊應(yīng)用還在但 SFlash 里某個(gè)“升級(jí)進(jìn)行中”的標(biāo)志位被誤寫成了“升級(jí)完成”。新固件寫入 Bank2 后由于復(fù)位發(fā)生在標(biāo)志位寫入之后、CRC 校驗(yàn)完成之前Bootloader 檢查標(biāo)志時(shí)認(rèn)為可以切換結(jié)果跳到損壞的 Bank2。FUS 安裝無線棧時(shí)M4 因?yàn)槌瑫r(shí)執(zhí)行了復(fù)位復(fù)位后 FUS 尚未完成安裝M0 沒有任何可運(yùn)行的無線棧設(shè)備自然無法廣播。這些問題不是靠“多等幾秒”或“多復(fù)位幾次”能解決的。你得有一個(gè)“升級(jí)狀態(tài)機(jī) 啟動(dòng)驗(yàn)證 回退路徑”讓設(shè)備無論什么時(shí)候掉電都能從持久化狀態(tài)里判斷該繼續(xù)升級(jí)、該回退舊版本、還是進(jìn)入恢復(fù)模式。3. 排查套路從復(fù)位原因到FUS狀態(tài)都翻一遍3.1 上ST-Link先看芯片還能不能連上調(diào)試口遇到 OTA 卡死別急著改代碼先把芯片接到 ST-Link打開 STM32CubeProgrammer。如果連接成功你能讀出器件 ID、Flash 大小、當(dāng)前 FUS 版本和無線棧版本。這一步能立刻確認(rèn)設(shè)備是否“活”著以及是哪個(gè)核在跑。如果連接失敗優(yōu)先檢查目標(biāo)板電源以及在 CubeProgrammer 連接設(shè)置里選擇正確的接口模式和復(fù)位模式。有時(shí)設(shè)備運(yùn)行在不正常狀態(tài)需要把 BOOT0 拉高進(jìn)入系統(tǒng) Bootloader 再連接。不過 STM32WB5x 的內(nèi)部 Bootloader 走的是 USART/USB不是 SWD所以如果 SWD 連不上通常說明芯片內(nèi)部時(shí)鐘或電源出了大問題或者調(diào)試引腳被 M4 代碼復(fù)用并配置成了模擬輸入。3.2 第二眼看RCC_CSR這臺(tái)設(shè)備是“怎么死的”如果 SWD 能連上下一步我會(huì)讀取復(fù)位原因寄存器RCC_CSR。這個(gè)寄存器能告訴你最后一次復(fù)位是由誰觸發(fā)的上電復(fù)位 / 欠壓復(fù)位外部復(fù)位引腳獨(dú)立看門狗 IWDG 復(fù)位窗口看門狗 WWDG 復(fù)位軟件復(fù)位 NVIC_SystemReset其他原因在項(xiàng)目里用一個(gè)調(diào)試命令把復(fù)位原因打印出來會(huì)非常有價(jià)值。比如你發(fā)現(xiàn)設(shè)備每次 OTA 卡死后的復(fù)位原因是 IWDG那說明問題出在“沒有及時(shí)喂狗”如果復(fù)位原因是軟件復(fù)位說明你的超時(shí)邏輯真的執(zhí)行了NVIC_SystemReset()但顯然它沒有解決問題。讀取代碼如下uint32_t csr RCC-CSR; if (csr RCC_CSR_RMVF_Msk) { RCC-CSR | RCC_CSR_RMVF_Msk; // 清除復(fù)位標(biāo)志 } // 判斷 if (csr RCC_CSR_WDGRSTF_Msk) { // IWDG復(fù)位 } else if (csr RCC_CSR_SFTRSTF_Msk) { // 軟件復(fù)位 }我在實(shí)際項(xiàng)目中遇到過很隱蔽的情況設(shè)備上電后RCC_CSR里的 IWDG 復(fù)位標(biāo)志一直存在而代碼里沒有在啟動(dòng)早期清除它導(dǎo)致 Bootloader 以為上一次 OTA 異常退出不斷觸發(fā)回滾。這種“歷史復(fù)位原因”沒有清理干凈也會(huì)造成奇怪的啟動(dòng)行為。3.3 第三步翻FUS狀態(tài)和無線棧版本STM32CubeProgrammer 有一個(gè)專門的 FUS 頁面打開后能直接看到 FUS 版本、無線棧版本、當(dāng)前運(yùn)行的安全狀態(tài)以及上一次 FUS 命令的執(zhí)行狀態(tài)。如果上位機(jī)顯示無線棧區(qū)域?yàn)榭栈蛘?FUS 狀態(tài)不是 Running那基本可以判斷設(shè)備是卡在無線棧升級(jí)的安裝階段。此時(shí)你要么重新通過腳本刷入一套完整的無線棧固件要么用 Flash 全擦除后重建。注意STM32WB5x 的無線棧區(qū)域有安全校驗(yàn)單純?cè)?MDK 里隨便寫一個(gè)地址是沒用的必須走 FUS 或官方工具鏈。在自定義 OTA 流程中我建議把 FUS 命令的返回碼納入日志系統(tǒng)。比如FUS_ERROR_IMG_NOT_AUTHENTICATED固件包簽名校驗(yàn)失敗。FUS_ERROR_OP_ABORTED操作被中斷。FUS_ERROR_NO_DEVICE_ACCESSM4 沒有對(duì)應(yīng)權(quán)限。這些錯(cuò)誤碼能幫你判斷問題出在 OTA 包的合法性還是出在 FUS 命令交互流程。3.4 如果連SWD都連不上優(yōu)先懷疑Flash被寫花假設(shè)設(shè)備徹底沒反應(yīng)SWD 也連不上這時(shí)不要上來就懷疑芯片壞了。先強(qiáng)制進(jìn)入系統(tǒng) Bootloader把調(diào)試口重新救出來。如果 STM32CubeProgrammer 能連接系統(tǒng) Bootloader再對(duì) Flash 做整片擦除擦除后一般都能通過 SWD 重新連接。這種情況多發(fā)生在 FUS 安裝過程中被 M4 側(cè)硬復(fù)位打斷。雖然 STM32WB5x 在 Flash 擦寫上做了一些保護(hù)但復(fù)位發(fā)生在閃存編程時(shí)序中間仍可能導(dǎo)致無線棧區(qū)域處于不穩(wěn)定狀態(tài)。而一旦無線棧區(qū)域內(nèi)容損壞M0 無法啟動(dòng)協(xié)議棧整顆芯片就表現(xiàn)為“BLE 完全消失”但 M4 可能還在空轉(zhuǎn)。所以從設(shè)計(jì)層面講任何可能中斷 Flash 編程的操作都必須格外小心。尤其是無線棧升級(jí)期間不是萬不得已不要用 M4 側(cè)看門狗去打斷 FUS 流程。4. 固件側(cè)timeout/reset能解決什么不能解決什么4.1 超時(shí)機(jī)制的正確分層傳輸層、安裝層、啟動(dòng)層回到標(biāo)題里的問題firmware-side timeout/reset 到底是不是正確方案我的答案是timeout 是必須的但 reset 要分級(jí)、分層不能一把梭。可以把整個(gè) OTA 流程分成三個(gè)層次層次典型超時(shí)場(chǎng)景正確處理方式是否建議直接復(fù)位傳輸層長時(shí)間沒有收到下一個(gè)固件分片中止本次下載保持廣播等待重連通常不需要復(fù)位安裝層FUS 安裝無線棧超時(shí)查詢 FUS 狀態(tài)記錄錯(cuò)誤再?zèng)Q定復(fù)位謹(jǐn)慎需先保護(hù)標(biāo)志啟動(dòng)層Bootloader 檢測(cè)到鏡像無效回退到上一分區(qū)或進(jìn)入恢復(fù)模式通過跳轉(zhuǎn)邏輯完成不屬于普通復(fù)位4.2 傳輸層超時(shí)該中止但不該急著復(fù)位傳輸層的超時(shí)最簡(jiǎn)單。M4 收到固件分片后維護(hù)一個(gè)last_rx_tick。如果超過某個(gè)閾值比如 5 秒沒有收到新的分片就認(rèn)為本次傳輸已經(jīng)失敗。此時(shí)正確的做法是把 OTA 狀態(tài)機(jī)切到OTA_STATE_FAILED。記錄失敗的偏移量和錯(cuò)誤碼。釋放本次 OTA 占用的緩存。判斷當(dāng)前正在運(yùn)行的應(yīng)用是否有效如果有效繼續(xù)跑舊應(yīng)用同時(shí)繼續(xù)保持 BLE 可連接。如果舊應(yīng)用已經(jīng)被部分覆蓋比如采用了單 Bank 原地升級(jí)則應(yīng)讓設(shè)備停留在“可發(fā)現(xiàn)且可重新下載”的狀態(tài)等待手機(jī)端重連后重新把完整固件包傳一遍。為什么不要立即復(fù)位因?yàn)閭鬏攲映瑫r(shí)往往只是手機(jī)空中的射頻干擾、BLE 連接參數(shù)不匹配、或手機(jī)端 APP 異常此時(shí)設(shè)備本身沒有掛。你復(fù)位自己反而會(huì)讓手機(jī)端徹底丟掉連接不復(fù)位至少手機(jī)端還能通過當(dāng)前連接繼續(xù)補(bǔ)發(fā)幾包。我在實(shí)測(cè)中發(fā)現(xiàn)BLE OTA 傳文件時(shí)如果手機(jī)屏幕熄滅或系統(tǒng)進(jìn)入省電模式連接會(huì)進(jìn)入 dormant 狀態(tài)幾秒鐘沒有數(shù)據(jù)是很正常的。把傳輸超時(shí)設(shè)成 2 秒會(huì)誤傷設(shè)成 10 秒又會(huì)讓卡死恢復(fù)太慢。一般建議根據(jù)實(shí)際數(shù)據(jù)包間隔設(shè)置比如你的 APP 每 20ms 發(fā)一包可以設(shè) 2 秒如果每 100ms 發(fā)一包可以設(shè) 4~5 秒。4.3 安裝層超時(shí)需要“先確認(rèn)狀態(tài)再?zèng)Q定是否復(fù)位”安裝層指的就是“固件傳輸完成開始擦寫/切換”這個(gè)階段。如果是應(yīng)用固件雙 Bank 切換整個(gè)過程很短M4 直接操作 Flash超時(shí)主要關(guān)注擦寫時(shí)間是否異常。如果是 FUS 安裝無線棧過程可能跨越數(shù)秒到幾十秒此時(shí) M4 與 FUS 基于 IPCC 異步交互。這個(gè)階段最忌諱的就是“M4 等不到回復(fù)后直接調(diào)用NVIC_SystemReset()”。為什么因?yàn)?FUS 可能在擦寫無線棧 Flash此時(shí)硬復(fù)位可能會(huì)打斷 FUS 的擦寫流程。STM32WB5x 的 FUS 內(nèi)部有一定恢復(fù)機(jī)制但你在錯(cuò)誤的時(shí)間點(diǎn)打斷它可能讓無線棧區(qū)域處于“存在但校驗(yàn)失敗”的狀態(tài)。與其這樣不如在進(jìn)入安裝前就設(shè)計(jì)好先通過 FUS 查詢當(dāng)前狀態(tài)如果 FUS 還活著讓它繼續(xù)跑或者主動(dòng)發(fā)送一個(gè)放棄命令。如果查詢 FUS 也得不到響應(yīng)才考慮復(fù)位并且復(fù)位后要檢查無線棧版本和 FUS 錯(cuò)誤碼決定是否進(jìn)入“恢復(fù)模式”。4.4 啟動(dòng)層回退把最后一道防線放在bootloaderOTA 中最重要的一道防線不是“超時(shí)復(fù)位”而是“啟動(dòng)時(shí)驗(yàn)證”。無論你采用雙 Bank 還是單 BankBootloader 都要在跳轉(zhuǎn)到應(yīng)用之前驗(yàn)證目標(biāo)鏡像的有效性。STM32WB5x 的雙 Bank 結(jié)構(gòu)非常適合做 A/B 升級(jí)。你可以在 Bootloader 里做以下檢查讀取用戶分區(qū)頭部的鏡像 CRC 或簽名。如果 CRC 有效正常跳轉(zhuǎn)。如果 CRC 無效檢查另一個(gè) Bank 的 CRC。如果另一個(gè) Bank 有效切換啟動(dòng)。如果兩個(gè) Bank 都無效進(jìn)入串口或 BLE 恢復(fù)模式。我在項(xiàng)目里把這條規(guī)則固化為“啟動(dòng)鏈”Bootloader - App A / App B。OTA 寫入只寫非運(yùn)行 Bank寫完置位 “pending” 標(biāo)志復(fù)位后 Bootloader 根據(jù)標(biāo)志和校驗(yàn)結(jié)果決定正式切換還是回滾。這樣一來即使安裝階段復(fù)位時(shí)機(jī)不對(duì)只要舊 Bank 還完整設(shè)備至少能回到舊版本而不是“徹底失聯(lián)”?;赝藱C(jī)制雖然不能替代超時(shí)復(fù)位但它能在超時(shí)復(fù)位做錯(cuò)時(shí)兜底。很多“OTA 卡死無法重連”的最終原因其實(shí)是 Bootloader 沒有做鏡像有效性檢查啟動(dòng)鏈斷了。5. 一套可以落地的OTA超時(shí)復(fù)位參考設(shè)計(jì)5.1 狀態(tài)標(biāo)志和數(shù)據(jù)布局先行在設(shè)計(jì) OTA 邏輯之前先確定狀態(tài)標(biāo)志放在哪。ST 官方的雙 Bank 方案一般會(huì)使用幾個(gè) Flash 字或 Option Byte 作為升級(jí)標(biāo)志。由于 Flash 寫入要擦除不建議頻繁修改同一個(gè)字。更穩(wěn)妥的做法是用一個(gè)獨(dú)立的配置扇區(qū)專門保存 OTA 狀態(tài)。一個(gè)簡(jiǎn)單的狀態(tài)結(jié)構(gòu)體大概長這樣typedef struct { uint32_t magic; uint32_t ota_state; // 0: idle, 1: transferring, 2: pending_switch, 3: failure uint32_t transfer_offset; uint32_t target_bank; // 目標(biāo)啟動(dòng)區(qū)域 uint32_t last_error_code; uint32_t crc32_of_struct; } OtaPersistentStatus;每次更新狀態(tài)后先計(jì)算整個(gè)結(jié)構(gòu)體的 CRC32再寫入保存區(qū)。Bootloader 啟動(dòng)時(shí)先檢查 magic 和 CRC32如果校驗(yàn)失敗就認(rèn)為狀態(tài)不可信強(qiáng)制走安全啟動(dòng)路徑。別小看這一步很多 OTA 卡死就是狀態(tài)標(biāo)志半寫半不寫造成的。5.2 傳輸超時(shí)的計(jì)算和喂狗節(jié)奏傳輸超時(shí)不能拍腦袋定。先量一下你的 BLE 連接實(shí)際帶寬手機(jī)端每隔多少毫秒收到一個(gè) Write Response如果平均間隔是 30ms那 3 秒內(nèi)沒有任何包就說明鏈路已經(jīng)斷了或者對(duì)端已經(jīng)放棄。設(shè)計(jì)喂狗時(shí)也要注意喂狗不能放在while(1)主循環(huán)里因?yàn)?OTA 接收數(shù)據(jù)時(shí)主循環(huán)可能長時(shí)間阻塞。更好的做法是“事件驅(qū)動(dòng) 后臺(tái)任務(wù)輪詢”void OTA_BleOnWrite(uint8_t *pData, uint16_t len) { // 接收更多數(shù)據(jù) OTA_Context.rx_data_happened true; OTA_Context.last_rx_tick HAL_GetTick(); // 寫Flash或者緩存 } void App_MainLoop(void) { uint32_t now HAL_GetTick(); if (OTA_Context.state OTA_STATE_TRANSFERRING) { if (now - OTA_Context.last_rx_tick OTA_TRANSFER_TIMEOUT_MS) { OTA_AbortTransfer(); } } // 其他任務(wù) HAL_IWDG_Refresh(hiwdg); // 不要在Flash擦寫期間長時(shí)間不進(jìn)這里 }如果在接收回調(diào)里直接寫 Flash而且 Flash 擦寫時(shí)間比較長要注意在擦寫前開一個(gè)足夠?qū)捜莸目撮T狗窗口?;蛘吒纱喟呀邮站彌_做深一點(diǎn)數(shù)據(jù)先放進(jìn) RAM后臺(tái)慢慢寫 Flash。這樣 BLE 協(xié)議棧能更及時(shí)地回 ACK連接不容易斷。我在實(shí)測(cè)中比較推薦“RAM 緩沖 后臺(tái) Flash 寫入”的模式。每次 BLE 收滿一個(gè)扇區(qū)大小的數(shù)據(jù)就把數(shù)據(jù)優(yōu)先緩存到內(nèi)部 SRAM 或外部 PSRAM然后在主循環(huán)的批量寫入階段統(tǒng)一寫 Flash。缺點(diǎn)是占用 RAM但能極大降低傳輸層卡死的概率。5.3 安裝階段復(fù)位策略的偽代碼思路當(dāng)所有固件包接收完成進(jìn)入安裝階段時(shí)我會(huì)把流程拆成三步void OTA_StartInstall(void) { // 1. 持久化狀態(tài)進(jìn)入 install 階段 OTA_SaveStatus(OTA_STATE_INSTALLING, target_bank); // 2. 等待FUS或Flash切換完成 uint32_t timeout HAL_GetTick() OTA_INSTALL_TIMEOUT_MS; while (HAL_GetTick() timeout) { HAL_IWDG_Refresh(hiwdg); // 對(duì)FUS安裝流程輪詢FUS查詢命令 FUS_Status_t st FUS_QueryStatus(); if (st FUS_STATUS_READY) { OTA_SaveStatus(OTA_STATE_COMPLETED, target_bank); return; } if (st FUS_STATUS_ERROR) { OTA_HandleFusError(st); return; } } // 3. 超時(shí)處理先記錄錯(cuò)誤再考慮復(fù)位 OTA_SaveStatus(OTA_STATE_FAILURE, OTA_GetCurrentBank()); NVIC_SystemReset(); }注意第 3 步的復(fù)位不是首選項(xiàng)。如果 FUS 查詢命令能響應(yīng)我寧可用 FUS 命令去中止或確認(rèn)而不是直接系統(tǒng)復(fù)位。只有 FUS 已經(jīng)無響應(yīng)、且確認(rèn)繼續(xù)等下去沒有任何進(jìn)展時(shí)才執(zhí)行復(fù)位。復(fù)位后用 Bootloader 的鏡像校驗(yàn)來兜底。5.4 實(shí)測(cè)驗(yàn)證哪些方案能“救回來”哪些會(huì)“越救越死”我實(shí)際測(cè)試過三種策略結(jié)果差別很大策略 A傳輸層超時(shí)后立即NVIC_SystemReset()。結(jié)果設(shè)備重啟后能起來但如果 OTA 有大量緩存沒有落盤導(dǎo)致寫了一半Bootloader 沒有回退邏輯設(shè)備卡死。越救越死。策略 B傳輸層超時(shí)后中止升級(jí)但保持廣告等待重連。結(jié)果設(shè)備能重新被發(fā)現(xiàn)手機(jī)端重新連接后可以重新傳輸雖然浪費(fèi)時(shí)間但可靠。策略 CFUS 安裝階段從HAL_GetTick()到 30 秒超時(shí)后硬復(fù)位。結(jié)果有幾次設(shè)備能恢復(fù)正常有幾次無線棧區(qū)域被寫壞需要用 ST-Link 全擦后重刷。風(fēng)險(xiǎn)很高。綜合來看最可靠的設(shè)計(jì)是傳輸層盡量不重啟安裝層盡量不硬復(fù)位啟動(dòng)層盡量依賴 Bootloader 自動(dòng)回退。6. 幾個(gè)關(guān)鍵決策和給后來者的建議回到最開始的問題firmware-side timeout/reset 是不是正確做法我的看法是timeout 必須放在 OTA 的每一層但 reset 是最后手段不能放在傳輸層“每等不到回包就復(fù)位”。正確姿勢(shì)是把 OTA 設(shè)計(jì)成狀態(tài)機(jī)每個(gè)狀態(tài)都有明確的超時(shí)行為、持久化標(biāo)志和恢復(fù)路徑。復(fù)位只是所有恢復(fù)路徑都不生效時(shí)的最終兜底。我在實(shí)際項(xiàng)目里踩過坑尤其建議注意這幾點(diǎn)第一不要讓 M4 在等待 FUS 回復(fù)時(shí)完全阻塞。哪怕是一個(gè) 5ms 的HAL_Delay也要保證主循環(huán)仍然能喂狗、能處理其他后臺(tái)任務(wù)。第二復(fù)位之前一定要保存錯(cuò)誤信息。你可以把last_error_code和ota_state寫到備份寄存器或者 Flash 的專用區(qū)域這樣復(fù)位后可以通過日志直接看到“上次是為什么復(fù)位”。沒有這一步你只能靠猜。第三升級(jí)無線棧之前先確認(rèn)當(dāng)前 FUS 版本和無線棧版本確保無線棧固件包與 FUS 兼容。版本不匹配導(dǎo)致 FUS 安裝失敗的情況比硬件問題常見得多。使用官方 OTA 例程時(shí)也要看清示例中給的無線棧版本不要隨手拿別的版本刷進(jìn)去。最后再分享一個(gè)排查技巧OTA 卡死時(shí)用 STM32CubeMonitor 或一個(gè)簡(jiǎn)單的串口日志把 M4 側(cè)收到的 BLE 數(shù)據(jù)字節(jié)數(shù)和 FUS 返回的每一條命令狀態(tài)都記錄下來。我靠這招定位過很多“看起來像玄學(xué)”的升級(jí)失敗——其實(shí)只是某個(gè)包在傳輸層丟了但上層一直沒等回來。把日志打印到 Flash 尾巴上掉電也不丟。這樣即使設(shè)備徹底失聯(lián)接上 ST-Link 還能從 Flash 里把最后的現(xiàn)場(chǎng)數(shù)據(jù)讀出來比盲猜高效得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲码专区| 亚洲一二三四区机械| 老熟女综合| 性性欧美| 日本 成 人 小说 电影 一区二区| 国产精品嫩草久久久久| 超碰精品日韩欧美国产| 蜜臀99久久精品久久久久久| 久久久少妇诱惑精品视频| 精品一区96| 激情五月综合网| 欧美日韩国内不卡| 久操网视频| 国产在线播放成人免费| 精品美女少妇一区二区| 秘书高跟黑色丝袜国产91在线| 歐美性天天| 懂色综合久久久| 在线强奷到舒服的无码视频 | 欲色综合| 亚洲少妇激情一区二区三区| 天天情欲宗合网| 久久免费精品96| 超碰97网址| 亚洲av无码成电影在线播放| 97亚洲在线| 色牛牛AV| 日韩一级特黄av毛片| 999精品久久久久久久| 中文字幕免费看| 青娱乐大香蕉| 免费97视频| 嗯嗯啊啊亚欧精品| 99久在线精品99re8a| 丰满少妇一区二区三区专区| 久久久久9久久久久| 长长久久曰曰夜夜成人网| 999国产精品999| 99熟女| 久久鲁干| 97香焦色区| 国产天天噜一噜久久久| 国产日逼视频| 999日韩中文精品观看视频。| 天天澡天天爽日日av| 成人黑料社久久| 懂色天天爱天天日天天射天天澡| 欧美经典一区二区三区| 亚洲一区日韩精品| 婷婷激情五月| 91日韩国产欧美亚洲另类精盘州至城都| 双插性欧美一二三区| 九九九不卡| 99热这里只有是精品10| 蜜桃久久久久久久| 嗯~啊~快点 死我视频| 欧美1区二区三区公司| 日韩欧美蜜桃精品久久中文字幕久久| 极品五月天噜噜| 74成人在线| 久久九九精品一区二区| 操曰本熟女| 91 在线亚洲| 黄色一级视| 内射夫妻三片| 人妻少妇久久中文字幕一区二区 麻豆| 加勒比AV天堂| 亚洲综合另类色图| 欧美综合第一页| 中文字幕无码不卡啪啪| 久久视频,这里只有精品| 噜噜噜狠狠色综合| 午夜婷婷| 久久9精品视频| 美女人妻色网站| 蜜臀少妇一区二区| 日韩AV一区二区三区三州三州| 丰满人妻大屁一区二区| 亚洲中文字幕妇伦久久| 91强在线播放| 中国特猛少妇色xxx| 婷婷午夜清品久久久久久久性色视频观| 亚洲午夜蜜臀| 日韩欧无码一区二区三区免费不卡| 天天搞欧美| 高潮9999外国| 成人性爱av| 亚洲色图殴美色图激情乱伦| 亚洲欧美激情另类色图| 亚洲 图片 欧美 色图| 欧美亚洲综合色| 色网综合网| 91欧美少妇| 啪啪视频免费在线观看| 大香樵伊人网| 中出91视频| 欧美色www亚洲国产阿娇要播| 日韩精品一区二区高清| 欧美在线观看综合国产| 天天天肏屄欧美| 人妻天天爽夜夜爽2| 免费AV中文网在线观看| 91欧美| 97视频在线观看高清资源| 欧美 综合 亚洲| 欧美色院| 蜜臀亚洲中文| 国产乱伦性爱区| 国产suv精品一区二区四区999| 哑洲在线| 国产成人久久久精品免费AV| 桃色人妻在线视频| 欧美黄色片在线播放| 欧美在线官网| 狠狠操使劲操| 欧美大香蕉97| CCYY草草影院地址入口| 久久性爱免费送| 97伊人超碰| 久久99网站| 99热在线只有精品| 97超视频在线观看| 岛国精品视频在线观看| 91 丝袜在线播放| 白丝AV网站| yiqicaoav| 精品国产乱码久久久久A| 激情视屏国产乱伦强奸| 神马麻豆福利院| 97久久精品亚洲| 日本一区二区中文字幕久久| 国产一区二区三区不卡手机在线| 校园春色亚洲色图| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 玖玖爱综合| 99热99在线播放激情| 狠狠操狠狠燥| 亚洲精品骚逼| 粉嫩国产精品久久粉嫩| 国产精品免费日韩| 91色香| 蜜臀精品1区2区| 夜夜操青青草| 日韩精品资源专区二区| 亚洲精品电影| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 乱伦图av| 天天日天天干天天色| 欧美第一页| 色婷婷导航| 色吧5亚洲| 午夜操操操| 操逼内射干逼白丝91| 久久婷婷精品| 看一级特黄a大一片| 综合色好色| 日韩精品午夜操呦呦不卡影院| 伊人97色天使| 性老妇一区二区三区| 久操B网| 成人看片网站| 丁香五月天社区| 性在久久久久久| 一二三区操逼国产91| 超碰精品97| 色综合婷婷| 国产97在线视频| 国产91丝袜 在线播放| 欧美同性恋 的搜索结果 - 91n| 中日韩欧美精品无码AⅤ一区二区| a级免费在线观看| 久久久999国产精品| 97色爱| 蜜桃臀 后入 一区 二区 三区 在线| 国产92麻豆天美精品色欲5| 这里只有精品97| 中文字幕av片| 加勒比海色香蕉婷婷| 手机看av网站在线看| 在线视频日韩欧美国产| 五月香婷婷| 亚洲AV性爱电影| 无码精品久久久天天影视| 久草成人影片| 大学生口爆吞精| 日本国产欧美高清在线| 五月天婷婷色| 亚洲日本韩国在线| 亚洲情色一区二区三区| 99少妇| 午夜性生活av免费在线看| 亚洲欧美另类图片| 五月丁香六月综合缴清无码 | 国产对白刺激视频| 九久9精品| 啊啊啊啊视频免费| 97网址97| 欧美亚洲素人制服精品| 九九成人视频| 亚洲欧美天| 丝袜美腿亚洲| 天天躁日日躁XXXXYY| 色狠狠色| 亚洲日韩97| 人人艹亚洲| 天天干,夜夜爽| 三级网站超变态精品| 亚洲精品电影| 久久激情网| 青操影院| 日本在线视频导航| 曰本人妻人人澡人人夹| 17c嫩草51久久91嫩草| 992视频一区| 欧美狠狠干| 天天做日日做天天欢。| 日韩丨制服丨中文|在线| av在线播放国产一区| 少妇二级| 日本不卡在线二区三区| www.99视频| 极品久久久久久久久久久久久久| 一级AV性爱| 蜜桃无码AV一区二区| 欧美成人综合| 欧美性爱在线无码| 欲香欲色综合天天伊人| 欧美日韩国产中文超碰| 亚洲无992tv| 伊人久久婷婷| 国产久久久久久| 天天干,夜夜爽| 一本久久精品中文字| 亚洲综合另类小说色区亚洲成av人片在www| 亚洲国产日韩欧美熟妇在线| 色97综合中文字幕| 婷婷综合五月| 100啪啪视频大全| 色婷婷淫色网| 99性爱| 后入精品| 成人A片男人的天堂| 天天做日日做天天欢。| 国产精品久久久| 久九九九九九九热| 国产 日韩 另类 视频一区爱| 熟妇艹鸡八| 动漫爆乳3D奶水一区在线观看| 亚洲色图欧美| 亚洲美腿丝袜香蕉影视欧美成人| 日韩97视频!在线| 欧美在线永久天堂| 99热在线播放| 97中文综合| 激情一区二区三区在线观看| 亚洲激情综合另类男同| 伊人991| www.激情| 亚洲精品色| 中文字幕在线免费观看视频| 亚欧Av| 18禁中文字幕| 在线毛片片免费观看| 青青草久久在线| 久久人妇| 久久精品夜色国产亚洲AV| 麻豆精品久久久久久久| 草莓精品视频| 久久一级无码精品毛片6| 色色色色日本| 免費黃色視頻觀看一| 天天操天天射天天日| 国内外内射高清视频| 日韩人人精品| 丰满人妻一区| 国产9熟妇视频网站| 人妻天堂三区| 91欧美少妇| 久射吧| 美女十八禁| 中文字幕三四五区| 人人操 欧美| 国产精品久久久久久亚洲色欲| 99久久免费看精品国产一区| 久久久久久久9最新免费视频观看| 国产精品熟女九九九| 97丝袜亚洲在线播放| 综合天天。| 亚州性9| 92性色国产午夜福利在线661 | 超97在线精品视频| 国产熟女完整版中字| av网页一区二区三区| 国产视频不卡在线观看| 欧美九9 9 9| 欧美熟妇操操视频| 中文有码9| 国产97色在线| 强奸乱伦Av网| 97 国产一区| 激情文学小说一区二区| 26uuu最新| 操b在线观看| 国产精品久久久三级无码| 黑操B| 神马九九九| 黑人猛交| 97超碰色五月| 久久久久99精品成人片蜜臀| 日韩色| 日韩无码嘿咻黑热久| 欧美在线中M| 欧美性性性| 国产色呦呦| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 20cm女自慰在线日韩欧美| 超碰亚洲欧美日韩无| 欧美97色| 天堂av2019| 校园春色 欧美| 欧美78p| 午夜经典| 亚洲情色五月天| 精品视频一区二区| 久干网| 亚洲欧洲成人在线电影| 久久九九网| 熟妇人妻精品一区二区| 天美国产精品| 99久久九九| 精产品久久| 99热18| 亚洲国产97在线精品一区| 成视频在线观看免费看| 久热热| 久久婷婷五月| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 婷婷伊人綜合中文字幕小说| 久久大黄片| 精品十三区| 久久久久亚洲AV无码专区少妇| 男人的天堂成人的社区| 国产三区免费在线观看| 成人一二| 60秒免费视频| yazhousetuoumei| 国产成年精品高清在线观看91| 91亚.色| 欧美成人精品一区二区三区| 日本五十路熟女一区二区| 亚欧美无遮挡| 色拍偷亚洲| 精精夜夜| 操B在线观看| 高清不卡 中文 人妻| 国产原创精品| 色5月婷婷| 91快色色色色色| 蜜桃狠狠色伊人亚洲综合网站| 亚州男人的天堂| 99.色网| 艾草av| 久操高青| 狠狠狠狠狠干| 99re9在线| 久久精品三级影视| 久久久久久久人妻| 国产操伦| 91粉嫩萝控精品福利网站_精品影音先锋国 | 日韩情色AV| 德国一二三不卡| 特污免视频| 日韩精品国产精品五码一区二区| 婷婷色婷婷| 天天综合91在线| 欧美黑人性猛交91| 一区二区三区四区姦女| 91丝袜熟女| 欧美精品,四区。五区| 职场同事知名国产国产精品久久欧美日韩| 97国产精品久久久久 | 日本999精品视频| 超碰爽人妻熟女Av| 国产精品suv一区| 精品久久在线区一区| 伊人97色天使| 亚洲91大片| 午夜一区| 大香蕉免费乱伦视频| 国产 码在线成人网站| 性一交一乱一交A片久久四色| 深夜激情无码| SUV一区二区在线看| 无马一区二区| 国产精品福利视频播放| 熟女被操视频网址| 亚洲丰满很很操| 热99这里有精品综合久久 | 麻豆久久精品亚洲精品88| 日本成人免费一区二区三区| 熟妇操花| 好舒服视频| 日产操逼| 欧美成人9797| 麻豆熟妇乱妇熟色A片在线看| 密臀在线一区尤物| 欧美性特| 可乐操亚洲蜜911| 伊人黄色片| 综合久久99| 一区二区三区四区五区久久久久久| 人妻一区二区三区四区视频| 风流老熟女一区二区三区l| 男人天堂网站| 97玖玖人妻| 欧美亚洲丝袜人妻制服中文99| 黄片不用下载在线观看| 久久久久久少妇| 久久精品人人做人人看| 国产久久久9999| 欧美激情精品| 久久精彩视频| 日韩一级二级三级免费看完整版国语版| 色综合一本| 青青操97| 亚欧性爱无码| 第四色色综合91| 九九九久久久| 91天天c| 岛国片国产成人亚洲播放| 丰满翘臀美女影院视频| 强奸乱伦亚洲第一页| 物业黑人 AV一区| 久久精品高清无码一区| 深夜激情无码| 天美传媒AV在线| 欧亚综合一卡二卡中文字幕| 国产真实子伦对白| 黄资源| 久久精品国产免费观看99| 9.1小视频| 国产精品亚洲免费| 黄片免费日韩| 91美女国产在线| 婷婷久久网| 日韩一区二区精彩视频| 中文字幕第95页| 中文高清一区二区的| 操逼操逼逼操操逼91 | 日韩精品三级| 久久综合18p| 加勒比久久综合网高清| 亚洲欧美国产中文视频| 大香蕉99999| 99黄页网站| 欧美久久毛片基地| 国产精品第一区第一页| 午夜呻吟欧美| 亚洲成人福利电影免费| 亚洲深夜福利| 0755午夜福利视频| 熟妇女伦乱视频视频| 亚洲AV乱码专区国产噜噜亚洲 | 欧美 日韩 另类 亚洲| 久久99网站| 18禁免费视频| 91丨九色丨国产丨人妻在线| 啪啪视频亚洲第一| 亚洲97成人在线观看| 色牛aV| 久久嫩草| 国产精品另类一区大香蕉| 国产第11页| 干b在线性社区| 国产亚洲欧洲在线观看| 亚洲男人的天堂AV| 色五月激情AV在线| 欧美视频一区二区三区| 久热伊人| 操逼视频国产无套| 91人妻做a观看视频| 国产无码精品久久久久久| 中文字幕成人乱码熟女精品国50| 欧美综合另类| 日本性感人妻91| 少妇一区二区三区高速| 思思热免费在线视频| 狠狠色狠狠色狠狠五月| 黑人无码一区二区| 色婷婷电影| 97这里都是精品| 东京热不卡视频| 亚洲一区二区中文字幕| 国产诱惑| 97日韩| 欧美成人免费在线观看| 欧美1区二区三区公司| h无码动漫在线观看| 五月天偷拍| 欧美精品久久| 在线免费观看高清无码视频| 亚洲国产美女久久久久 | 欧洲亚洲人妻无码中字久久三区四区| 亚洲久草AV色图| 91久久久久久| 亚洲脚交| 成年人性爱日韩| 一级A片女人高潮叫床| 97bbn| 成人无码在线超碰网| 久久思思热| 曰本道人妻久久久在线不卡色视频| 91精片| 九月丁香综合网| 一区久久久二区| 中文字幕熟女人妻丝袜丝| 国产精品分类在线观看| 亚洲综合113页| 九九九久久久| 久久国产视频性吧| 98久久| 99热超碰| 天天看天天日天天操| 熟妇人妻一区二区 | 午夜啊啊| 香港成人一级视频在线青青草| 国产内射爽爽大片| 欧美综合第一| 狠狠中文字幕| 欧美线天码中字| 五月丁香婷婷综合| 麻豆性爱视频在线播放| 另类小色呦| 美女9118禁| 嗯啊不要在线观看嗯啊| 国产亚洲深夜激情| 欧美在线色| 日韩成人电影AV| 99热这里只有精品18| 99在线精品观看99| 午夜舔阴达高潮视频免费看| 麻豆人妻偷人精品无码视频| 国产欧美伊人| 超碰无码加勒比| 久久久久久中文| 啊好大好舒服| 秋霞一集毛片观看| 男人天堂网手机版婷婷| 久久111| 精品久久久亚洲AV成人网站| 欧美一级AAAAAAA| 在线啊啊啊| 久久伊人在线五区| 色综合九九| 操逼啊啊啊91| 久久国产精品m码| 亚洲校园激情| 牛牛久久国产精品视频一二三| 大香蕉九九| 超碰人人操97碰| 美女诱惑一区| 青娱乐91| 9久久久久| 综合色好色| 亚洲色欲一区二区三区| 天堂九九九九九九九九九| 91小视频| 久久精视频美日韩在线视频| 操屄不卡视频| 牛牛aV| 思思热免费视频观看| 影音先锋每日最新资源在线观看 | 欧美韩国你懂得在线| 伊人五月天青青草婷婷| 国产肏屁眼视频| 亚洲精品久久久久毛片A片拉屎 | 99re在线视频这里只有精品| 亚洲有码 欧美精品| 婷婷丁香六月天| 久久综合婷婷| 色五月激情网| 啪啪91| 精品97精品97| 人妻天天爽夜夜爽2| 热热色综合网| 亚洲牲交| 色97干| 国模无码人体一区二区三| 在线日韩精品一区二区三区| 91午夜无码| 日本中文字幕在线视频| 国产有码一区| 夜夜夜爽www精品视频| 欧美 亚洲 在线| 亚州男人天堂| 国产精品亚洲天堂网址| 毛片中心9视频99| 欧美色图 人妻| 久久久精品一区二区| 久久久久久人体| 亚洲AV无码乱码| 欧美专区日本专区| 亚洲欧洲日产国产综合网| 青青草中出视频| 国产精品嫩草影院午夜两性| 天天干天天插| 无码九九| 手机在线中文字幕国产| 97在线欧洲| rion磁力链接| 色情婷婷| 91中出视频| 日本国产亚洲一区在线观看| 色香阁在线| 国产欧美另类久久久精品课程| 免费看A片毛毛片在线播| 亚洲综合图色在线| 日韩无码视频黄色| 中文字幕精品丝袜| 日本成人在线不卡一区二区三区| 欧美不卡二区| 偷拍片久久| 亚洲欧美日韩二区视频| 在线情色电影 91大| 久久人人爽爽人人爽人人片αV| 欧美中文字幕男人天堂久久精品| 久久天堂网| 国产精点久久久成人| 91美女视频。| 夜夜操2028| 欧美色道啊| 日本性爱少妇| 日韩9区| 五月丁香啪啪| 日本孕妇一区二区视频操逼免费看 | 日本成a人v网站在线观看| 91精品国久久久久久无码| 一级黄色视频网| 四虎免费看黄| 色香色欲天天综合网天天来吧| 国产美女91视频| 综合一区中亚洲国产成人综合精品 | 美女啊啊啊啊啊啊啊| 国产高清26uuu| 成人久久久| 啊啊啊啊啊啊啊啊要喷了| 久久xx| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 亚洲影视综合| 欧美亚洲厕所精品偷拍91| 青娱乐国产精品| 国产强奸AV在线| 啪啪自拍九九综合| 亚洲熟女偷拍在线观看| 偷拍超碰| 婷婷三区| 色色色色色色色色色色色色色色综合| 高清国产成人无码| 蜜臀99久久精品久久久懂爱| 亚洲少妇自拍中文字幕懂色| 亚洲情色在线| 神马久久久久久久久久| 亚洲男人的天堂V| 天天做天天爱| 国产精品老师| 超清中文乱码字幕| 97精品国产精品免费观看| 人妻天天夜夜爽一区二区| 日日日日做夜夜夜夜无码| 日韩欧美麻豆| 神马久久久久久久久| 天天影视激情欧美| 91色综合激情| 97精品综合久久网| 激情啪啪视频| 97在线亚洲| 亚洲情色 自拍| www国产无码| 日B操| 欧美色网络| 中文字幕99999| 亚洲男人天堂AV| 色吧91| 成年女人黄网站| 国产视频一区二区免费| 国产免费一区二区三区最新不卡| 五月丁香六月婷| 日本人体九九九九九九| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产美女自拍视频| 无码区蜜乳| 人人爱操| 后入人妻一区| 综合亚州欧美| 亚洲图片色图欧美另类| 999岛国大片| 久久99国产综合精品女同| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 91在线限制级| 最新无码国产| 日韩在线欧美精品一区二区| 久久久久无码| 夜夜高潮夜夜爽夜夜爱爱一区| 九九aV| a男人的天堂| 97chaopengongkai| 久久人人爽av亚洲精品天堂桃色| 青娱乐手机日韩在线视频| 久久婷综合| 国产精选视频| 五月色综合| 9l视频自拍9l九色成人| 精品视频一区二区| 抽插无码高清一区| 亚洲综合113页| 欧美黑人与女人91| 黄片色区软件| 日本精品五区| 99这里有精品视频| www.色综合| 久久久久久久精| 成人 日韩欧美一区| 91美女视频电影| 国产美女口爆吞精视频| www.99在线| 亚洲 欧美 第一页 | 韩国黄片aaaa| 国产农村妇女精品1区二区| 老女人综合网| AV免费在线播放一区| 久久嫩草| 美女露胸露尿口| 久久久99免费| 欧美青青视频| 日韩二级| 亚洲色图日韩精品| 婷色五月| a级免费在线观看| 久久国产对白激情浪潮| 天天干一干| 欧美18禁91| 日韩一区二区精彩视频| 久久久久久中文| 91五月天| 欧美色青| 白嫩国模丰满一二三区| 99精品在线播放| 天美传媒麻豆一区二区三区国产精| 蜜桃久久久久久久| 日韩欧美性爱电影在线观看| 后入综合久久| 国产成人免费观看在线视频| 91性高朝久久久久久久久| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 免费操逼视频下载| 超碰午夜| 自拍二页| 青青青操| 欧美色图亚洲特色| 操逼日韩无码 | 天天操熟妇| 免费亚洲国产精品久久一区| 日日夜夜国产综合| 乱理日韩中文| 亚洲黑丝在线| 国产黄色av大片网站| 欧美组图日韩亚洲中文字幕| 日本最新1区2区3区| 91久久精品国产| 丁香五月久久| 自慰白浆在线观看| 亚洲色啪| 免费的黄片wwwwww| 色99视频| 婷婷久久五月| 国产蜜臀精品一区免费尤物| 欧美一区二区情色| 加勒比av中文| 久久精品日韩专区免费观看| 97超碰色屌| 操操操操网黑人| 夜夜操中文字幕| 九九九只有精品| 国产9熟妇视频网站| 欧美姓爱综合网| 欧美夜夜草视频| 欧美日韩国产三级黄色| 五月婷在线| 亚洲激情 欧美色图| 99九九久久| 熟妇一区二区三区| 人妻无码一区二区三区久久99| 亚洲麻豆18发?| 天天综合网亚洲综合网| 亚洲欧美97√| 狠狠91| 亚洲97久久精品亚洲| 午夜天堂精品久久久久91| 九X超碰| 亚洲日韩国产精品| 日本www操操操| 97色色色综合网站| 清纯唯美亚洲另类| 91视频精品| 97色婷婷| 99蜜桃臀久久久欧美精品网站| 丝袜美腿91| 日本三级一区二区 在线| 丁香五月影院| K8久久久久| 亚洲精品aa久久伊人| 东京热精品97综合网| 亚洲AV成人精品网站在AV| 亚洲天堂中文字幕无码男同| 日韩三级性| 东京热一区二区中文字幕| 精品久久久亚洲AV成人网站| 亚洲欧美另类少妇精品| 国产精品久久| 久久九九国产精品| 97资源免费视频| 国产操操日韩三级黄| 高跟伊人julia ann| 九九九久| 中文字幕一区av| 亚洲久久久久| 无码免费一区二区三区啪啪| 欧美偷偷网| 在线国产探花| 国产熟女高潮一区二区三区| 免费看日本操逼视频| 日夜精品| 97色欧州| 国产一级作爱毛片| 丝袜 中出 制服 人妻 美腿 中文字幕| 九月色婷婷| 2024黄色视频| 久久宗合亚洲| 亚欧国产无码精品在线| 久久精品超碰| 91爱综合| 久久亚洲AV无码专区国产精品| 欧美综合色综合| 青青草日本无码| 亚洲精品影视老司机| 国产在线观看一区二区三区| 久久久久久少妇| 欧美色色色| 一级黄色性爱裸体视频| 另类av综合久久| 亚洲第一页色| 激情抓乳插进去啪啪啪日韩 | 亚洲黄网在哪免费看| 青草综合| 亚洲97超碰| 骚货 中文字幕 av| 精品人妻一二三四区视频| 2020视频1区2区3区| 国产亚洲精品农村妇女| 91天美免费| 怡春苑东京热| 人妻一区久久二区三区色播| 精品视频在线观看精品| 中文字幕一区二区三区四五区| 欧美疯狂做爰xxxx| 久久综合激情| 熟妇人妻一二三区免费| 天操天操夜操夜月月年年操操| 情色日播放AV| 97色欧州| 亚州九九九精品视频| 国产精品九9| 91狠| 爽爽歪在线视频| 日本一级婬片试看三分钟| 亚欧免费| 97爱| 蜜臀AV午夜精品久| 超碰色97| 亚州熟女乱伦| 国产精品经典一卡久久久| 狠狠综合网| 一本道综合色图| 色悠久久久av| 国产极品精品美女视频| 青青草啪啪网| 91色人| 大香蕉一级黄色片久久| 91人妻最真实刺激绿帽| 热热色综合网| 色色青青久久| 99re98| 成人网站 免费观看| 六月丁香网| 人妻内射一区二区在线视频| 日日骚中文字幕| 免费黄色片子| 日日夜夜国产综合| 综合亚洲欧美| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 人人操人人摸超碰| 日韩精品视频在线观看一卡二卡| 国产AV天美| av毛片aaaaa免费看| 98一区二区精品| 嫩草 我啊~嗯~在线| 二男一女成人A片| 91美女色视频亚洲| 草莓精品视频在线免费观看| 97操97色| 9国产超碰| 伊人991| 人妻 中文 日韩| 91天美传媒在线观看| 秋霞一级鲁丝片A片| 91狠婷| 啪啪自拍九九综合| 爽爽歪在线视频| 偷拍精品一区二区三区| 中文字幕少妇色 | 97超碰总站| 九九久久一区二区伦理| 日韩特一级久久| 东京日日夜夜| 人人干黄色| 97伦乱| 99久久网站| 老熟妇乱轮| 伊人96在线| 韩三级a视频在线观看| 91无码人妻| 伊色综合天堂色97| 国产亚洲精品美女久久久m| 午夜美女诱惑电源网| 五月婷婷深深爱| 亚洲精品xxx| 好吊色综合| 日日夜夜模| 婷婷色一区| 国产九九九九九九九九| 天堂v无码免费视频| 国产吹潮女在线观看| 九九热免费国产视频婷婷伊人五月 | 91东北熟女| 蜜臀va69| 亚欧洲一区二区视频| 熟女中出视频| 情色日播放AV| 99热精品在线在线| 天天色天天干天天射| 在线视频97| 九久9精品| 超碰97人人乐| 九九免费影片| 学生妹天天看| 色偷偷人人玩人人舔人人操人人摸人人爽| 亚洲天堂色图| 久久久久精| 按摩中文字幕| 97网址www| 97九色人妻| 992这里有精品| 亚洲日韩一区电影| 麻豆亚洲Av成人无码一区精品| www五月| 91人妻视频在线| 久久超碰大香蕉| 九七毛片九九毛片 | 在线啊v一区| 蜜臀AV网站| 日韩欧美操逼xxx| 国产无马视频| 日韩成人免费电影| 91精品电影18| 久久伊人青青草| 麻豆精品久久久久久久| 少妇人妻无码| 久热精品色情| 亚洲色天堂九9| 国产女大学生AV| 一级性爱视频免费在线| 中文久久爆乳| 日产国产精品中文久久婷婷| 性性久久| 国产精品乱码久久久| 欧美亚州综合网图片| 熟女人妻精品一区二区视频 | 国内精品久久人妻性色av| 国产精品点击进入在线影院高清| 日逼视频日本| 8050午夜少妇无码| 九九热视频这里只有精品| 9九九国产| 亚洲 自拍偷拍 欧美| 日本久久天堂| 裸体1区| 九九九999久久久网站| 午夜福利一区二区影院| 9久久精品| 中文一区在线日| 国内亚洲高清无码| 清柠毛片| 果冻传媒A片一二三区| 日韩激情无码影院| 一本一道人妻久久一区二区三区| 97精品中文字幕| 精品久久久久久AV无码| 午夜精品99久久久久传媒| 91亚洲欧洲| 97色干| 男同专区一区二区三区在线| 欧美aaaaaaa| www被窝色com| 亚洲成熟国产精品美女| 极品粉嫩一区二区| 伊人操| 9/A片| 久久精品国内Av熟女高清| 久久久不能久久久久| 色狠狠一区二区三区香蕉| av天堂手机版追回| 91天天爽| 免费观看欧美日韩操逼视频| 欧美美女视频| 中文字幕乱码人妻一区二区三区,99精品| 9久精品| 欧亚久久偷拍视频| 亚洲第一狼人丝袜美女另类| 欧美性综合| 欧美性爱在线无码| 亚洲欧美97| 熟女精品一区二区三区| TS人妖另类精品视频系列| 黄总AV色图| 日本午夜久久电影| 日本国产欧美一区三区二区| 日韩精品9区| 91丝袜美女国产| 国产女人和拘做爰视频 | 黄色无码高清黄色无码网站| 精品久久人妻成人网| 九热中文字幕| 久久国产精品熟女人妻| 日本中文字幕不卡视频| 五月天九九日国产精品一区二区三区| 人人操人人操草草| 精品国产一区探花在线观看| 九九九九免费视频| 国产日本久久免费精品| 精品久久久久久久| 五月天亚洲网| 久久久久骚| 日韩91网| 中文字幕免费看| 色av中文字| 欧美熟妇成人一区二区| 亚洲中文字幕熟女少妇一区二区| 国产小炒后入式| 日韩国语字幕| 乱伦3P视频| 国产三级多多影院2022国产AA一级毛片无码| 淫荡网址| 在线电影亚洲色图| 极品色电影院| 亚洲 另类 丝袜 自拍 动漫| 人妻啊啊人妻啊| 五月丁香婷婷综合| 在线A日本| 日韩乱中文| 国产一区二区三区久久久精品| 欧美激情专区| 精品无码少妇| 豆1无夜无码| 秋霞一区二区三区四区五区六区七区| 亚洲熟女综合| 久久精品老司| 国产精品久久久九九九| 嗯~啊~轻一点 视频| 东京热毛片调教| 亚洲欧美日韩免费观看| 91国产操逼视频| 亚洲资源吧| 2024黄色视频| 国内偷自视频区视频综合| 中文字幕美女91| 八人操人人摸人人看| 狠狠中文字幕| 色一色综合网| 不卡人妻少妇精品毛片一区23区视频| 久久av网| 香蕉精品二区二区| AV一起草在线| 国产强奸超碰AV| 日本激情免费大片| av天天在线观看| 狠操91,com| 欧美成人性爱视频在线播放| 国产欧美岛国精品一区| 麻豆2区1区天美| 中文字幕av片| 懂色天天爱天天日天天射天天澡| 色噜噜狠狠色综合日日| 福利五区| 青青草中出视频| 性暴力欧美猛交在线直播| 中文字幕在线免费观看视频| 操婢日韩| 欧美一级久久久久久久大片动画 | 一区在线精品中文字幕| 欧美性第1页| 人人操人人色网| 国产女s强制榨精视频| 探花一区在线| 精品国产一区二区三区av在线资源| 熟女自慰久久久| 日韩欧洲操屄视频| 国产AV毛片| 久久久久久久久久精| 国产精品干干干| 蜜臀久久99精品久久综合| 极品少妇久久久| 久久99操天天日| 中文字幕一区二区视频在线观看| 日本高清免费一本视频在线观看| 麻豆天美国美国产| 欧美伊人电影| 69精品在线| 国产女乱淫真高清免费视频| 91挑色欧美| 国产女生在线| 中文字幕在线免费观看 | 色婷婷av在线观看| 免费99精品国产自在在线| 人人考人人摸人人干| 粉嫩AV一区二区夜夜| 国产高清1234区| 日韩精品黄片免费观看| 桑老女人九区| 欧美在线大香蕉| 强奸a片网| 免费少妇一区二区| 亚洲自拍另类丝袜综合| 户外裸露刺激视频第一区| 变态综合色| 色欲人妻一区二区在线| 丝袜美腿制服人妻二区中文字幕| 蜜桃久久一区二区| 国产性久久久| 人妻一区久久二区三区色播| 国产精品久久蜜乳av| 亚洲男人的天堂一区二区| 精品国产一区二区三区在线播出| 大香蕉伊利av| 91高潮| 成人贴图日韩欧美| 国产精品区在线12p| 亚州欧美总和| 蜜桃色院一区久久 | 亚洲欧美一区二区网址| 99热一区二区三区四区|