99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

ESP32通過SPI驅動W5500:以太網(wǎng)全鏈路與實戰(zhàn)排查

ESP32通過SPI驅動W5500:以太網(wǎng)全鏈路與實戰(zhàn)排查 手里有 ESP32 的兄弟十個有九個是先跑 WiFi 的??烧娴搅艘?7×24 小時不間斷上報數(shù)據(jù)的場合WiFi 那點脾氣就全露出來了路由器重啟一次、信道被鄰居家 AP 擠一下、現(xiàn)場金屬柜門一關連接就斷然后在深更半夜你被電話叫起來重啟設備。這時候很多人會想到加一塊 W5500讓 ESP32 走有線以太網(wǎng)。想法很好但一上手就卡在 SPI 上——四根線怎么接、模式怎么設、為什么讀出來的版本號是 0xFF、為什么網(wǎng)口燈亮著但 DHCP 拿不到地址。這篇就把 ESP32 驅動 W5500 的完整鏈路掰開揉碎講一遍從 SPI 時序到寄存器幀格式再到能直接抄的例程和一份排查表。1. 為什么給 ESP32 配 W5500而不是繼續(xù)用 WiFi1.1 無線在工業(yè)現(xiàn)場的三個真實痛點先說結論不是 WiFi 不好是它的工作方式?jīng)Q定了它不適合做命脈通道。ESP32 的 WiFi 是射頻通信受環(huán)境影響的變量太多——2.4G 頻段擁擠、多徑反射、金屬屏蔽、AP 負載。做過現(xiàn)場設備的人應該都經(jīng)歷過設備在辦公室測試一周沒事裝到配電房旁邊的鐵皮柜里一天斷八次。第二個痛點是資源爭搶。ESP32 只有一個射頻前端WiFi 和藍牙共存時要分時復用協(xié)議棧內部要做仲裁。如果你的項目里同時開了 BLE 配網(wǎng)和 WiFi 上傳再加上 TLS 握手任務堆棧和堆內存會非常緊張表現(xiàn)就是偶發(fā)的連接超時、內存不足重啟。這類問題極難復現(xiàn)也極難定位。第三個痛點是重新入網(wǎng)這件事本身。設備換了個現(xiàn)場、換了路由器或者 AP 的 SSID 改了你就得重新配網(wǎng)。ESP32 上做配網(wǎng)要么開熱點讓用戶連、要么走藍牙、要么走 SmartConfig每一種都增加了現(xiàn)場維護的復雜度。有線就簡單多了插上網(wǎng)線DHCP 拿地址或者干脆靜態(tài) IP插上就跑。1.2 W5500 與 LAN8720 兩條路線的取舍ESP32 做有線以太網(wǎng)主流就兩條路。一條是LAN8720 這類 RMII PHY。它走的是 ESP32 內置的 EMAC 外設用 RMII 接口理論上性能更好直接走 MAC 層吞吐能跑滿 100Mbps 的大部分帶寬。但它的問題也很實在占引腳多TXD0/TXD1、RXD0/RXD1、TX_EN、CRS_DV、REF_CLK 等等七八根起步還需要一個 50MHz 參考時鐘——要么 PHY 自己出、要么 ESP32 出、要么外掛晶振時鐘方向和配置錯一個就跑不起來。論壇上大量LAN8720 用外部 50M 的設計討論絕大多數(shù)都是在踩時鐘這個坑。另一條就是W5500。它是 WIZnet 的硬件協(xié)議棧芯片內置 TCP/IP 硬件邏輯、MAC 和 PHY主機只需要通過 SPI 把它當成一堆寄存器去讀寫就行。占用引腳只有 4 根 SPI 線加一根復位線架構上極其干凈。代價是吞吐受 SPI 帶寬限制而且你失去了 ESP-IDF 里那套成熟的esp_eth網(wǎng)絡棧直通能力——不過這一點在 W5500 上也有官方驅動可以對接后面會講。1.3 SPI 方案對引腳和內存的占用盤點引腳賬很好算。W5500 方案SCLK、MISO、MOSI、CS 四根加上復位 RST、可選的中斷 INT一共 5 到 6 根。LAN8720 方案RMII 數(shù)據(jù)線加控制線通常要 9 根以上還要加上 MDC/MDIO碰上模組還占 PSRAM 引腳的項目基本就分配不開了。內存賬更關鍵。W5500 內部自帶16KB 發(fā)送緩沖 16KB 接收緩沖默認分給 8 個 socket 各 2KB。這意味著 TCP 的重傳、窗口管理、序號維護這些活全在 W5500 芯片里干了ESP32 端的 RAM 消耗極小。而 LAN8720 走的是 ESP32 自己的 LwIP 協(xié)議棧每個連接都要占 PCB 控制塊、收發(fā)緩沖區(qū)8 個并發(fā)連接下來配合 WiFi 和 BLE 一起開內存壓力是肉眼可見的。所以我的選型經(jīng)驗是這樣引腳緊張、內存緊張、連接數(shù)不多幾個到十幾個、吞吐要求幾十 Mbps 以內W5500 是更省心的方案要大帶寬比如視頻流、要低延遲、引腳富裕才考慮 RMII 那套。2. SPI 協(xié)議先啃透四根線是怎么把 32 位地址搬進芯片的2.1 從 CS/SCLK/MOSI/MISO 的角色分工說起很多人用 SPI 用了好幾年但還是說不清這四個信號誰是主誰是從。用一句話概括時鐘永遠由主機給從機跟著時鐘走。SCLK串行時鐘。每個時鐘周期傳輸一位上升沿還是下降沿采樣由 SPI 模式?jīng)Q定。ESP32 作為主機這個腳的時鐘是它產(chǎn)生的。MOSIMaster Out Slave In主機發(fā)、從機收。在 ESP32 驅動 W5500 的場景里命令、地址、要寫入的數(shù)據(jù)都從這里出去。MISOMaster In Slave Out從機發(fā)、主機收。讀 W5500 的寄存器、讀接收緩沖區(qū)的網(wǎng)絡數(shù)據(jù)都從這里回來。CS片選。低電平有效拉低表示我現(xiàn)在要跟你說話??偩€上如果還掛著別的 SPI 設備比如 SPI Flash、SPI 屏就靠這根線來區(qū)分跟誰說話。理解的關鍵點在于SPI 是全雙工的MOSI 和 MISO 在同一個時鐘周期里同時各傳一位。所以你在 Arduino 里看到的SPI.transfer(0xFF)這種寫法意思不是發(fā)一個 0xFF而是在接下來 8 個時鐘周期里MOSI 輸出 0xFF同時把 MISO 上收到的 8 位讀回來。讀寄存器時之所以要發(fā)一個啞字節(jié)dummy byte就是因為時鐘得轉起來從機才能往外吐數(shù)據(jù)。2.2 模式 0 的時序細節(jié)與時鐘極性的坑SPI 有四種模式由 CPOLClock Polarity空閑電平和 CPHAClock Phase采樣邊沿組合而成。W5500 只支持 SPI 模式 0也就是 CPOL0、CPHA0時鐘空閑時為低電平數(shù)據(jù)在上升沿被采樣。為什么這個要說清楚因為如果你用錯了模式現(xiàn)象會非常迷惑——有時候讀出來是全 0有時候是全 0xFF有時候數(shù)值看著像但又不對而且換個批次芯片現(xiàn)象還不一樣。我第一次用軟件模擬 SPI 的時候就在這上面耗了一下午后來拿示波器打了一下發(fā)現(xiàn)時鐘空閑是高采樣沿也在下降沿整個反了。還有一個容易忽略的細節(jié)是位序。W5500 是MSB First先傳最高位。絕大多數(shù) SPI 設備都是 MSB First但配置里忘了設讀出來的字節(jié)就是完全反的比如期望 0x04 讀出 0x20這種情況一看就是位序錯了。傳輸時序上正確的順序是CS 拉低 → 發(fā)地址高字節(jié) → 發(fā)地址低字節(jié) → 發(fā)控制字節(jié) → 收發(fā)數(shù)據(jù) → CS 拉高。整套動作必須在一次 CS 有效期內完成中途 CS 抖動會導致 W5500 狀態(tài)機復位讀出來就是垃圾數(shù)據(jù)。2.3 W5500 三字節(jié)幀頭地址 控制字節(jié)逐位拆解這是整篇文章最關鍵的地方也是大部分例程能跑但沒人講清楚的部分。W5500 的 SPI 幀結構是定長的 3 字節(jié)頭部 數(shù)據(jù)第一個字節(jié)是地址高 8 位第二個字節(jié)是地址低 8 位第三個字節(jié)是控制字節(jié)。控制字節(jié)的 8 位是這樣分配的位域名稱含義bit 7 ~ bit 3BSB[4:0]塊選擇5 位共 32 個塊bit 2RWB0 讀1 寫bit 1 ~ bit 0OM工作模式00 表示可變長度模式BSB 是最需要理解的。W5500 把內部空間劃成了 32 個塊常見的有0x00通用寄存器塊MR、GAR、SHAR、SIPR、VERSIONR 這些0x01 3n第 n 個 socket 的寄存器塊0x02 3n第 n 個 socket 的發(fā)送緩沖區(qū)0x03 3n第 n 個 socket 的接收緩沖區(qū)所以 socket 0 的三個塊分別是 0x01、0x02、0x03socket 1 是 0x04、0x05、0x06以此類推。為什么會這樣設計因為 W5500 內部是 8 個 socket × 3 類空間的規(guī)則矩陣用 5 位塊號就能線性尋址硬件實現(xiàn)簡單軟件算起來也方便。OM 位是很多人沒注意的地方。默認的00是可變長度模式意思是你發(fā)多少字節(jié)我就當多少個數(shù)據(jù)適合收發(fā)網(wǎng)絡報文這種長度不定的場景。另外三種是定長模式1/2/4 字節(jié)在讀單個寄存器時用定長模式理論效率更高但你得自己區(qū)分場景反而容易出錯。我自己的做法是統(tǒng)一用可變長度模式代碼簡單、不容易翻車。2.4 硬件片選和軟件片選差在哪這是搜得最多的 SPI 問題之一。所謂硬件片選是 SPI 外設自己在傳輸開始時把 CS 拉低、結束時拉高軟件片選則是你自己用 GPIO 手動控制。在 ESP32 上Arduino 的 SPI 庫用的是硬件外設但片選實際上還是走 GPIO 手動控制的SPI.begin(sck, miso, mosi, ss)里那個 ss 只是記了個默認值真正的 CS 時序由庫或你的代碼來管。ESP-IDF 的spi_master里則是明確區(qū)分spi_device_interface_config_t的spi_device_interface_config_t::spics_io_num設了就是硬件片選設成 -1 就是不用硬件片選你自己控制。那什么時候需要軟件片選兩種情況。一是多個從機共享總線需要你自己決定誰被選中二是CS 與其它信號有嚴格時序配合比如你需要在 CS 拉低之后再延遲一點才開始傳輸。對 W5500 來說核心要求只有一條一次完整的寄存器訪問必須在一個 CS 低電平窗口內完成。用 Arduino 庫時庫內部處理了這件事自己寫驅動的時候注意別在傳輸中間去動 CS 就行。3. 接線與參考電路上電前必須核對的清單3.1 引腳分配表與 ESP32 腳位禁區(qū)先給一張我常用的接線表基于 ESP32 的 VSPI默認 SPI 外設ESP32 引腳信號說明GPIO 18SCLKSPI 時鐘輸出GPIO 19MISO從 W5500 讀數(shù)據(jù)GPIO 23MOSI向 W5500 寫數(shù)據(jù)GPIO 5CS片選低有效GPIO 4RST硬件復位低有效GPIO 27INT可選W5500 中斷輸出3V3VCC供電GNDGND共地這里有幾個不能碰的引腳新手特別容易踩GPIO 6 ~ 11接內部 SPI Flash占用了就下載不了程序甚至開不了機。GPIO 34 ~ 39只有輸入功能沒有輸出驅動能力絕對不能拿來做 SCLK、MOSI、CS。GPIO 16 / 17很多模組默認給了內部 PSRAM用了會沖突。GPIO 12啟動時的電平會影響 Flash 供電電壓MTDI strapping如果外部上拉導致啟動時是高電平可能直接啟動失敗。所以 HSPI 那組默認引腳里的 MISO12 要特別當心最好換一組引腳映射。GPIO 0 / 2 / 15也都是 strapping 腳用之前先確認上電瞬間的電平是否符合要求。我個人的習慣是做 W5500 項目時把 SPI 映射到 18/19/23 這組默認腳CS 用 5RST 用 4把 0/2/12/15 全部空出來不用。這樣最不容易出玄學問題。3.2 供電、復位、晶振與 12.4k 偏置電阻供電這塊W5500 是 3.3V 單電源但電流不小——空閑狀態(tài)大概幾十毫安收發(fā)數(shù)據(jù)時峰值能到 130mA 以上。這意味著如果你用的是體積很小的 ESP32 模組板載 LDO 的余量可能不夠尤其是同時還要給 WiFi 供電的時候。我的建議是如果 ESP32 板上是 AMS1117 這類能出 800mA 的 LDO直接取 3.3V 通常沒問題如果板子是精簡版、LDO 只有 300mA 級別一定給 W5500 單獨供一路 LDO。同時在 W5500 的 VDD 附近就近放 100nF 和 10uF 的退耦電容這一點在 PCB 設計上別省。復位電路W5500 的 RSTn 是低電平有效數(shù)據(jù)手冊要求低電平保持時間不低于 500 微秒。實際寫代碼時統(tǒng)一給 10ms 更保險。復位拉高之后不要立刻訪問寄存器內部 PLL 需要鎖定時間建議至少等 1ms 以上我一般給 50 到 100ms。晶振W5500 需要外部 25MHz 晶振如果買的是集成晶振的模塊就不用管如果是自己畫板晶振的負載電容要按晶振規(guī)格書配通常 12 到 22pF走線盡量短離芯片近。還有一顆絕對不能少的電阻RSET_BG 引腳到地的 12.4kΩ精度要求 1%。這是 PHY 的偏置電流設定電阻決定發(fā)送驅動電流的大小。我見過一個板子為了省事用了個 10kΩ 的結果就是網(wǎng)口能 link 上但丟包率極高換個網(wǎng)線就好一點、換個交換機就完全不通查了三天才發(fā)現(xiàn)是這顆電阻。這種問題最難查因為現(xiàn)象是半死不活而不是完全不工作。3.3 網(wǎng)口變壓器與差分走線W5500 內部集成了 PHY但沒有集成變壓器。也就是說從芯片出來的 TXP/TXN、RXP/RXN 是差分信號必須經(jīng)過 1:1 的隔離變壓器再到 RJ45。最省事的做法是用帶變壓器的 RJ45 座比如常見的 HR911105A 這類一顆器件解決問題。自己搭分立變壓器的話要注意變壓器中心抽頭的接法各家參考設計略有差異務必以 W5500 官方硬件設計指南和模塊廠家的原理圖為準。差分布線有幾個原則TX 對和 RX 對各自等長對內走線長度差控制在很小范圍內差分阻抗按 100Ω 控制盡量遠離晶振、SPI 時鐘這些干擾源兩條線之間不要走其它信號。這些東西在低速下可能體現(xiàn)不出來但走線亂搞的板子在長網(wǎng)線、惡劣電磁環(huán)境下的誤碼率會明顯上升。再多說一句買模塊是最劃算的選擇。W5500 的模擬部分對布線和器件精度有要求自己畫板省下的那點錢很可能換來幾周的調試時間。市面上成熟的 W5500 模塊已經(jīng)把晶振、變壓器、偏置電阻都做全了接線只剩下電源和 SPI性價比極高。4. 例程逐行拆解從寄存器讀寫到 TCP 回環(huán)4.1 復位與 SPI 初始化先看初始化的部分。以下基于 Arduino 環(huán)境#include SPI.h #define PIN_SCLK 18 #define PIN_MISO 19 #define PIN_MOSI 23 #define PIN_CS 5 #define PIN_RST 4 static void w5500HardwareReset() { pinMode(PIN_RST, OUTPUT); digitalWrite(PIN_RST, LOW); // 拉低復位低有效 delay(10); // 手冊要求 500us這里給足余量 digitalWrite(PIN_RST, HIGH); // 釋放復位 delay(100); // 等內部 PLL 鎖定別急著訪問寄存器 } static void w5500SpiInit() { SPI.begin(PIN_SCLK, PIN_MISO, PIN_MOSI, PIN_CS); pinMode(PIN_CS, OUTPUT); digitalWrite(PIN_CS, HIGH); // 空閑時必須拉高否則總線誤觸發(fā) // 模式 0MSB First時鐘 20MHz SPI.beginTransaction(SPISettings(20000000, MSBFIRST, SPI_MODE0)); }逐行說幾個點。pinMode(PIN_CS, OUTPUT)和digitalWrite(PIN_CS, HIGH)這兩行順序很重要——如果先 begin 后設方向中間會有一小段時間 CS 處于高阻態(tài)可能被誤判成低電平導致 W5500 收到一段垃圾時序。這就是很多人上電第一次通信必失敗、重試就好的原因。SPI.beginTransaction里的 20MHz 是我實測比較穩(wěn)的值。W5500 手冊標稱支持到 80MHz但能不能跑到這個頻率取決于你的走線質量。杜邦線飛線的情況下20MHz 是比較務實的起點調通了再往上試。4.2 通用讀寫函數(shù)怎么封裝有了前面講的幀格式讀寫函數(shù)就非常直白// 寫bsb 是塊號len 是字節(jié)數(shù) static void w5500Write(uint16_t addr, uint8_t bsb, const uint8_t *buf, uint16_t len) { digitalWrite(PIN_CS, LOW); SPI.transfer((uint8_t)(addr 8)); // 地址高字節(jié) SPI.transfer((uint8_t)(addr 0xFF)); // 地址低字節(jié) SPI.transfer((uint8_t)((bsb 3) | 0x04)); // BSB RWB1(寫) OM00 for (uint16_t i 0; i len; i) { SPI.transfer(buf[i]); } digitalWrite(PIN_CS, HIGH); } // 讀 static void w5500Read(uint16_t addr, uint8_t bsb, uint8_t *buf, uint16_t len) { digitalWrite(PIN_CS, LOW); SPI.transfer((uint8_t)(addr 8)); SPI.transfer((uint8_t)(addr 0xFF)); SPI.transfer((uint8_t)((bsb 3) | 0x00)); // RWB0(讀) for (uint16_t i 0; i len; i) { buf[i] SPI.transfer(0x00); // 啞字節(jié)換數(shù)據(jù) } digitalWrite(PIN_CS, HIGH); }(bsb 3)把 5 位塊號挪到控制字節(jié)的高 5 位| 0x04把 RWB 位置 1 表示寫。讀的時候 RWB 是 0所以只留(bsb 3)。這里有個細節(jié)值得注意SPI.transfer(0x00)里那個 0x00 本身沒有任何意義MOSI 上發(fā)什么從機都不關心它只是在產(chǎn)生時鐘。如果你不小心寫成SPI.transfer(buf[i])程序也能跑只是讀回來的數(shù)據(jù)被覆蓋了——這種 bug 特別隱蔽。再封裝一層單字節(jié)讀寫會更好用static void w5500WriteByte(uint16_t addr, uint8_t bsb, uint8_t val) { w5500Write(addr, bsb, val, 1); } static uint8_t w5500ReadByte(uint16_t addr, uint8_t bsb) { uint8_t v 0; w5500Read(addr, bsb, v, 1); return v; }4.3 讀版本號驗證鏈路在寫任何網(wǎng)絡邏輯之前一定要先讀一次版本寄存器這是判斷 SPI 鏈路是否通的最快手段void setup() { Serial.begin(115200); w5500HardwareReset(); w5500SpiInit(); uint8_t ver w5500ReadByte(0x0039, 0x00); // VERSIONR Serial.printf(W5500 VERSIONR 0x%02X\r\n, ver); if (ver ! 0x04) { Serial.println(SPI 鏈路異常先別往下走); while (1) delay(1000); } }0x0039是通用寄存器塊里的版本寄存器地址W5500 固定返回0x04。這個值不對后面所有代碼都是白搭。讀出來是什么基本對應什么問題讀到的值可能原因0x00MISO 沒接好或從機沒被選中CS 沒拉低或 SPI 模式錯0xFFMISO 被上拉、從機沒響應、模塊沒供電、復位沒釋放0x04 但偶發(fā)亂碼時鐘太高、走線太長、CS 時序有毛刺0x20 / 0x08 之類位序搞反了MSB/LSB 設錯這張表我建議截圖存手機里現(xiàn)場調試時比翻手冊快得多。4.4 Socket 開 TCP 服務端8 條寄存器指令走完流程鏈路通了之后就可以走 W5500 的 socket 流程了。這里以 socket 0 開一個 TCP 服務端為例塊號是0x01各寄存器地址按 socket 內偏移計算。#define S0_BASE 0x0000 // socket0 寄存器塊內基址 #define S0_MR 0x0000 // 模式寄存器 #define S0_CR 0x0001 // 命令寄存器 #define S0_SR 0x0003 // 狀態(tài)寄存器 #define S0_PORT 0x0004 // 本地端口(2字節(jié)) #define S0_RXBUF_SIZE 0x001E #define S0_TXBUF_SIZE 0x001F #define S0_TX_FSR 0x0020 // 空閑發(fā)送緩沖大小 #define S0_TX_WR 0x0024 // 發(fā)送寫指針 #define S0_RX_RSR 0x0026 // 已接收字節(jié)數(shù) #define S0_RX_RD 0x0028 // 接收讀指針 #define BSB_S0_REG 0x01 // socket0 寄存器塊 #define BSB_S0_TX 0x02 // socket0 發(fā)送緩沖 #define BSB_S0_RX 0x03 // socket0 接收緩沖 #define CMD_OPEN 0x01 #define CMD_LISTEN 0x02 #define CMD_CLOSE 0x10 #define CMD_SEND 0x20 #define CMD_RECV 0x40 #define SR_CLOSED 0x00 #define SR_INIT 0x13 #define SR_LISTEN 0x14 #define SR_ESTABLISHED 0x17 #define SR_CLOSE_WAIT 0x1C打開服務端總共就兩步void socket0Listen(uint16_t port) { w5500WriteByte(S0_MR, BSB_S0_REG, 0x01); // 0x01 TCP 模式 uint8_t p[2] { (uint8_t)(port 8), (uint8_t)(port 0xFF) }; w5500Write(S0_PORT, BSB_S0_REG, p, 2); // 寫入監(jiān)聽端口 w5500WriteByte(S0_CR, BSB_S0_REG, CMD_OPEN); // 命令OPEN waitSr(SR_INIT); // 等狀態(tài)變 SOCK_INIT w5500WriteByte(S0_CR, BSB_S0_REG, CMD_LISTEN); // 命令LISTEN waitSr(SR_LISTEN); // 等狀態(tài)變 SOCK_LISTEN }Sn_MR寫0x01表示 TCP寫0x02是 UDP這個值的低 4 位就是協(xié)議類型。端口是高字節(jié)在前這是網(wǎng)絡字節(jié)序寫反了就會監(jiān)聽到一個莫名其妙的端口上。Sn_CR是發(fā)令寄存器寫進去一個命令值W5500 硬件就開始執(zhí)行。執(zhí)行完成后命令寄存器會被硬件自動清零所以你不需要手動清。接收數(shù)據(jù)的流程是這樣的bool socket0Recv(uint8_t *buf, uint16_t *len) { uint8_t sr w5500ReadByte(S0_SR, BSB_S0_REG); if (sr ! SR_ESTABLISHED sr ! SR_CLOSE_WAIT) return false; uint8_t rsr[2]; w5500Read(S0_RX_RSR, BSB_S0_REG, rsr, 2); uint16_t rxLen ((uint16_t)rsr[0] 8) | rsr[1]; if (rxLen 0) return false; uint8_t rd[2]; w5500Read(S0_RX_RD, BSB_S0_REG, rd, 2); uint16_t rdPtr ((uint16_t)rd[0] 8) | rd[1]; uint16_t readLen rxLen *len ? *len : rxLen; // 注意接收緩沖的讀地址需要按 16 位偏移去訪問 w5500Read(rdPtr, BSB_S0_RX, buf, readLen); *len readLen; // 更新讀指針并下發(fā) RECV 命令通知芯片這段數(shù)據(jù)已取走 rdPtr readLen; uint8_t newRd[2] { (uint8_t)(rdPtr 8), (uint8_t)(rdPtr 0xFF) }; w5500Write(S0_RX_RD, BSB_S0_REG, newRd, 2); w5500WriteByte(S0_CR, BSB_S0_REG, CMD_RECV); return true; }這段邏輯初學者最容易漏的是最后必須下發(fā) RECV 命令。W5500 的接收緩沖是個環(huán)形區(qū)你不告訴它我已經(jīng)取走了讀指針不推進下一次讀還是同一份數(shù)據(jù)表現(xiàn)就是收到一條消息后瘋狂重復處理同一條。我第一次遇到這個現(xiàn)象時以為是上層重發(fā)查了好久。發(fā)送側相對簡單bool socket0Send(const uint8_t *buf, uint16_t len) { uint8_t fsr[2]; w5500Read(S0_TX_FSR, BSB_S0_REG, fsr, 2); uint16_t freeSize ((uint16_t)fsr[0] 8) | fsr[1]; if (freeSize len) return false; // 緩沖不夠等下一輪 uint8_t wr[2]; w5500Read(S0_TX_WR, BSB_S0_REG, wr, 2); uint16_t wrPtr ((uint16_t)wr[0] 8) | wr[1]; w5500Write(wrPtr, BSB_S0_TX, buf, len); // 數(shù)據(jù)寫進發(fā)送緩沖 wrPtr len; uint8_t newWr[2] { (uint8_t)(wrPtr 8), (uint8_t)(wrPtr 0xFF) }; w5500Write(S0_TX_WR, BSB_S0_REG, newWr, 2); // 更新寫指針 w5500WriteByte(S0_CR, BSB_S0_REG, CMD_SEND); // 命令SEND return true; }關鍵順序是先寫數(shù)據(jù)、再更新寫指針、最后發(fā) SEND 命令。順序錯了就會出現(xiàn)發(fā)送成功但對方收到的是上一條數(shù)據(jù)這種詭異現(xiàn)象。4.5 用現(xiàn)成庫走快車道Arduino 與 ESP-IDF 兩種寫法如果你不想碰寄存器兩條快車道Arduino 環(huán)境用 WIZnet 維護的 Ethernet 庫支持 W5100/W5200/W5500 的那個版本核心就兩行#include SPI.h #include Ethernet.h void setup() { SPI.begin(18, 19, 23, 5); Ethernet.init(5); // 指定 W5500 的片選引腳 byte mac[] {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; if (Ethernet.begin(mac) 0) { // DHCP 拿地址 Ethernet.begin(mac, IPAddress(192,168,1,100)); // 失敗就靜態(tài) IP } Serial.println(Ethernet.localIP()); }要提醒的是ESP32 Arduino core 自帶的ETH庫主要針對 RMII 類 PHY不是給 W5500 用的別拿錯了庫。另外Ethernet.begin()里默認會跑一遍鏈路檢測網(wǎng)線沒插會卡住一段時間加個超時邏輯更穩(wěn)妥。ESP-IDF 環(huán)境官方有 W5500 的 MAC 和 PHY 驅動思路是先建 SPI 總線、再建 MAC 和 PHY、然后裝驅動、最后掛到 netif 上spi_bus_config_t buscfg { .miso_io_num 19, .mosi_io_num 23, .sclk_io_num 18, .quadwp_io_num -1, .quadhd_io_num -1, }; spi_bus_initialize(SPI2_HOST, buscfg, SPI_DMA_CH_AUTO); spi_device_interface_config_t devcfg { .clock_speed_hz 20 * 1000 * 1000, .mode 0, .spics_io_num 5, .queue_size 20, }; // 后續(xù)依次調用 esp_eth_mac_new_w5500 / esp_eth_phy_new_w5500 // 再 esp_eth_driver_install 并綁定 esp_netifIDF 這條路的優(yōu)勢是能直接復用 LwIP、事件循環(huán)、mDNS、HTTP 服務這些上層組件做產(chǎn)品的話省很多事。順帶回應一個常見疑問SPI 需要兩個 DMA 嗎這個問法多半來自 STM32 那邊全雙工收發(fā)各占一個 DMA 流。ESP32 這邊 SPI 主機有 DMA但 W5500 這種寄存器級別的短傳輸根本用不上只有在搬運大塊收發(fā)緩沖時 DMA 才有意義。別被這個概念繞進去。5. 常見問題排查速查表與踩坑記錄5.1 現(xiàn)象-定位-處理 對照表現(xiàn)象優(yōu)先懷疑處理方式版本號讀 0x00SPI 未通信查 MISO 接線、確認 CS 拉低、確認模式 0版本號讀 0xFF從機無響應查供電、查復位是否釋放、查 CS 是否被其它設備占用版本號正確但 DHCP 超時網(wǎng)絡層問題查網(wǎng)線、查變壓器、查 12.4k 偏置電阻、查 MAC 地址是否重復網(wǎng)口燈不亮PHY 未工作查 25MHz 晶振、查供電電流是否足夠、查復位時序數(shù)據(jù)能收但重復處理忘了 RECV 命令收完數(shù)據(jù)后更新 RX_RD 并下發(fā) RECV發(fā)送成功但內容錯位寫指針順序錯必須寫數(shù)據(jù) → 更新 TX_WR → 發(fā) SEND傳幾百字節(jié)后卡死發(fā)送緩沖滿每次發(fā)之前讀 TX_FSR不夠就等下次偶發(fā)亂碼、不定時重啟SPI 時鐘太高或電源不穩(wěn)降到 10MHz 試檢查退耦電容和電源余量5.2 幾個不太容易想到的坑第一個坑是網(wǎng)線和交換機。有次調試設備接辦公室交換機一切正常接到現(xiàn)場某臺老交換機就瘋狂丟包。最后發(fā)現(xiàn)是那臺交換機只有 10M 半雙工能力自動協(xié)商沒談攏。W5500 支持自協(xié)商但老設備有時候協(xié)商不干凈??梢酝ㄟ^通用寄存器的 PHY 配置寄存器強制雙工和速率雖然不常見但遇到時能救命。第二個坑是多個 CS 共用時的總線爭搶。如果你的板子上同時掛了 W5500 和 SPI Flash 或 SPI 屏一定要確保每個設備的 CS 在非訪問期間是拉高的。曾經(jīng)有個項目的 SPI 屏 CS 懸空導致它偶爾偷聽發(fā)給 W5500 的命令現(xiàn)象是隨機死機查了一周。第三個坑是復位與上電順序。如果 W5500 和 ESP32 共用同一個 3.3V上電瞬間 W5500 可能比 ESP32 先就緒也可能后就緒。穩(wěn)妥的做法是 ESP32 啟動后主動拉一次 RST 引腳別指望上電復位電路。第四個坑是MAC 地址復用。同一個局域網(wǎng)里兩臺設備的 MAC 地址一樣癥狀是兩臺設備輪流失聯(lián)看起來像網(wǎng)絡不穩(wěn)其實是 ARP 表在打架。批量生產(chǎn)的項目一定要給每臺設備分配唯一 MAC可以從芯片 ID 派生。第五個坑是打印調試拖慢了流程。用串口打印每個寄存器讀寫耗時很長尤其是 115200 波特率下。如果你在 socket 輪詢循環(huán)里頻繁打印會錯過接收窗口表現(xiàn)就是高流量下丟包。調試時用 LED 或計數(shù)器指示狀態(tài)比打印靠譜。6. 進階優(yōu)化多 socket、吞吐與長連接?;?.1 8 個 socket 的分配策略W5500 有 8 個獨立 socket每個都能單獨配成 TCP 或 UDP。分配上有幾個經(jīng)驗原則。別把 8 個 socket 全開成 TCP 服務端。每開一個 socket就占掉一份緩沖和連接狀態(tài)。合理的做法是按功能分組比如socket 0 做配置通道HTTP 或簡單 TCPsocket 1 做數(shù)據(jù)上報MQTT 或自定義協(xié)議socket 2 做調試通道剩下的留給并發(fā)客戶端。緩沖大小可以動態(tài)調。Sn_TXBUF_SIZE和Sn_RXBUF_SIZE默認都是 2KB8 個 socket 一共用滿 16KB 16KB。如果是 UDP 廣播這種小包場景把單個 socket 的緩沖調到 1KB 甚至 0.5KB就能騰出空間給關鍵 socket 用 8KB。但要注意所有 socket 的緩沖之和不能超過芯片總量超了后面的配置會靜默失敗這個坑很隱蔽配置寄存器寫下去讀回來會發(fā)現(xiàn)根本沒生效。關閉不用的 socket 要發(fā) CLOSE 命令。直接不理會它是不行的狀態(tài)機會一直停在某個中間態(tài)占著資源。6.2 吞吐實測與 SPI 時鐘的關系理論上 W5500 的 SPI 能跑到 80MHz但實際吞吐瓶頸往往不在 SPI 時鐘而在你的輪詢循環(huán)效率。粗略算一下SPI 20MHz 意味著每秒 2000 萬個時鐘周期一個字節(jié) 8 位理論極限大約 2.5MB/s。但每次讀接收緩沖都要經(jīng)歷讀 RSR → 讀 RX_RD → 讀數(shù)據(jù) → 寫 RX_RD → 發(fā) RECV這一整套頭部的 SPI 事務開銷占了不少。實際測下來20MHz 配置、單純做 TCP 回環(huán)穩(wěn)定吞吐大概在幾百 KB/s 到 1MB/s 之間。想提高吞吐有幾個方向提高 SPI 時鐘但要看走線質量杜邦線飛線基本到 20-30MHz 就是極限PCB 短走線可以試 40MHz 以上。增大單次讀取長度一次把 RSR 里所有數(shù)據(jù)都讀走而不是一次讀幾十字節(jié)。減少輪詢里的無用操作別每次都去讀一遍全部寄存器可以先讀Sn_IR中斷寄存器判斷有沒有事件。用 INT 引腳讓 W5500 在收到數(shù)據(jù)時主動拉低中斷ESP32 用 GPIO 中斷喚醒處理比死循環(huán)輪詢省 CPU 也更快響應。6.3 斷線重連與心跳設計有線網(wǎng)絡比無線穩(wěn)定得多但交換機重啟、網(wǎng)線被拔、對端服務器掛了這些情況一樣會斷所以重連邏輯必須有。我的做法是在 socket 輪詢里加一個狀態(tài)檢查uint8_t sr w5500ReadByte(S0_SR, BSB_S0_REG); if (sr SR_CLOSED) { // 連接已關閉重新走 OPEN LISTEN 流程 socket0Listen(5000); }對 TCP 客戶端主動連接服務端的場景還要注意CONNECT 命令發(fā)出后會有一個短暫的中間態(tài)不能立刻判斷失敗要給它幾百毫秒轉成 ESTABLISHED。超時了再發(fā) CLOSE 然后重試。心跳方面如果對端是 MQTT 服務器用協(xié)議自帶的心跳就夠了如果是自己寫的 TCP 長連接建議每 30 到 60 秒發(fā)一個字節(jié)的心跳包。有心跳的好處是能及時發(fā)現(xiàn)TCP 連接還在但實際鏈路已斷的僵死狀態(tài)——這種情況在網(wǎng)線被拔出、交換機端口被關閉時很常見光靠 TCP 狀態(tài)機是發(fā)現(xiàn)不了的。還有一點重連要加退避。別一斷開就立刻重連那樣如果對端服務沒起來會形成密集重試。我的習慣是 1 秒、2 秒、4 秒、8 秒封頂 30 秒連上之后重置。最后再分享一個我自己用下來很受用的做法在設備上留一個通過 W5500 訪問的極簡 HTTP 接口返回當前 IP、運行時長、連接狀態(tài)、最近一次收發(fā)時間戳?,F(xiàn)場排查時手機連上同一個網(wǎng)絡打開瀏覽器就能看到設備狀態(tài)比帶電腦接串口方便太多。這個接口只用幾十行代碼但省下的現(xiàn)場時間非常可觀。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99在线观看| 欧美日韩五月婷婷| 久热这里只有国产| 日韩在线99| 亚洲九九在线| 涩 五月 婷婷 狠狠| 婷婷五月av| 天天综合网~91| 久久久这里都是精品| 超黄亚洲瑟瑟网站| 五月色无码| 人妻久久做| 成人看片网站| 五月成人天| 成人片黄网站色大片免费毛片| 91啪啪| 天天狠天天叉| 丁香五月六月欧美| 99ri久久| www.99色| 99爱视频| 丁香五月婷婷呀| 精品成人在线| 国产精品成人在线| 99视频内射三四| 五月丁香花婷婷玉莉AV| 激情九月婷婷| 久久色吧| 双性美人被调教到喷水A片| 新伍月婷婷| 丁香五月婷婷六月婷婷| 91人人操人人看| 五月天大香蕉| 精品久久人妻| 这里只有精品视频在线看| 婷婷五月中文字幕| 中文AV网站| 五月综合久久| AV操逼网| 日韩AAAAAAAAAAA片| 伊人久久大香网| 少妇高潮呻吟A片免费看软件| 操操操AV| 人人干AV| 69午夜成人影片| 色色色色色色色色色色色色色五月天 | 六月激情婷婷| 五月天婷婷基地| 日韩 欧美 国产 一区 二区| 亚洲小电影在线观看黄999| 丁香五月天激情综合| 丁香五月婷婷成人网| 久久刺激网| 97色五月婷婷在线| 大香婷婷| 亚洲精品影视| 人人操日| 激情五月丁香在线观看直播| 婷婷六月丁香久| www,8050,午夜三级| 91免费啪视频| 激情五月成年| 婷婷99视频在线| 丁香综合日产精品久久| 草草影院爱爱| 就要爱综合| 丁香五月激情综合| 天天草天天日| 99久在线| 26uuu成人网| 五月天天久久香| 婷婷激情五月天亚洲综合| 青青草婷婷综合五月| 色情免费视频播放| 99在线观看精品| 五月婷婷激情四月| 日日日天天干| 天天插天天插天天插天天插| 亚洲区在线| 亚洲AV成人无码精品| 激情五月瑟瑟| 色六月天天激情综合网| 色欲一二三| 丁香 婷婷 亚洲 熟女| 五月丁香亚洲婷婷| 99热激情| 婷婷色五月综合| 亚洲综合色成丁香五月色| 婷婷九月色| 专区无日本视频高清8| 丁香五月天堂| 97操男人的天堂| 色婷婷88| 思思热国产在线| 激情五月少妇| 99这里都是精品| 久久久久久久久月丁| 婷婷丁香五月天亚洲| 99热这里只有精品26| 婷婷免费成人视频| 99热无码| 色婷天天| 97人人操com| www.91.com黄| 热久久66| 久热久| 色99网| 99色热综合| 日本色99| 深爱综合网| 日本在线视频播放91| 激情99| 能看的av| 六月丁香婷| 久久 视频这里只有精总| 97人人操人人| 婷婷综合一二三| 初夜av| 成人国产综合| 国产精品日本一区二区在线播放| 婷婷久久五月| 色婷婷综合久久久久| 丰满少妇乱A片无码| 欧美色色色色色| 色狠狠色噜噜噜a天堂一区| 国产成人网站在线观看| yazhoujiqingav| 99久久99久久综合| 色综合久久88色综合天天99| 99色在线观看视频者| 成人午夜无码视频| 九九黄色网| 天天综合色丁香| 婷婷国产日本欧美| 日韩精品999| 精品热青草| 天天天操天天天爰| 久草天堂| aⅤ79成人片| 狠狠干五月天| 亚洲无码11| 激情综合4月| 婷婷日日夜夜| 国产亚洲成人综合| 天天日夜夜草进麻麻的子宫| 婷婷久久大香蕉| 99天堂网最新| 天天做天天摸| 久久99久久久| 五月天另类小说| 亚洲人妻av伦理| 色色日本欧美| 九九色图| 包操45分钟网站| 热九九精品| 五夜丁香| 六月丁香综合| 五月丁香婷婷网网网网| ..真实国产乱子伦对白在线_欧| 五月婷婷激情综合| 国产精品涩涩涩视频网站| 综激情网| 久久伊人大香蕉| 影音先锋色色色资源色资源色| 日韩性视频| 操逼三区| 狠狠色大香蕉| 99色日本| 99re久久| 婷婷深爱五月丁香| 91九色国产| 天天摸天天做天天爱天天爽| 操碰99| 色情五月丁香| 天天 青草 丝袜制服 在线| 国产精品第一国产精品| 开心五月丁香综合久久| 开心五月婷婷伊人| 99色免费视频| 五月婷婷丁香六月| 欧美婷婷五月| 久热中文字幕| 一级黄在线| 久久久久久久久久8888| 性按摩玩人妻HD中文字幕| 伊人五月天婷婷| 亚洲婷婷综合视频| 国产激情视频在线观看| 狠狠va| 麻豆AV一区二区三区| 99成人无码| 丁香六月欧美| 久久久久久久人妻| 伊人网色婷婷五月天| WWW色色色COM| www.五月婷婷.com| 国产精品色一哟哟| 激情综合网丁香| 丁香婷婷狠狠97| 六月天婷婷| 97久久视频| 99re欧美精品| 亚洲综合色婷婷| 丁香网五月网| 激情小说五月天社区丁香| 亚洲国产精品VA在线看黑人| 超碰免费成人| 婷婷开心激情| 天堂AV在线看| 凹凸探花电影| 色啪网| 99丁香五月| 在线中文av| 91综合国免费久入| 丁香五月成人丝袜| 色婷婷综合网| 狠狠干综合网| 久久久久丁香婷婷五月天| 婷婷五月精品中文| 涩涩涩五月天| 久久看婷婷| 婷婷一本和五月丁香| 婷婷色六月| 丁香六月婷婷久久综合| 久久婷五月天| www.99热视频| www.日韩国产| 色五月播五月| 五月丁香六月婷婷在线| 天天色天天色天天色天天色天天色| 超碰精品在线| 久久久ww| 综合久久97| www.一区二区三区| 玖玖爱伊人网| 五月伊人91| 国产激情视频在线观看| 五月天激情综合| 久9视频免费播放| 久久性刺激| 97干在线视频精品店| 亚洲色五月婷婷| 99热这里只有精品21| 丁香五月在线自慰| 99久在线视频| 久99| 都市激情五月婷婷综合| 狠狠操天天日| 丁香六月婷婷综合在线| 五月婷婷丁香在线| 精品综合久久久久久五月天| 亚洲乱码在线观看| 九九aV| 日本婷久久| 婷婷久久图片| 热久国产| 丁香五月综合激情久久潮喷| 欧美综合婷婷网| 婷婷综合成人五月天| 五月婷婷色播网| 日韩抽插操逼| 第一区久久网站| 激情婷婷五月黑人| 五月激情六月综合| 激情综合九月| 天天操夜夜操| 婷婷五月综合社区在线| 久久久久99精品成人网站| 婷婷性爱视频在线| 丁香色婷婷| AV电影在线播放| 97人人干| 亚洲 小说 欧美 激情 另类| 久久久婷丁香五月| 终合激情网| 五月婷在线观看| 中文成人在线| 开心五月婷婷激情| 97操资源婷婷| AV成人在线播放| 色噜噜狠狠色综合成人99| 亚洲综合草草| 日本成人噜噜噜噜噜| 思思热久久婷婷五月天| 粉嫩av懂色av蜜臀av熟妇| 精品色色| 91高潮喷水久久久久久久久| 99久久婷| 五月丁香婷婷开心| 狠狠插狠狠操| 亚洲国产黄色电影| 99久久久久久久| 日本久久视频| 五月丁香婷在线| 人人视频人人干人人做| 99热18| 爱iii做iiii日| 超碰无码318604| 色婷婷丁香五月| 狠狠久久婷五月综合色| 狠狠色五月| 激情五月天网站| 99久| 五月天天丁香婷婷在线中| 性色99| 久艹大香蕉| 激情小说五月天| 中文字幕精品推荐免费在线观| 国产五月天婷婷| wwccc久久久| 99综合色| 日日影院 | 狠狠情色| 这里只有精彩亚洲视频推荐| 超碰免费人人| 毛片新网地| 丁香五月综合图片在线观看| 五月丁香久久综合| 婷婷99丁香| 激情五月综合视频| 亚洲天堂啪啪| 丁香av网| 狠狠色丁香99| 亚洲色五月婷婷| av一区二区电影免费在线观看| 色综合婷婷| 五月久久丁香| 专区无日本视频高清8| 3p久久| 久久奄也去色色网站| AV在线免费网站| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 亚洲av电影在线| 99精品国产在热久久| 十月丁香九月婷婷综合| 9热在线视频精品| 色婷婷色综合| www.色五月| 禁欲电影完整版在线播放| 26uuu| 狠狠操狠狠| 少妇做爰免费视看片| 99热色在线精品| 五月天成人网在线观看| 大香蕉人妻| 热99re| 色欲九区| 丁香午月AV中文字幕| 五月天婷婷在线播放免费| 国产日批视频| 久久偷拍综合五月天| 色九九一二| 少妇性按摩无码中文A片| 丁香五月最新地址| 伊人色综合网| 激情婷婷五月天| 久久五月激情综合| 538任你爽| 五月天婷婷涩涩| 9999热这里只有精品| 欧美色婷婷| 色婷婷五月影视| 婷婷免费视频| www.狠狠操.com| 91色久| 精品久热| 欧洲第一无人区观看| 高潮毛片遮挡费高一百度| 精品久久99码| 五月婷婷五月天激情视频| 99色色视频| 丁香五月性爱| 97精品人人A片免费看| 激情综合激情五月| 色444综合网| 五月丁香色六月激情干大屄| 五月丁香亭亭操逼| 国产毛片精品一区二区色欲黄A片| www狠狠| 99综合视频一体| 九九av| 五月综合激情| 五月婷婷网五月在线| 婷婷五月综合免费在线| 99久在线观看| 婷婷综合成人五月天| www...com黄在线观看| 久久九九蜜| 日本一区二区三区精品视频| 色色激情五月| 亚洲五月丁| 欧美三级视频| 99ri精品视频在线观看| 婷婷综合五月天激情| 亚洲天堂婷婷丁香| 狠狠操狠狠| AAA久久| a网站免费观看| 五月天婷婷丁香视频| av五月丁香| 婷婷射丁香| 亚洲第一色色色| 91啦丨九色丨刺激中文| 五月丁香六月婷婷,婷| 国产亚洲精品久久久久久郑州 | 99热综合色图| 国产成人精品一区二三区熟女在线| 无码人妻一区二区三区免费九色| 9l视频自拍9l视频自拍九色学生| 国产精品日本一区二区在线播放 | 六月狠狠综合| 久热只有这里有精品| 久久九九激情五月天 | 欧美搡BBBBB摔BBBBB| 午夜大香蕉| 日逼影音先锋男人AV资源站| 97在线精品视频| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | Www.久久| 国外亚洲成AV人片在线观看| 人妻av在线| 99成人无码| 亚洲啪啪啪啪| 2013AV天堂| 午夜色婷婷| 五月丁香六月欧美综合网站| 开心五月婷婷激情网| 婷婷五月天久久| a级毛片一区二区免费视频| 久激情网| 超碰猛烈的性猛交| 丁香五月婷婷色偷偷| 婷婷五月天堂网| 97伊人综合婷婷| 久久精品国产精品| www.久久| 色丁香五月婷婷| 五月丁香六月婷婷成人电影| 五月播播| 五月丁香操亭亭网| 这里只有精彩视| 亚洲色婷婷99一9|| 五月香蕉综合| 日韩狠狠色婷婷| 色综合区| 五月综合激情| 日韩色久| 99免费热视频在线| 久超超碰| 国产五月天婷婷| 91久草五月天婷婷| 中文字幕婷婷在线| 黄色99热| 免费AV在线网址| 九九爱精品网站| 国产乱人偷精品人妻A片| 久久婷色| 综合网天天| 免费婷婷| 天天日天天爽夜夜爽| 99色综合网| 香焦网五月天| 黄网免费观看| 久久这里有精品| 99久久9| 亚洲精品成人| 99热自拍| 国产,欧美,学生妹,视频| 婷婷五月天激情小说| 色婷婷色99国产综合精品| 激情九月婷婷| 99久久九九| 蜜桃人妻无码AV天堂三区| 中文字幕成人| 中文字幕在线视频播放| 色九九丁香九月色九九色| 毛v一区二区视频| 91天堂网综合| 操97| 丁香五月婷婷六月婷| 激情综合网,五月| 色婷五月天网站| 婷婷五月激情在线| 色色色网站| 五月天婷婷基地| 99在线观看精品| 亚洲欧美成人在线| 99噜噜噜在线播放| 99啪视频在线观看| 爱操人妻| 五月丁香六月合| 国产色五月| 成年人最刺激的综合网| 久久五月视频| 97超喷视频在线观看| 香蕉乱插| 丁香五月天人体| 五月婷婷开心亚州在线| 婷婷丁香花五月天| 日韩成人无码| av无码电影| 99热这里只有精品26| 很操日本7| 日韩五月丁香| 色噜噜狠狠色综无码久久合欧美| 啪啪啪丁香五月| 激情图片婷婷| 天天日天天操天天干| 五月色婷婷综合| 很很干天天干| 影音先锋91男人资源在线播放| 六月丁香av| 婷婷五月天天| 操操人人| 激情五月婷婷色综合| 五月婷婷AV| 婷婷开心激情综合五月天| 午夜丁香综合婷婷| 天天揷综合网| 色 免费网站视频| 五月丁香无码视频| 99热热九九| www.狠狠艹| 99这里只有精品|v| 五月天激情啪啪| 深爱开心激情网| 伊人玖玖网| 99视频这里有精品| 婷婷香香五月| 五月天激情小说| 人妻丰满精品一区二区A片| 激情无码网| 开心五月色婷| 9久精品| g00d人体西西| 久久久精品人妻录| 日韩性爱AV| www色色com| 丁香六月激情| 婷婷六月久久| 色六月视频| 天天爱天天操| 亚洲性受XXXX五月丁香| 久久婷婷网站| 婷婷六月综合基地| 丁香五月天啪啪a日本| 成人精品视频99在线观看免费| 天天操中文字幕| 婷婷五月天电影区小说区| 久久er99热精品一区二区| 久久婷五月婷| 99热碰碰热| 久九九热| 丁香五月在线播放| 婷婷五月天丁香激情| 欧美婷| 俺也去色| 综合逼五月激情婷婷| 婷婷五月天视频| 99久.| 六月丁香婷婷综合狠狠爱夜夜爱| 性爱激情小说AV五月丁香花| 天天爽,夜夜爽| 91操女| 五月天久久成人| EEUSS鲁片一区二区三区| 玖玖视频福利| 99久久99九九99九九九| 最新热中文字幕| 婷婷久久综合| 丝雨一区二区| 久久视频这里99| 久久R激情| 丁香五月婷婷激情视频播放| 欧美五月停| 99热这里只有精品69| 天海翼中文字幕高| 无码色色| 97五月天婷婷综合激情网| 婷婷五月综合啪| 亚洲色婷婷五月天| 五月香婷婷| 婷婷六月激情小说网| 激情小说婷婷| 青青草六月丁香| 黄色高清无码| 99热免费| 久久久人妻人伦| 天天日夜夜爽| 五月天婷婷丁香花| 九 九九九AV| 久久免片| 色婷婷香蕉| 久久六月综合| 激情伊人五月婷婷久久| www.99热精品99.com| 激情 婷婷| 亚洲成人一区| 狠狠精品干练久久久无码中文字幕| 丁香五月综合在线| 丁香五月最新网址| 夜夜 操无码| 玖玖在线资源视频| 狠狠综合久久综合| 在线播放成人网站| 五月婷婷干| 激情婷婷黄色五月| 婷婷午夜天| 丁香婷婷六月天| 丁香青青五月天| 91人人操人人| 天天成人综合视频| Www99热| 亚洲综合九九| 亚洲成人人人操| 激情综合区| 成人美女网| 中文久久婷婷| 色噜噜在线| 毛片新网地| 北京熟妇搡BBBB搡BBBB| 色婷婷社区| 六月婷色| 麻豆AV一区二区三区| 欧美这里只有精品| 丁香五月婷婷呀| 久9免费视频| 一本大道嫩草AV无码专区| 久热视频这里只有精品| 日韩成人精品中文字幕| 壅壅儕家a| 五月丁香啪啪啪| 另类激情五月天| 久婷婷| 无码91中文字幕| 色五月琪琪| 丁香五月第四色88| 激情综合综合综合| 大香蕉中文| 九九中文色色| 亚洲99在线| 激情五月网站| 五月天综合网| 9久久婷婷国产综合精品性色| 黄网在线免费| 99这里只有精品| 九月色婷婷综合| 国产第99页| 午夜天堂一区人妻| 99热这里只有精品99| 久超超碰| 色五月婷婷基地| wwwxxx五月婷婷小说| 97操操| 欧美大道不卡| 99热热热国产超碰| 91精品综合久久久久久五月天| 成熟妇人A片免费看网站| 99热这里只有精品22| 七七色色综合| 丁香久久久| 丁香六月婷婷综合缴| 天天爽综合网| 五月丁香六月婷婷综合| 色婷婷裸体色性在线| 狠狠色噜噜狠狠狠888了| www。狠狠干。com| 色5在线| 久久丁香五月综合六月激情红杏视频 | 天天婷婷| 九九综合| 黄色三级日本| 色婷婷亚洲精品天天综| 99视频只有精品| 五月天色丁香| 无码99| 91狠狠色丁香婷婷综合久久精品| 五月婷婷影院| 女人高潮内射99精品| 性一交一乱一交A片久| www.99色| 5月丁香美女影院| www久久久久久久久久久久久久久久久| 激情人妻蜜夜系列区| www.91av.com| 色婷婷五月综合色婷婷| 五月丁香综合成人社区| 激情综合网址| 爱之国产色情综合| 艾小青av| 天天色天天| 五月婷婷深深爱| 日韩九九| 国产乱妇乱子在线播视频播放网站| 欧美性猛交XXXX乱大交极品| 激情五月天.色网| 无码色综合| 九九碰九九爱97超| 婷婷五月免费观看| 丁香五月激情啪啪| 午夜免费试看| 香蕉AV777XXX色综合一区| 亚洲丁香婷婷| 丁香五月中文字幕| 啄木鸟黑丝一区二区| 中文不卡一二区| 激情综合五月开心狠狠| 亚洲综合在线视频| 天天色天天操天天射| 色综合色色色色色色综合| 综合色影| 激情婷婷五月天网址| 天天谢天天操| 成人丁香五月天| 久久久久久久久月丁| 精品网站:999WWW| 狠狠干天天内射| 五月婷婷在线综合| 亚洲中文乱字字幕在线永久| www.婷婷久久五月天| 婷婷五月天奸女| 玖玖精品资源| 日韩久热| 久久99激情五月天| 丁香五月婷婷六月婷婷| 五月婷婷婷婷网| 色五月激情| 天堂网亚洲色图| 就要爱综合| 思思热99热| 国产毛片欧美毛片久久久| 婷婷五月无码| 婷婷中文字幕版| 97在线碰| 国产婷婷五月| 日韩六十路91性交电影| 婷婷天堂综合| 婷婷色一二三区波多野结衣| 五月婷婷色男女| 久久看婷婷| 亚洲天堂色| 人妻操逼| 91欧美| 成人在线高清| 凹凸操Av| 成人中文网| 色一区高清| 夜夜久久综合网| 色综合激情图区| 人妻狠狠操| 色综合九九色综合88| 伊人狼人干| 热99视频精品| 九九在线精品| 日韩综合网络男女香蕉a片| 夜夜夜夜夜操| 九九精品9| 久久狠色噜噜狠狠狠狠97| 丁香婷婷基地| 亚洲婷婷基地| 人人操AV| 99久久精彩视频| 天堂草在线看www| 九九亚洲天堂| 99在线看片| 欧美日韩成人在线| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 七七色色综合| 色五月天成人| 亚洲AV永久无码影院黑人| 五月婷婷乱| 欧洲电影在线观看免费版英语版| 激情q青青草在线婷婷| 婷婷深爱五月| 99色在线观看免费| 久99久视频| 色天天综合天天综合频道。| 夜夜躁爽日日| 丁香婷婷六月婷婷六月婷婷六月婷婷| 五月婷色| 国产乱码久久| 丁香五月偷拍| 色噜噜狠狠色综合日日免费| 亚洲爆乳无码精品AAA片蜜桃| 99热这里只有精品268| 婷婷色导航| 五月婷婷色色| 五月婷婷综合激情| 色亚洲色宗合| 欧美三级视频| 亚洲激情网| 日本成人综合| 久久激情网| 丁香婷婷激情综合五月激情| 亚洲激情av| 丁香婷婷免费| 婷婷六月激情综合| 久色欧美| 五月天婷婷操逼视频| 大香网伊人久久综合| 激情小说五月天社区丁香| 五月婷婷无码| 五月天激情社区| 中文网婷婷字幕婷| 九九综合伊人| A一级操| 五月激情综合网婷婷| 色色亚洲五月天| av国产精品偷| 丁香六月婷| 99九九热视频| 蜜桃人妻无码AV天堂三区| 天天日日夜夜| 日韩黄黄| 色婷婷五月天天天干天天操天天爽| 99综合网| 五月天夜夜爱夜夜操| 亚洲V国产V欧美V久久久久久| 久久XX| 色欧美日| 久久婷婷五月丁香网| 5月婷婷激情在线| 六月丁香激情| 久青草影院| 超碰AV在线| 五月婷婷婷婷| 色人久夂| 在线中文AV| 色激情综合狠狠婷婷| 婷婷五月天美女视频| 国产女人十八水真多1| 九九色色| 激情内射p| 色色热| 日韩有码一区| 大香蕉99热| 色亭亭五月天网扯| 日韩精品电影| a在线观看| 五月婷婷网站| 丁香五月亚洲AV| 六月五月天婷婷涩播在线| 噜噜狠狠色| 天天草天天爱| 色欲五月婷婷| 亚洲狠9| 成人视频一区| 狠狠色综合五月| 91九色网| 色噜久| 日韩AV免费电影在线播放| 91色涩| 婷婷五月天成人综合网| 99精品视频在线观看免费| 大香蕉久久久久久久久| 综合激情五月丁香| 曰曰久久| 99久久玖玖| 婷婷国产日本欧美| 色婷婷综合久久久久| 操逼亚洲天堂| 五月丁香六月激情综合| 五月婷婷人人人操| 色婷婷亚洲精品天天综| 色五月婷婷大| 婷婷五月丁香基地在线视频官网| 人妻中文字幕网| 国内一级片| 亚洲激情av| 国产亚洲在线| 五月香婷婷| 五月开心深爱激情网| 深爱激情小说五月婷婷| 久久这里精彩免费在线观看| 91精产一区三区免费观看| 久热A片| 丰满少妇乱A片无码| 26uuu日韩| 久久色情| 欧洲不卡视频| www.久久爱.com| 天天插天天射| 99re热视频这里只精品5| 婷婷五月天人妻| 天天综合天天做天天综合| 国在线激情网| 色色色色色热| 99免费综合网| 九九视频网| 丁香五月1页| 久99| 九九视频免费| 人人草公开操| www.99热| 中文网AV| 99在线观看精彩视频| 久久99热只有精品| 【乱子伦】黄色| 天天做综合| 色色色在线播放| 电影蜘蛛女| 六月综和久久| 亚洲综合视频一下| 日韩色情亚洲五月天婷婷| 韩国久久少妇视屏| 99在线精品在线视频| 成人五月天视频| 美国十月色婷婷在线观看| 国产精品色色| 国产激情AV| 人人摸人人搞| 五月婷婷六月丁香| 超碰免费成人网站| 五月天啪啪网| 秋霞AV美国| 久久婷婷综合网| 成人色五月天婷婷| 深爱开心五月天| 五月丁香花激情综合网| 亚洲a色| av在线中文| 无码色色色| 亚洲乱码日产精品BD| 久久婷婷五月综合网| 在线看黄色| 久激情网| 六月婷婷日| 亚洲欧美一区二区三区爱爱动图| 丁香五月综合| 色婷婷小说| 91|疯狂丨高潮丨对白| 六月婷婷日| 91欧美日韩综合| 婷婷五月天六月综合| 色吧五月婷婷| 色婷婷小说| 五月停性愛| 97色啪| 婷婷四月 成人 狠狠干| 深爱激情网综合| 丁香五月天黄色片| 双性美人被调教到喷水A片| 大鸡巴伊人网| 久久激情五月| 伍月婷婷六月丁香| 五月丁香啪啪激情| 牛牛澡牛牛爽| 丁香六月啪啪啪| 久久这里只有精品无码| 丁香婷婷色色| 又大又粗九一在线| AV在线大香蕉| 五月天电影网| 亚洲九九夜夜| 亚洲色区17| 99热无码精品| 婷婷五月天AV| AA片在线观看视频在线播放| 久久激情五月网| 五月婷婷在线网站| 精品成人在线观看| 五月天sesese| 丁香五月婷婷深爱综合激情| 五月婷婷二月丁香| 97色色婷婷| 天堂五月婷婷| 思思w99| 99热免| 超91在线视频| 天天干夜夜b| 色色色成人网| 免费人人操| 婷婷日日天天| 婷婷伊人网| 超碰在线9| 五月综合色播播丁香婷婷| 亚洲综合另类| 欧美日韩成人免费在线| 99热在线成人网站| 伊人在线视频| 人人色婷婷五月天| 激情六月婷婷| www.激情五月天.con| 丁香五月天婷婷中文| www久| 人人操女人| 开心五月色婷婷综合开心网| 超碰久热| 九九黄色网| 婷婷少妇激情| 丁香激情五月天| 婷婷五月天亚洲综合网| 99精品久久| 99色综合| 五月婷婷黄色| 97碰人人操| 深爱激情综合网| 国产在线网址1| 精品无码人妻一区| 超碰在线91| 久久久久久久综合狠狠综合| 亚洲精品影视| 欧美啪啪9| 人妻久久久| 99免费青青蜜臀| 天天日天天爱天天噪| 中文字幕婷婷9月天| 久色姿源| 天堂成人A片永久免费网站| 五月婷婷综合激情| 人妻久久久久久| 99熟女| 91久操| 综合天天综合| 婷婷色中文字幕| 蜜臀av无码久久久久久久久| 天天做天天爽| 五月婷婷在线视频免费观看| 丁香婷婷色五月激情综合| 色久播播| 欧美韩国日本| 丁香五月综合图片在线观看| 成人精品视频99在线观看免费| A√天堂网在线| 国产毛片欧美毛片久久久| 婷婷六月爽| 九七色色六月丁香| 婷婷五月花西瓜| 久久精品日| 五月天开心网| 丁香五月婷婷啪| 婷香五月激情视频| 婷婷五月深深的爱| 亚洲av另类在线观看| 久久视频在线| 婷婷久久18| 欧美人人操| 亚洲精品网站色视频| 99久久国产宗和精品1上映| av在线色五月丁香婷区久| 99操网站| 九九热精品99| 99热最新地址在线| 国产熟妇乱子伦hd| 五月婷婷色五月| 国产操B视频| 九九热免费视频| 婷婷开心青青草| 婷婷六月久久| 亚洲成人免费在线| 天干干夜夜操| 97性高潮久久久| 久久久久9| 激情小说五月天中文字幕| 超碰自拍天堂| 九九久久五月天| 五月丁香六月婷婷综合免| 丁香av网| www激情| 亚洲日韩26uuu| 97超级碰碰碰| 九九伊人网| 91人人爽久久涩噜噜噜| 丁香六月啪| 色六月 婷婷| 任你搞网站| 亚洲综合丁香婷婷六月天| 99热精品网| 婷婷五月花| 久久人人妻| 欧美日韩大黄| 在线看黄色| 青草青草视频2免费观看| 久久a热| 开心深爱五月天| 久久久五月天网站| 色婷婷99| 色色99| 日日色五月天| 超碰在线超碰| 国产av一区二区三区| 五月婷婷偷拍| A网在线欧洲| 免费九九热| 亚洲色五月婷婷| 欧美性生交XXXXX无码小说| 色日本综合| 婷婷六月天激情影院| 六月婷婷激情| 亚洲激情| 人妻熟女一区二区AV| AA久久| 色丁香婷婷| 玖玖色资源站| www色五月| 精品视频网| 少妇真实被内射视频三四区| 碰超99| 综合色五月| 激情图片婷婷| 丁香五月久久| 婷婷五月中文字幕| yw国产AV| 日本精品久久久久中文字幕| 99熟女| 狠狠色噜噜狠狠| 九九视频这里只有精彩| 色 丁香婷婷| 五月婷婷在线视频免费观看| 99九九99九九九视频精彩| 丁香97综合| www天堂99| 欧美成人精品A片免费一区99| 97碰碰人人| 人人摸人人| 99热这里只有免费精品| 色情激情五月| 欧美日韩AAAAA| 99热99在线| 日韩人妻无码精品| 99噜噜噜| 大香蕉啪啪啪啪啪啪| ai97re99一本| 青青久久五月| 无码成人播放器| 亚洲精品又粗又大又爽A片| 九九热99热| 91精品久久久久| 狠狠丁香| 久热大香蕉| 91ncom.色| 97狠狠色| 五月丁香成人| 五月丁香 啪啪| 欧美日本黄色| 久热AA| 亚洲第一成人无码A片| 色五月婷婷91| 成人综合AV| 色色色色五月天| 91九色精品熟女内射| 丁香六月激情综合| 色色色色综合| 五月激情视频| 超碰v| 人人爽网| 亚洲丁香婷婷| 婷婷五月a| 思思99久久| 丁香五月天堂| 2014天天爽| 六月伊人婷婷| 丁香五月六月激情| 天天插天天插天天插天天插| 六月丁香五月天| 久色激情| 婷婷中文在线| 丁香激情网| 婷婷5月久久综合网站| 九色激情| 国产综合婷婷| 99久热在线精品| 色综合色综合色综合高潮| 五月丁香六月婷婷综合伊人| 久久久久久五月天| 五月天淫乱视频| 久久婷婷影院| 亚洲乱码日产精品BD| 激情婷婷五月在线合集| 99色| 影音先锋按摩| 人人色AV| 五月婷婷天天| 久机视频这只有精品| 五月丁香六月激情综合| 亚洲丁香婷婷| 91九色国产在线| 99久久丝| 婷婷激情五月天视频在线| 久久综合影院 | 爱射综合| 久久久久9久无码视频| 99在线热视频| 五月天婷婷色五月天| 麻豆五月丁香婷婷| 色五月婷婷网| 成人视频网| 亚洲AV电影美洲AV电影| 婷婷五月天成人| 五月WWW| 丁香婷婷五月色成人网站| 婷婷成人五月天| 热996精品在线观看| 五月丁香六月综合情在线观看| Va另类视频| 久久综合影院| 99热这里有精品| 国产免费av在线| 色播五月丁香婷婷| 五月婷婷视频| 99人妻碰碰久久久禁片| 国产性爱一级| 五月丁香综合啪啪対白| 99热99美国在线观看| 日本欧美成人片AAAA| 亚洲小电影在线观看黄999| 国产精品色色色色| 伊人久久大香网| 日本色超碰| 丁香婷婷激情五月色| 亚洲旡码| 五月丁香A片| 99热这只有| 日本色99| 免费色婷婷| 立川无码av| 日韩综合天堂| 日本丰满久久| 99热99热在线观看| 色五月激情| 丁香五月天亚洲综合| 日本人妻丁香婷婷久久寝取熟女五月| 色色五月婷婷久久| 1024在线视频| 色综合久久伊伊婷婷五月| 久久三级视频| 超碰高清在线| 亚洲AV色婷婷人禽五月天| 99国产精品久久久久久久久久久| 天天肏在线观看| 91婷婷五月天嫩女| 亚洲婷婷性爱| 《战争与艾拉》完整版| 99九九在线| 五月丁香综合影院| 天天天天色天天天天天干| 五月婷婷之综合激情在线| 五月丁香综合久久夜夜| 六月激情婷婷综合| 亚州操人在线视频| www.日本91| 久久偷拍综合五月天| 激情五月黄色| 丁香婷五月天| 欧美精品99久久久| 激情小说五月天| 无码人妻电影| 激情综合99| 26uuu国产| 成人AV综合在线| cc精品国产性传播| 97人人操人人插| 99福利视频| 桃色五月婷婷| 精品人妻久久久久久久| 人妻丰满精品一区二区A片| 六月丁香五月激情亚洲AV| 九九热精品视频| 五月6香色婷婷视频| 国产性爱亚洲是图| 婷婷色亚洲| 色色色无码| 丁香五月 综合| 免费看欧美成人A片无码| 六月婷婷狠狠色在线观看| 日日操夜夜擼|