欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

RT-Thread Studio實戰(zhàn):STM32F411外掛W25Q128實現(xiàn)YModem OTA升級全解析

RT-Thread Studio實戰(zhàn):STM32F411外掛W25Q128實現(xiàn)YModem OTA升級全解析 做過帶片外Flash的OTA升級的朋友應該都有體會Bootloader、App、下載區(qū)、備份區(qū)再多一個W25Q128這類SPI NOR Flash整個分區(qū)和升級流程一下就復雜起來。RT-Thread Studio自帶的YModem例程默認用的是片內(nèi)Flash一旦固件超過片內(nèi)容量或者你想把下載區(qū)放到外部Flash來節(jié)省內(nèi)部空間就必須自己動手改造。這篇筆記就是記錄我在STM32F411平臺上基于RT-Thread Studio用W25Q128做下載分區(qū)、走YModem協(xié)議完成OTA升級的完整過程和踩坑記錄。先說結(jié)論這套方案做出來的效果非常穩(wěn)定。Bootloader放在片內(nèi)Flash開頭App放在片內(nèi)Flash后續(xù)區(qū)域兩個App備份區(qū)和一個下載區(qū)放在W25Q128里通過YModem把固件先傳到外部Flash再搬運到App分區(qū)執(zhí)行。整個思路不復雜但細節(jié)很多尤其是分區(qū)表規(guī)劃、FAL抽象層的配置、以及YModem傳輸完成后的校驗和搬運邏輯每一步都容易出問題。這篇文章適合正在用RT-Thread做產(chǎn)品、需要OTA能力或者被片內(nèi)Flash容量逼到必須外掛Flash的開發(fā)者參考。1. 整體方案設計與分區(qū)規(guī)劃1.1 為什么要把下載區(qū)放在片外FlashSTM32F411的片內(nèi)Flash通常是512KB或1MB如果固件本身就有兩三百KB片內(nèi)空間其實很緊張。OTA升級至少要兩個區(qū)一個跑當前固件的App區(qū)一個臨時存放新固件的下載區(qū)。如果這兩個區(qū)都放在片內(nèi)512KB的芯片基本就沒法用了。把下載區(qū)放到外部W25Q128是個非常合理的折中方案W25Q128有16MB空間存固件綽綽有余而片內(nèi)Flash只需要留給Bootloader和App本身。還有一層考慮是安全性和穩(wěn)定性。YModem走串口傳輸波特率通常115200一個300KB的固件大概要傳30秒左右這期間如果斷電最多損壞下載區(qū)跑在片內(nèi)Flash里的正式固件完全不受影響。等到整個固件包接收完整、校驗通過之后才一次性搬運到App區(qū)。這個“先緩存、后搬運”的設計能最大程度避免升級失敗變磚的風險。1.2 方案選型為什么選YModem而不是XModem或自定義協(xié)議YModem在嵌入式領(lǐng)域之所以經(jīng)久不衰核心原因是它解決了XModem最大的痛點文件名和文件大小傳輸。XModem只傳裸數(shù)據(jù)接收端根本不知道這次收到的固件是誰、多大、版本多少。YModem在起始階段會先傳一個包含文件名和大小信息的數(shù)據(jù)包接收端可以在校驗前就把這些元數(shù)據(jù)解析出來做版本判斷避免傳了一半才發(fā)現(xiàn)版本不對的尷尬。而且YModem的“逐個文件批量傳輸”能力也很實用。雖說OTA一般一次只傳一個固件但有時候你需要在同一次升級里同時更新Bootloader和App這時候YModem可以順序傳兩個文件接收端按順序?qū)懭氩煌謪^(qū)就行。這套機制成熟、實現(xiàn)簡單、工具鏈齊全——PC端隨便一個SecureCRT或者ExtraPuTTY都原生支持YModem不需要額外開發(fā)上位機這也是我選它的一個重要原因。1.3 分區(qū)規(guī)劃片內(nèi)和片外各管哪一塊分區(qū)規(guī)劃是整個OTA方案的基石我強烈建議在一張紙上先畫清楚再寫代碼。我的布局是這樣的區(qū)域存儲介質(zhì)起始地址大小用途Bootloader片內(nèi)Flash0x0800000064KB引導、YModem接收、固件搬運App區(qū)片內(nèi)Flash0x08010000448KB當前運行的應用程序下載區(qū)W25Q1280x000000001MB暫存YModem上傳的新固件備份區(qū)AW25Q1280x001000001MB預留用于App備份或雙備份升級備份區(qū)BW25Q1280x002000001MB預留用于App備份或雙備份升級這里有幾個關(guān)鍵點要解釋一下。Bootloader給64KB是保守的RT-Thread最小配置跑YModem大概在40-50KB左右留64KB是給自己加日志和調(diào)試功能留余地。App區(qū)從0x08010000開始意味著App的鏈接腳本里ROM起始地址必須是這個值不能錯。片外Flash的1MB下載區(qū)看起來很大其實是為了支持將來更大固件預留的W25Q128一共16MB用1MB完全沒壓力。提示片內(nèi)Flash的扇區(qū)大小因芯片而異STM32F411是128KB一個扇區(qū)。Bootloader占64KB意味著它只占半個物理扇區(qū)所以App區(qū)起始地址必須是128KB對齊否則扇區(qū)擦除會把Bootloader尾部擦掉。這一點務必檢查芯片參考手冊。2. RT-Thread Studio工程配置與W25Q128驅(qū)動接入2.1 創(chuàng)建工程與使能必要組件在RT-Thread Studio里新建一個基于STM32F411的裸機工程然后在RT-Thread Settings里勾選需要的組件。我這邊的清單是內(nèi)核必選、FALFlash抽象層、SFUD串行Flash通用驅(qū)動、YModem在FinSH組件里、OTART-Thread的OTA組件。有個容易漏掉的地方是YModem組件依賴POSIX層的文件操作接口所以還要在組件配置里打開libc和posix相關(guān)的選項否則編譯會報一堆open、read、close未定義的錯。FAL和SFUD這兩個組件是配合使用的。SFUD負責把W25Q128初始化為一個塊設備FAL負責把這個塊設備按起始地址和大小切成邏輯分區(qū)。在RT-Thread Studio的配置界面里FAL可以配置分區(qū)表我上面那張表就是填在這里的。配置完成后fal probe命令能直接看到所有分區(qū)。2.2 W25Q128接線與驅(qū)動配置W25Q128是標準的SPI NOR Flash四線制CS、CLK、MOSI、MISO。我在F411開發(fā)板上用的是SPI1引腳分配是PA5接CLKPA6接MISOPA7接MOSIPA4接CS。這個接法比較常規(guī)如果你的板子引腳不同記得在Board Configuration里改。SFUD對W25Q128的支持非常完善型號直接在它內(nèi)置的Flash設備表里。所以驅(qū)動這塊基本不用寫代碼關(guān)鍵是SPI設備的初始化要在應用代碼里手動調(diào)用。我之前犯過一個低級錯誤只勾選了SPI驅(qū)動和SFUD但沒在代碼里rt_hw_spi_device_attach把CS引腳和SPI總線綁定結(jié)果SFUD一直枚舉不到Flash設備。#include rtthread.h #include spi.h #include sfud.h #include drv_spi.h static int spi_flash_init(void) { /* 將SPI1總線上掛載的W25Q128設備片選為SPI1_CS_1 */ rt_hw_spi_device_attach(spi1, spi10, GPIOA, GPIO_PIN_4); /* 使用SFUD探測并注冊 */ if (rt_sfud_flash_probe(w25q128, spi10) RT_NULL) { rt_kprintf(W25Q128 probe failed.\n); return -RT_ERROR; } return RT_EOK; } INIT_APP_EXPORT(spi_flash_init);rt_hw_spi_device_attach的最后一個參數(shù)是CS引腳我用的GPIOA的Pin4。rt_sfud_flash_probe執(zhí)行完之后FAL就能看到這個Flash塊設備了。運行sfud probe spi10命令如果能正確打印出W25Q128的型號和容量說明驅(qū)動這一層已經(jīng)通了。2.3 FAL分區(qū)表配置的坑FAL分區(qū)表在RT-Thread Studio里有兩種配置方式一種是圖形化界面里直接填另一種是在fal_cfg.h里手寫。我建議用fal_cfg.h手寫理由很簡單圖形界面生成的代碼有時候分區(qū)起始地址會意外被修改而且版本管理的時候手寫文件更容易diff。#ifndef _FAL_CFG_H_ #define _FAL_CFG_H_ #include rtconfig.h #include board.h #define NOR_FLASH_DEV_NAME w25q128 /* Flash設備表 */ extern struct fal_flash_dev nor_flash0; extern struct fal_flash_dev stm32f4_onchip_flash; /* Flash設備表 */ #define FAL_FLASH_DEV_TABLE \ { \ stm32f4_onchip_flash, \ nor_flash0, \ } /* 分區(qū)表 */ #define FAL_PART_TABLE \ { \ {FAL_PART_MAGIC_WORD, bootloader, stm32f4_onchip_flash, 0, 64*1024, 0}, \ {FAL_PART_MAGIC_WORD, app, stm32f4_onchip_flash, 64*1024, 448*1024, 0}, \ {FAL_PART_MAGIC_WORD, download, nor_flash0, 0, 1024*1024, 0}, \ {FAL_PART_MAGIC_WORD, backup_a, nor_flash0, 1024*1024, 1024*1024, 0}, \ {FAL_PART_MAGIC_WORD, backup_b, nor_flash0, 2048*1024, 1024*1024, 0}, \ } #endif /* _FAL_CFG_H_ */這里有個特別容易踩的坑stm32f4_onchip_flash這個設備在FAL里默認的起始地址是0x08000000大小是芯片的全部Flash。如果分區(qū)表里bootloader的起始地址填0FAL會自動映射到0x08000000這是對的。但App分區(qū)的地址必須自己算好64KB偏移對應的是0x08010000這在代碼里隱含在了“64*1024”這個偏移量里所以App鏈接腳本里的ROM地址也必須和這個偏移嚴格一致。3. YModem協(xié)議與OTA組件的工作機制3.1 YModem協(xié)議關(guān)鍵細節(jié)回顧YModem協(xié)議看著簡單實際寫代碼的時候坑不少。它的基本流程是發(fā)送方先發(fā)一個包含文件名和文件大小的數(shù)據(jù)包133字節(jié)128字節(jié)數(shù)據(jù)加5字節(jié)頭接收方確認后發(fā)送方再按128字節(jié)或1024字節(jié)的分塊發(fā)送文件數(shù)據(jù)。全部發(fā)完后發(fā)送方發(fā)一個結(jié)束包接收方回應ACK整個傳輸結(jié)束。在嵌入式端最容易出問題的是這幾個點第一塊號溢出。YModem的塊號是8位最大255超過255會回繞到0。如果固件超過32KB128字節(jié)塊的情況下塊號就會回繞。我的處理方式是直接忽略塊號校驗只校驗數(shù)據(jù)CRC因為塊號在文件傳輸場景下本來就不太有意義。第二取消機制。YModem協(xié)議里接收方連續(xù)發(fā)送兩個CAN0x18表示取消傳輸。這個機制一定要留好接口否則串口調(diào)試助手誤觸發(fā)了什么字符傳輸狀態(tài)就卡死了。我一般會在接收循環(huán)里判斷如果連續(xù)兩次收到0x18就強制退出并擦除下載區(qū)。第三超時與重傳。YModem規(guī)定了3秒超時重傳機制發(fā)送方發(fā)一個包后如果3秒內(nèi)沒收到應答就會重發(fā)。嵌入式接收端必須在這個時間內(nèi)響應否則體驗很不好。我實測下來SecureCRT的YModem發(fā)送一個1024字節(jié)塊后的等待時間是3秒這要求接收端的擦除Flash、寫入Flash操作不能超過這個時間閾值否則就必須把擦寫操作拆分或者用雙緩沖。提示片外SPI Flash頁寫入通常是256字節(jié)所以在接收循環(huán)里每收到一個1024字節(jié)塊要拆成4次頁寫入。每次頁寫入前還要確保目標地址是空閑狀態(tài)。我建議在寫之前先判斷當前塊是否需要擦除用SFUD的sfud_erase_write接口一次搞定省得自己處理擦寫邊界。3.2 RT-Thread OTA組件的分層設計RT-Thread的OTA升級組件其實是做了分層設計的理解這個分層對后續(xù)調(diào)試很有幫助。最底層是FAL提供的分區(qū)讀寫接口中間層是OTA組件自己的管理邏輯包括固件頭解析、版本校驗、拷貝執(zhí)行等最上層才是YModem這樣的傳輸協(xié)議。用YModem做OTA時固件數(shù)據(jù)流的完整路徑是串口 - YModem接收循環(huán) - 下載區(qū)分區(qū)寫入 - 固件頭校驗 - 拷貝到App分區(qū) - 設置Boot標志 - 復位重啟。這個流程里最容易忽略的是固件頭。如果不做固件頭Bootloader拿到一堆裸二進制數(shù)據(jù)根本不知道這是不是個合法固件版本號對不對長度是否超出App分區(qū)。所以我在生成升級包的時候會在二進制數(shù)據(jù)最前面拼一個自定義頭部結(jié)構(gòu)體。3.3 固件包格式與版本校驗設計固件包格式這塊我踩過不少坑。起初直接裸傳bin文件Bootloader收到后直接搬運后來發(fā)現(xiàn)如果傳了個損壞文件App區(qū)就被覆蓋成磚了。所以后來引入了自定義包頭typedef struct { uint32_t magic; /* 魔數(shù)固定為0x544F4131即TOA1 */ uint32_t firmware_size; /* 固件實際大小不含包頭 */ uint32_t firmware_crc; /* 固件數(shù)據(jù)的CRC32 */ uint32_t version; /* 版本號單調(diào)遞增 */ uint32_t reserved[3]; /* 保留 */ } firmware_header_t;這個頭部一共32字節(jié)放在固件文件的最前面。生成升級包時先算原始bin的CRC32和大小填好頭然后把頭部原始bin拼接成一個新的升級文件。Bootloader收到文件后第一步檢查魔數(shù)第二步檢查CRC第三步檢查版本號是否大于當前運行固件版本。全部通過才允許搬運否則直接丟棄并報錯。版本號用單調(diào)遞增的uint32避免用字符串版本號在比較時出幺蛾子。我第一次用v1.2.3這種字符串版本號比較邏輯寫起來麻煩不說還容易把v1.10.0和v1.9.0比較錯。改成數(shù)字版本號之后清爽很多。4. 實操過程Bootloader與App的完整實現(xiàn)4.1 Bootloader端代碼結(jié)構(gòu)Bootloader的代碼結(jié)構(gòu)不算復雜核心就是一個主循環(huán)加狀態(tài)機。我把它分成四個模塊平臺初始化模塊、YModem接收模塊、固件搬運模塊、啟動跳轉(zhuǎn)模塊。主程序的邏輯用狀態(tài)機來表達清晰且不容易亂typedef enum { STATE_CHECK_APP_VALID, /* 檢查App分區(qū)是否有合法固件 */ STATE_WAIT_FIRMWARE, /* 等待YModem上傳新固件 */ STATE_RECEIVING, /* 正在接收固件數(shù)據(jù) */ STATE_VERIFY_FIRMWARE, /* 校驗固件頭和CRC */ STATE_COPY_FIRMWARE, /* 搬運固件到App分區(qū) */ STATE_BOOT_APP, /* 跳轉(zhuǎn)到App執(zhí)行 */ STATE_ERROR /* 錯誤狀態(tài)打印日志并停止 */ } boot_state_t;這里有個細節(jié)值得展開啟動時檢查App區(qū)是否有合法固件是OTA系統(tǒng)里最容易被忽略的一環(huán)。如果App區(qū)是空的或者已經(jīng)被擦除了Bootloader不能直接跳轉(zhuǎn)否則就是死機。我的檢查方式是讀App區(qū)起始地址存放的兩個值一個是棧指針必須是有效的RAM地址在0x20000000到0x20020000范圍內(nèi)另一個是復位向量必須是有效的Flash地址。兩個都滿足才跳轉(zhuǎn)。4.2 Bootloader跳轉(zhuǎn)App的實現(xiàn)跳轉(zhuǎn)邏輯是Bootloader里最敏感的代碼。網(wǎng)上流傳的跳轉(zhuǎn)代碼很多但很多都有個小問題。標準寫法是typedef void (*app_entry_t)(void); void jump_to_app(uint32_t app_addr) { uint32_t app_sp *(volatile uint32_t *)app_addr; uint32_t app_pc *(volatile uint32_t *)(app_addr 4); app_entry_t app_entry (app_entry_t)app_pc; /* 關(guān)閉全局中斷 */ __disable_irq(); /* 設置主棧指針 */ __set_MSP(app_sp); /* 清空中斷表防止舊中斷響應 */ for (int i 0; i 8; i) { NVIC-ICER[i] 0xFFFFFFFF; NVIC-ICPR[i] 0xFFFFFFFF; } /* 跳轉(zhuǎn) */ app_entry(); }這里有兩個關(guān)鍵點。第一__disable_irq()必須在跳轉(zhuǎn)前執(zhí)行否則App啟動過程中如果來了中斷而中斷向量表還沒切換好就會進HardFault。第二__set_MSP不只是設置一個寄存器那么簡單它還涉及流水線狀態(tài)所以跳轉(zhuǎn)前最好用__DSB()和__ISB()做一下指令屏障。嚴謹一點的寫法是這樣__disable_irq(); __DSB(); __ISB(); __set_MSP(app_sp); __DSB(); __ISB(); app_entry();不要小看這兩個屏障我在調(diào)試時遇到過一種詭異現(xiàn)象跳轉(zhuǎn)后App偶爾能跑偶爾跑飛時好時壞。查了很久最后發(fā)現(xiàn)就是少了ISB指令屏障導致處理器流水線里還有老的指令沒沖刷干凈跳過去后執(zhí)行了舊的指令序列。4.3 App端的接收配合與分區(qū)寫入App端的邏輯就相對簡單了它只需要把YModem收到的數(shù)據(jù)寫入下載分區(qū)即可。這里我用RT-Thread的YModem組件它已經(jīng)把協(xié)議細節(jié)封裝好了我們只需要注冊一個接收回調(diào)static rt_err_t ymodem_recv_callback(ymodem_ctx_t *ctx, uint8_t *buffer, rt_size_t size) { struct fal_part *download_part fal_part_find(download); if (download_part RT_NULL) { return -RT_ERROR; } /* 從下載區(qū)當前偏移位置寫入數(shù)據(jù) */ rt_size_t written fal_part_write(download_part, ctx-file_offset, buffer, size); if (written ! size) { return -RT_ERROR; } return RT_EOK; }整個接收流程調(diào)用ymodem_ota_start(ymodem_recv_callback)就行。YModem組件會在每次收到完整數(shù)據(jù)塊后回調(diào)一次我們把數(shù)據(jù)寫入download分區(qū)。因為YModem最終傳完會把偏移量停在文件末尾所以可以在回調(diào)里記錄一下最終文件大小方便后續(xù)校驗。固件頭校驗和版本檢查放在接收完成后執(zhí)行。注意順序先校驗再搬運任何一個環(huán)節(jié)出錯都要停止不要嘗試“繼續(xù)傳半個包”。我遇到過有人圖省事在接收過程中邊收邊校驗最后發(fā)現(xiàn)前面的數(shù)據(jù)塊在傳輸過程中出錯但后面的塊已經(jīng)覆蓋了。所以正確的姿勢一定是“整包收完 - 統(tǒng)一校驗 - 成功才搬運”。4.4 生成YModem升級包并執(zhí)行升級生成升級包這塊我用的是Python腳本在編譯完成后自動處理。腳本做的事很簡單讀入編譯出的bin文件計算CRC32和大小填充頭部再拼接輸出一個新的bin。之后在SecureCRT里選擇YModem發(fā)送這個新bin即可。import struct import zlib import sys import os def make_ota_package(input_bin, output_bin, version): with open(input_bin, rb) as f: firmware f.read() firmware_size len(firmware) firmware_crc zlib.crc32(firmware) 0xFFFFFFFF magic 0x544F4131 header struct.pack(IIIII, magic, firmware_size, firmware_crc, version, 0) header b\x00 * 12 # reserved with open(output_bin, wb) as f: f.write(header) f.write(firmware) print(fOTA package generated: {output_bin}) print(fFirmware size: {firmware_size} bytes, CRC32: 0x{firmware_crc:08X}) if __name__ __main__: make_ota_package(sys.argv[1], sys.argv[2], int(sys.argv[3]))執(zhí)行升級時SecureCRT的連接協(xié)議要選YModem。這里有一個實用小技巧SecureCRT的逐文件傳輸劇本功能可以自動完成“發(fā)送YModem包-等待完成”的流程不需要手動點。把升級流程腳本化之后產(chǎn)線升級效率能提升很多也不用教工人點那些復雜的界面。4.5 從Bootloader到App的完整啟動流程最后把所有環(huán)節(jié)串起來看一次完整的啟動流程是什么樣的芯片上電Bootloader開始執(zhí)行。Bootloader檢查App區(qū)頭部合法性和CRC。如果App合法等待2秒或通過按鍵進入升級模式超時后跳轉(zhuǎn)App。如果進入升級模式初始化W25Q128清除下載區(qū)開始YModem接收。接收完成校驗固件頭、校驗CRC、比較版本號。校驗通過后擦除App分區(qū)將下載區(qū)固件搬運到App分區(qū)。設置升級標志復位重啟。Bootloader啟動檢查App合法跳轉(zhuǎn)執(zhí)行新固件。這個流程里第5步的版本號比較是防止重復升級的第2步的合法性檢查是防止App區(qū)損壞時變磚的第6步的搬運是存在FW搬遷失敗可能性的所以搬運完之后Bootloader要再次校驗App區(qū)的CRC。我在這個位置犯過一個錯誤搬運完成后沒有重新校驗結(jié)果有次Flash擦寫不穩(wěn)定App區(qū)拷了一半就跳轉(zhuǎn)了直接變磚最后還是靠JTAG救回來的。從那之后我在拷貝完成后再做一次CRC校驗穩(wěn)了很多。5. 常見問題與排查技巧實錄5.1 典型問題速查表下面這個表是我在這套方案上踩過的坑里最有代表性的幾個整理出來供排查時參考問題現(xiàn)象可能原因解決方案YModem傳輸一直超時重傳無法開始SPI Flash未初始化或設備名不對先執(zhí)行sfud probe spi10確認Flash設備存在傳輸完成但校驗失敗固件頭里的CRC計算方式與接收端不一致確認雙方都用CRC32多項式相同初始值與最終異或值一致傳輸完成后跳轉(zhuǎn)App啟動即HardFaultApp鏈接腳本的ROM起始地址與分區(qū)表不一致檢查App工程的鏈接腳本確保ROM起始地址是0x08010000跳轉(zhuǎn)后PC跑飛時好時壞缺少指令屏障或中斷表沒有清理干凈在跳轉(zhuǎn)前增加__DSB()和__ISB()清空NVIC掛起中斷YModem傳輸很慢只有每秒幾十KB波特率設置過低或Flash頁寫入效率低把波特率從115200提升到460800或921600用SFUD的整塊寫入接口Bootloader能收到數(shù)據(jù)但下載區(qū)沒數(shù)據(jù)回調(diào)函數(shù)寫入的偏移量未按實際接收長度增加檢查回調(diào)里是否使用了ctx-file_offset作為寫入偏移固件包能傳但版本號比較邏輯混亂版本號用字符串表示統(tǒng)一改為uint32遞增數(shù)字版本號5.2 兩個容易忽略的深坑上面表格里列的方案都能解決但有兩個深坑我想單獨拿出來詳細說。第一個是關(guān)于SPI Flash擦除的耗時問題。W25Q128一個扇區(qū)4KB擦除時間典型是45ms如果你的固件有300KB下載區(qū)1MB分成256個扇區(qū)全片擦除一次大概要12秒。這個時間必須在YModem開始傳輸之前完成不能在接收過程中邊擦邊寫。我一開始沒注意這個問題把擦除放在第一次寫入回調(diào)里執(zhí)行結(jié)果收到第一個塊之后一直在擦片擦區(qū)YModem超時重傳了好幾輪整個傳輸過程非常不穩(wěn)定。后來我把擦除操作移到Y(jié)Modem接收之前一次性擦完整個下載區(qū)問題徹底消失。第二個是關(guān)于邊界對齊的寫操作。W25Q128的最小可編程單位是1字節(jié)但實際寫入最小單位是頁256字節(jié)。當你用SFUD的sfud_write寫數(shù)據(jù)時如果起始地址或結(jié)束地址沒有按頁邊界對齊SFUD內(nèi)部會做處理但處理邏輯是先讀回整頁數(shù)據(jù)再改寫部分字節(jié)再整頁寫回。這個邏輯本身沒問題問題在于它會對未擦除的區(qū)域做讀改寫而如果你之前沒有先擦除讀到的是0xFF以外的數(shù)據(jù)那你寫入的數(shù)據(jù)就會被舊數(shù)據(jù)污染。所以正確的操作順序一定是先擦除整個目標區(qū)域再分區(qū)按塊寫入。5.3 調(diào)試技巧如何快速定位問題調(diào)試OTA這種功能最痛苦的是“現(xiàn)象在Bootloader和App之間切換分不清哪邊的問題”。我習慣在Bootloader里加完整的日志輸出所有關(guān)鍵節(jié)點都打一行。特別是YModem接收過程中每收到一個塊就打印一個進度條這樣能直觀看到傳輸是否卡住。另一個技巧是給Bootloader和App分別配置獨立的串口日志前綴。Bootloader的日志統(tǒng)一以[BOOT]開頭App的日志以[APP]開頭。跳轉(zhuǎn)后如果還能看到[BOOT]的日志說明跳轉(zhuǎn)失敗了如果只能看到[APP]的日志說明App已經(jīng)正常運行。別小看這個簡單的約定在調(diào)試時它幫我省了大量時間。還有一個小技巧是專門針對“下載區(qū)搬運到App區(qū)失敗”這種問題的。如果搬運完后CRC校驗失敗但下載區(qū)數(shù)據(jù)本身是好的大概率是搬運過程中的Flash寫入問題。我會在Bootloader里留一個“從下載區(qū)重新搬運”的命令行入口這樣不需要重新通過YModem傳文件直接在命令行觸發(fā)一次搬運就行調(diào)試效率高很多。6. 這套方案的局限與后續(xù)擴展說句實在話YModem 串口這套OTA方案雖然穩(wěn)定可靠但也有它的天花板。最明顯的一點是必須靠人工介入沒法遠程觸發(fā)。如果產(chǎn)品部署在客戶現(xiàn)場想要遠程升級固件那YModem這套就不合適了必須換HTTP或者MQTT這類網(wǎng)絡傳輸方式。我現(xiàn)在這個方案里其實已經(jīng)預留了升級接口后續(xù)如果要做網(wǎng)絡OTA基本上只需要做兩件事一是把YModem接收模塊替換成HTTP下載模塊App在運行時可以通過網(wǎng)絡下載固件包到下載區(qū)二是下載完之后的校驗、搬運、跳轉(zhuǎn)邏輯完全不用動因為它們本來就和傳輸協(xié)議解耦了。還有一點是關(guān)于雙備份升級。我計劃在W25Q128的backup_a和backup_b分區(qū)做雙備份。思路是新固件先寫到backup_a然后從backup_a搬運到App區(qū)這樣即使App區(qū)寫入失敗還可以從backup_a重新搬運甚至Bootloader可以支持從上一次備份的backup_b引導。這種設計能進一步降低變磚概率但現(xiàn)階段對大多數(shù)場景來說下載區(qū)加單備份已經(jīng)夠用了雙備份等有需求再加。根據(jù)我的測試這套方案在115200波特率下傳一個300KB的固件包大約需要35秒加上校驗和搬運的時間總體升級時間在40秒左右。如果波特率提高到460800時間能壓到10秒以內(nèi)。不過要提高波特率前提是你的串口芯片和線材質(zhì)量足夠好不然誤碼率上來了反而更慢。這篇文章寫到的所有關(guān)鍵點都是我在這塊板子上實實在在跑通了的。從分區(qū)規(guī)劃到Y(jié)Modem接收從Bootloader跳轉(zhuǎn)到固件校驗每一步都踩過坑、填過坑。如果你正在做類似的事情希望這些記錄能幫你少走一些彎路。尤其是分區(qū)表、鏈接腳本、跳轉(zhuǎn)屏障這幾個位置一次配好后面就非常省心了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
www.五月丁香| 日韩在线观看网址| 激情五月婷婷丁香综合网| 婷婷中文字暮| 六月色丁香婷婷| 超碰93在线观看| 青青草a在线| 亚洲AV无码成人精品电影| 另类图片五月天| 色狠狠综合入口| www.99久| 中文字幕不卡网站| 无码色| 激情五月婷婷五月| 区区欧美你爱| 婷婷五日b| 五月天操逼网| 久久99看免费| 97人人操| 五月婷精品| 九九热亚洲中文在线观看免费| 久久久久久久久久婷婷| 123日本不卡在线| 精品久久久人妻| 色爱亚洲| 婷婷六月丁| 亚洲色婷婷婷婷人人爽| 欧美狠狠草| www.99日本| 日韩人妻AV在线| 九色婷婷| 婷婷综合五月| 九九热超碰| 99视频精品全部观看10| 停停五月丁香| 色色色色色色色色色色色色色色,网站| 66精品国产成人| 丁香五月婷综合| 国产精产国品一二三在观看| 五月天啪啪| 深爱激情综合网| 婷婷六月伊人| 色色色.COM| 日韩六十路91性交电影| 内射激情在线| 五月天深爱激情网| 六月婷婷五月天| 五月婷婷和六月| 精品久色| 欧美色播综合在线观看| 五月熟妇婷婷久久| 五月天婷亚洲天综合网综合| 人人舔人人色人人高潮| 婷婷五月天激情亚洲小说| 99精品热视频只有精品10| 91精品人妻少妇无码影院| 婷婷五月成人社区| 五月丁香婷婷综合网色欲| 免费看欧美成人A片无码| 日本婷婷五月天| 啪啪综合网| 99免费| 丁香五月激情综合啪啪| 天天天天天天操| 可以看的AV| 怡红院视频| 天天爽夜夜爽夜夜爽精品视频| 狠狠肏综合网| 婷婷五点亚洲| 免费看欧美成人A片无码| 五月婷婷五月| 99久久性爱| 久久久网站| 草草视频91| 大香蕉啪啪啪| 精品亚洲国产成AV人片传媒| 久热爱大香蕉在线蜜臀悦色| 婷婷五月天Av| 色色综合日韩| 亚洲AV激情五月综合网| 亚洲国产色色| 草一草avb| 高清不卡一区| 91无码色色| 久婷婷视平| 欧美男女婷婷| 日韩欧美一区二区三区四区| 99热12| 99九九视频| 91九色在线视频| 久久国产色| 欧美日韩成人| 色婷婷文字幕| 人妻内射麻豆视频| 五月丁香六月色| 五月天婷综合| www,999日本色| 变天就操逼婷婷五月| 十区av| 久久色区| 久久久久8888| 另类图片五月天婷婷| 婷婷色5月激情网| 男人天堂99| 在线播放成人网站| aa久久| 91视屏在线观看com.wwwvv| 激情五月www| 色欲五月婷婷| 99综合成人视频在线观看| 人人性久久| 色婷婷婷av | 五月开心啪啪| 天天插天天爱| 丝袜激情网| 成人小说 五月天 婷婷| 国产亚洲99久久精品| 久久久国产精品黄毛片| 91人人爽狠狠狠| 久久婷婷欧美| 丁香激情网| 97伊人综合婷婷| 99爱欧美| 五月天激情综合| 99re在线免费视频| 丁香五月婷久久| 狠狠色噜噜狠狠狠狠综合| 91丨九色丨老熟女激情| 激情五月婷婷啪啪| 色色色综合网| 五月份婷婷| 99成人在线观看| 99久热| 台湾无码A片一区二区| 九九热视频免费观看| 大香蕉伊人久久| 97丁香视频| 婷婷五月天99| 99欧美热| www.丁香五月| 99视频综合网| 丁香五月婷综合网| 韩国97天堂| 插插网爽妇五月丁香| 久久精品9| 黄久久久| 婷婷的99视频网站| 99久久婷婷| 99玖玖在线视频| 94干大香蕉| 综合深爱五月| 9精品一区| 思思精品久久艹| 日韩999| 欧洲亚洲午夜| 五月婷婷九| 五月婷婷自拍视频| 91色色色视频| 激情五月天偷拍综合网| aa久久| 九九热99免费视频| 精品九九婷婷| 五月天丁香婷| 中文网AV| 超碰成人公开| 深爱婷婷丁香五月激情| 香蕉久久六月| 丁香五月婷婷基地| 第2色五月婷| 丁香五月社区| 婷婷综合在线观看视频| 欧美成人日韩| 婷婷五月天社区| 日韩色色网| 天天射影院| 色综合com| 97人人草| 98毛片| 久久久GOGO无码啪啪艺术 | 综合网亚洲| 色婷婷玖玖影院| 久久久久久综合五月婷婷| 丁香五月综合网| 丁香婷婷六月激情综合| 天花AV无码| 婷婷五月天天爽| 翔田千里 50岁 无码| 日本久久婷婷| 六月伊人婷婷| www.久久99热地址发布| 亚洲日韩一页精品发布| 六月亭亭久久综合激情| 久久综合首页| 中文字幕在线免费看线人| 五月丁香九九九综合| 在线超碰免费| 婷婷五月天色播| 色色色色色日韩午夜激情| 97超碰人人操| 色色五月天婷婷丁香| 欧美天天搞| 六月丁香综合| 五月婷婷视频啪啪美女| 久婷视频| 国产性爱亚洲是图| 五月天婷婷黄色| 超级碰碰99| 中文av网| 亚洲九九免费| 天天射色五月天| 天天肏天天肏天天肏| 麻豆精品| 天天插天天插| 色五月婷婷在线| 天天射天天干天插色综合| 人人操av| 欧美久久五月婷婷| 真实熟女-91九色| 五月天婷综合| 99re思思热在线视频| CHINESE熟女老女人HD视频| 我要色综合五月婷婷| 婷婷色五月91啪啪| 丁香久久综合| 99热欧| 人人操9| 国产无人区大片| 这里有精品99| 婷婷色基地在线看 | 久热99热| 熟妇高潮一区av| 色婷婷情片| 欧美色五月| 99色看| 色色色五月婷婷| 超碰妻人人| 久色视频| 夜夜爱网站| 99色色网| 丁香婷婷激情五月天无毒不卡蜜桃| 激情五婷精品网在线观看网址| 狠狠操狠狠色| 亚洲狠狠终合停停终合| 嫩草AV久久伊人妇女超级A| 9l视频自拍九色9l视频自拍九色9l社区| 久久人人人人妻| 五月丁香婷婷爱激情综合网| 九色91国产| 99热这里只有精品18| 丁香六月色香蕉视频| 日韩AV在线免费观看| 99视频内射三四| 九九久久网| 九九99精品视频| 79色色色色| 久久五月激情网| 天天色综和网| 丁香无五月网| 操操操操操操婷婷五月天| 婷婷六月成人| 亚洲五月天色色| 123日本不卡在线| 日本少妇裸体做爰高潮片| 九九精品免费| 国产麻豆视频| 九月激情综合婷婷| 久综合网| 婷婷色色播五月天| 婷婷五月色情天| 79精品视频| 99久久免费精品| 婷婷色五月情| 亚洲色另类| 26uuu偷拍亚洲欧洲综合| 天天日天天久久青青| 国产高潮A片羞羞视频涩涩| 51精品国自产在线| 五月婷婷啪啪| 五月婷婷狠狠干| 欧美黄色AA片哗啦啦啦| 丁香五月天网友自拍啪啪啪视频| 亚洲AAAA网| 色婷婷基地在线| OYIWbGcPu8H| 久久精品性爱| 婷婷五月色播| 五月天激情婷婷| 婷婷五月丁香久久| 婷婷成人综合| www.超碰| 色婷婷久久| 欧美激情综合色综合啪啪五月| 日日舔夜夜操| 可以直接看的av| 呦呦v线| 久久久人妻不卡| 激情综合网址| 久久这里精彩免费在线观看| 色婷婷免费观看| 在线中文亚洲| 99在线热| 五月丁欧美| 丁香五月婷婷综合精品素人| 射区导航| 五月丁香婷婷色色| 激情五月天婷婷免费观看| 婷婷午夜精品久久久| 激情啪啪五月| 久久99网站| 国产一级片| 五月天伊人| 风流少妇A片一区二区蜜桃| 五月婷婷综合网| 北京熟妇搡BBBB搡BBBB| 婷婷色狠狠| 激情婷婷黄色五月| 丁香五月综合| 91视屏在线观看com.wwwvv| 久久五月丁香综合17C| 五月丁香婷婷综合网色欲| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪 | 大伊香蕉精品视频在线| 婷婷色六月| 一月婷婷色色| 色婷婷色五月丁香| 天天日夜夜爽| 九九热在线精品视频| 久久五月天激情| 五月婷婷9| 久久久性爱网| 青青草护士中出内射-欧美电影在线天堂新版| 亚州精品久久久久AV无码| 久色欧美| 六月婷婷激情| 停停六月 综合| 99爱爱| ss99热| 99热这里只有精品在线| 丰满少妇猛烈A片免费看观看| 26uuu精品一区二区| 啊V视频在线观看| 99色热| 五月婷婷综合在线视频| 99国产er热视频| www,婷婷五月天777me,com| 少妇综合网| 久久这里只精品| 久草丁香婷婷1024| 丁香五月婷婷深五月| 天天五月情| 六月婷婷久久| 懂色av粉嫩AV蜜臀AV| 婷婷射综合| 久久成人综合五月天| 99热| 五月婷狠狠| 丁香五月天网站| 2w在线视频| AV在线免费播放| 男女啪啪做爰高潮无遮挡| 色五月欧美| RenRenSe在线视频网站| 99精品在线| a毛片二逼wwwwwwwwww| 亚洲小视频免费观看| 99精品小视频| 操老逼综合网| 日本色噜| 91色久| 五月激情婷婷四射| 五月色俺婷婷| 青青草视频免费观看| 亚洲五月花| 婷久久综合| 色五月丁香婷婷综合| 婷婷精品在线| 久久色五月天| 色五月婷婷亚洲最大| 国产亚洲精品久久久久久郑州| 91日视频| 色色色热热热| 综合精品99| 五月丁香婷婷激情| 少妇AB又爽又紧无码网站| 91丨九色丨白浆秘| 色五月五月天色婷婷色五月| 91大神在线免费看视频全集男男一起操| 狠狠色婷婷在线| 九九99九九99九九99视频网| 怡春院久操| 天天天天天天噜| 亚洲亚洲人成综合网络| 欧洲亚洲免费视频区| 色噜噜综合网| 99热爱爱干干日| 九九在线视频| 伊人五月综合网| 在线可以看的av网址| 亚洲日韩一页精品发布| 丁香六月婷婷高清| 国产又色又爽又黄又免费| 五月六月婷婷激情网| 亲子乱AV一区二区三区下载| 色播婷婷大香蕉| 婷婷中文字幕网| 欧美啪啪五月天| 9伊人网| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 激情综合五月天| www网站在线观看| 天天夜夜六月丁香五月婷婷老师| 操逼电影免费看| 色色婷婷综合网| 日日操夜夜擼| 噜噜噜噜噜色| 极品九九九九九九| 色五月婷婷网| 影音先锋色婷婷| 色婷| 天天日天天狠狠操| 国产精品久久久久久喷浆| 狠狠干总合| 日韩青青| 免费亚洲婷婷五月| 五月丁香影院| 综合xx网| 激情影院69| 色播五月婷婷五月| 99热精品观看| 久热免费| 国产26uuu视频| 成人精品视频99在线观看免费| 森林影视大全,最好看的2019年视频 | 久草热在线视频| 国产看真人毛片爱做A片| 密乳视频| 91啪啪啪啪| 欧美婷婷日本| 五月婷婷开心爱| 91聚色综合网| 久热黄色| 天天综合.com| 亚州精品成人片| 婷婷五月亚洲综合| ji'qing'luan'ren'lun| 久久五月情| 婷婷九月激情| 亚洲激情丁香五月基地| 亚洲人妻电影| 欧美日韩999| 婷婷五月综合在线视频| 久热伊人9| 欧美婷婷丁香五月社区| 人人射av| 9l视频自拍9l九色9l成人| 99久久婷婷| 婷婷五月天影视| 国内在线99视频| 大香蕉综合网| 综合婷婷五月丁香在线观看| 激情五月综合网| 久久黄色片| 婷婷大乡焦噜噜| 丁香五月AV在线| 91精品久| 色色色综合网| 日本丁香五月| 色丁香在线视频| 成人一区在线观看| 丁香五月色情| 五月色婷| 成人 九九九九| www.婷婷.com| 青草少妇激情| 婷婷综合五月天激情| 天啪色| 国产 码在线成人网站| 婷婷精品性视频| 婷婷五月花免费视频在线| 东北熟女高潮99综合99| 久久ww| 人人摸人人| 婷婷色5月天在线。| 特级操b片| 欧美色片中文字幕久久久久| 亚洲六月婷婷| 成人综合AV| 天天日婷婷| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 干亚洲天堂| 97se视频在线| 国产色色色色色| 色五月婷婷五月天| 色三级色三级| 婷婷五月天天爽| 久久久区区一久久久久久| 亚洲操逼片| 久草 tingting| www99热| AV在线免费播放| 丁香五月天在线| 五月情四婷婷| www.婷婷网| 欧美在线操| 久久天堂色| 国产黄大片在线观看画质优化| 91精品丝袜久久久久久| 丁香五月激情宗合| 日韩久久视频| 五月天丁香久久| 丁香激情五月天| 噼里啪啦完整版中文在线观看| 久久久久9| 成年人丁香五月| 婷婷激情五月综合丁香社| 再綫Av免费視品| www.99热视频| 九月丁香婷婷综合| 五月色丁香| 色五月97| 激情婷婷五月少妇| 777久久久| 一本婷婷丁香久久| 97操碰人免费| 亚洲丁香婷婷| 岛囯综合激情网| 国产成人综合亚洲| 久久男人网婷婷| 狼人伊人天堂| 日韩五月婷婷久久| 色婷婷色和| 91人人看| 九月婷婷综合网| 亚洲综合成人网站| 久久精品综合色| 色五月婷婷大香蕉| 久热 91| 丁香九月综合| 狠狠舔| 91精品电影18T| 婷婷五月丁香在线观看| 狠狠草综合网| 久久九九免费视频| 九九色综合网| 中文av网| 亚洲亚洲人成综合网络| 欧美三级韩国三级日本三斤| 综合超碰熟| WWW,五月| 九九综合视频在线观看| ji'qing'luan'ren'lun| 无码人妻一区二区三区免费九色| 女高怪谈在线观看| 999激情视频| 99热91| 激情久久久| 97在线观看| 欧美97超碰| 百度4399有码精品V在线观看 | www五月| 高清一区二区三区日本久| 精品久久久久成人码免费动漫 | 丁香五月瑟瑟| 激情综合色婷婷六月天| 婷婷激情在线| 六月色色| www.99操.com| 999婷婷综合| 色五月开心五月激情五月| 天天操夜夜肏| 99热青青草| 丁香五月综合| 色色综合院| 91ncom.色| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 亚洲婷婷六月天| 亚洲综合婷婷五月天| 日本熟女内射| 91热在线| 国产精品久久欧美久久一区| 一级无码作爱片| 伊人婷婷大香蕉| 五月色丁香综合| 逼里香不卡| 天天肏高清在线| 超碰在线国产| 熟女国产在线一区二区三区四区| 婷婷欧美综合| 五月综合影院| 91操在线视频| 人与禽A片啪啪| 欧美日韩国产一区二区| 亚洲丁香五月综合| 婷婷香五月综合激情| 五月天色综合| 丁香婷婷综合激情五月色| 激情五月天情色| 亚洲高清在线| 五月激香蕉网| 亚洲国产精品成人免费一区久久久在线观看AAAA | 99国产视频网| 久久久久久人妻| 六月丁香啪| 欧美内射AA| 久热网在线视频| 人妻中文在线| 久激情| 激情五月天激情网| 久久婷婷五月综合| 国产精品91抖高| 久久综合影院| 99热在线成人网站| 丁香五月色| 任你搞网站| 五月欧美色色五月| 婷婷六月色| 五月天伊人久久| 【乱子伦】黄色| 无码色| A短视频免费在线观看| 激情六月天婷婷| 五月丁香婷爱在线| 黑人糟蹋人妻HD中文字幕| 成人永久免费视频在线观看| 欧美婷婷五月| 99热在线观看| 人人草公开操| 综合性爱网| 91人人人人人人人| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 91精品国产日韩91久久久久久国模| 99秘 在线| 综合激情视频| 五月丁香六月成人| 久久久无码精品成人A片小说| 久久综合五月天激情小说网站| 丁香婷婷人妻| 99热超碰在线| 狠狠爱激情网| 亚洲网站999| 一本狠婷婷综合| 九色视频这里只有精品| 日本欧美成人片AAAA| 六月丁香综合| 看片视频在线免费日产在线看| 丁香花社区av| 亚洲色色色色| 日日干四虎| 九九热只有这里是精品| 色色亚洲视频| 欧洲永久精品| 激情六月婷婷| 91久操| 五月天婷婷基地| 久久五月激情综合| 久久人操| 色丁香久久| 91婷婷| 综合99久久| 深爱婷婷丁香五月激情| 91九色 熟| 久久免费视频62| 婷婷五月激情欧美大胆视频| 99思思热只有在这里看 | 香蕉久久五月| 最近免费中文字幕大全高清大全1 色狠狠色噜噜AV天堂五区 | 亚洲AV永久无码影院黑人| 天天日天天操天天干| 婷婷丁香中文字幕| 另类综合婷婷五月天欧美视频| 偷拍九九热| 色五月婷婷影院| 欧洲区自拍| 天天摸天天舔天天天天爽| Av在线资源| 激情五月天影院| 五月天婷婷激情在线色图| 亚洲中文乱字字幕在线永久| 中文字幕五月久久婷| 色婷婷a| 丁香婷婷五月色成人网站| 婷婷五月天播播| 亚洲中文字幕网| 日本色图综合| 夜夜爽天天爽| 天天综合天天玩夜夜玩天天玩夜夜玩 | 日本五月婷婷| www.五月天婷婷.com| 日韩成人精品中文字幕电影| 久久婷婷五月综合色和| 午夜丁香 婷婷| 久操大香蕉| 五月色婷婷综合色| 五月丁香婷婷伊人日韩| 婷婷五月天小说| 超碰av在线| 国产精品久久欧美久久一区| 五月丁香激情在线| 91精品91久久久中77777久久玖玖九九| AV在线免费网站| 天天上天天爽| 丁香五月激情综合久久| 国产成人AV在线| 樱花99视频| 4399精品一区二区| 97影院一级片| 亚洲五月丁| 欧美 日韩 成人| 色色色色色色网站| 五月丁香操亭亭网| 亚洲欧美婷婷五月色综合| 色五月激情五月| 99热这里只有精品99| 性欧美日本| 老师的粉嫩小又紧水又多A片视频| 综合五月丁香六月婷婷| 丁香五月婷婷五月天在线| 亚洲传媒在线观看| 欧美这里只有精品| 79色色| 激情综合五月| 综合久久十| 婷婷五月天基地| 日本五月天一页| 欧美噜噜噜草| 欧美成人日韩| 极品人妻VIDEOSSS人妻| 婷婷五月丁香六月| 婷婷在线免费| 日韩三级片一区二区| 91在线观看www| 成人综合网站| 久久东京热婷婷五月| 亚洲射激情| 99riAv1国产在线观看| 国产3p露脸普通话对白| 色5月婷婷| 久久色这里只有精品| a69在线视频| 五月天婷婷情色| 丁香五月亚洲综合| 免费黄色片子| 在线播放成人网站| 亚洲激情网| av免费人人| 欧洲亚洲最新精品| 超碰99在线观看| 午夜日日| 九九成人电影婷婷| 中文字幕无码人妻少妇免费视频| 九九色欲网| 婷婷激情图片| 婷婷五月六月丁香综合| 色婷丨日丨天丨综合久久| 九九色图| 婷婷综合97| 久久精品日| 99天堂在线观看免费视频| 色综合伊人网| 国产亚洲在线| 激情无码网| 五月色影院| 久久婷婷亚洲五月天| 99re在线视频| 吊色AV男人的天堂| 青青999| 九色视频入口91| 日韩黄色中文字幕| 亚洲中文字幕在线观看| 狠狠操狠狠插| 99热精品在线| 丁香六月综合激情| 久操热线| 丁香五月在线观看| www.夜夜操.com| 另类图片天天影视在线观看| 五月婷婷AV| 91丨九色丨丰满人妖| 色色色在线观看| 停婷丁五月在线| 婷婷五月天播播| 99热在线这里| 99 这里只有精品| 五月天婷婷乱| 丁香婷婷久久老熟女综合网| 久色网五月| 亚洲综合激| 99热精品在线播放观看| www久久99com| 日日干日日s| 精品综合久久久久久五月天| 综合五月天天天天天五月| 五月丁香六月婷婷中合网| 26uu| 99亚洲色| 日本婷色| 久久hd| 五月婷丁香| 99热精品免费| 国产精品成人AV在线观看春天| 99久久婷婷国产综合精品草原| 99热66| 欧亚成人A片一区二区| 国产真人做爰视频免费| 综合色色五月| 色九九丁香九月色九九色| 婷婷丁香视频| 91日日日| 五月天婷婷色在线视频免费观看 | 婷婷五月天色播| 久久婷婷五月综合啪| 久久久中文| 超碰久热| 丁香五月婷婷操逼| 国产免费一区二区三州老师F1F1……| 天天插天天射天天干| 成人五月天丁香| 精品色情一区二区三区四区| 婷婷五月免费在线| 丁香五月天亚洲视频| 色婷五月天| 777米奇影视第四色| 亚洲中文AV| 色噜噜夜夜夜综合网| 色婷婷基地在线| 色五月成人网| 天天综合五月天| 成人片在线播放| 激情五月天天| 久99综合婷婷| 就爱啪啪婷婷| 99成人| 九九色逼| 丁香五月天堂网AV| 人妻性操逼中文字幕 国产| 五月开心婷婷| 成人永久免费视频在线观看| 性无码专区无码| www.久操| 亚洲成人色五月天| 伊人五月成人| 综合激情视频| 国产91在线视频| 五月天丁香六月综合| 99爱免费在线视频| 99久久久久| 秋霞av吧| 91精品综合久久久久久五月丁香| 综合五月天天天天天五月| 99热大香蕉| 国产在线网| 成人网站在线观看视频| 91精品国产综合久久密臀| 天天操B| 黄急一级视频| 91综合在线| 婷婷五月天BBw| 婷婷操逼| 国产婷婷综合| 999热成人在线综合网| 亚洲在线操| 红桃91人妻爽人妻爽| 亚洲色夜| 日操夜撸| 免费观看全黄做爰的视频| 4399在线观看免费毛片| 日日操,天天操| 天天色宗合| 久久的爱大香蕉| 五月丁香六月色情网欧美| 人人操91| 天天肏天天肏| 色婷婷五月综合网| 性爱视频久久| 粉嫩av蜜桃av蜜臀av| 婷婷五月六月激情| 亚洲V国产V欧美V久久久久久| 激情六月天婷婷| 深爱激情五月婷婷| 开心五月婷婷| 婷婷五月色播网| 色综合五月| 一区=区操屄高清大全av| 精品视频99看在线视频| 亚洲午夜AV| 日韩一级网站| 久久久久丁香婷婷五月天| 激情综合丁香六| 婷婷综合激情五月中文字幕| 五月婷婷啪| 综合网狠狠| 久久精品视频在这里有| 2018夜夜草| 五月丁香av在线| 综合久| 开心婷婷中文字慕| 欧美精产国品一二三区| www.99热在线| 日本VA视频| 久久精99| 久久色这里只有精品| 成人无码髙潮喷水A片| 色五月婷婷自拍| 99在线精品视频免费观看20| 亚洲传媒在线观看| 97色伦另类图片小说视频 | 新激情五月天色播| 成人做爰A片免费看网站找不到了| 婷婷色婷婷亚洲成人| 色婷婷综合久久久久| 97热久久| 99久视频| 丁香五月婷婷av| 91精品无码| 国产成人综合在线| 五月天丁香综合| 成人精品人妻| 亚洲精品国产成人AV在线| 婷婷内射视频在线| 日韩影院三级| 级情九色| 亚洲婷婷丁香五月在线| 欧美激情VA永久在线播放| 久久99这里只有精品| 激情综合色图| 99热这里只有精品1025| 91丨九色丨熟女高潮| 色五月丁香五月| 91热爆在线| 91免费在线视频6| 激情AV网| 五月婷婷激清网| 婷婷色综合网日韩国产| 亚洲成人五月| 婷婷爱爱蜜臀天天操| 99九九综合久久九九| 日本三级日本三级99| av色色国产| 丁香六月视频| 五月久久丁香| 五月丁香网站| 婷婷五月天激情综合| 日本高清久久| 五月婷色啪| 夜色爱爱亚洲| 五月婷婷99热| 婷婷五月综合婷婷| 九九婷婷激情综合网| 91免费在线视频6| 色五月天 丁香| 激情五月综合网| 久久九九网| 久久婷婷五月综合色和| 啪啪五月综合| 久久婷婷六月综合| 色噜噜,噜噜色| 操比激情五月| 丁香五月婷婷啪啪| 五月激情综合激情五月| 在线不卡的视频| 色五月婷婷影院| 日本本土色网第一区| 婷婷五月欧美综合| 激情网五月天| 九九99视频精品| 五月婷A V在线| www.91在线观看| 激情深爱婷婷网| 91操女| 日韩一级片| 一本伊人色婷| 婷婷久月| 久久精品凹凸分类| 综合久久影院| 先锋资源996| 97欧美在线| 五月丁香婷婷综合网| 九九九九九九九热| 色情久久久| 98国产精品综合一区二区三区| 亚洲va成人va成人va在线观看| 亚洲精品乱码久久久久久按摩观| av婷婷丁香| 热久精品| 91色情播放| 亚洲 综合中文| 人人操人人添人人摸97| 91丨九色丨东北熟女| 五月激情婷婷丁香| 第四色五月激情网| 天天操天天曰天天射| 高清一区二区三区日本久| 五月天成人在线播放| 激情五月天在线| 日韩99视频| 色综合色综合色综合色综合| 久久精品色| 伊人色五月| 久久99国产综合精品免费 | 丁香五月六月综合激情| 激情九九综合网| 五月丁香综合中文| 91男人操女人视频| 久久六月综合| 四色五月婷婷| 日日噜狠狠色综合久久| 色综合综合色| 综合婷| 丁香五月综合网| 五月婷在线观看| 五月丁香综合影院| 91大屁股| 激情五月伊人婷婷| 99热这里只有精品1025| www.99操.com| 少妇熟女视频一区二区三区| 人妻激情在线| 欧美婷婷精品激情| 高清无码中文字幕aVDV| 777色婷婷爱五月| 碰97久久| 中文av在线观看| 碰碰碰97国产| 极品人妻VIDEOSSS人妻| 亚洲1区| 成人婷99最新| 丁香六月情| 五月天激情.com| 亚洲婷婷丁香五月天激情小说| 色婷婷六月天| 婷婷天堂视频| 97操碰免费视频| 婷婷香蕉精品| 在线18av | 日本欧美成人片AAAA| 99操逼| 26uuu丁香婷婷五月| 狠狠色噜噜狠狠狠狠综合| 色情综合网| 精久久色| 婷婷五月天综合中文| 日日夜夜青青草| 色婷青青| 五月综合激情| 色偷偷综合| 六月色婷婷| 色婷婷19| 色99自拍| 五月丁香激情四射| 99ri视频在线播放| 天堂五月婷婷| 99九九在线视频| 99性爱视频| 久久最新色| 天天草天天爽| 区美毛片子| 9久久精品| 九九精品自拍| 久久婷婷五月| 婷婷色在线| 六月丁香婷| 国产精品A成V人在线播放| 成人午夜天| 欧美三9久九观看| 国产精品男人AV不卡| 国产精女同一区二区三区久| 9久热视频| 色婷久| 色天使色婷婷| 91精品久久久久| 深爱激情网五月| 深爱激情AV| 人人草人人爱手机视频看看| 天天日天天做天天操| 久久少妇视频| 久久香蕉丁香| 日本久久天堂| 天天综合网站| 狠狠婷婷色综合| 丁香花综合永久入口| 97婷婷在线| 久久国产高清| 91综合国免费久入| 九九综合久久丁香婷婷,开心激情综合网| 色狠狠狠干| 思思re视频在线| 思思热精品在线视频| 亚洲婷婷激情综合激情999精品| 久久综合性| 精品久久99| 亚洲V国产V欧美V久久久久久| 亚洲黄色操逼| 视频1区2区| 99操| 色色综合视频| 噜噜狠狠色| 色五月播五月| 潘金莲AAAAAAAAAA| 久久sp免费视频| 丁香六月啪| 五月天婷婷丁香蜜桃91| 999影院成人在线影院| 九九热大香蕉| 午夜天堂啪啪| 大香蕉久久久久久久久| 人妻综合网| tingting五月天亚洲| 人人干av| 大香蕉手机视频| 超91热| 综合大香蕉| 伊人婷婷五月| 天天影院色| 色九月婷婷| ...婷婷五月综合不卡,国产在线手机| 日本久久婷婷| 涩涩婷婷五月| 91婷婷在线| 激情玖玖sh| 99日在线视频| 凹凸操Av| 日本人妻A片成人免费看片| 亚洲六月综合激情久久下卡| 五月丁香亭亭操逼| 天天爱天天做综合| 91丨九色丨熟女丰满| 国产99久久久国产精品免费看| 丁香香蕉婷婷| 久月丁香爱婷婷综合| 中文成人在线| 五月婷婷激情网| 国产精品人妻在线网址| caopeng97日韩| 人人操人人干AV| 六月婷婷毛片| 色狠狠狠干| 婷婷激情视频欧美视频自拍视频欧美剧| 99这里有精品视频| 九九九九九九毛片| 99热在线免费观看精品| 99ri精品在线| 九月婷婷在线视频| 久久综合干| 五月丁香在线偷拍视频| 久久久精品人妻| 熟惀91九色在线| 婷婷五月天最新综合你懂的 | 日韩99无码| 色五月丁香五月激情五月激情| 99久在线精品99re8热| 丁香六月婷婷久久综合| 99啪| 色色色色av色色色色| 久久激情网| Caop在线| 超碰免费人人| 深爱五月激情五月| 亚洲宗合激情| 99久久精彩视频。| 色色国产| 依人大香蕉| WWW,五月| 国产精品VA在线| 99热爆在线| 五月情婷婷五月| 国产 码在线成人网站| 色久99| 色情五月天婷婷| 丁香六月婷婷| 大香蕉婷婷五月| 久机视频这只有精品| 9999久久久久| 7777激情基地| 五月天婷婷成人网| 国产操逼网站| 亚洲激情.com| 五月天福利影院导航| 五月婷婷五月丁香综合| 丁香五月电影| 国产激情在线| 午夜不卡成人一区二区| 99免费在线视频| 国产日产成人亚洲欧美国产VA| 玖玖九九超碰| 丁香九月婷| 婷婷五月天大香蕉在线视频观看| 人人操Av| 色一情一乱一乱一区91Av| 综激情网| 99思思热只有在这里看 | 婷婷丁香基地在线| 99熟女| 久久机热这里只有精品免费视频| 欧美色五月| 去色色五月天| 五月天六月婷| www99xxxx五月丁| 六月丁香综合| 激情国产五月| 激情五月婷婷中文字幕| 天天日天天肏天天奸| 97激情五月天| 中文字幕日本最新乱码视频| 五月丁香婷婷在线综合蜜桃| 中文av网站| 丁香丁香激情网| 噼里啪啦完整版中文在线观看| 99热思思在线观看| 色五月婷婷色| 五月天色婷婷视频| 九九色网专区| 99r这里| 丁香五月WWW| 成人网在线视频| 男人視頻站| 色婷婷激情五月天| 日本黄色精品| 99综合久久| 99久久99九九99九九九| 天天搞天天爽| 新久久五月天激情| 久久激情视频| 狠狠色情婷婷| 99re久热| 囯产精品久久欠久久久久久九大| 伊人综合色干| 五月丁香影视| 久久成人综合五月天| seav天堂| 婷婷综合色播网| 婷婷午夜综合| 夜夜骑夜夜操| www.五月激情.com| 狠狠色噜噜狠狠狠777奇米| 另类小说色婷婷| 激情五月综合网| 国产真人做爰视频免费| 婷婷娱乐丁香综合网| 激情久久网 | 91色五月| 亚洲va日| 久久日婷婷| 激情五月天婷婷| 婷婷综合网| 99燥99日| 天天日夜夜| 99精品这里只有免费视频| 欧美色综合天天久久综合精品| 夜丁香五月婷婷| 爱操人妻| www五月婷婷88导航| 99热这里只有的精品视 | 超碰av在| 人人摸人人| 六月婷欧美| 免费观看欧美成人AA片爱我多深| 色偷偷色婷婷| 91狠狠色| 一本婷婷丁香久久 | 五月婷婷,六月激情| 丁香五月综合久久| 99熟女| 色婷婷五月婷婷五月婷婷五月| 天堂网色色| http:色情日本com| 色五月婷婷综合在线|