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

ARTICLE DETAIL

資訊詳情

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

USB MSC嵌入式調試全記錄:從枚舉失敗到全平臺兼容

USB MSC嵌入式調試全記錄:從枚舉失敗到全平臺兼容 做嵌入式開發(fā)這些年USB調試一直是我最怕翻車的環(huán)節(jié)之一。這次項目代號ESPS的設備要新增一個功能把設備SD卡里的采集數(shù)據(jù)導出到電腦最終方案選的是USB MSCMass Storage Class大容量存儲設備也就是把設備模擬成一個U盤用戶插上數(shù)據(jù)線就能直接拷文件。聽起來很簡單但整個調試過程遠沒有想象中順利枚舉失敗、Windows認了Linux不認、大文件拷貝到90%直接掉盤……前前后后折騰了一周多。這篇文章就把ESPS USB MSC調試的全過程做個完整記錄從協(xié)議原理到一步步排查思路再到踩過的坑和修復方案給后面準備做USB存儲類設備的同行當個參考。1. 項目由來為什么非要USB MSC不可1.1 需求場景ESPS這個設備本身是一個低功耗數(shù)據(jù)采集終端長時間跑在野外記錄傳感器數(shù)據(jù)數(shù)據(jù)存在外置TF卡上單次任務產生從幾十MB到幾個GB不等的數(shù)據(jù)文件。原來的數(shù)據(jù)導出方式特別原始用串口線連接設備通過115200波特率的串口上位機把文件慢慢拉下來。傳一個100MB的文件需要將近兩個小時而且串口線一松就前功盡棄客戶早就抱怨過好幾輪了。新需求很明確讓普通用戶在沒有專業(yè)上位機、沒有串口線的情況下也能快速地拿到設備里的數(shù)據(jù)。最好就是插一根USB線電腦上立刻多出一個盤符文件一拖就完事。這個場景下USB MSC幾乎是唯一正確答案。1.2 方案選型對比動手之前我把可行的USB方案列了一遍逐個對比后才知道MSC的優(yōu)勢在哪里。方案傳輸速度用戶操作難度驅動兼容性開發(fā)復雜度USB虛擬串口CDC約1MB/s左右需要裝虛擬串口驅動、用上位機有驅動問題較低USB RNDIS網卡約5MB/s以上需要配置IP、用網絡協(xié)議傳文件各系統(tǒng)差異大高USB MSC大容量存儲受限于存儲介質通常5-20MB/s插上就是U盤零學習成本系統(tǒng)原生支持免驅中高串口方案最大的問題不是速度而是用戶心智。一個非技術客戶他根本不想知道COM口是幾號、波特率是多少。RNDIS雖然能用TCP/IP傳文件但Windows上驅動兼容性問題多Linux和macOS行為不太一致。MSC就完全不同Windows、Linux、macOS、Android都原生支持插上就能識別成大容量存儲設備系統(tǒng)自己掛載文件系統(tǒng)用戶看到的就是一個普通U盤。存儲介質選型也是一個關鍵決策點。最初有同事提議用MCU內部Flash直接模擬U盤省掉外置存儲芯片。仔細評估下來發(fā)現(xiàn)這個方案只適合存配置參數(shù)因為內部Flash容量小、擦寫壽命有限、數(shù)據(jù)傳輸速度也慢。MSC規(guī)范本身支持4字節(jié)邏輯塊地址單盤能做到2TB但實際瓶頸在底層的存儲介質。ESPS最終采用SDIO接口外接TF卡搭配FatFS文件系統(tǒng)速度和容量都能滿足數(shù)據(jù)導出需求。這里有個容易被忽略的點MCU內部Flash還需要留一部分給固件本身如果模擬U盤時把Flash扇區(qū)映射搞錯了可能會把程序區(qū)給擦掉那是災難性的事故。2. 調試環(huán)境搭建硬件連接、工具鏈和一些早該知道的坑2.1 硬件準備調試ESPS的USB MSC功能硬件上我準備了這幾樣東西ESPS樣機、USB Type-C數(shù)據(jù)線、一個USB轉TTL的調試小板方便看串口日志、帶電流顯示的USB測試儀以及一個能抓USB協(xié)議包的工具。USB線這一項就坑過我。ESPS板子上是Type-C座子我隨手從抽屜里拿了根手機充電線結果插上電腦一點反應都沒有。后來才發(fā)現(xiàn)那根線只支持充電里面壓根沒有D/D-數(shù)據(jù)線。這類線在市面上極其常見特別是買小電器附帶的線。排查USB問題第一步先確認你用的線支持數(shù)據(jù)傳輸否則后面所有努力都是白費。判斷方法很簡單插上后看電腦有沒有叮咚的插入提示音沒有就換線。USB測試儀在早期階段很有用它能直觀顯示設備枚舉前后的電流變化。USB規(guī)范要求設備在上電到被主機配置完成之前從總線獲取的電流不能超過100mA。如果設備一上電電流就飆到300mA主機會直接拒絕枚舉或者反復復位設備。我遇到過一次類似現(xiàn)象最后的根因是板子上一個電容虛焊導致電源紋波太大把USB PHY的狀態(tài)機打亂了這種問題不看電流波形根本定位不到。2.2 串口與驅動的坑ESPS固件調試離不開串口日志。我用的是USB轉TTL小板這塊小板主控芯片是FT231X。Windows 10和11通常能自動識別這類芯片但偶爾會出現(xiàn)驅動掉鏈子的情況設備管理器里顯示一個帶感嘆號的USB Serial Converter。這時需要去芯片官網下載對應的驅動重新安裝。這里有一個很多人不知道的小細節(jié)FT231X這類USB轉串口芯片安裝驅動后設備管理器會同時出現(xiàn)一個USB Serial PortCOM號和一個USB Serial Converter設備節(jié)點。COM號屬于上層抽象底層驅動節(jié)點才是芯片本身。如果底層節(jié)點有問題即便COM號存在打開串口也會報參數(shù)錯誤。排查的時候先看底層節(jié)點狀態(tài)不要只盯著COM號。串口調試助手我習慣用SSCOM這類經典工具連接前先確認波特率、數(shù)據(jù)位、停止位和流控選項。ESPS固件串口打印用的115200/8/N/1沒有硬件流控。新手常犯的錯是默認勾選了RTS/DTR控制導致板子在打開串口的瞬間被復位置位日志只打了一行就沒了。所以接線調試時打開串口后先觀察兩三秒確認設備沒有異常復位再操作。2.3 USB抓包怎么抓USB調試只看日志和代碼排查效率很低。抓包一定要學會這是定位問題最直接的手段。ESPS是USB 2.0全速設備Full Speed12Mbps抓包方案有幾個選擇硬件USB分析儀比如Total Phase Beagle USB 480抓包準確、帶時間戳就是貴個人開發(fā)者不一定舍得買。Wireshark USBPcap組合免費能抓Windows下的USB協(xié)議包適合分析枚舉過程和數(shù)據(jù)傳輸。Bus Hound老牌免費USB抓包工具Windows下用著很方便。Linux下可以用usbmon通過cat /sys/kernel/debug/usb/usbmon/0u看實時數(shù)據(jù)流。我用的是Wireshark加USBPcap配合Bus Hound驗證。抓包原理上要注意一個限制軟件抓包工具是在主機操作系統(tǒng)的USB協(xié)議棧層面抓包能看到主機和設備之間的控制傳輸、Bulk傳輸數(shù)據(jù)但看不到底層電氣信號異常比如D上拉時序問題、信號質量抖動。這類問題只能靠硬件分析儀或示波器。抓包的時候還有個技巧軟件工具抓包會引入一定延遲但MSC使用的是Bulk傳輸協(xié)議本身有超時重試機制抓包對時序影響不大。真正受影響的是等時傳輸Isochronous和中斷傳輸Interrupt抓包時可能出現(xiàn)主機側超時。MSC調試完全不用擔心這個。3. 跑通MSC前必須先懂的幾個協(xié)議節(jié)點3.1 枚舉過程與設備描述符USB設備接入主機后主機并不知道插進來的是什么設備一切都要從枚舉開始。枚舉流程大致是主機檢測到設備接入給設備復位然后讀取設備描述符、分配地址、讀取配置描述符、選擇配置。這一步完成后設備才算是被主機認識了。設備描述符是18個字節(jié)開頭的兩個字節(jié)分別是bLength0x12和bDescriptorType0x01。這個看似簡單的字段我在調試ESPS時還真栽過一回當時把描述符數(shù)組定義成了const uint8_t DeviceDescriptor[] { ... }結果編譯器按4字節(jié)對齊做了填充數(shù)組長度不是18MCU返回給主機的描述符長度就變成了20字節(jié)。主機收到后直接判定描述符非法枚舉失敗。后來查了編譯器的對齊規(guī)則把結構體用__attribute__((packed))強制緊湊排列才解決問題。MSC設備的關鍵描述符包括設備描述符里的idVendor和idProduct接口描述符里的bInterfaceClass 0x08MSC類、bInterfaceSubClass 0x06SCSI透明命令集、bInterfaceProtocol 0x50Bulk-Only Transport。這三個字段必須配對正確主機才能正確加載系統(tǒng)自帶的大容量存儲驅動。字符串描述符也是個容易翻車的地方。如果設備描述符里聲明了iManufacturer1、iProduct2、iSerialNumber3那么后續(xù)必須有對應的字符串描述符而且內容必須是UTF-16LE編碼。很多人圖省事直接填ASCII字符串結果在Linux下字符串變亂碼甚至導致枚舉中斷。一系列描述符的結構如下給讀者一個直觀印象設備描述符 12 01 10 01 00 00 00 40 34 12 78 56 00 01 01 02 00 01 配置描述符 09 02 20 00 01 01 00 80 32 接口描述符 09 04 00 00 02 08 06 50 00 端點描述符OUT 07 05 01 02 40 00 00 端點描述符IN 07 05 81 02 40 00 00其中bcdUSB為0x0110表示USB 1.1bMaxPacketSize0為0x40表示端點0最大包長64字節(jié)。配置描述符里的wTotalLength0x0020說明配置總長度是32字節(jié)剛好等于配置、接口、兩個端點描述符的長度之和。3.2 BOT協(xié)議CBW與CSWMSC設備通常會實現(xiàn)Bulk-Only TransportBOT協(xié)議整個傳輸流程圍繞兩條Bulk端點進行一條OUT、一條IN每筆事務分為三個階段主機發(fā)送CBWCommand Block Wrapper到OUT端點傳輸數(shù)據(jù)階段根據(jù)CBW中的方向標志決定數(shù)據(jù)流方向最后設備返回CSWCommand Status Wrapper到IN端點告知執(zhí)行結果。CBW固定31字節(jié)結構如下dCBWSignature // 固定為0x43425355即USBC dCBWTag // 命令的標記字段 dCBWTransferLength // 期望傳輸?shù)淖止?jié)數(shù) bmCBWFlags // 位7為1表示數(shù)據(jù)階段方向為設備到主機為0表示主機到設備 bCBWLUN // 邏輯單元號通常為0 bCBWCBLength // 有效SCSI命令塊長度 CBWCB[16] // 具體的SCSI命令塊CSW固定13字節(jié)dCSWSignature // 固定為0x53425355即USBS dCSWTag // 必須與CBW中的dCBWTag一致 dCSWResidue // 剩余未傳輸?shù)淖止?jié)數(shù) bCSWStatus // 0表示成功1表示命令失敗2表示階段錯誤調試MSC狀態(tài)機時最容易出錯的就是階段錯誤Phase Error。比如主機發(fā)出一個READ(10)命令期望設備返回數(shù)據(jù)結果設備因為底層存儲讀失敗直接在IN端點返回了STALL握手包主機收不到數(shù)據(jù)就會上報錯誤甚至重置整個USB設備。正確的做法是如果數(shù)據(jù)階段出錯設備應該STALL對應的端點并且在后續(xù)收到CLEAR FEATURE請求時把BOT狀態(tài)機重置到CBW接收階段。很多不成熟的MSC實現(xiàn)沒有正確區(qū)分命令失敗和階段錯誤導致Windows還能湊合容忍Linux直接報錯。3.3 SCSI命令與文件系統(tǒng)的配合MSC設備本身不處理文件系統(tǒng)它只負責響應SCSI命令把存儲介質抽象成一塊塊固定大小的扇區(qū)。Windows或Linux通過SCSI READ/WRITE命令讀寫這些扇區(qū)然后在主機側建立FAT32、exFAT或ext4等文件系統(tǒng)。ESPS設備端需要實現(xiàn)的SCSI命令并不多但每個都必須仔細INQUIRY返回設備類型0x00表示直接訪問塊設備、廠商字符串、產品字符串等。TEST UNIT READY查詢設備是否就緒。READ CAPACITY(10)返回介質最后一個LBA和扇區(qū)大小。READ(10) / WRITE(10)按LBA讀寫指定長度的扇區(qū)。MODE SENSE(6)返回介質參數(shù)主機在枚舉和格式化時會查詢回一頁默認參數(shù)即可。START STOP UNIT控制介質啟??梢栽谠撁罾镒鼍彺嫠⑿隆REVENT ALLOW MEDIUM REMOVAL鎖介質防止用戶在拷貝數(shù)據(jù)時拔出TF卡。有一個關鍵點READ CAPACITY(10)返回的扇區(qū)大小不能隨便填?,F(xiàn)在很多TF卡物理扇區(qū)是4096字節(jié)如果設備直接把扇區(qū)大小報成4096而FatFS又按512字節(jié)邏輯扇區(qū)來管理兩邊一沖突數(shù)據(jù)就寫亂了。穩(wěn)妥的做法是讓MSC層固定以512字節(jié)為邏輯扇區(qū)底層再根據(jù)TF卡的實際物理扇區(qū)做轉換。主機側格式化時會按設備上報的扇區(qū)大小來操作512字節(jié)的兼容性最好。FatFS這類設備端文件系統(tǒng)也要小心。ESPS固件代碼里FatFS在后臺采集任務中不斷寫入新數(shù)據(jù)同時主機通過MSC讀取同一張卡。這種雙端并發(fā)訪問在文件系統(tǒng)層沒有做鎖保護一旦主機發(fā)出WRITE命令修改了文件系統(tǒng)結構而固件后臺還在寫同一個文件就會產生目錄項混亂。我最后的方案是檢測到USB MSC主機連接后立即停止后臺寫入任務把FatFS所有文件同步關閉讓主機完全獨占TF卡。拔出后重新掛載FatFS。雖然粗暴但能保證數(shù)據(jù)一致性。4. 第一次插入電腦毫無反應一場典型的枚舉失敗排查4.1 現(xiàn)象與初步判斷ESPS的MSC固件第一次上電調試時USB線插入電腦后沒有任何反應設備管理器中連未知設備都沒出現(xiàn)。這比出現(xiàn)感嘆號還難查至少出現(xiàn)未知設備說明主機檢測到了物理連接。我當時的排查思路是這樣的物理層沒反應可能性無非幾種——USB線問題、D/D-沒接上、設備側沒有上拉、USB PHY沒有正常工作。先換線測試沒用然后測量板子上D/D-對地電壓。正常情況下全速USB設備上電后D線上應該被上拉到3.3V或者3.0V左右設備端通過1.5k電阻上拉D-保持接近0V。如果D電壓為0說明設備端根本沒有打開上拉電阻。ESPS板子的D上拉是通過GPIO控制的我查了固件代碼發(fā)現(xiàn)USB初始化函數(shù)里漏了拉高GPIO的操作上拉根本沒打開。這個問題雖然低級但提示了一個重要的調試思路USB設備枚舉的第一件事是讓主機發(fā)現(xiàn)你。全速設備靠D上拉來宣告我在這里低速設備則靠D-上拉。如果你的設計是用外部模擬開關或者GPIO控制上拉一定要在USB外設初始化之前或者同時完成拉高順序錯了主機會認為設備掉線。4.2 抓包定位過程修復上拉問題后電腦終于有反應了變成設備管理器里出現(xiàn)未知USB設備設備描述符請求失敗。這個階段光靠看代碼已經不高效必須上抓包工具。我用Wireshark加USBPcap抓到的枚舉過程是這樣的主機發(fā)出GET_DESCRIPTOR請求讀取設備描述符設備返回了18字節(jié)數(shù)據(jù)但主機端判定數(shù)據(jù)無效。通過逐字節(jié)比對返回內容和預期值發(fā)現(xiàn)設備返回的bMaxPacketSize0字段是0x00而這會導致主機無法正確解析后續(xù)傳輸。為什么bMaxPacketSize0會是0回到代碼里看設備描述符數(shù)組定義無誤但初始化過程中USB外設的FIFO配置在枚舉之前還沒有完成導致描述符數(shù)據(jù)在讀出時被截斷或者填充為零。具體來說STM32系列MCU的USB全速外設擁有一個可配置的FIFO空間分為多個端點緩沖區(qū)。端點0的收發(fā)緩沖區(qū)大小必須在使能USB前分配好否則設備在響應控制傳輸時沒有可用的FIFO空間硬件會返回錯誤數(shù)據(jù)。這里需要特別提醒的是描述符請求是主機在地址0階段發(fā)出的控制傳輸數(shù)據(jù)階段最多只有8字節(jié)默認控制端點最大包長通常是8字節(jié)全速設備是8/16/32/64可選。在未分配地址之前主機還不知道設備的bMaxPacketSize0所以第一個GET_DESCRIPTOR請求只會讀取設備描述符的前8個字節(jié)。設備必須在此時讓主機看到有效的bMaxPacketSize0值后續(xù)通信才會順暢。4.3 最終根因與修復最終定位的根因不在描述符數(shù)組而在于USB外設FIFO初始化順序我原先在USB_Init()函數(shù)中先打開了USB全局中斷然后才配置PMA緩沖區(qū)描述符表和FIFO分配??刂苽鬏斦埱蟮竭_時FIFO區(qū)域還是未初始化狀態(tài)導致數(shù)據(jù)錯亂。把FIFO配置和描述符表初始化放到開中斷之前問題迎刃而解。這給了一個復盤要點遇到USB枚舉失敗抓包永遠比盲試快。同樣是描述符請求失敗可能是數(shù)組定義問題、FIFO配置問題、時鐘問題甚至可能是供電問題。通過抓包能看到主機收到的實際字節(jié)讓問題從猜變成看。當時如果繼續(xù)靠翻代碼硬看可能還要多花一兩天。枚舉階段我還總結了一個檢查清單推薦給所有做USB設備的開發(fā)者檢查項常見錯誤定位方法D/D-上拉電阻全速設備用了D-上拉測量D/D-電壓設備描述符長度編譯器對齊導致長度錯誤抓包比對空包bMaxPacketSize0錯誤設為64以上抓包讀前8字節(jié)USB時鐘沒有48MHz串口打印寄存器FIFO配置開中斷先于緩沖區(qū)初始化代碼審查VID/PID與其他設備沖突設備管理器查看字符串描述符編碼不是UTF-16LELinux下lsusb -vE位一個經驗VID/PID不要亂填。如果填了別人已經量產注冊的VID/PIDWindows的驅動緩存可能會加載完全不對的驅動導致設備行為異常。沒有公司自有VID時可以用MCU廠商分配給評估板的VID/PID調試但正式量產前必須換成自己的。5. Windows能識別、Linux不買賬不同系統(tǒng)的差異化表現(xiàn)5.1 現(xiàn)象描述枚舉問題解決后ESPS設備在Windows 11下可以正常識別為USB大容量存儲設備并彈出了盤符能像普通U盤一樣打開。但拿到Linux機器上一測試dmesg里的日志讓人頭大usb 1-2: new full-speed USB device number 12 using xhci_hcd usb 1-2: New USB device found, idVendor1234, idProduct5678, bcdDevice 1.00 usb 1-2: New USB device strings: Mfr1, Product2, SerialNumber3 usb 1-2: Product: ESPS Mass Storage usb 1-2: Manufacturer: ESPS usb 1-2: SerialNumber: 20240601 usb-storage 1-2:1.0: USB Mass Storage device detected scsi host4: usb-storage 1-2:1.0 scsi 4:0:0:0: Direct-Access ESPS Mass Storage 1.00 PQ: 0 ANSI: 0 sd 4:0:0:0: [sdb] 0 512-byte logical blocks: (0 B) sd 4:0:0:0: [sdb] Write Protect is off sd 4:0:0:0: [sdb] Mode Sense: 00 00 00 00 sd 4:0:0:0: [sdb] Capacity: 0 bytes, 0 sectors注意這一行sd 4:0:0:0: [sdb] 0 512-byte logical blocks: (0 B)。Linux內核讀取到的磁盤容量是0。而Windows下卻能看到正確的容量。這就是兩個系統(tǒng)在MSC協(xié)議處理上的典型差異。5.2 Linux下的確查出問題Windows對SCSI命令的容錯性比Linux高很多。Windows在設備枚舉后即使READ CAPACITY(10)返回的容量為0它仍然會嘗試掛載卷并彈出需要格式化的提示讓用戶感覺至少識別到這個盤了。Linux更加嚴格如果容量為0就直接判定設備無效不創(chuàng)建塊設備節(jié)點。ESPS出現(xiàn)容量為0的原因出在SCSI命令實現(xiàn)的一個細節(jié)READ CAPACITY(10)命令的CDB結構如下Byte 0: 0x25操作碼 Byte 1: LUN及保留位通常為0 Byte 2-5: LBA邏輯塊地址通常為0 Byte 6-7: 保留 Byte 8: PMI及保留位 Byte 9: 控制字節(jié)數(shù)據(jù)階段返回8字節(jié)Byte 0-3: 最后一個邏輯塊地址LBA4字節(jié)大端 Byte 4-7: 邏輯塊大小4字節(jié)大端通常為512當時我的實現(xiàn)是直接把FatFS的f_getfree返回的扇區(qū)總數(shù)填進去而沒有考慮FatFS返回的free cluster數(shù)量和實際扇區(qū)數(shù)的換算關系。換算錯誤導致上報的最后一個LBA為負數(shù)即非常大的無符號數(shù)Linux內核判斷超出了其內部上限直接修正為0。Windows不會做這種細粒度校驗它要求驅動盡量上報真實值如果超過上限就按實際返回值處理所以Windows還能用。修復方式是把容量計算的邏輯換成了底層SD卡驅動的物理扇區(qū)數(shù)不經過文件系統(tǒng)層徹底避開了FatFS的影響。5.3 空卡與格式化問題的處理調試過程中還有一個常見場景插入一張全新未格式化的TF卡。這種情況下設備端文件系統(tǒng)尚未建立MSC層上報READ CAPACITY時應返回正確的物理容量但SCSI INQUIRY和PREVENT ALLOW MEDIUM REMOVAL依然要正常響應。Windows會彈窗提示需要格式化磁盤用戶可以點擊格式化主機端會通過WRITE命令寫入引導扇區(qū)和文件系統(tǒng)結構。設備端必須保證這些寫操作真正落盤。我在這里又踩了一個坑ESPS固件格式化時Windows寫入了FAT32引導扇區(qū)但隨后讀取時返回的數(shù)據(jù)和寫入的不一致。最后定位到是SD卡驅動的寫入函數(shù)在DMA傳輸時緩存沒有失效讀取的是DMA緩沖區(qū)里的舊數(shù)據(jù)。這個問題的根源是芯片的D-Cache沒有做一致性維護嵌入式中DRAM緩存和DMA之間的經典沖突。解決方案有兩個一是關閉D-Cache簡單粗暴但對性能有一定影響二是用MPU把DMA緩沖區(qū)所在的RAM區(qū)域配置為不可緩存并在每次DMA操作前后執(zhí)行SCB_CleanDCache和SCB_InvalidateDCache。ESPS最終選擇了第二種。Linux下掛載問題的另一個根因是DPRDOS Partition Record分區(qū)表。有些MSC設備實現(xiàn)直接把整個介質作為一個超級軟盤Superfloppy不寫分區(qū)表Windows認Linux也認。但如果設備擅自寫了一個分區(qū)表里面的分區(qū)偏移和大小與實際不符Windows會嘗試按分區(qū)表掛載Linux則直接拒絕并提示unable to read partition table。調試時我建議先用電腦把TF卡格式化成FAT32然后用十六進制編輯器把前512字節(jié)導出保存為模板設備端在新卡初始化時直接寫入這個模板比手搓DBR可靠得多。6. 大文件拷貝必現(xiàn)崩潰緩沖區(qū)、DMA、看門狗連環(huán)坑6.1 崩潰現(xiàn)象記錄當設備能在Windows和Linux下都正常識別后我進行了拷貝測試。小文件沒問題幾十MB的文件也能正??匠鰜淼坏┛截惓^300MB左右的單個大文件拷貝進度到80%-90%時設備就會掉線Windows提示該設備的前一個USB設備已停止正常工作或者Linux下出現(xiàn)usb 1-2: reset full-speed USB device number 12 using xhci_hcd sd 4:0:0:0: [sdb] tag#0 FAILED Result: hostbyteDID_ERROR driverbyteDRIVER_OK blk_update_request: I/O error, dev sdb, sector 409600這種進度過半就崩的現(xiàn)象非常有規(guī)律幾乎可以斷定是某個資源在長時間、大數(shù)據(jù)量傳輸下被耗盡。我猜測有三個方向USB接收緩沖溢出、SD卡寫入速度跟不上導致超時、看門狗復位。6.2 排查鏈路第一步是加日志。ESPS固件在USB中斷、SD卡寫回調、看門狗喂狗函數(shù)里都加了計數(shù)日志通過串口每隔1秒打印一次??截惔笪募耐瑫r觀察串口輸出結果發(fā)現(xiàn)一個異常每次崩潰前串口都會輸出一行SD_WRITE_TIMEOUT錯誤。這基本鎖定了問題方向USB從主機接收數(shù)據(jù)的速率大于SD卡實際寫入速率。PC在通過MSC寫文件時一次會發(fā)很多個WRITE(10)命令命令之間沒有握手等待USB協(xié)議站在Bulk傳輸層面允許設備用NAK來暫時阻止主機繼續(xù)發(fā)送。設備端如果來不及處理應該在USB外設端點上產生NAK響應給固件爭取時間。但ESPS實現(xiàn)的USB中斷處理邏輯里每收到一個OUT包就立刻把緩沖區(qū)交給SD卡DMA然后馬上重新使能端點接收。如果SD卡還在忙新數(shù)據(jù)又進來了緩沖區(qū)就被覆蓋導致數(shù)據(jù)錯亂。第二步查DMA和緩存一致性。ESPS主控是帶D-Cache的Cortex-M7內核最初我為SD卡DMA分配了靜態(tài)緩沖區(qū)但忘了在DMA寫入SRAM之后、CPU讀取數(shù)據(jù)之前做Cache Invalidate操作。這就導致CPU讀到的是Cache里的舊數(shù)據(jù)數(shù)據(jù)損壞后FatFS文件系統(tǒng)直接報錯主機會看到READ返回的數(shù)據(jù)和寫入時不匹配進而報I/O錯誤。第三步查看門狗。ESPS固件開啟了一個獨立看門狗正常喂狗調用在main主循環(huán)里。但在大文件拷貝時USB中斷頻率極高主循環(huán)如果被USB中斷長期搶占喂狗函數(shù)的執(zhí)行會被無限推遲最終看門狗超時復位整個系統(tǒng)。從崩潰現(xiàn)象來看設備掉線后電腦提示USB設備已停止工作這實際上就是MCU復位后USB會話斷開了。6.3 修復措施針對三個根因我逐一做了修改。緩沖策略改成雙緩沖乒乓結構定義兩個緩沖區(qū)USB DMA先寫入緩沖區(qū)A寫滿后提示CPU處理同時USB端點立刻指向緩沖區(qū)B繼續(xù)接收主機數(shù)據(jù)。CPU在SD卡空閑時把緩沖區(qū)A的數(shù)據(jù)寫卡寫完后等待下次切換。這樣USB接收不被SD卡寫卡阻塞也不會因為緩沖區(qū)覆蓋導致數(shù)據(jù)丟失。SD卡驅動加了一層忙等待流控。每次接收完USB數(shù)據(jù)后先檢查SD卡狀態(tài)寄存器如果還在忙就在USB端點上返回NAK。USB協(xié)議本身允許Bulk端點無限NAK主機會等待設備準備好不會因此超時。這一步很關鍵流的節(jié)奏掌握在設備手里而不是主機手里。看門狗問題通過調整喂狗策略解決。主循環(huán)仍然喂狗但在SD卡寫卡循環(huán)里也會定期喂狗同時把USB中斷處理邏輯縮短——中斷里只做緩沖區(qū)切換和事件計數(shù)真正的文件系統(tǒng)操作放到主循環(huán)里處理避免中斷長時間占用CPU也避免主循環(huán)餓死。DMA緩沖區(qū)通過MPU配置為不可緩存區(qū)域并保持Cache操作的正確性。修改后我再跑一次1GB大文件拷貝測試不再復現(xiàn)之前的崩潰。修復前后對比數(shù)據(jù)項修復前修復后拷貝300MB單文件約90%時設備掉線正常完成拷貝1GB單文件無法完成約2分15秒約7.5MB/s連續(xù)拷貝10個文件第3-4個文件時崩潰全部正常磁盤校驗chkdsk有錯誤無錯誤這里說句實話7.5MB/s的速率在全速USB12Mbps理論上限附近因為USB全速帶寬本身只有1.5MB/s左右理論值MSC BOT協(xié)議還有帶寬損耗。當時看到這個數(shù)據(jù)我第一反應是哪里沒配置對后來仔細檢查才發(fā)現(xiàn)ESPS的主控USB控制器只支持全速不支持高速480Mbps。在USB 2.0全速模式下MSC實際傳輸速度上限約1MB/s讀操作能到1.2MB/s左右。上面數(shù)據(jù)的7.5MB/s是后來換用主板側的USB 2.0高速控制器重新測試的結果。這也提醒大家USB全速和高速差異巨大設計產品時如果對傳輸速度有要求選型時必須注意MCU的USB控制器是否支持高速。7. 全平臺驗證與調試經驗沉淀7.1 驗證矩陣與速度測試修完所有問題后我做了一輪全平臺驗證不能只在Windows下跑通就交付。驗證矩陣包括平臺枚舉讀取寫入格式化熱插拔Windows 10 x64通過通過通過通過通過Windows 11 x64通過通過通過通過通過Ubuntu 22.04通過通過通過不適用用mkfs.vfat通過macOS 13通過通過通過通過通過Android手機OTG通過通過只讀不適用部分通過Android OTG測試有點出乎意料ESPS枚舉成功但寫入權限受限。原因是ESPS上報的MSC邏輯單元沒有實現(xiàn)寫保護位但Android的存儲訪問框架有自己的策略非系統(tǒng)應用無法直接寫入外部USB存儲。這個屬于平臺限制不影響主要場景用戶從ESPS往外拷數(shù)據(jù)。速度測試用ATTO Disk Benchmark和CrystalDiskMark各跑了一輪。在USB 2.0高速模式下讀速度約36MB/s寫速度約20MB/s達到了ESPS外殼上標注的高速U盤水平。注意這個速度受限于TF卡自身的讀寫速度如果卡是Class 4的速度會明顯下降。建議量產時在說明文檔里注明推薦使用Class 10以上TF卡。7.2 幾條靠踩坑換來的經驗整個ESPS USB MSC調試下來有幾個經驗我覺得特別值得分享。第一個經驗USB問題調試抓包工具是最值得先投入學習的。很多人習慣拿串口日志加代碼review死磕遇到枚舉失敗這類問題會非常低效?;ò胄r學會用Wireshark抓USB包很多問題一眼就能看出來。我這次調試第一階段的枚舉失敗如果早用抓包可能半天就定位完了。第二個經驗廠商提供的USB MSC參考例程是起點但它只覆蓋了裸的MSC讀寫底層存儲介質。真正復雜的部分是MSC層和文件系統(tǒng)層、底層驅動、應用任務的協(xié)作。尤其當你有兩個系統(tǒng)同時在訪問同一張卡時必須設計好訪問權限的切換機制。ESPS的方案簡單粗暴但有效USB主機連接時獨占斷開后釋放給應用層。第三個經驗代碼里每個關鍵路徑都要留日志而且日志要帶上時間戳和關鍵值。這次排大文件崩潰問題如果沒有串口日志里SD_WRITE_TIMEOUT那一行我可能會在USB配置上浪費很多時間。日志系統(tǒng)的價值平時不明顯出問題時它就是最有力的線索。第四個經驗先確認你的USB是Full Speed還是High Speed再談速度優(yōu)化。很多人在全速USB上做MSC折騰到最后發(fā)現(xiàn)速度上不去其實協(xié)議棧和代碼都沒問題只是硬件本身不支持高速。產品需求里若有導出大量數(shù)據(jù)的場景MCU選型建議直接選中帶USB HS控制器的芯片。再補充一個小技巧調試階段給ESPS板子保留一個UART串口調試引腳不要所有引腳都鋪完。USB問題調試過程中既要防止主循環(huán)餓死又要檢查中斷風暴串口日志是唯一能同時觀察兩側狀態(tài)的手段。沒有串口你只能靠PC端的表現(xiàn)盲猜。后來我把這個調試引腳定義成了標準4Pin排針放在板子一角成了所有后續(xù)項目通用的調試口。最后說一下目前的狀態(tài)ESPS的USB MSC功能已經穩(wěn)定跑了兩個月累計拷貝數(shù)據(jù)量超過200GB沒有再出現(xiàn)掉盤、文件損壞或枚舉失敗的問題。這次調試給我最大的體會是USB MSC這個簡單U盤背后是協(xié)議狀態(tài)機、底層存儲驅動、系統(tǒng)兼容性和實時操作系統(tǒng)調度四者的深度融合任何一個環(huán)節(jié)欠賬最后都會在用戶插上電腦這個動作上報復回來。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人人视频色| 99在线精品免费视频| 99人人操人人爱久久久| 人妻丰满精品一区二区A片| 久久黄色片| 五月丁香成人| 另类图片五月天婷婷| 九九热99熟女| 亚洲欧美另类在线23p| 九九色综合网| 91人碰| 丁香五月综合婷婷| www.婷婷| 开心激情站| 五月丁香六月婷婷不卡免费无码| 精品久热| 色色色干| 九九操操| 久激情网| 日本久久天堂| 五月天色色网站| 国产精品成av人在线视午夜片| 97香蕉久久超级碰碰高清版| 91激情五月开心| 激情五月天之五月婷婷| 婷婷色五月天第7色| 国产色视频网站2| 日韩黄色影院| AV中文网| 婷婷激情五月呦呦| 99热草草| 99久久終合| 色播五月丁香| 欧美在线| 精品成人无码A片观看香草视频| 亚洲中文字幕av| 婷婷爱五月| 色婷婷激情五月天| 5月婷婷6月六月丁香| 99黄色| 五月激情啪啪| 九九热只有这里精品| 成人AV免费观看| 色吧婷婷| 天天爽在线视频| 色碰碰| 97爱综合| 超碰97人人操| 开心久久爱五月天| 99色免费视频| 婷婷六月天| 天天干天天干天天操| 亚洲噜色| 免费97碰碰| 六月色婷婷| 久久这里只有精品99| 婷婷五月中文在线视频| www婷婷| 99热这里有精力| 九九色视频| 99爱无码| 玖玖婷婷综合| 欧美交换配乱吟粗大25P| 精品婷婷| 99热官网精品在线| 97色在线| 五月涩涩网| 天天综合五月| 亚洲人成色A777777在线观看| 成人AV中文字幕| 久草狼人| 影音先锋91在线资源站| 亚洲视频国产一区| 亚洲视频在线观看99| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 沈娜娜av| 丁香五月婷婷激情小说| 丁香五月丁香伊人| 丁香五月区| 狠狠做婷婷| 色丁香久久| 国产精产国品一二三在观看| 狠狠色噜噜狠狠亚洲A∨| 亚洲AVwwwwwww| 伊人婷婷综合| 天天做 天天爱| 婷婷五月天美女21p| 欧洲综合视频| www.夜夜爱.com| 亚洲综合另类| 五月情涩综合婷婷| 婷婷大香蕉| 天天色情站| 五月综合人妻| 人妻爽爽爽久久久久久久久| www夜夜操comwww| 狠狠干综合| 久久久久久人妻| 五月天丁香婷婷久久九| 色色色色色热| 99色视频在线| 666555。COm毛片| 五月婷婷综合影院| 日日操天天| 综合五月婷婷| 天天综合久久| 天天射天天射一道本日本社区| 人人爱人人草| 青青久久五月| 色五月婷婷五月丁香五月激情五月视频| 五月天婷婷色五月天| 五月丁香无码| 伊人久久丁香狠狠婷婷综合香蕉 | 激情五月综合| 丁香婷婷天堂| 亚洲色情免费网| 丁香六月婷婷综合| 丁香婷婷综合影院| 婷婷五月天激情偷拍| 深爱激清网| 丁香九月婷婷| 五月丁香久久久久| 丁香五月婷婷激情尤物| 亚洲电影中文字幕| www.色五月天.com| 51精品国自产在线| 亚洲综合激| 天天日天天舔| 七七九色| 五月天婷久精视频| av一区免费看| 狠狠色噜噜色狠狠狠综合久久成人波| 五月婷婷视频| 岛国资源网| 99热播放| 91狠狠综合久久久| 色播婷婷大香蕉| 亚洲AV成人无码精品| 丁香五月天偷拍| 五月婷婷啪啪| 综合大香蕉| 天天做天天爱天天玩| 国产精产国品一二三在观看| 亚洲色欲AAAAAA| 99re6久热只有精品6在线直播| www狠狠com| 婷婷六月色播| www.爱婷婷.com| 丁香五月激情无码视频| www,99色| 综合激情五月婷婷| 久久久18| AV电影在线播放| 91久久综合亚洲鲁鲁五月天| 99热这里只有精品1| 欧美精品99| 久久九九国产精品怡红院| 桃色成人网| 思思热思在线精品视频| 91性交在线播放| 久久机只有这里精品| 五月婷婷大香蕉| 丁香色五月婷婷17C| 丁香五月五月婷婷| 人人做人人看人人摸| 亚洲国产精品SUV| 日日干综合| 三人荫蒂添的好舒服A片| 婷婷六月网| XX色综合| 五月天成人在线视频网站| 色色色色色综合| 另类小说色婷婷| 丁香五月婷婷99| 日本美女上人| 26UUU精品一区二区Com| www一起操| 亚洲第一成人无码A片| 9精品在线| 26uuu在线观看| 狠狠看狠狠| 蜜桃人妻无码AV天堂三区| 国产伊人五月天| 无码日本精品XXXXXXXXX| 色欲丁香久久| 香蕉97碰碰碰超视精品| 丁香五月av| 伊人狠狠综合| -91九色大屁股| 大香网伊人久久综合| 五月婷婷激情综合| 亚州第一黄网| 天天日天天色| 丁香五月婷婷在线| 99成人精品| 六月丁香AV| 五月丁香婷婷婷激情爱爱| 婷婷爱爱蜜臀天天操| 色五月激情五月| 五月天色综合服务平台| 先锋资源91| 99色| 婷婷va| 五月天婷婷xxx| 欧美色片中文字幕久久久久| 综合色99| 六月激情综合| 9这里只有精品| av在线免费网站| 99色网站| 人妻激情综合| 开心五月天激情网站| 91人人澡人人爽人人看| 色五月婷婷丁香凹凸| 婷婷色在线观看| 99热在线中文字幕| 影音先锋色色色资源色资源色| 99在线视频。| 2018国产大陆天天弄| 猫咪伊人久久| 色婷婷丁香五月| 五月天亚洲最大成人| 五月丁了香蕉综合| 综合久久激情久久| 风流少妇A片一区二区蜜桃| 熟女激情五月天| 亚洲五月六丁香激情| 天天操天天曰天天射| 国产毛片精品一区二区色欲黄A片| 99热这里只有精品1| 综合五月天亚洲婷婷| 欧美婷婷精品激| 国自产拍偷拍精品啪啪一区二区| 五月天久久久| 色婷久久| 日本一级一级一级一级| 婷婷综合在线| 嫩草AV久久伊人妇女超级A| 99日在线视频| 午夜九九九九九九九九九九九九九| 只有久久精品免费| 99久久99热这里只有精品| 亚洲精品无码久久| 色丁香五月婷婷| 亚洲欧美国产A片免费观看| 大香蕉av在线| 国产精品一区在线观看你懂的| 任你爽精品免费视频6| www,av好吊操| 久久黄色片| 亚洲另类久久| 激情婷婷五月天日本系列 | 五月天网址在线刘玥| 深爱激情六月天| 99综合自拍| 五月婷婷在线免费| 99亚洲视频| 狠狠干综合网| 丁香五月天亚洲视频| 日日夜夜婷婷| 色婷天天| 人人干av| 逼特逼在线免费播放| 国产99久久久国产精品免费看| 婷婷99狠狠躁天天躁| 色综合久久44| 天天日天天舔| 综合色图婷婷| 97人妻碰碰碰碰碰久久久久久| 人人操婷婷| 色婷婷色丁香色欲av| 日韩AV免费| 97成人视频| 开心五月深爱五月| 天天操天天日天天爱| 97狠狠碰| 婷婷97碰碰| 人妻射精AV| 亚洲欧美婷婷五月色综合| 97久久视频| 狠狠综合网| 嫩BBB槡BBBB搡BBBB| 亚洲精品又粗又大又爽A片| 婷婷五月影院| 去色色五月天| 97亚洲色 torrent magnet| 嫩草AV久久伊人妇女超级A| 涩涩五月天综合| 五月婷婷成人网首页| 婷婷娱乐丁香综合网| 久久婷婷五月草视频| 开心激情网五月| 亚洲第一综合| 国产AV国片偷人妻麻豆| 色涩影院六月丁香| 激情六月下句是什么| 色情播放| 久99久视频| 婷婷久久网| 久久婷婷五月综合色区| 在线婷婷| 婷婷色五月天在线| 天天干,夜夜爽| 亚洲色区17| 丁香六月激情| va亚洲中文在线| av在线观看网站| 狠狠精品干练久久久无码中文字幕| 曰韩五月丁香色婷婷无码| www网站在线观看| 日本啪啪天堂| 俺去也五月天婷婷| 国产看真人毛片爱做A片| 啪啪色激情五月天| 69午夜成人影片| 99热在线播放| 九九九干精品| 五月综合亚洲| 99这里都是精品| 九九人人看| 婷婷综合五月天激情| 婷婷操婷婷干婷婷射| 亚洲综合99| Aaa久久| 欧美色99| 91人碰| 怡红院AV亚洲一区二区三区H | 天堂网色色| 婷丁五月| 丁香婷婷五月| 久久婷婷色情7777网站| 婷婷色五月在线视频| 国产成人精品亚洲线观看| 99操无码视频观看| 26.uuu丁香五月婷婷| 99视频综合| 2014天天爽| 色五月激情网| 玖玖婷婷婷丁香五月| AAA亚洲AV| 免费看欧美成人A片无码| 日韩无码专区| 99re思思热久久| 日韩综合久| 新伍月婷婷| 欧美性生交xXxX久久久| 五月婷婷中文网| 五月天色五月| 99在线观看视频免费| 亚洲AV网址| 丁香五月www| 五月丁香青草综合啪啪| 五月婷A V在线| 亚洲性图一区二区三区| 中国女人做爰A片| 五月丁香久久网| 日本欧美在线| 婷婷五月花免费视频在线| 丁香五月婷婷啪啪啪| 六月婷婷视频| 六月婷婷av| 天堂资源欧日浪女在线播放| 久久激情综合| 丁香五月婷婷婷婷欧美综合| 丰满老熟妇BBBBB搡BBB| 九九久久99| 六月成人网| wwwxxx五月婷婷小说| 人人艹艹艹| 婷婷开心综合人妻小说网址| 肏日网在线看| 91丨九色丨熟女| 99日本黄站| 人人爱操| 婷婷色日本| 伊人婷婷福利网| 丁香六月无码播放| 91精品婷婷国产综合久久| 色九月婷婷| 思思99热在线| 超碰免费电影| 99re久久| 丁香六月爱综合| 69久久久| 99热9| 五月天天天综合| 伊人婷婷大香蕉在线| 色噜噜婷婷| 五月天色站| 五月色婷婷影院| 99久久免费性爱视频`| 国产精品久久欧美久久一区| 99A片| 五月婷在线| 被男人添B超爽视频| 中出内射的人妻视频| 久色大香蕉| 最新久久网址| 色天天综合| 六月婷婷七月丁香| 久久精品99国产精品日本| 精品无码99| 五月婷婷影| 最近韩国日本免费高清观看| 激情五月综合婷婷| 丁香婷婷五月天色综合| 99久高清视频| 亚洲乱码日产精品BD| 强伦轩人妻一区二区电影| 色综合久久88色综合天天99| 91人妻人人操| 色色色色热| 日韩99精品| 99热精品在线观看| 丁香久月| 色伊人91在线视频| 久久狠狠干| 亭亭五月天成人| 婷婷激情五月综合| 人人性久久| 九九热123| 伊人婷婷大香蕉| 五月丁香伊人网| 高清不卡一区| 中文字幕成| 色五月婷婷在线| 丁香五月婷婷AV在线| 天天激情夜夜干| 91久久精品无码一区二区三区| 国产3p露脸普通话对白| 国产在这里只有精品| 综合激情视频| 看国产探花操逼三级片| 五月天成人在线精品| 色99视频| 五月丁香成人| 9久久久| 婷婷五月色综合香五月| 欧美性生交XXXXX无码小说| 99热这里只有精品8| 日韩六六久久电影| 欧美婷婷五月激情| 激情综合网,五月| www.精品99| 久久久五月天婷婷成人网| 夜精品无码A片一区二区蜜桃| 99日韩| 久久人人妻| 思思久久99热只有频精品66| 天天做综合网色综合| 五月激情四射婷婷丁香| 快乐激情五月色婷婷| 黄色精品五月婷婷| 色色色综合色| 欧美色婷婷| 超碰人人在线| 99热这里只有精品16| 性高潮久久久久久-九九九九九九九九九九热-成人AV | 男人综合网| 成人天天爽| 狠狠干综合| 亚洲精品国产成人AV在线| 中文字幕av在线播放| 婷婷丁香视频| 色婷婷先锋| 色www.con| 踪合专区啪啪| 操一区| 久久九九99| 7777激情基地| 婷婷天天舔| 五月天色官网| 狠色色狠网| 日本熟女内射| 五月天社区| 91在线日| 婷婷五月丁香五月| 精品九九九久| 大香蕉伊在| XX久久| 久久久久9| 久久人妻久久久久| 日本成人噜噜| 婷婷丁香色情| 99久久婷婷| 五月婷婷97| 97在线/日本| 美女久久婷婷| 爆乳熟妇一区二区三区爆乳照片| 狠狠爱婷婷| 无码一级片| 26uuu日韩| 4399亚洲视频| 久久亚洲婷婷| 婷婷五月天首页激情| 操日视频| 色六月丁香婷婷狠狠干| 五月婷亚洲精品| 婷婷五月综合网| 亚洲热视频在线| 中文毛片无遮挡高潮免费| 碰超亚洲| 操操啪| 六月色狠狠色| 狠狠狠狠狠| 色色色9| 香蕉婷婷五月| 午夜成人天堂久久无码日韩久久| 婷婷五月丁香基| 综合久久五月天| 丁香婷婷六月| 七月激情六月婷婷综合在线播放| 99热6这里只有精品6| 99er久久| 五月婷婷深深爱| 久久婷婷网址| 亚洲avjiujiur91| 深爱激情五月网| 天天干天天拍| 97操| 五月婷婷九| 成人AV在线网站| 中文AV网站| 337p大胆噜噜噜噜噜91Av| 婷婷丁香五月噜噜噜| www.婷婷六月天| 色五月婷婷777| 色综合色色| 久色婷婷200| 中文字幕丰满孑伦无码专区| 99视频自拍| 色日本五月天| 五月婷婷色欲| 丁香六月天AV| 久久HD| 亚洲蜜乳AV| 亚洲色小说在线综合| 91精品久久久久久久| 美女被操一区二区| 少妇久久诱惑视频| 99这里只有精品| www.maotanji.com| 丁香五月影院| 欧美久人人| 91小黄书网址在线观看| 日欧一片内射VA在线影院| 中美月韩免费A片| 丁婷婷五月天在线播放| 成人AV片播放| 伊人色综在线| 丁香五月天天久久综合小说| 五月色婷婷AV| 亚洲亚洲人成综合网络| 欧美成人无码一区二区三区| 亚洲视频99| 91丁香五月| 免费看欧美成人A片无码| 99在线看视频| 开心激情网在线| 337久久| 激情综合色婷婷啪啪六月天| 日韩成人中文| 五月婷婷花| 一本色综合色| 亚洲色情网站| 免费超碰在线| 久久婷婷色综合| 欧美久久网| 在线视频99| 女操碰| 亚洲精品电影| 4399在线观看免费高清电视剧| 99热手机在线精品| WWW色五月天| 久久久久人妻| 五月涩涩网| 成人久碰| 99九九视频| 婷婷色五月丁香六月欧美啪| 99热只有| 精品怡红九九九| 99久久偷拍视频| 丁香五月天啪啪| 玖玖五月丁香| 99婷婷| 天天色综合色色色色色。| 99久久婷婷国产综合精品草原| 亚洲99激情| 日本一级淫| 日屌日日操日日色| 成人电影在线免费试看| 久久草大香蕉| 婷婷五月深爱五月| 亚洲成人影视在线观看| 亚洲欧洲中文日韩久久AV乱码| 3p日韩网站视频| 99只有精品9| 99激情| 99re热精品在线视频| 极品人妻VIDEOSSS人妻| 婷婷五月激情视频在线| 亚洲激情在线| 99热草草| 婷婷五月天成人网| 丁香婷婷十月| 久久女婷| 亚州成人综合在线| 思思热视频| 婷婷五月天成人综合网| 26uuu精品一区二区| 99热这里有精品| 深爱激情综合网| 丁香五月婷婷婷婷欧美综合| www.婷婷五月.com| 久久久久9| 婷婷国产成人| 亚洲五月综合色播| 国产激情久久久| 婷婷99视频全集高清| 天堂综合久| 色欲日日躁| www,色婷婷| 大香蕉久久综合网| 99热这里| 亚洲AV网站在线观看| 狠狠狠狠狠狠狠狠草| 人人性久久| 激情综合视频| 婷婷五月天社区| 中文AV网| 五月天 另类图片| 五月丁香亚洲校园欧美| 亚洲午夜一区二区| 五月婷婷 婷婷五月 一区二区 久久久| 亚洲激情综| 99爱在线视频观看| 丁香花五月天| 色五月婷色彩免播放器| 五月婷婷综合影院| 国产AV网页| 国产午夜成人免费看片无遮挡| 久久网日本| 99热这里只有精品搜| 久久五月网| www.日本久久videos| 丁香五月婷婷五月| 亚洲av成人一区二区电影在线| 人妻久久久久久| 亚洲精品亚洲人成人网| 婷婷五月综激情| 天天透天天爱| 色爱五月天| 婷婷六月色播| 国产精品久久久久久五月天加勒比| 爱之国产色情综合| 激情综合五月婷| 日韩AV片| 91干视频| av在线免费播放| 99精品一二三四视频| 色婷婷四色| 久久99日本精品视频免费观看| 强辱丰满人妻HD中文字幕| 丁香五月婷婷色| 色99色| 狠狠干婷婷| 婷婷五月丁香综合| 五月天婷婷色| 色九九综合| 永久精品| 丁香五月综合| 少妇水多A片太爽了| 色婷婷五月天| 日韩在线看AV| 色婷婷亚洲综合网站| www.99riav99| 99啪在线| 久久久大香蕉| 日韩婷婷五月| 五月色 亚洲| Va另类视频| 5月婷婷五月天| 色色色无码| 久9视频免费播放| 丁香蜜臀黄色婷婷五月天| 久久精典| 激情五月天丁香| 老师的粉嫩小又紧水又多A片视频| 日本黄色三级片内射| 五月天另类小说久久小说网| 九九久久精品國產| 婷婷中文在线| 午夜九九电影| 中文av网站| 亚洲av综合网| A片试看50分钟做受视频| 影音 五月 婷婷 久久| 激情五月天色色色| 色欲婷婷五月天| 另类五月婷婷| 亚洲激情免费视频观看| 欧美 日韩 成人在线| 五月婷婷六月丁香| 婷婷热色| 狠狠爱综合网| 丁香六月视频免费观看| 丁香六月婷婷综合| 色五月婷婷久久| 亚洲AV成人精品网站在线播放| 婷婷五月,偷窥偷拍网| 亚洲区,视频区,视频区免费| 涩涩婷婷五月| 4438激情网| 嫩BBB槡BBBB搡BBBB| 青青色com久久| 第四色婷婷日本| 日日夜夜狠狠干| 日韩成人精品中文字幕| 久草丁香婷婷1024| 无码激情| 激情伊人五月天| 亚洲中文字幕网| 色婷婷AⅤ| 丁香婷婷少妇| 日日噜噜夜夜狠狠久久丁香六月| 色五月婷婷7777| 亚洲综合视频在线| 久久人妻伊人| 综合五月天| 日本久久精品18| 丁香五月天婷婷久久综合| 五月天停婷基地| 强壮的公次次弄得我高潮A片日本 | 欧美熟妇一区二区三区| 五月丁香婷婷六月天| 色婷婷免费观看| 在线日本www| 色情·com| 啪啪99| 国产精品黑丝| 99视频这里只有久久精品| 99热伊人| 中文字幕97超级碰| www夜夜操comwww| 亚洲乱码日产精品BD| 久久久99视频| 久久这里只有精品8| 亚洲亚洲人成综合网络| 色色操| 91色噜噜狠狠狠狠色综合| 一级黄色片看看| 五月丁香 久久久| 婷婷色婷婷| 日本超碰在线| 五月婷啪啪| 一起草av在线观看| 天天插综合| co超碰在线观看| 99色啊| 婷婷综合视频| 久久狠狠欧美| 大香蕉婷婷| 五月婷婷影院| 综合色99| 欧美色色色色色| 久综合色| 一区二区乱码视频| 99热久草| 中文字幕在线免费| 色播婷婷大香蕉| 久8色色| 午夜不卡久久精品无码免费| 婷婷五月天成人五月天| 色噜噜狠狠色综合日日| 五月天婷婷色色| 大香网伊人久久综合| 久久婷婷伊人| 欧美在线视频99| 99精品久久| 色五月播五月| 激情五月天综合图片小说网站| 色婷婷电影网| 99秘 在线| 大香蕉在线99热| 狠狠色噜噜色狠狠狠综合久久成人波 | 99在线精品视频| www.五月天婷婷| 婷婷色情网| 色播五月婷婷| 色五月天中文字幕| 99亚洲精品综合在线| 丁香久久久| 五月丁了香蕉综合| 九九热99视频| 中文字幕丰满乱孑伦无码专区 | 91九色偷拍| se影音资源在线观看| 91在线视频综合| a在线观看| 色日本丁香婷婷| 日本三级第一页| 丁香五月六月婷婷综合| 丁香五月天堂网| 国产人妻777人伦精品HD| 伊人午夜综合色啪| 大香蕉久久婷婷精品综合| 九九色人| 开心五月激情站| 99久久終合| 色停停香蕉视频| tingting五月天亚洲| 91伦| 思思热精品在线视频| 五月色丁香婷婷中文字幕| 岛国资源站| 日韩AAAAA| 天天爽天天摸| 97久久超碰| 91无码色色| 免费看欧美成人A片无码| 日韩婷婷五月| 日噜噜色| 色五月激情五月开心五月| 五月天激情婷婷小说| 99在线视频精品| 屁股翘好撅高迎合跪趴| 狠狠干在线| 国内婷婷丁香社区在线播放| 亚洲4区国产欧美| 五月丁香婷婷啪啪| 国产这里只有精品| ji'qing'luan'ren'lun| 六月丁香六月婷婷欧美| 免费无码毛片一区二区A片| 丁香五月六月综合激情| 综合99在线| 九色激情网| 亚洲 在线 另类| 五月激情综合网| 亚洲 五月 婷婷 成人| 婷婷大香蕉| 99re在线免费视频| 被男人添B超爽视频| 激情五月天综合网| 五月天精品综合| site:wpjngj.com| 国产亚洲99久久| 九色综合网| 日日撸夜夜操| 综合久久高清| 国产成人+亚洲+欧洲| 在线VA视频| 五月婷婷99热| 婷婷丁香五月激情密臀av| 麻豆AV一区二区三区| 久久综合激情| 色五月大| 婷婷婷婷婷开心无码播放| 色插综合网| 天天色月| 五月丁香免费视频| 亚洲成人网站在线播放| 一区操| 五月丁香婷婷色啪| 精品影院| 91碰碰碰| 狠狠干综合| 婷婷操逼| 99综合久久| 天天舔天天摸| 色五月欧美| 丁香激情五月少妇| 丁香色情五月综合网站| 色婷婷欧美在线| 日韩色色小视频| 五月停亭六月,六月停亭的英语| 日本人人干| 婷婷五月六月丁香| 婷婷国产五月天17c| 嫩草免费视频| 日韩在线视频9色| 一区二区成人电影免费播放| 韩日另类| 日碰日| 99@久久@99精品视频| 91干婷婷| 操逼电影免费看| 久久99激情五月天| 欧美日韩国产一二区| 国产精品男人AV不卡| 西西4r午夜剧场| 五月婷婷久久爱| 九九热青青草| 久久婷婷综合拍| 丁香五月777| 婷婷五月天AV在线| 亚洲成人AV在线观看| 色婷视频| 色婷婷久久综合久色| 天天操天天操综合| 日本熟女一区二区| 五月丁查人人| 色欲午夜无码久久久久久张津瑜| 欧美色色色色色色色色色色| 久久总和99| 婷婷久久五月天| 99热这里只有精品8| 最新高清无码专区| 色色色宗合网| 黄网在线观看免费| 99久热在线精品| 狠狠va| 激情九九综合网| 舔色婷婷| 大香网伊人久久综合| 欧美99| 香蕉视频性爱BB做爱| 亚洲自拍天堂| 欧美日韩成人在线| 日日干干天天干| 日本色狠狠| 日韩综合天堂| 成人做爰高潮A片免费视频 | 五月天欧美 另类小说| 五月婷婷丁香综合| 午夜九九九九九九九九九九九九九| 色色婷婷五月天| BBWCUCKOLD精品熟妇| 91猫咪国产在线播放| 26UUU欧美激情一区二区| 狠狠五月激情在线| 洗浴中心操B视频| 五月婷婷熟女| 中文字幕网伦射乱中文| 久久一级片| 亚洲国产精品成人免费一区久久久在线观看AAAA| 五月天婷婷在线啪啪视频| 色婷婷AV久久久久久久| 久99视频| 97午夜一区二区| 色欲婷婷五月天| 另类综合网| 91丨九色丨东北熟女| 亚洲精品第一色色色色色色| 激情视频91| 人人干AV| 丁香婷婷网| 人妻视频一区而且二区| av九九| 久久少妇视频| 激情五月久久| 51XX嘿嘿午夜无码| 久久亚洲色导航| 在线观看婷婷5月| 国产欧美精品AAAAAA片| 男人天堂99| 天天夜夜操| 国产这里只有精品| 激情九九六月激情免费视频| 夜夜夜夜操| 久久婷五月婷| 婷婷五月a| 桔色成人官方网站| 俺去也五月天婷婷| 丁香五月天激情四射网| 99热99这里有免费的精品| 超碰99在线观看| 激情婷婷五月天丁香| 丁香伊人激情| 九九亚洲视频| 五月婷婷激情日本| www.久久66| 欧美日韩成人在线| 粉嫩av懂色av蜜臀av熟妇| 婷婷五月天在线观看第二页| 99热| 免费视频舔| 999婷婷综合| 欧美日本高清视频99| 五月婷婷中文网| 久热这里只有| 在线中文字幕视频| 99热免费| 精品导航在线x不卡| 五月久久亚洲| 97碰碰碰免费公开在线视频| 青草网在线观看| 碰超99| 97欧美在线| 久久五月天综合| 亚洲无码免费看| 五月丁香激情欧洲啪啪| 9色91视频| 狠狠色情婷婷| 韩国真做片在线观看| 丁香婷婷六月婷婷六月婷婷六月婷婷| 激情99热| 婷婷中文无码| 91九色视频| 丁香五月影视| 粉嫩av懂色av蜜臀av熟妇| 97热久久| 久热AA| 玖玖在线视| 九九AV在线| 武则天精品久久| 五月停亭六月,六月停亭的英语| 午夜成人综合| 婷婷五月天Av| 五月丁香啪啪激情| 九九这里都是精品| 看黄的网站18禁| 丁香五月婷婷啪啪| 婷婷五月天Av| 国产黄色在线观看| 99热这里只有精品一区| 丁香六月欧美| 婷婷五月天视频| 日本97在线视频| 天天肏视频| 五月丁香久久精品在线观看| 激情色播| 亚洲行行色色| 六月婷婷日| 婷婷五月丁香色综合| 精品成人在线观看| 99精品久久| 婷婷丁香五| 性爱111111| 婷婷成人五月天成人文学| 蜜臀av粉嫩av懂色av| 欧美日韩91| 欧美性丁香色色五月天综合爱爱| 色五月情| 五月婷婷基地| 丁香激情网| 九九成人| 久久成人人妻| 婷婷色色丁香五月天| 色色热| 99热这里只有精品33| 丁香五月婷婷激情中文| 日韩成人中文字幕| 5月丁香婷婷| 婷婷丁香五月天之开心少妇| AV成人在线播放| 青青夜夜狠狠夜夜狠狠| 激情六月婷婷啪啪| 91九色在线视频| 久久久色婷婷五月天| 色婷婷激情Av久久久| 无码色| 久久6这里只有精品| AⅤ在线播放网| 五月天激情四射| 秋霞影音91人妻久久| 91九色国产熟女| 97干干干丁香| 91怕怕网| 五月婷婷在线播放| 九月婷婷综合| 婷婷干| 涩综合网| 婷激情五月| av在线免费播放| 变态 另类 在线| 4399在线日本A片| 黄页大全十八禁| 99热这里都是精品| 精品久久久中文字幕大豆网推荐理由| 激情五月天视频| 色播五月丁香婷婷| 亚洲AV无码影院| 国产精品扒开腿做爽爽爽A片唱戏 亚洲爆乳无码精品AAA片蜜桃 | 26UUU欧美激情一区二区| 色婷婷丁香五月在线| 亭亭五月基地在线| 变态 另类 在线| 九九九九毛片| 色五月婷婷丁香五月| 久1色色| 色天堂A| 五月丁香另类网| 91超级碰| 色玖玖爱| 天天草天天摸| 五月婷婷在线网站| WWW,激情五月天,COM| 1024亚洲| 亚洲AV成人精品网站在线播放| 五月丁香啪啪综合| 五月天婷婷综合| 国模淫穴色图| 久久五月天综合视频网站| 婷婷午夜综合| 伊人激情网| 成人无码髙潮喷水A片| 五月天综合网| 免费视频无码| 五月丁香淫淫婷婷婷| 五月天婷婷网站| 伊人影音无码一区二区三区| 亚州操逼网| 自拍视频99| 日韩三十六页| 五月丁香婷婷成人网| 丁香婷婷激情| 精品久久99码| 人人97碰| 国产成人AV在线播放| AV操操操| 婷婷六月久久综合导航| 好好干av| 天天拍夜夜爽日日| 色播五月婷婷综合| ay2区| 毛片网站谁有| 99er精品| 婷婷欧美偷拍综合| 视频综合网| 婷婷五月天激情网址| 欧美操人| 全亚洲最大的婷婷五月天网站COM| 爆乳熟妇一区二区三区爆乳照片| 91嫩草久久| 亚洲秘 无码一区二区三区妃光/1| txt五月激情四射网综合俺也来了| 亚韩精品视频1区| Av中文在线| 激情电影五月婷婷| 久久久久五月丁香| www.99免费视频| 激情五月天99色| 九九精品热播| 琪琪色五月天| 成人午夜无码视频| 天天爽在线视频| 色情·com| 日本在线免费中文com.| 六月综和久久| 超pen个人视频97| 精品9l九九九九九77777| 高潮毛片又色又爽免费| 国产精产国品一二三在观看| 亚洲成人AV电影在线| 婷婷五月丁香性爱| 婷婷中文字幕在线| 中文字幕AV网址| 亚洲中文字幕AV| 天天操夜夜啊| 婷婷五月天伦理| 国产性色蜜乳| 欧美婷婷成人| 中文字幕av在线| 91啪啪视频| 五月婷婷 婷婷五月 一区二区 久久久| 欧美五月婷婷综合| 日韩AV在线免费观看| 婷婷五月天在线观看免费| 熟女啪啪视频| 狠狠色婷婷7777久| 深爱婷婷色| 99av视频| 婷婷午夜精品久久久| 思思热在线播放| 中文字幕按摩做爰| 9久热在线视频| 日本在线视频播放91| 夜夜骑日日操| 噜噜色com| 97超碰人人操| 五月丁香六月婷| 五月婷av| 九九九热精品| www.日日夜夜| 五月狠狠| 亚洲视频一区| 色综合久久无码| 狼人久草| 激情五月婷婷综合色播小说| 久久人人九| 国产精品人成A片一区二区| 美女xx不卡| 热的五码久久精品| 五月婷婷丁香色播网| 色婷婷狠狠| 丁香婷婷影院| 久久五月丁香婷婷| 99热这里只有是亚洲国产| 99在线观看| 99精品久久久久久久久| 色婷婷五月天中文字幕| 99re这里只有精品视频了| 色色99| 99热色综合| 六月婷婷网| 五月丁香婷婷免费视频| 极品少妇XXXX精品少妇偷拍| 六月丁香激情| 久久香蕉婷婷五月天| 999激情视频| 免费91久久精品| ww亚洲ww在线观看| 99色在线视频| 丁香综合| 五月天婷婷黄色视频| 丁香五月在线播放| 五月日韩中文字幕| 狠狠色丁香| 天天综合色丁香| 国产干逼片| 激情婷婷内射| 亚洲不卡| 丁香六月综合激| 久久久区区一久久久久久| 五月天六月色| 久热99热| 天天综合中文| 狠狠干.com| 丁香六月av| 一起草av| 99毛片| 亚洲五月花| 色色色色色色综合网| 丁香五月天激情五月天激情五月天激情网| 欧美影院| 狠狠色婷婷丁香五月| 久久机只有这里精品| 超碰在线国产| 九月丁香亭亭| 久久婷丁香五月| 久久大香蕉伊人| 色操b| 搡BBBB搡BBB搡18 | 久久这里只有精品07| 97色在线| 97人人操人人爽| 激情五月丁香社区| 9精品视频在线| 精品人妻一区二区三区四区不卡在| 碰碰碰97国产| 五月综合六月丁| 99噜噜噜在线播放| 国内裸舞二区| 91操人| 五月婷婷在线视频免费观看| 26uuu精品国产| 五月丁香婷婷久久| 丁香五月激情五月| 婷婷香蕉| 色五月综合| 丁香五月婷婷深爱综合激情| 五月丁香啪啪激情| 超碰在线免费| 天天综合网91| 婷婷六月激情| 久草婷婷| 亚洲日本激情| 97人人操人人干| 五月婷婷久久激情| 欧美成人精品三区综合A片| 天天综合久久| 国产精品久久久久久久久久久久 | 色波激情五月天| 国产肥白大熟妇BBBB视频| 六月丁香婷婷色69|