日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
久久久久精| 野狼激情网| 熟妇视频一区二区三区在线观看| 99re28在线观看| 亚洲av影院在线观看| 内射卯月麻衣| 欧美A片中文字幕| 九九aV| 精品九九九九九九九九九| 亚洲97精品| 亚洲欧美激情在线视频| 99re在线视频国产| 精品亚洲国产成人精品| 狠狠中文字幕| 五十路熟女人妻一区二区在线观看| 大香网站| 啊啊啊轻点在线观看| 亚洲成人日韩小说| 欧美精品久久| 久久av成人无码免费| 日韩另类色图| 香蕉99秘 一区精品蜜桃臀| 我爱大香蕉| 久久久久久裸体| 91成人高清在线观看| 人妻精品综合中文字幕在线 | 熟妇人妻一二三区免费| 18禁久极品美女久久哦哟呀!| 人妻天天爽夜夜爽2| 手机午夜电影神马久久| 好吊色在线观看| 97超碰在线资源网站| 亚洲色性| 探花精品视频| 欧美淫乱视频| 女人双腿搬开让男人桶| 久久久久久久久久久精| 国产尹人在线视频免费| 骚女天天综合网| www狠狠| 熟女少妇视频| 91九九九馒头| 欧美性爱无码一区二区三区| 天天综合网AV91| 亚洲 欧美 手机在线观看| 亚洲午夜蜜臀| 欧美亚洲第一页| 国产少妇肉丝在线观看| 精品无人区麻豆乱码1区2区图片| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲成人妻日韩在线| 久久久久九九九| 九九毛片这里只有精品| 激情小说日韩无码| 天天色悠悠激情| 三男一女不戴套的A片| 国产AV人人 夜夜人人澡| 精品免费视频国产一区| 色大香蕉97N| 欧洲熟妇xxXx欧美老妇裸体| 91亚洲色人| 精品九九九九九九九九九| 国产一区二区成人av在线播放| 男女激情中文字幕| 亚洲 国产 精品一区| 亚洲老司机123专区| 天堂中文日本在线观看| 神马午夜久久| 九九九九97| 九九热九九热| 无码精品久久| 国产女人操逼视频| 欧美中日韩XXXX| 久久久国产亚洲精品系列| 久久影视二区三区行押| 色婷婷在线视频精品导航| 国产精品不卡av免费在线观看| 91欧美综合在线| 白丝1区2区3区| 精品久热| 人人操 欧美| 欧美中文综合| 友优传媒精品在线一区二区| 免费男人的天堂| 在线黄色污污网站| 一直超碰| 欧美综合制服在线| 亚洲棕合电彰| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲男人电影天堂| 九九热午夜欧亚国产视频| 久久久穴999| 久久精品人体| 日本午夜福利视频| 男人天堂站| 嗯嗯,啊啊,国产精品| 97国产色综合| 亚洲宅男天堂| 少妇99成人麻豆| 国产操逼逼网| 中文字幕一区日韩精| 91干熟女| 色婷婷久久| 久久久久九九九| 久久综合久久综合人久久夜精品| 国产91影院| 久久 亚洲 日韩 人妻| 天天色综合图片| 精品一区二区亚洲国产| 欧美网站免费| 综合网欧美在线| 日本有码影片下载| 911粉嫩人妻| 91精品国产高清久久久久久,亚洲成人| www久| 成人看片网站| 97人人中文网| 欧美97av| 大香蕉中文网| 免费国产电影一区二区| 日日操丁香五月天| 国产精品久久久999| 夜夜 中文视频rt| 懂色天天爱天天日天天射天天澡| 九九九九九九九九九国产精品 | 色色国产| 九九碰九九爱97| 日本肏逼视频在线观看| 男人a天堂手机在线版| 日本熟女不卡视频| 日本熟妇浓毛hdsex| 天天噜| 久久久精选| 一区超碰一区| 啊啊啊啊,啊啊好多水 | 国内一级精品| 91麻豆天美传媒在线| 日韩电影中文字幕| 男人的天堂Va| 欧美黑人熟妇精品91| 亚洲无码一区成人免费午夜| 老熟女天天操| 夜夜爽夜夜操| 97精品网| 国产精品直播在线观看直播| 欧美色www亚洲国产阿娇要播| 天天看夜夜看日日干| 屁股久久久久久| 99热这里只有精品18| 一起草在线视频| 综合色欧美| 欧美同性恋 的搜索结果 - 91n| 欧美高潮| 91伊人久久在线| 大香蕉手机在线| 成人久久久精品| 日日AAvv| 国产人妻精品一区二区三区秋霞| 人妻少妇精品视频一区二区三区| 九九热AV| 多毛小伙内射老太婆| 超碰97人人cao| 在线色导航| 加勒比久久综合网高清| 久超碰在| 日韩二级| 国产精品久久久久999| 97人人夜| 最近2018中文字幕在线高清第一页| 绯色一区二区三区不卡少妇| 三级网色| 禁片 高清 在线观看视频网站| 啊啊啊啊啊啊在线看| 色av中文字| 麻豆 欧美 日韩| 日日夜夜噜| 亚洲清纯综合| 性爱视频免费网址| 五月天激情小说| 78久久久| 九九精品网| 偷拍精品一区二区三区| 18禁超污无遮挡无码免费网| 99国内精品| 日本中文字幕一区| 清纯唯美亚洲综合| 日本成人A片免费看| 九热视频| 国产精品小视频一区二区三区| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 97天天操天天干| 啊啊啊轻点在线观看| 欧日韩一二三f区| 999久久久| www.久久最新地址| 日韩AV电影网站| 爱爱久久| 熟女91网站| 人人做天天爱| 日韩AV电影网站| 香蕉免费一区二区三区不读| 欧美色图99| 日本三级A片网站com| 国产高潮AA片免费看| 日韩av三四区| av中亚| 色成人Www精品永久观看| 综合久| 搞中出视频在线观看| 丰满欧美放荡少妇在线| 国产一级高清免费观看| 亚洲成人久久美女| 久草精品一区| 豆花视频操逼网址| 九九色逼| 国产精品视频播放| 日韩欧美加勒比| 亚洲精品三| 330Dv国产女人终合视频极品人与兽 | 97蜜桃综合| 美女黄色91| 国产熟女免费观看久久| 日韩中文字幕av在线播放| 青青久日| 睡产熟女乱伦| 欧美亚洲20p| 夜色97| 亚洲日韩视频二区| 国产精品情侣啪啪| 欧美日韩中文字幕不卡| 精品性爱无码在线播放| 中文字幕欧美日本乱码一线二线| av天堂精品久久| 久久本道| 国产精品福利资源在线尤物| 青青青操| 激情小说激情视频| 久久综合五月天| 超碰 欧美| 亚洲二区精品在线观看| 职场同事知名国产国产精品久久欧美日韩 | 五月天久久人妻| 国模少妇一区二区三区| 色777999综合| 熟女精品va中文字幕| 久久久99999久网站| av一区二区三区四区| 宅男午夜在线视频| 9国产超碰| 你草精品在线视频| 在线国产福利网址导航| 亚洲超碰综合网| 成人a大片在线观看| 大香蕉伊在线久草麻豆天堂故事| 草草电影院| 熟女在线视频| 精品国产乱码| 97国产综合欧美| 天天操天天舔| 久9九综合在线| 中文激情网| 成人国产二区三区在线,男女精品。| 18禁网站在线播放| 久草精品在线| 老鸭窝亚洲毛片| 欧美日韩午夜精品一区二区三区| 亚州中文字幕超碰97| 日韩探花精品在线视频| 久九9精品| 久久精品国产72国产精品福利| 日本亚欧爱爱| 亚洲情色第一页| 日韩日本欧美在线观看| 超碰中文字幕人妻草一区| 正在播放国产精品一区| 九99久久| 麻豆天美久久91| 免费久久一级毛片大黄| 成人精品水蜜桃久久久久久久| 在线看免费无码AV天堂的| 亚洲欧美啪啪| 精品久久久av| 永久免费发布性爱网| 亚洲区小说| 中文字暮97| 亚洲第一免费视频| 制服诱惑亚洲一区二区三区在线观看| 九九Av| 国产91亚洲精品一区二区三区| 97在线青| 97精品熟女少妇一区| 中文字幕伊人| 91狠| www.亚洲成人一区| 热的中文 热的有码 热的国产| 亚洲丁香花色| 思思热免费在线视频| 啊啊啊啊好大好硬啊啊啊啊啊 | 久久男人网| 免费一级欧美片片线观看| 99热日| 岛国成人av在线播放网址| 伊人性在线视频| 九九色热| 密乳AV免费观看| 91亚.色| 少妇国产不卡| 色综合色色| 在线播放成人高清免费视频| 蜜桃精品视频一区二区三区| 99色色网| 亚洲影院无码在线| 久久久91| 人妻精品一区一区三区蜜桃91| 97综合日韩| 黄色网址在线免费观看| 热无码中文亚洲H一道本一区二区| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 狠狠色婷婷7777久| 国产一区二区a毛片| 国产97在线 | 亚洲| 伊人aaa| 天操天操夜操夜月操月年年操| 欧美人与性动交a美精品| 97天堂| 色偷偷2020免费视频播放| 亚洲色图加勒比| 性吧在线视频| 日韩av乱伦| 亚洲色图激情小说| 人妻中文字幕精品无码| 99精品九九九九九九| A男人的天堂| 96精品久久久久中文字幕| 色操逼网| 成人26uuu| 麻豆久久一区二区三区| 玖玖综合网| 情色图区| 精品一区二区三区蜜桃| 亚洲av资源| 后入精品| 国产熟码AV| 伊人网在线观看| 人妻在线臀日韩| 久久本道| 亚洲操操操| 欧美性爱在线无码| 91快色色色色色| 91av一区二区在线观看| 久久伊人东京热| 久久久无码精品人妻二区 | 欧美在线啊啊| 欧美天天| 色噜噜人妻av中文字幕| 夜夜爽爽夜夜精品视频| 精彩视频日韩| 天天狠| 亚洲中文日韩欧美大香蕉视频| 欧美1区二区三区公司| 亚洲熟伦熟妇AV无码春色| 综合97| 啊啊嗯嗯好爽| 久久永久无码人妻视频| 肏逼视频日本| 八戒无码国产午夜福利| 欧美黄片免费在线观看视频| 亚洲1区2区三区高清中文字幕| 亚洲中字幕日本一区二区三区| 国产区日韩区在线观看| 精品无码久久久久久国产浪潮| 日日不卡av| 欧美精品黑人猛交高潮| yiqicaoav| 亚欧美色| 欧美性爱日韩高清| 久久人人舔人人爽舔人人av片| 色嗨嗨在线| 久久精品国产亚洲AV无码做| 中文字幕亚韩| 亚洲 欧美都市激情| 懂色av中文字幕一区二区三区天美| 中文字幕美女91| 少妇天堂网络| 国产美女自拍AV| 日本加勒比无码专区一二三| 黄色二级片网站| 日韩欧美tv一区二区在线观看| 国产一区二区三区久久久精品| 青青草日本中文字幕| 亚洲精品九九九九九九| 国产野战露脸在线播放| 亚洲精品国产av天美传媒| 91香蕉视频在线观看免费| 一本色道熟妇| 道久久五香丁月婷婷激情综合| 91久久久久| 熟妇在线视频一区二区| 色老汉色| 美国三级日本三级久久99| 久久久一区二区三区麻豆| 91青青草| 日韩人妻制服丝袜av| 97人人草| 久久伦理视频久久大香蕉视频| 天天操福利视频综合网站| 亚洲无线观看久久| 无码聚合| 熟女自慰久久久| 久久精品成人| 一区二区三区在线美女| 狠狠干狠狠干| 欧美精品久久96人妻无码| 天堂网亚洲区手机版| 成人一二| 婷婷色在线| laoshunv91| 97干97色| 色综合尤物| 小草精彩毛片| 91制服丝袜| 国产一区二区三区白丝| 欧美性猛交美女自慰91| 一本大道久| 欧美aa一级片| 麻豆区99999| 久久久久久中文版| 91亚洲高清| 精品少妇一区二区三区在线视频 | 日韩人妻制服丝袜av| 久久精品国产精品亚洲艾通辽熟妇| 五月开心久久AV官网| 色妇综合网| 天美麻花大全视频| 欧美日韩国产人人| 国产Av超碰| 欧插网站| 欧美综合网A| 亚洲AV永久无码一区仙野| 国产精品密臀网在线观看| 91国产丝袜白虎| 97欧美性爱| 国产精品久久久久久久久久久久久久久久久久 | 黄色欧美性爱视频| 中文字幕加勒比海高清无码免费视频| 亚洲欧美不卡线| 日本黄 R色 成 人网站| 91无码人妻精品一区二区三区蜜桃| 国产精品一区午夜福利| 欧美在线大香蕉| 精品久久无码午夜福利| 婷婷伊人一区| 亚洲91网| 国产怡红院| 欧美色狠| 99热超碰| 自拍偷拍 日韩欧美| 校园春色 男人天堂 | 亚洲欧洲日本精品中文a∨| 清纯唯美综合| 亚洲成A∨人影院在线欢看| 67194无码不卡| 又粗又长又大国产不卡| 不卡超碰护士AV在线免费播放| 美欧色综合| 日韩人妻精品久久久久| 欧美激情一区| 裸模AV女优| 天天操夜夜操狠很操| 青青草啪啪网| 手机在线A片| AV男人天堂网| 日韩中文字幕二区| 91成人无码| 91人妻超碰| 国产精品高潮呻吟av久久4虎| 国产suv精品一区二区四区999| 97无码视频在线播放| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 偷窥自拍A片| 青青草华人在线欧美在线| 久久99网站| 精品久| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 人人操人人精品影片| 秋霞视频一区二区| 97亚洲综合影院| 一道本东京热加勒比一区二区三区| 欧美人人操人人插| 91男人天堂网| 亚洲成人免费电影| 伊人热综合| 日本大香蕉| 乱伦熟女区| 日本加勒比无码专区| 久久中文色图| 天天干夜夜操网| 嗯嗯啊啊啊好爽| 欧美色图私拍91| www.91理论| 亚洲视频精选| 一级黄碟在线看| 久99热| 日韩av性爱在线播放| 久久免费看高潮毛片韩国| 色官网色综合| 精品九区| 欧美最大综合网| 五月天婷婷欧美三区| 95自拍视频在线观看| 欧美成人贴图| 天天舔天天日天天射| 91久久久久久| 天堂а√在线最新版在线| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 午夜男人av| 欧美日韩中文字幕不卡| 艳尻美人妻| 五月婷婷啪啪| 日本操逼视频导航| 东京热一区二区中文字幕| 蜜桃不卡一区二区| 密桃99999| 国产欧美日韩一区二区三区| 狠狠操狠狠操操| 自拍第一页| 伊人网在线观看| 天天综合色| 伊人激情五月天一区二区| 精品福利| 国产视频小说| 色色综合97| 920日本午夜免费| 中文字幕精品日韩中文字幕| 人妻少妇久久中文字幕一区二区 麻豆 | 秋霞 色色| 日本二区不卡| 国产精品久久久777| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 精品国产99| 天天干天天拍| 久久久九九网站| 17c在线成人免费A片观看| 夜色综合| 日韩猛交| 欧美色97| 清纯唯美亚洲另类| 久久久精品中文字幕麻豆| 精品十三区| 97超碰国产精品| 婷婷五月在线视频| 秋霞一级视频在线观看免费| 成人无码在线视频网站| 97碰| 另类图片综合| 日韩大香蕉| 天美传媒麻豆一区二区三区国产精| Julia Annxxxxx| 中文字幕日韩人妻视频一区二区三区交换夫妻| 乱理日韩中文| 4141514逼喷水三级片| 欧美美女自慰一区二区三区| 久久综合九九| 色5月婷婷| 久久婷五月天| 婷婷五月综合在线| 午夜丁香婷婷| 九九热在线精品视频| 99色在线| 日韩精品区二区三区不卡| 色色丁香| 五月丁香久久| 人妻日日夜夜精品| 黄色二级片网站| 免费看污网站| 少妇69中文| 青青操97| 北京美女一区二区| www.男人天堂| 99日视频在线免费| 久九九九九九九九热| 91亚洲网站| 欧洲综合色图| 欧美日韩插逼视频| 99国产精品视频尤物| 青娱乐国产盛宴视频| 顶级丝袜熟女一区二区三区| 久久这里只精品99re66图| 婷婷丁香成人| 91久热| av天天在线观看| 久久久久密| 九九九九九用不成了| 少妇丝袜在线观看AV| 91欧美www| 天久久久噜噜噜久久国产精品爽爽| 老女人综合网| 色综合V| 播播亚洲小说亚洲| 国产伦精品一区二区三区在线观| 国产天美欧美| 久久精品72| 无码操逼天堂| 国内外内射高清视频| 国内偷拍精品一区二区| 欧美日韩在线国产在线| 爱射综合| 亚洲天堂第一页| 区自美91| 人人操人人摸人人骑| 国产日产精品久久快鸭的功能介绍| 另类小色呦| 91欧美高清| 欧美天堂超碰97| 殴美色网| 中文字幕国产| 五月激情综合网| 99自拍B亚洲 | 久久毛卡| 欧美最婬乱婬爆婬性视频| 日韩精品怡红院| 999久久久国产精品| 日韩欧美操逼xxx| AV综合中文字幕干| 国产亚卅97| 91日产桃蜜| 中文人妻av高清一区| 91精品综合久久久久久五月丁香| 久久、1234| 99热这里都是精品| 中文字幕一区二区免费在线| 中文字幕精品一区二区精品| 国产精品熟妇一区二区三| 91色狼| 中国乱伦一区二区 | 操91| 老熟妇一区二区三区| 91精片| 久操热线| 新视频sss国产| 久久婷婷电影网| 自拍偷拍2025在线观看| 东京热av男人的天堂| 91国模| 日本中文字幕在线视频| 亚洲中文电影| 91少妇人妻| AV天黑人| 黑人美精品 A片| 四月丁香婷婷| 91美女精品| av天堂手机版追回| 天天影视射综合网| 99亚洲国产精品色一区二区三区| 国产伦精品一区二区三区在线观 | 久9久| 日本在线伊人啪啪| 日本中文字幕在线视频| 乱子伦一区二区三区国产精品| 一本色道无码DVD中文字幕| 日本久久精品| 88在线一区二区三区| www.伪伪| 老女人碰碰在线碰碰视频| 大JI巴好深好爽又大又粗视频| 六月丁香啪啪| 人人妻人人爽人人精品| 精品久久人妻成人网| 亚洲色悠悠久久88| 成人精品无码| 97干com| 视频二区美腿制服人妻欧美| 亚洲欧美精品福利在线| 久久久久久裸体| 黄片免费久久久久久久| 熟妇视频一区二区三区在线观看| 91色拍| 久久久人体| 国产精品日日摸夜夜添骚逼| 五月天色五月| 上特色A在线| 婷婷尹人大香蕉免费| 久久啊啊| 色噜噜综合在线| 97欧美精品| 青草青青久久久久久国产| 国产一级内射高清视频 | 富二代亚洲精品99| 美女t无毒不卡不卡| 99色热| 好涩综合| 久久最新免费视频23| 天天综合网91| 哈哈操电影AV| 家庭乱伦国产| 60秒免费视频| 九色在线熟女国产黑人| 97色欧洲| 99热超碰| 婷婷伊人五月| 美女主播色欲91抠b在线播放| 亚洲一区二区久久久久| 青青操视频在线| 90后性网国产欧美| 精品九区| 国产青视频| 啊啊啊啊啊啊啊在线| 激情专区综合| 99热国产| 日本一区三级韩国| 国产农村妇女精品| 最新av在线| 日本性爱少妇| 色欧美综合| 日日夜夜骚| 国产成人亚洲精品无码古代早漏男| 呦女网站| 91麻豆天美国产欧美| 测评在线观看AV| 亚洲精品 欧美精品| 亚洲综合另类色图| 人人操人人肉久久精品| 无码久久国产| 婷婷中文网| 精品少妇高潮久久| 日韩草久视频| 亚洲 欧美综合| 浪人综合网| 大香蕉啪啪啪| 久久精品一区二区| 午夜精品久久久久久久男人的天堂| 亚洲色棕合| 密臀在线视频| 370p日韩欧美亚洲精品| 国产超碰人人爽人人做| 精品超碰中文在线| 亚洲图片 欧美电影| 粉嫩av一区二区三区天美传媒 | 黄色香蕉视频网站一区| 国产女人成人精品视频| 91麻豆天美传媒HD| 亚洲国产一区二区日韩专区| 秋霞男人网| 精品久| 国产亚洲女v在线观看| 岛国大片在线观看网站入口| 日本精品第一视频在'| 精品高清一区二区三区三州| 欧美成人9797| 2017大香蕉国产精品久久| 色香综合天天影视综合 | 人妻久热在线| 美女91网址 | 色五月婷婷在线| 亚洲Av噜噜一区二区三区妖精| 人妻熟女午夜精品在线| 99热免费| 欧日a| 欧美18老人禁| 黄页网站成人免费| 精品176精品2| 天天添天天干电影| 久久这里只精品99re66图| 黄色香蕉视频网站一区| 草草草草视频| 少好三P| 色九九九综合| 啊a一区在线| 色综合五月天| 一级特级aaaa毛片免费观看 | 91九九九逼| 小少妇| 久久色情| aⅴ日韩成人电影av在线免费看av大全| 69av一区二区三区| 一区二区高清视频| 欧美成人精品欧美一级乱黄一区二…| 日本好吊色视频| 超碰人妻中文在线| 99re3这里只有精品| 亚洲 日韩 欧美 国产综合体| 99久久精品无码一区二区| 内射老妇BBWX0C0CK| 91人人| 久久高潮妇女视频| 啊啊啊男女| 亚洲久草AV色图| 韩国国产欧美情侣视频在线| 超碰夫妻97| 97硬碰| 五月天伊人| 99精品久久久久久久婷婷蜜桃| 日本熟妇人妻中出视频| 大香蕉免费3| 国产亚洲日韩欧| 不卡二三区人妻少妇| 国产三级中文字幕粉嫩| 女生自91网站| 中文字幕av久久爽Av| 欧美三级一级| 九九精品美女高溯喷水| 日本不卡卡一区| 97超碰碰碰| WWW4虎| 精品人妻1237| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 熟女乱伦二区| 99热最新网址| 99无码视频| 国产欧美日韩女同性恋ww喷水精品| 无码国产Av| 黄在线| 奇米四色影视777久久久| av网站在线观看了| 国产精品一二三在线看| 少妇干B| 玖玖婷婷五月天| 五月婷婷五月天| 欧美色三级片91| 顶级少妇BT天堂| 歐美性天天| 日日日色色色色色| 超碰导航97| 天天拍夜夜| 20cm女自慰在线日韩欧美| 欧美一级美片在线观看免费| 天天草夜夜草高潮片| 美国aaaaa一级黄片| 欧美在线干| 4399成人黄A片| 人妻夜夜爽天天爽麻豆三区网站| 五月丁香在线| 97日本超碰综合| 超碰97最新人妻| 亚洲丰满很很操| 欧洲综合色图| 精品国产三级av韩国在线| 国产中文精品一区二区在线观看| 国产午夜激片Av毛片不卡| 97人人草| 少妇毛片久久| 人妻丝袜肏逼| 国产精品久久久久久夜夜夜夜| 欧美 日韩第一性色| 一区二区三区视频| 日日噜噜夜夜狠狠视频无| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 国产精品熟女九九九| 吉川爱美亚洲二区在线 | aaa一级黄片| 六月丁香啪啪啪| 99RE在线视频精品,这里只有精品| 欧美最大综合网| 超碰在线一区二区三区| 欧美日韩大黄片| 精品久久99| 一个人在线看的黄色电影网站| 伊人亚洲综合| 久久久久久综合久久伊人蜜月| 91人精品妻入口| 亚洲AV无线| 超碰日本97美女人妻人人玩人人爱| 亚洲熟女一区| 91色花堂| 国产午夜无码片在线观看影视| 亚洲欧美大| 九九av| 精品九九| 日本午夜福利影院| 欧美精品91| 久久精品国产亚洲av水密被窝| 免费福利视频中文字幕| 中文字幕在线观看丝袜| 香蕉色网| 成人五月天丁香激情综合| 岛国成人av在线播放网址| 熟妇一区二区三区| 天堂综合网| 操逼片国产| 日韩pv中文| 欧亚韩国999| 成年人黄色视频免费| 久久东京国产精品视频| 欧洲乱码视频| 九九九九精品九九九九| 日本午夜精品理论片A级APP发布| 亚洲免费97免费| 亚洲男人天堂视频| 黑人白女精品一区| 超碰亚洲欧美日韩无| 一区e区三| 51一区二区三区| 欧美一区二区在线资源| 91国模| 国产精品熟女丝袜一区二区| 97超碰久久色| 青娱乐淫乱1314| 五月婷婷激情| 91美女片在线| 日韩欧美俄罗斯A片| 一级黄碟在线看| 国语对白露脸XXXXXX| 69超碰综合| 97亚洲色图| 91一起操| 97精品久久久久中文字幕| 国产色综合亚洲色综合吹潮| 91暧暧| 日韩少妇无码| 七久久久| 亚洲无码一区成人免费午夜| 九九久久综合| 后入式999| 日韩乱伦视频| 嗯~啊~轻一点 视频| 国产AV精久久| 欧美一级专区免费大片| 极品综合| 96国产污污污丝袜| 人妻献身系列第54部| 神马午夜久久久| 东京热双插| 日日狠狠久久偷偷色综合免费| 女人香蕉久久毛毛片精品| 无遮挡h肉动漫在线观看| 婷婷精品国产欧美精品亚洲人人爽| 岛国大片国产| 丝袜狂射91| 国产精品福利视频播放| 操一区| 深夜国产一区二区三区在线看 | 欧洲精品网| 久草国产在线视频| 人妻精品一区一区三区蜜桃91| 一区二区三区精品久久| 超碰社区97| 超碰久热| 亚洲熟女综合一区二区| 99自拍B亚洲| 狠狠久久手机视频精品| 久久精品老司| 国产一级作爱毛片| 久久久熟女一区| 日本在线不卡一二区| 欧美欧美少妇| 人妻密肉在线观看| 天天看天天日天天操| 少妇一区二区三区在线观看| 欧美性爱第一区| 加勒比人妻综合| 五月丁香大香蕉| 日夜伊人网| 欧美在线啊啊啊| 欧美一区二区观看在线| 97久久久久久久久久| 九九久久九九久久| 亚洲阿v天堂在线| 97在线青| 日va操| 干B网| 热久日综合| 色综合久久88色综合久久天天| 超碰色97| 91红杏| 粉嫩在线一区二区懂色| 欧美激情综合网| 性色国产东北露脸精品视频| 性色av网站| 亚州性色| 久草精品一区| 伊人成人中文字幕久久网| 人人操 欧美| 人人九九精| 久都青青视频| 91足交| 97超碰色| 精品一区二区三区四区外站| 激情久久久| 91精品国产91久久福利| 九九九九97| 91黑丝在线播放| ,成人免费啪啪视频| 噜噜噜噜天天狠狠| 青青草吊丝| 久久精品性| 精品一区二区三区麻豆| 亚州欧美一区| 97超碰美国| 3d成人精品一区二区| 我要色综合网| 亚洲 欧美 另类 日韩 人妻一区| 99热综合| 熟女五十路一区二区三| 99热销国产这里有精品| 黄色不卡视频| 少妇滛荡视频| 人人做天天爱| 欧美亚洲首页| 大香网伊人久久综合网eew| 久综合网| 91国产操逼视频| 国产精品97超碰| 天美国产精品| 国产精品午夜高潮呻吟久久av| 肏逼视频日本| 91在线/欧洲| 久热伊人99re| 曰本人妻人人澡人人夹| 无码精品久久久久久亚洲| 国产AV线| 18一区二区三区| 天天色综亚洲91污| 九九九色| 国产精品伦理| 大乔未久88一区| 99国产精品在线观看| 亚洲国产成人福利在线观看| 9999久久久| 久久久熟女一区| 中文字幕艹艹| 强歼乱伦资源网| 丰满人妻区一区二区三| 中文字幕成人乱码熟女精品国50| 精久久久| 青青国产在线拍揄自揄拍| 午夜精品久久久久久久男人的天堂 | 五月婷婷性爱| 日韩国产在线观看av| 久久天天艹| 四虎国产精品永久入口| 久久超碰网| 久 久无码人妻AV| 欧洲亚洲综合| 日韩久久艹| 天天看高清麻豆| av大香蕉网站| 91在线页| 极品白嫩福利在线| 99这里只有精品| 中文字幕在线观看丝袜| 欧美极度丰满熟妇hd| 99亚洲精品| 亚洲欧美天堂| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 秋霞 色色| 国产精品 视频| 久久 精品| 久久久性爱| 熟妇视频一区二区三区在线| 91热| 欧美激情在线观看视频| 四虎影视欧美| 婷婷国产精品一区二区| 黄色工厂这里只有精品| 777超碰| 啪啪啪亚欧美视频| 日躁天天爽爽| 国产综合色精品在线观看| 亚洲九九九| 91老熟女视频| 東南亚性呦成人伦理资源在线视频| 日韩乱码Av| www.91理论| 99久久精品无码一区二区| 日韩精品 视频一区二区| 成人a大片在线观看| 国产精品视频自拍在线| 在线观看高清AV| αⅴ天堂| 国产精品爽爽v| 综合久久久久久久久91| 男女激烈网站最新| 色臀AV| 97干97色| 91丨九色丨国产丨人妻在线 | 狠狠久久手机视频精品| 亚洲色图尤物视频 | 逼逼逼逼操操操操操操操操操午夜剧场 | 日少妇亚洲版| 很很很很操| 亚洲天堂电影网99999| 精品女同一区二区三区| 91精片| 中文字幕在线观看永久| 久久性爱精品一区| 亚洲熟女中文字幕在线| 偷拍 精品另类 凸凹了四区| 人妻精品综合中文字幕在线 | 亚洲欧洲综合成人av一区| 白嫩国模丰满一二三区| 婷婷色色网| 亚洲图片欧美制度| 亚洲天堂久| 人妻丰满熟妇av无码区蜜桃| 久久久久亚洲| 3P乱轮视频| 二色av| 大香蕉伊人一区在线观看| 亚洲熟久久| 中国和日本人色哪个不下载能放| 中文字幕免费看| 精品久| 18禁中文字幕| 久久精彩免费视频| 欧美天堂日韩三级国产传媒| 久久久久久久久久久久九| 2017天天插| 欧中美三级一区二区三区| 大JI巴好深好爽又大又粗视频| 亚洲最新av无码成人精品区 | 一区二区三区精品久久| 天天干一区二区| 加勒比综合a∨| 伦理第一页| 超碰97人妻在线| 国产精品激情久久久久久久| 人人天天欧洲| 亚洲男人的天堂一区二区| 嗯嗯啊啊的视频| 91免费看一区二区三区| 日韩 国产 欧美自拍| 国产1769在线| 精品人妻一区二区免费蜜桃| 新怡红院| 天天躁日日躁成人字幕aⅴ| 亚洲久热| 天天日美女的B| 91精品老女人| 久操视频资源站公开| 91在线免费观看处女| 92大香蕉| 亚洲精品九九九| 色青青久久影视| 91色综合激情| 欧美96精品在线| 口爆吞精在线观看| 大香蕉免| 色欧洲| 蜜乳av首页| 色九九九综合| 丁香色狠狠色综合久久小说| 99性视频| 老司机午夜福利视频一区二区| 韩国三级色呦呦| 久久婷婷视频| 亚洲凸凹超碰成人| 日韩黄色片子| 一区二区偷拍拍视频| 国产丝袜高跟美女av免费观看| 国产乱伦亚洲| 亚洲人在线| yazhououmeizongya| 美国aaaaa一级黄片| 目产99999久久999| 91观看 国产白丝| 在线无码操| 日本黄页视频在线观看| 操逼天美3区| 夜夜嗨AV蜜臀av| 97天天操|