国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

STM32H7 SPI從機DMA輸出0xFF?從物理層到寄存器逐層排查

STM32H7 SPI從機DMA輸出0xFF?從物理層到寄存器逐層排查 1. 初遇問題從機發(fā)給主機的數(shù)據(jù)全是 0xFF先說結(jié)論SPI 從機 DMA 模式下連續(xù)輸出 0xFF本質(zhì)上就是“從機根本沒把有效數(shù)據(jù)放到 MISO 線上”。這個問題不是 STM32H7 獨有的F1、F4、G4 系列也會遇到但在 H7 上更容易踩坑原因是 H7 的 SPI 和 DMA 架構(gòu)跟老一代芯片相比做了不少改動網(wǎng)上的老經(jīng)驗很多不能直接套用。我調(diào)試這塊板子時用的是 STM32CubeMX 生成工程SPI 從機配置為主機讀取外部傳感器數(shù)據(jù)的應(yīng)答端。主機 SPI 時鐘 4MHzCPOL Low、CPHA 1Edge數(shù)據(jù)幀 8bitMSB First。從機端開了 DMA 發(fā)送DMA 通道配置為內(nèi)存到外設(shè)方向數(shù)據(jù)長度 256 字節(jié)。結(jié)果一跑起來主機通過 SPI 讀回來的數(shù)據(jù)流是FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ...一眼望過去全是 0xFF而且是穩(wěn)定、連續(xù)、一個有效字節(jié)都沒有的 0xFF。這跟我預(yù)期的“偶發(fā)錯誤”完全不一樣——偶發(fā)錯誤一般會夾雜幾個正確字節(jié)而全 FF 是另一種信號從機根本沒在總線上驅(qū)動數(shù)據(jù)。為什么這么說因為 SPI 總線在沒有設(shè)備驅(qū)動 MISO 的時候線路默認電平取決于外部上拉/下拉電阻。多數(shù)板子的 MISO 線在空閑時是弱上拉主機讀到的就是高電平也就是 0xFF。換句話說MISO 一直是被動的“空”狀態(tài)而不是從機在主動發(fā)送有效數(shù)據(jù)。這個現(xiàn)象特別迷惑人的地方在于你明明配置了 DMA明明調(diào)用了HAL_SPI_Transmit_DMA()函數(shù)返回也是HAL_OK甚至HAL_SPI_TxCpltCallback都在跑——但總線上的數(shù)據(jù)依然全是 FF。這說明問題不在“DMA 有沒有搬數(shù)據(jù)”而在于SPI 外設(shè)的發(fā)送通道根本沒有把數(shù)據(jù)送到 MISO 上去。這一條思路如果能在一開始就建立起來排查方向就不會跑偏。下文按“先從物理層和配置層確認再深入?yún)f(xié)議層和 DMA 架構(gòu)最后結(jié)合軟件棧逐層排雷”的順序把這幾天踩過的坑和解決辦法完整梳理一遍。文章涉及的代碼均在 STM32CubeIDE 1.13 以上版本 STM32CubeH7 1.11 環(huán)境中驗證過SPI 時鐘最高測到 8MHzDMA 數(shù)據(jù)長度從 16 字節(jié)到 1K 字節(jié)都能穩(wěn)定工作。2. 先搞清楚 0xFF 是誰產(chǎn)生的物理層判斷與定位2.1 SPI 空閑電平和 MISO 的“懸空”狀態(tài)SPI 從機不驅(qū)動總線時MISO 引腳通常處于高阻態(tài)Hi-Z。主機側(cè)如果不帶下拉電阻讀到的電平就是不確定的。實際開發(fā)板上MISO 往往被主機內(nèi)部上拉或者板載電阻拉到了高電平于是讀到的字節(jié)就是 0xFF。這個推論可以用一個最簡單的實驗驗證把從機程序停掉或者干脆不初始化 SPI 外設(shè)主機依然能讀回 0xFF。如果停掉從機后主機讀到的還是 FF那就證明 0xFF 并非從機主動產(chǎn)生而是總線空閑電平被讀了出來。所以這里有一個很重要的調(diào)試習(xí)慣看到滿屏 0xFF先別急著查代碼邏輯先用“有沒有可能從機壓根沒驅(qū)動 MISO”這個角度去思考。我見過不少同事折騰 DMA 半天最后發(fā)現(xiàn)是 SPI 外設(shè)的 TXE 標志位就沒置位過數(shù)據(jù)根本沒往移位寄存器里送。2.2 如何用示波器確認從機到底有沒有動作排查這類問題強烈建議把示波器探針夾到從機的 MISO 引腳比如 Nucleo-H753ZI 板子的 PA6具體看你自己用什么引腳。觀察點在主機發(fā)起 SPI 傳輸時MISO 上有沒有電平翻轉(zhuǎn)動作。判斷邏輯很簡單觀察到的現(xiàn)象說明什么問題MISO 持續(xù)為高/低完全不翻轉(zhuǎn)SPI 外設(shè)或 DMA 完全沒有發(fā)送動作MISO 在時鐘啟動后有電平翻轉(zhuǎn)但數(shù)據(jù)符號不對數(shù)據(jù)是發(fā)出去了但字節(jié)內(nèi)容有誤MISO 只有 CS 拉低瞬間有電平變化SCK 來了之后沒變化從機沒有被正確選通或者 CS 檢測邏輯有問題MISO 翻轉(zhuǎn)頻率和 SCK 完全對應(yīng)但主機讀的還是 FF波形可能是對的主機側(cè)采樣參數(shù)不匹配如果示波器顯示 MISO 完全沒有翻轉(zhuǎn)那就說明問題出在從機側(cè)的發(fā)送鏈路里跟主機側(cè)怎么配置沒關(guān)系。這時候可以縮小范圍把“SPI - DMA - 內(nèi)存”這條鏈路的每個環(huán)節(jié)單獨拉出來測。2.3 最簡單的“寫寄存器”測試法在深入 DMA 之前建議先做一個最粗暴的試驗不走 DMA直接在 SPI 發(fā)送中斷或者輪詢模式下向 SPI 的發(fā)送數(shù)據(jù)寄存器寫幾個固定字節(jié)。如果這時 MISO 上能出來數(shù)據(jù)說明 SPI 外設(shè)本身沒問題如果還是不輸出那就是 SPI 配置的問題。這個測試在 H7 上特別有效因為 H7 的 SPI 用了新的寄存器組和 F1/F4 系列差異很大不能盲目參考老代碼。我當(dāng)時的做法是在main()里初始化完 SPI 外設(shè)后把 DMA 相關(guān)代碼全部注釋掉直接調(diào)用一次HAL_SPI_Transmit(hspi1, testData, 8, 1000)。注意這個函數(shù)在從機模式下是“阻塞等待主機時鐘”的主機不發(fā)時鐘函數(shù)就一直卡在那里。如果你在調(diào)試器里看到程序停在函數(shù)內(nèi)部而主機那邊確實沒有發(fā)起讀操作那其實是正?,F(xiàn)象不是死機。當(dāng)主機發(fā)起一次讀時序后如果 MISO 上能讀到0x01 0x02 0x03 ...這種有規(guī)律的數(shù)據(jù)說明 SPI 硬件鏈路是完全通的。這個時候再把 DMA 加回去如果數(shù)據(jù)又變回 FF那問題就鎖定在 DMA 配置和 SPI-DMA 交互這一層。說到這我想插一句網(wǎng)上很多帖子一上來就讓人查 DMA 的優(yōu)先級、FIFO 閾值、突發(fā)模式這些參數(shù)當(dāng)然重要但如果物理層都沒通調(diào)這些參數(shù)純屬浪費時間。所以我的默認排查順序永遠是物理層 - 寄存器層 - 外設(shè)配置層 - DMA 層 - 軟件棧層逐層縮小范圍。3. SPI 從機配置的隱形雷區(qū)參數(shù)匹配與 NSS 管理3.1 CPOL/CPHA 主從不匹配數(shù)據(jù)移出但主機讀錯如果物理層已經(jīng)確認 MISO 有翻轉(zhuǎn)但主機的邏輯分析儀讀到的還是 FF那首先要懷疑的就是 CPOL/CPHA 主從不匹配。SPI 有四種模式組合主機和從機必須完全一致否則數(shù)據(jù)移位時機對不上從機發(fā)出去的數(shù)據(jù)主機根本采不到。H7 的 SPI 初始化結(jié)構(gòu)體中有SPI_InitTypeDef關(guān)鍵參數(shù)是hspi1.Init.CLKPolarity SPI_POLARITY_LOW; // CPOL 0 hspi1.Init.CLKPhase SPI_PHASE_1EDGE; // CPHA 0我這次用到的組合是 CPOL Low、CPHA 1Edge。如果你的主機是別的模式從機必須完全對應(yīng)。常見錯誤是把從機配置成 CPHA 2Edge導(dǎo)致主機在第一個邊沿采樣時 MISO 上的數(shù)據(jù)還沒穩(wěn)定讀到的就是 FF。這里有一個實操技巧把 CubeMX 里的 SPI 參數(shù)配置截圖發(fā)給主機的開發(fā)者兩個人對照著確認。因為“時鐘極性低電平”和“第一個時鐘邊沿采集數(shù)據(jù)”這種描述在不同文檔里叫法不太一樣有的叫“Mode 0”有的叫“CPOL0 CPHA0”對照確認可以避免雞同鴨講。3.2 數(shù)據(jù)幀格式位寬、MSB/LSB 和字節(jié)順序H7 的 SPI 支持 4bit 到 32bit 的數(shù)據(jù)幀長度從機和主機的DataSize必須一致。CubeMX 默認是 8bit這塊一般不容易錯。但有一個很容易忽略的點是FirstBit——如果主機是 MSB First從機配成了 LSB First那主機讀到的每一個字節(jié)都會是反序的。比如從機想發(fā) 0x01二進制 0000 0001LSB First 發(fā)出去變成 0x801000 0000主機如果按 MSB 解析讀到的就是 0x80 而不是 0x01。另外H7 的 SPI 還支持FIFO接收/發(fā)送緩沖FIFO 閾值可以通過HAL_SPI_Init()之后的底層配置寄存器調(diào)整。在 DMA 模式下FIFO 閾值會影響 DMA 請求的觸發(fā)時機。默認配置下一般沒問題但如果你的收發(fā)數(shù)據(jù)長度不是 FIFO 深度的整數(shù)倍尾部數(shù)據(jù)可能會卡住。這個后面在 DMA 章節(jié)詳細說。3.3 硬件 NSS 與軟件 NSS選通信號沒拉低從機永遠在“隱身”這是我從機場景里踩得最隱蔽的一個坑。Nucleo-H753ZI 的 SPI 從機如果使用硬件 NSS 模式NSS SPI_NSS_HARD_INPUT從機必須檢測到 NSS 引腳被拉低才會把 MISO 切換為輸出驅(qū)動狀態(tài)。如果你的主機和從機之間沒有連接 NSS 引腳——比如只接了 SCK、MISO、MOSI、GND 四根線——那么從機的 NSS 引腳就懸空或保持高電平從機永遠不會被選通MISO 一直處于高阻態(tài)主機讀到的自然全是 0xFF。解決辦法有兩個方案一使用硬件 NSS。確保從機的 NSS 引腳接到了主機的 CS片選引腳并且在 CubeMX 中把 NSS 配置為硬件模式。硬件 NSS 的優(yōu)點是片選信號完全由主機控制從機硬件自動檢測不需要軟件干預(yù)。缺點是需要多接一根線而且 SPI 外設(shè)的 NSS 引腳一般是固定映射的在 H753ZI 上是 PA4不能隨便換。方案二使用軟件 NSS。把 SPI 的 NSS 配置為軟件模式SPI_NSS_SOFT然后在發(fā)送數(shù)據(jù)前手動拉低 NSS 引腳。不過這里有個容易誤解的地方軟件 NSS 模式下很多教程讓你直接操作 GPIO 拉低 NSS 引腳電平但從機側(cè)真正起作用的是 SPI 外設(shè)內(nèi)部的一個SSIInternal Slave Select位而不是 GPIO 的外部電平。在 STM32H7 上軟件 NSS 的從機配置通常是這樣hspi1.Init.NSS SPI_NSS_SOFT; // ... 初始化 ... // 發(fā)送前使能內(nèi)部從機選擇 SET_BIT(hspi1.Instance-CFG1, SPI_CFG1_SSI);我實測過這個SSI位如果不置 1就算你把外部 GPIO 拉低SPI 從機照樣不會響應(yīng)。這也是很多人明明接對了線從機卻毫無反應(yīng)的原因之一。CubeMX 生成代碼默認不會幫你設(shè)置這個位需要手動加一行。注意軟件 NSS 模式下SSI位的置位時機要在使能 SPI 之前還是之后H7 參考手冊里沒有特別強調(diào)。我反復(fù)試過在__HAL_SPI_ENABLE(hspi1)之后設(shè)置同樣有效而且如果發(fā)送過程中 NSS 被拉高再拉低SSI位不會自動清掉所以不用擔(dān)心下次傳輸前要重新置位。3.4 從機模式下的通信時鐘缺失問題還有一個從機模式特有的現(xiàn)象值得單獨提出來從機發(fā)送數(shù)據(jù)是完全依賴主機時鐘的。也就是說即便你把從機的 DMA 配置得再完美如果主機不發(fā)起 SPI 時鐘從機的發(fā)送數(shù)據(jù)就永遠不會從移位寄存器里移出去。這一點在調(diào)試時容易產(chǎn)生誤判你從代碼層面看HAL_SPI_Transmit_DMA()返回了HAL_OK以為數(shù)據(jù)已經(jīng)開始發(fā)了實際上 DMA 只是把數(shù)據(jù)從內(nèi)存搬到了 SPI 外設(shè)的 TX 緩沖區(qū)真正的移位發(fā)送要等主機時鐘來了才會發(fā)生。如果你在從機代碼里打斷點查看 DMA 計數(shù)寄存器可能會發(fā)現(xiàn)計數(shù)從 256 變到了 0但這只代表數(shù)據(jù)進了外設(shè)緩沖不代表已經(jīng)發(fā)出去了。所以排查時一定要確認主機那邊確實在發(fā)起傳輸。我這次就是因為主機程序里讀操作被一個延時卡住了導(dǎo)致主機根本沒發(fā)時鐘從機也就一直在“等待”狀態(tài)看起來像是從機壞了。把主機那邊的邏輯理順之后數(shù)據(jù)馬上正常了。4. H7 的 SPI 與 DMA 交互被低估的架構(gòu)變化4.1 STM32H7 的 DMAMUX請求映射不再是固定綁定這是 H7 系列和老一代 STM32 在 DMA 方面最大的區(qū)別。F1/F4 的 DMA 請求是固定的比如 SPI1_TX 永遠連在 DMA1 的某個通道上你照著參考手冊配置就行。而 H7 引入了 DMAMUXDMA 請求多路復(fù)用器外設(shè)的 DMA 請求可以映射到任意一個 DMA 流stream上通過 DMAMUX 寄存器來指定。CubeMX 生成代碼時這個映射關(guān)系是自動配置的但如果你手動移植老代碼就很容易漏掉這一步。錯誤的表現(xiàn)就是 DMA 配置函數(shù)返回HAL_OK但 DMA 從不會真正被觸發(fā)——因為 DMA 不知道自己該監(jiān)聽哪個外設(shè)的請求信號。用 CubeMX 配置時注意看 DMA Settings 標簽頁里 Request 這一列比如DMA1_Stream0, SPI1_TX, MemoryToPeripheral, High Priority這里的SPI1_TX就是 DMAMUX 的請求源。如果你看到 Request 顯示的是0或者空白那多半是手動修改代碼時把 DMAMUX 配置弄丟了。正確的做法是重新通過 CubeMX 生成初始化代碼或者手動補上__HAL_LINKDMA(hspi1, hdmatx, hdma_spi1_tx); hdma_spi1_tx.Init.Request DMA_REQUEST_SPI1_TX;這句hdma_spi1_tx.Init.Request DMA_REQUEST_SPI1_TX;在 H7 上是必須的沒有它 DMA 就不會響應(yīng) SPI 的請求。而如果你看 F4 的代碼這個字段很可能不存在或者不需要指定。這個差異是移植老代碼時最大的坑。4.2 從機模式下 DMA 傳輸?shù)谋举|(zhì)數(shù)據(jù)先填充、時鐘再移出理解了 DMAMUX 之后再來看從機 DMA 的完整數(shù)據(jù)流調(diào)用HAL_SPI_Transmit_DMA()后HAL 庫使能 SPI 的 TX DMA 請求SPI 外設(shè)的 TXFIFO 空時向 DMAMUX 發(fā)出 DMA 請求DMA 響應(yīng)請求從內(nèi)存讀取一個字節(jié)/半字/字寫入 SPI 的 TXDR 數(shù)據(jù)寄存器TXDR 的數(shù)據(jù)進入移位寄存器主機產(chǎn)生 SCK 時鐘移位寄存器按位移出到 MISO 引腳TXFIFO 空時再次觸發(fā) DMA 請求循環(huán)往復(fù)注意第 2 步和第 5 步是異步的。從機側(cè) DMA 填充數(shù)據(jù)的速度可以比主機時鐘快只要 TXFIFO 里有數(shù)據(jù)SCK 來了就能移出去如果 TXFIFO 為空SCK 來了移出去的就是 0x00 或者 0xFF取決于移位寄存器里殘留的數(shù)據(jù)。在這個流程中有一個關(guān)鍵點經(jīng)常被忽視SPI 從機使能 DMA 發(fā)送之前TXFIFO 必須是空的否則老的殘留數(shù)據(jù)會被先發(fā)出去。H7 的 SPI 在每次傳輸完成后TXFIFO 里可能殘留上一幀的最后幾個字節(jié)。如果你不清理就直接開始下一次 DMA 發(fā)送開頭幾個字節(jié)可能是殘留數(shù)據(jù)然后才是新數(shù)據(jù)。排查時可以通過讀SPI_SR的狀態(tài)位來確認比如RXWNE、TXC這些位。更簡單粗暴的方法是每次發(fā)送前調(diào)用__HAL_SPI_CLEAR_OVRFLAG(hspi1)清除溢出標志同時確認TXC被置位表示上次傳輸已完成。4.3 FIFO 閾值與 DMA 請求觸發(fā)時機H7 的 SPI 內(nèi)部有一個 16 字節(jié)或 8 字具體看數(shù)據(jù)寬度的 TXFIFO。DMA 請求的觸發(fā)策略與 FIFO 閾值相關(guān)。CubeMX 默認配置下閾值為 1 字節(jié)這意味著 FIFO 空出一個字節(jié)的位置就會觸發(fā)一次 DMA 請求。這個配置在大多數(shù)場景下沒問題。但如果你傳輸?shù)臄?shù)據(jù)寬度是 16bit 或 32bit或者打開了 DMA 的突發(fā)模式FIFO 閾值和突發(fā)長度的配合就容易出岔子。比如 DMA 配置為突發(fā) 4 次每次搬 1 字節(jié)但 FIFO 閾值卻設(shè)置為 4 字節(jié)那 DMA 請求就永遠不會被觸發(fā)因為 FIFO 空出來的位置始終不夠 4 字節(jié)。這個問題的典型現(xiàn)象是第一次 DMA 傳輸可能正常之后的傳輸就卡死或者數(shù)據(jù)錯亂。因為第一次傳輸時 FIFO 是空的足夠觸發(fā)突發(fā)條件傳輸結(jié)束之后 FIFO 殘留了部分數(shù)據(jù)下一次閾值判斷就不滿足了。解決辦法是把 DMA 的 FIFO 設(shè)置為 Disable或者把突發(fā)模式改為 Single。對于從機場景我測試下來最穩(wěn)定的配置是DMA 模式 Normal、FIFO Disable、MemDataAlignment Byte、PeriphDataAlignment Byte。這種配置雖然效率不是最高但兼容性最好出問題的概率最小。4.4 一個完整可用的從機 DMA 初始化代碼下面給出一份精簡但完整的配置代碼包含了上面提到的關(guān)鍵處理。CubeMX 生成的初始化用戶代碼區(qū)可以照這個思路調(diào)整/* SPI1 從機配置 */ hspi1.Instance SPI1; hspi1.Init.Mode SPI_MODE_SLAVE; hspi1.Init.Direction SPI_DIRECTION_2LINES; hspi1.Init.DataSize SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity SPI_POLARITY_LOW; hspi1.Init.CLKPhase SPI_PHASE_1EDGE; hspi1.Init.NSS SPI_NSS_SOFT; hspi1.Init.FirstBit SPI_FIRSTBIT_MSB; hspi1.Init.TIMode SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial 7; hspi1.Init.CRCLength SPI_CRC_LENGTH_8BIT; hspi1.Init.NSSPMode SPI_NSS_PULSE_DISABLE; HAL_SPI_Init(hspi1); /* DMA 發(fā)送配置 */ hdma_spi1_tx.Instance DMA1_Stream0; hdma_spi1_tx.Init.Request DMA_REQUEST_SPI1_TX; hdma_spi1_tx.Init.Direction DMA_MEMORY_TO_PERIPH; hdma_spi1_tx.Init.PeriphInc DMA_PINC_DISABLE; hdma_spi1_tx.Init.MemInc DMA_MINC_ENABLE; hdma_spi1_tx.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; hdma_spi1_tx.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; hdma_spi1_tx.Init.Mode DMA_NORMAL; hdma_spi1_tx.Init.Priority DMA_PRIORITY_HIGH; hdma_spi1_tx.Init.FIFOMode DMA_FIFOMODE_DISABLE; HAL_DMA_Init(hdma_spi1_tx); __HAL_LINKDMA(hspi1, hdmatx, hdma_spi1_tx); /* 使能 SPI 內(nèi)部從機選擇軟件 NSS 必須 */ SET_BIT(hspi1.Instance-CFG1, SPI_CFG1_SSI); /* 啟動 NVIC 中斷 */ HAL_NVIC_SetPriority(SPI1_IRQn, 5, 0); HAL_NVIC_EnableIRQ(SPI1_IRQn); HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0); HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);發(fā)送數(shù)據(jù)時調(diào)用HAL_SPI_Transmit_DMA(hspi1, txBuffer, bufferLen);如果使用了環(huán)形緩沖區(qū)持續(xù)發(fā)送可以選擇HAL_SPI_Transmit_DMA在傳輸完成后再次調(diào)用或者在HAL_SPI_TxCpltCallback里重新啟動下一次傳輸。這里的注意事項是在回調(diào)里重新調(diào)用前一定要確認上一次傳輸已經(jīng)完全結(jié)束否則會觸發(fā) HAL 庫的狀態(tài)機斷言。5. HAL 庫狀態(tài)機與回調(diào)機制程序“看起來在跑”其實啥也沒干5.1 HAL_SPI_Transmit_DMA 內(nèi)部到底做了什么很多人在排查 DMA 問題時忽略了 HAL 庫本身的狀態(tài)機設(shè)計。HAL_SPI_Transmit_DMA()并不是簡單地“把地址和長度塞給 DMA”它內(nèi)部做了一堆狀態(tài)判斷if (hspi-State HAL_SPI_STATE_READY) { // 設(shè)置狀態(tài)為 BUSY_TX // 配置外設(shè)地址、內(nèi)存地址、數(shù)據(jù)長度 // 使能 SPI 的 TX DMA 請求 // 使能外設(shè)中斷 } else { return HAL_BUSY; }如果 SPI 的狀態(tài)機不在HAL_SPI_STATE_READY函數(shù)會直接返回HAL_BUSY而不會啟動任何 DMA 傳輸。常見的導(dǎo)致狀態(tài)機卡住的原因包括上一次 DMA 傳輸沒有正常完成hspi-State還停在HAL_SPI_STATE_BUSY_TX某個回調(diào)返回了錯誤代碼導(dǎo)致 HAL 庫認為傳輸失敗SPI 發(fā)生 OVR溢出錯誤后沒有調(diào)用HAL_SPI_ErrorCallback狀態(tài)機沒有被重置更隱蔽的情況是你調(diào)用了HAL_SPI_Transmit_DMA()返回HAL_OK但因為之前清除狀態(tài)時沒有正確復(fù)位hspi-ErrorCode導(dǎo)致后續(xù) HAL 庫內(nèi)部檢查到錯誤標志自動中止了 DMA。這種問題從外部看你只會看到“DMA 啟動了但沒有數(shù)據(jù)”查起來特別費勁。5.2 恢復(fù) HAL 狀態(tài)機的標準操作如果你懷疑狀態(tài)機卡住最簡單的辦法是在啟動 DMA 之前手動復(fù)位狀態(tài)hspi1.State HAL_SPI_STATE_READY; hspi1.ErrorCode HAL_SPI_ERROR_NONE;但這個方法只能作為調(diào)試時的臨時手段正式代碼里不建議頻繁手動操作狀態(tài)機字段因為 HAL 庫內(nèi)部有可能有自己的緩存狀態(tài)手動修改容易引起其他字段不一致。更穩(wěn)妥的辦法是調(diào)用HAL_SPI_Abort(hspi1)來中止當(dāng)前傳輸并復(fù)位狀態(tài)機。注意HAL_SPI_Abort()是阻塞式的如果 DMA 正在傳輸大塊數(shù)據(jù)它會等待 DMA 停止完成才返回。在中斷服務(wù)函數(shù)里調(diào)用要格外小心不要造成死鎖。5.3 中斷優(yōu)先級與回調(diào)執(zhí)行時機另一個容易出問題的點是中斷優(yōu)先級配置。H7 的 NVIC 中斷分組默認是 4全部用于搶占優(yōu)先級SPI 中斷和 DMA 中斷的優(yōu)先級需要合理設(shè)置。如果 DMA 中斷優(yōu)先級設(shè)置得太低而主循環(huán)里的某個高優(yōu)先級中斷頻繁打斷 DMA 傳輸就可能導(dǎo)致 DMA 的傳輸完成中斷延遲響應(yīng)進而影響 HAL 庫狀態(tài)機的更新。從機模式下還有一點特殊SPI 的 RX 溢出中斷OVR和 TX 完成中斷TXC在從機模式下觸發(fā)時機和主機不同。主機是主動控制時鐘的中斷只在特定時刻出現(xiàn)從機是被動響應(yīng)的主機隨時可能發(fā)起時鐘所以中斷有可能在任何時刻觸發(fā)。如果中斷服務(wù)函數(shù)處理時間過長或者優(yōu)先級配置不當(dāng)就可能丟失中斷事件。我的建議是從機場景下SPI 全局中斷優(yōu)先級不低于 DMA 中斷優(yōu)先級保證事件按順序處理。比如兩個都設(shè)為 5同優(yōu)先級下按自然懸空順序處理也可以接受。但不要把 SPI 中斷優(yōu)先級設(shè)得比 DMA 低否則 DMA 完成后 SPI 的完成標志沒人處理HAL 庫狀態(tài)機就會一直卡在 BUSY。5.4 關(guān)于HAL_SPI_TxCpltCallback的一個容易忽略的細節(jié)很多人在這個回調(diào)里寫了發(fā)送完成后的處理邏輯比如翻轉(zhuǎn)一個 GPIO 指示燈。但注意一個細節(jié)從機模式下TXCTransfer Complete標志是在“SPI 外設(shè)的移位寄存器發(fā)送完畢”時設(shè)置的而不是在“數(shù)據(jù)從內(nèi)存搬運到 SPI 外設(shè)”時設(shè)置的。也就是說即使你看到HAL_SPI_TxCpltCallback被調(diào)用了也不代表 SPI 時鐘已經(jīng)全部結(jié)束——在從機模式下主機的時鐘可能還在繼續(xù)。如果這時候你在回調(diào)里修改了發(fā)送緩沖區(qū)的內(nèi)容可能會影響下一幀數(shù)據(jù)。這個問題在調(diào)試時有一個很典型的表現(xiàn)主機連續(xù)讀多個字節(jié)從機用 DMA 發(fā)送固定緩沖區(qū)前幾個字節(jié)是對的后面的字節(jié)全是 FF。原因就是從機在回調(diào)里提前修改了發(fā)送緩沖區(qū)導(dǎo)致后續(xù) DMA 搬運到的數(shù)據(jù)已經(jīng)被改掉了。解決辦法如果需要更新發(fā)送內(nèi)容只在回調(diào)里設(shè)置一個標志位然后在主循環(huán)里再更新緩沖區(qū)不要直接在回調(diào)里操作。6. 從現(xiàn)象到結(jié)論的完整排查清單與故障速查表6.1 一次完整的診斷走查流程結(jié)合我這幾天排查 H753ZI SPI 從機 DMA 的經(jīng)驗整理一個可以直接照著做的排查清單。這個清單的順序是我實踐后確定的從“看燈”到“摳寄存器”都有覆蓋每一步都有明確的結(jié)論判定不會讓你白干。第一步物理層確認。用示波器或邏輯分析儀同時抓 SCK、CS、MISO 三個信號。觀察主機發(fā)起讀操作時從機的 CS 是否被拉低、SCK 是否持續(xù)翻轉(zhuǎn)、MISO 是否有對應(yīng)的數(shù)據(jù)輸出。如果 MISO 完全不動直接跳轉(zhuǎn)到第三步如果 MISO 有數(shù)據(jù)但主機讀回來的不對跳轉(zhuǎn)到第二步。第二步配置參數(shù)核對。確認主從機的 CPOL、CPHA 一致數(shù)據(jù)幀寬度一致MSB/LSB 順序一致。這兩組參數(shù)只要有一個不匹配就會導(dǎo)致數(shù)據(jù)錯位或者全 FF??梢越⒁粋€簡單的測試用例從機發(fā)送固定序列0x01 0x02 0x03 0x04...主機讀回來對比能快速定位是位序問題還是電平時序問題。第三步從機選通信號確認。確認 NSS 模式是硬件還是軟件硬件模式檢查接線是否連接正確、主機是否配置了推挽輸出軟件模式檢查CFG1寄存器中的SSI位是否置位。這一步排查完后MISO 應(yīng)該有動作了。第四步DMA 配置確認。打開dma.c或 CubeMX 的 DMA 設(shè)置界面確認 DMA 請求源選擇的是SPIx_TXH7 必須方向是MemoryToPeripheral外設(shè)地址是 SPI 的 TXDR 寄存器。如果這些都對在HAL_SPI_Transmit_DMA()調(diào)用處打斷點觀察hspi-State是否成功從 READY 轉(zhuǎn)為 BUSY_TX。第五步測試“阻塞模式發(fā)數(shù)據(jù)”與“DMA 模式發(fā)數(shù)據(jù)”的差異。如果阻塞模式能正常發(fā)數(shù)據(jù)、DMA 模式全是 FF那問題就鎖定在 DMA 與 SPI 外設(shè)的交互上。這時候可以檢查 DMA 傳輸?shù)挠嫈?shù)寄存器LIFCR、NDTR 等確認 DMA 是否真的把數(shù)據(jù)傳輸?shù)搅?SPI 外設(shè)。第六步禁用所有無關(guān)的中斷優(yōu)先級和 FreeRTOS 調(diào)度使用最簡環(huán)境測試。很多從機問題在裸機環(huán)境下能復(fù)現(xiàn)但加上 RTOS 后行為就變了原因往往是中斷優(yōu)先級和調(diào)度時序發(fā)生了變化。用最簡環(huán)境把問題復(fù)現(xiàn)出來再逐步加入軟件組件能更準確地定位。6.2 這篇文章踩過的坑問題現(xiàn)象、原因、解決方式速查表問題現(xiàn)象根本原因解決方式/調(diào)試要點MISO 完全無翻轉(zhuǎn)主機讀全 FF軟件 NSS 模式下SSI位未置位確認SPI_CFG1_SSI為 1硬件 NSS 模式下檢查連線MISO 無翻轉(zhuǎn)但寄存器配置看似正常DMA 請求源未配置為SPIx_TX檢查hdma.Init.Request確認是 DMAMUX 的正確請求 IDMISO 有翻轉(zhuǎn)但數(shù)據(jù)是錯的CPOL/CPHA 主從不匹配或位序不對主從機參數(shù)逐項對照用0x01 0x02序列測試定位是位序還是電平時序問題前幾個字節(jié)正確后面全是 FF發(fā)送緩沖區(qū)在HAL_SPI_TxCpltCallback里被提前修改回調(diào)中只置標志位數(shù)據(jù)更新移到主循環(huán)主機讀到的不是 FF而是全 0x00MISO 被下拉從機未驅(qū)動總線和全 FF 屬于同類問題只是外部引腳電平不同DMA 第一次傳輸正常后續(xù)不穩(wěn)定FIFO 閾值與突發(fā)傳輸長度不匹配關(guān)閉 DMA FIFO或把突發(fā)模式改為 SingleHAL_SPI_Transmit_DMA 返回 HAL_BUSYSPI 狀態(tài)機卡在 BUSY_TX 未恢復(fù)調(diào)用HAL_SPI_Abort()復(fù)位狀態(tài)機檢查錯誤標志并清除FreeRTOS 環(huán)境下程序卡死DMA 中斷優(yōu)先級設(shè)置過高導(dǎo)致調(diào)度異常合理設(shè)置 NVIC 優(yōu)先級SPI 與 DMA 中斷優(yōu)先級不差兩級以上主機發(fā)時鐘但從機沒數(shù)據(jù)從機 TXFIFO 為空沒有數(shù)據(jù)可移出確認HAL_SPI_Transmit_DMA()已經(jīng)調(diào)用檢查 DMA 計數(shù)是否變化數(shù)據(jù)里有偶發(fā)的錯亂字節(jié)從機被非預(yù)期地重新選通或 NSS 抖動檢查 CS 線上是否有毛刺硬件上可適當(dāng)加濾波電容6.3 從“全是 FF”到“調(diào)試工具怎么選”調(diào)試 SPI 從機 DMA 這類問題工具選擇直接決定排查速度。我這次用到的工具按優(yōu)先級排列示波器或邏輯分析儀必須要有而且?guī)挷恍枰芨?00MHz 就夠用SPI 協(xié)議分析功能有最好沒有的話用 GPIO 翻轉(zhuǎn)來輔助判斷時序也行。示波器的用法有三個關(guān)鍵點一是抓圖時把 SCK、CS、MISO 三個通道同時打開這樣能整體判斷從機的響應(yīng)時序二是觸發(fā)方式設(shè)置為 CS 下降沿觸發(fā)而不是 SCK 觸發(fā)因為 CS 標志一次傳輸?shù)拈_始三是觀察 MISO 數(shù)據(jù)時要注意從機的數(shù)據(jù)是“在 SCK 上升沿或者下降沿采樣”的要在正確的沿上判斷數(shù)據(jù)電平。如果沒有示波器邏輯分析儀也能湊合但要注意采樣率不能太低。SPI 時鐘 4MHz 時邏輯分析儀的采樣率至少要 20MHz 以上越低越容易在邊沿處采到不確定電平造成誤判。6.4 移植中容易出問題的 GPIO 配置最后提一個很多人會忽略的細節(jié)GPIO 模式配置。SPI 從機的 MISO 引腳必須配置為復(fù)用功能推挽輸出AF Push-Pull而不是開漏輸出。這一點在 Nucleo 板上通常 CubeMX 已經(jīng)幫你配好了但如果你手動從 F1 代碼移植過來就容易把 MISO 配成開漏——因為 F1 的 SPI 從機在某些配置下 MISO 是開漏輸出的H7 的 GPIO 電氣特性不一樣直接照搬就會導(dǎo)致 MISO 電平驅(qū)動能力不足主機讀到的電平異常。另外從機的 SCK 和 NSS 引腳要配置為上拉輸入或者帶上拉的復(fù)用輸入避免引腳懸空時電平抖動導(dǎo)致誤觸發(fā)。CS 引腳如果有長線連接建議在從機端加一個 10kΩ 左右的上拉電阻確保主機未拉低時 CS 保持高電平從機不會被意外選中。7. 寫在最后SPI 從機調(diào)試永遠先問“總線上的電平是誰產(chǎn)生的”這次排查 H753ZI 從機 DMA 全 FF 問題最大的心得可以用一句話總結(jié)調(diào)試 SPI 從機永遠先問“總線上的電平是誰產(chǎn)生的”而不是先問“我的代碼哪里錯了”。0xFF 本身不是錯誤它是總線空閑時 MISO 的自然狀態(tài)真正的問題是你期望從機去驅(qū)動總線但總線沒有被驅(qū)動。所以每當(dāng)你看到數(shù)據(jù)全是 0xFF先別急著查 DMA 參數(shù)和 HAL 函數(shù)按照“物理層有沒有動作 - 從機選通有沒有生效 - SPI 參數(shù)是否匹配 - DMA 是否真的搬運了數(shù)據(jù) - HAL 狀態(tài)機是否正?!边@個順序逐一排查大部分問題都能在兩小時內(nèi)定位。從技術(shù)演進的角度看H7 的 DMAMUX 架構(gòu)讓 SPI 與 DMA 的搭配更加靈活但也帶來了新的配置門檻。如果你是從 F1/F4 老工程遷移過來的建議先完全刪除 CubeMX 生成的 DMA 配置重新按 H7 的方式生成一次不要手動改老代碼這樣能避免 DMAMUX 請求映射丟失這類隱蔽問題。另外調(diào)試這類問題的時候建議把 CubeMX 的配置文件、主機的 SPI 時序圖、從機的初始化代碼三份材料放到一起對照著看。很多時候主機和從機兩邊各自都覺得自己的配置是對的但就是參數(shù)沒有對齊把關(guān)鍵參數(shù)列成一張表逐項核對比一個人悶頭查快得多。最后再分享一個小技巧在HAL_SPI_Transmit_DMA()啟動之后、數(shù)據(jù)發(fā)送完成之前的這段窗口期從SPI_SR寄存器讀一下TXNP位。如果這個位為 0說明 SPI 外設(shè)正在等待數(shù)據(jù)被移出如果為 1說明 TXFIFO 還有數(shù)據(jù)沒發(fā)完。配合調(diào)試器實時監(jiān)視這個寄存器能非常直觀地看到 DMA 和 SPI 外設(shè)之間的配合是否正常。有時候看到的變化趨勢比任何日志都好用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久91精品国产9丨久久分亭| 国产精品久久久久中文字幕| 精品国产片亚洲一区| 99999无码| 国产农村妇女毛片精品久久| 思思热国产在线视频| 久久香蕉网| 91激情综合| 91色人妻| 91九九九小逼| 艹比视频国产精品| 999九九精品| www.亚洲黄色| 久久久久性熟视频| 亚洲全色网| 国产精品扒开腿做爽爽爽视频| 中文人妻av高清一区| 日韩伦理久 久久 清纯| 激情综合网亚洲| 天天爽人人综合免费7799| 天天综合网1| 日日摸天天爽夜夜欢| 成人性爱电影一区二区| 日韩人人精品| 国产玖玖| 爱妃国产亚洲视频中文字幕| 小草精彩毛片| 中文乱码字字幕在线第5页| 老鸭窝在线视频播放| 亚洲1区2区三区高清中文字幕| 日韩ab网 | 蜜屁av| 日本精品网站在线中文| 躁躁日曰躁2020| 无码高清操逼网址| 亚洲情色一区综合| 人人贴人人摸| 欧美一区二区三区黄色影视| 亚洲暴力强奸AV| 国产精品乱码久久久、久久| 伊人女女资源在线观看| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91丝袜在线观看| 国产原创自拍| 视频国产精品未满十八禁止在线观看| 吊色| 亚洲中文字幕精品久久久久久直播| 欧美熟女逼久久久久久| 强奸乱伦大香蕉| 白嫩91在线亚洲| 91蜜桃婷婷狠狠久久综合9色| 五月丁香婷婷综合网| 丁香7月婷婷| 人妻人人操| 久久亚洲一区女同性恋中文字幕 | WWW美腿丝袜香蕉中文| 操婷婷逼| 日本韩高清无砖码22o| 99re8超碰| 国产高清免费不卡av| 品亲网欧美品亲网| 蜜桃色色网站视频三区| 亚洲男人久久综合天堂| 日本在线999| 国产免费一区二区三区最新不卡| 天天干天天燥| 91n处女在线观看| 97超级久久强资源| 亚洲暴力强奸AV| 日日AAvv| 亚洲男人天堂2019| av在线免费一区二区| 日韩精品 欧美激情| 日本精品一区三区| 99久久久er直播网址| 97超碰欧美手机| 女同性恋一区二区三区精品视频| 在线另类| 国产97视频免费观看| 97精品久久| 伊人女女资源在线观看| 看免费一级在线播放毛片| 国产精品在线一区二区| 台欧久久精品视频| 婷婷五月天色色| 中文字幕,人妻,日韩| 丝袜美腿丝袜| 啊啊啊好疼| 日本女厕偷拍| www鬼畜国产男人的天堂| 亚洲成人美女无吗| 久久免费少妇| 久久超碰com| 欧美影音在线| 国产AV天美| 色五月丁香五月| 男女激烈网站最新| 殴美性天天| 日日玩天天干| 亚洲男人在线观看天堂| 99re6在线视频播放免费精品| 人妻人人澡人人爽人人| 亚洲、日韩、综合、另类| 丁香久久| 五月天啪啪| 26uuu国产日韩综合在线观看| 神马麻豆福利院| 一卡二卡在线播放| 欧美日韩情色一区二区| 蜜臀久久99精品久久久久久-DVD| 超碰69| 日韩pv中文| 9久久精品| 国产无马视频| 国产黄片在线免费观看| 国产在线视频二区| 亚洲无码国产精品久久| 欧美Aⅴ| 亚洲AV无码乱码| 亚洲欧洲av影音| 日韩无码人妻| 国产精品999zyz| 亚洲精品一二区| 亚洲成人在线高清| 国产不卡免费在线视频| 成人三一级一片aaa| 激情抓乳插进去啪啪啪日韩| 91亚洲人| 久久在线观看免费视频| 无遮挡男女激烈动态图| 91av熟女人妻| 免费在线黄片视频| 亚洲国产成人高清在线| 99性爱在线观看| 亚欧视频在线| 九九色图| 中文字幕十五区| 欧美精品三区| 丝袜美腿丝袜| 欧美国产欧美在线观看| 欧亚免费视频| 日本免费不卡二区| ai欧美亚洲小说| 九九九九一区| 免费啪啪av| 亚洲一区二区久久久久| a v网站在线播放| 欧美亚洲高清| 密乳无码| 18精品一区| 最新中文字幕av| 性九九九九九九| 国产精品对白自产拍| 91色夜| 午夜国产成人精品视频| 秋霞免费AV| 激情AV| 青青草啪啪网| 精品人妻av区天天看片| 亚洲性爱电影| 国产亚洲人妻综合日韩 久久| 午夜男人天堂| 丰满人妻一区| 色欲三区| 95人妻爽爽人人做人人澡 | 啊啊啊想要| 激情 欧美 亚洲 小说| 盗摄女人妻在线| 日本熟妇一区二区三区| 蜜桃久久久久久久久久久久| 囯产精品久久久久久久久久二区三区| 精品日韩人妻视频| 成人综合久久精品色婷婷| 欧美日韩免费专区在线| 欧美亚洲在线| w w w.久久精品| 看日韩操逼| 久草精品国产蜜臀| 99久在线精品99re8蜜桃| 韩三级a视频在线观看| 亚洲精品日韩国产欧美| 青青草九九九九九| 欧美色997| 日韩本不卡视频在线观看 | 久久久96| 久久高清欧美国产| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 91暧暧| 亚春色色| 波多野结衣AV无码一区| 丝袜大香蕉| 日本韩高清无砖码22o| 18禁免费视频| 亚洲少妇诱惑| 美女啊啊啊啊啊啊| 九九色婷婷| 一区,二区,三区视频| 国产9l 大屁股| 天天色播亚洲综合网站| 色av中文字| 欧洲一区二区三区免费| 亚洲一区二区久久久久| 老熟女熟妇| 神马久久久久久| 婷婷久草| 亚洲玖玖爱| 伦理片秋霞免费影院| 超碰97久久观看| 综合久久久久久久久91| 欧美狠狠弄| 国产深喉视频一区二区| 日韩天堂av电影在线观看| 久久69| 久久久久久AⅤ无码免费肉站| 亚洲色图国产另类| 草莓精品视频| 久久精品国产97欧美精品亚洲 | 97天天摸天天碰| 长久操视频| 探花在线免费观看视频国产一区| 91AV天堂| 日本一区二区成人在线| 精品久久久一本一道| 色爱三区| 狠狠色五月亚洲91| 性欧美另类高清| 91九色丨风韵犹存| 亚洲人妻熟妇三十三区| 欧美自拍网| 久久,精品一二三| 神马九九| 超碰人妻中文在线| 美女黄频a美女大全免费皮| 91美女色视频亚洲| 97操碰| 精品人妻少妇| 素人播放一区| 日韩在线地址一| 国产亚洲日本| 日本欧美国内在线| 国产在线观看91精品一区| 大香蕉综合久久| 日韩国产成人自拍视频| 天天爱天天操| 亚洲日韩XXX| 亚洲蜜乳av| 久热网| 久草久热| 欧美日本国产日韩激情视频| 欧美中文综合| 伊人 俄罗斯 a v| 最新日韩黄片| 草草草视频| 欧美性,亚州色| xxx0国产在线播放| 欧美中文字幕精品人妻| 9 9无尺码天堂网| 91一起操| 日韩在线欧美精品一区二区| 亚洲色图 91| 精品久久99| 国产第25页在线观看| 青青草久草| 色综和网| 日日干日日操五月天伦理视频| 欧美综合娱乐久久| 一区二区视频在看| 久热久一区二区三区| 日韩 欧美 另类 人妻| 日韩9区| 97色涩| www.婷婷五月天| 久久亚州精品成人Av无| 超碰97人妻自拍| 天美传媒在线一区| 日韩紧密久久| 99无码视频| 亚洲A曰本VA欧美VA视频| 一本久久久精品| 日日做夜狠狠爱欧美黑人| 天天爱天天韩国日本牛牛牛牛 | 久久夜嗨| 男人干美女| 91在线无码精品秘 软件| 亚洲精品国产精品成人| 五月天欧美色图| 好看的91视频| 夜夜狠狠躁日日躁色视频| 日日干日日| 人人搞人人插人人操| 91原创在线观看| 97人妻碰碰中文无码久热丝袜| 女性喷水高潮在线观看| 色香天天| 亚洲色图欧美| 夜夜欢天天干| 91熟女网| 欧美在线视频播放| 久久久草成人网站久久久草成人久久久草久久久 | 91爱| 97AV在线观看| 久久香蕉国产线看观看亚洲女人 | 国产乱子伦一区二区三区免看| 欧美婷婷久久| 日日黄色三级网站| 国产精品久久久 | 无套后入双马尾| 综合大香蕉美。| 亚洲综合97中文网| 无码日韩网站| 国产精品成人无码a v毛片| 国产精品露脸在线观看| 偷拍精品一区二区三区| 午夜国产成人精品视频| 在线视频 亚洲精品| 日本阿v天堂在线观看| 日韩人人精品| 四虎影视欧美| 亚洲一区二区在线观看91| 九九热九九| 97操| 亚洲精品国语在线播放| 国产精品99精品视频网站| 亚洲AV无码翔田千里网站| 操婢日韩| 亚洲天堂热| 色婷婷五月天| 国产suv精品一区二区四| 精品然女一区二区| 96一区二区三区| 欧美精品庄| 日本有码久久| 天天摸夜夜摸| 久久噜噜噜精品国产亚洲综合| 91美女高潮| 欧美激情 亚洲色图| 神马麻豆福利院| 日韩精品人妻| 成人性爱电影一区二区| 人妻AV 中文字幕的| 日本一区二区三区精品| 老熟妇一区二区三区| 偷拍盗拍亚洲色图图片| 一区二区三区成人高清视频| 国内三级自拍小视频在线观看| 婷婷五月天基地| 久久久久久久久久久久久9999| 麻豆AV短剧| 97超碰中文字幕| 人人澡人人干| 久久久久免费看少妇A片特黄| Blackedraw视频一区二区| 婷色五月| 欧美一二三区四五区| 久草男人天堂| 日韩一级欧美一级国产一级台湾| 中文字幕123| 日本熟妇一区二区三区| 亚洲国产精品久久久男人的天堂| 欧美乱欲| 99热精品在线播放| 91亚州日韩高清| 韩日巨乳美女免费视频在线观看| 91精品操美女| 国产传媒午夜理伦精品| 思思热在线视频精品| 91网18| 青青草大香蕉视频| 高清无码一区二区三区| 啪啪视频mP4| 欲色啪| 国产美女在线精品免费看| 91GD.COM| 欧美天堂第二区| 欲香欲色| 涩五月婷婷| 97色伦欧美| 激情文学亚洲| 欧美老妇曰批的视频| 国语对白在线播放视频| 97bbn| 久久专区| 九九九久千久久激情蜜桃在线看 | 国产99热| jiujiujiujingpin| 岛国黄片网站| 精品无码久久久| 91女色| 日欧操屄视频| 亚洲文学偷乱拍啪啪啪啪| 欧美精品23| 天天日天天干天天整| 99黄页网站| 少妇色| 鲁鲁色综合网| 97超碰9| 激情五月激情综合网| 欧美大色交| 激情五月天中文字幕色| 97视频在线观看播放与子乱对白在线……| 992大香蕉| www色色com| 97精品视频在线播放| 国产精品久久久久久久毛片1| 欧美激情久| AV一起草在线| 精品国产99| 亚洲精品一区二区精华| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 日本在线不卡v二区| AV高清一区| 亚洲 小说 欧美 激情 另类| 国产精品熟女AV中文字幕在线播放| 96麻豆精品一区二区三区| 五月丁香影院| 丰满人妻-区二区三区| 婷婷五月在线视频| 国产精品点击进入在线影院高清| 丝袜狠狠草尤物人妻av91| 久久免费少妇| 日本999精品视频| av在线免费一区二区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 韩国一级做A片免费的| 67914在线兔费成人视频| 欧亚在线视频| 色婷婷一区二区三区久久| 97日本超碰综合| 精品久久无码午夜福利| 欧美日韩电影一区二区| 蜜乳性色无码专日粉嫩骚逼AV| 蜜乳av一区二区三区四区不卡| 国产偷拍自拍在线视频| 久久久久国产精品久久久| 18一区二区三区| 免费观看性欧美一级| 静品嫩模一区二区| 日本操逼视频免费| 99re在线视频这里只有精品| 花野真衣| 人人看欧美性爱| 久久东京热久久| 激情欧美日韩女同久久| 久热大香蕉| jazzjazz国产精品麻豆| 欧美刺激色黄片免费看| 神马麻豆福利院| 防屏蔽在线视频| 免费av在线播放二区| 日本精品久久久久久久| 伊人天堂在线| 粉嫩在线一区二区懂色| 超清福利精品视频在线| 超碰97极品9| 麻豆国产原创AV色哟哟 | 91观看 国产白丝| 啊啊啊啊在线观看网址| 国岛片视频| 日本不卡五区| 97国产中文| 影音综合网| 欧美色五月| 手机看片日韩人妻| 97国产精品一区| 午夜精品人妻二区三区| 天堂日本亚洲欧美| 这里有精品| 中文字幕在线高清男人的天堂 | 亚洲丝袜在线观看| 校园春色宗合网| 中文字幕在线观看第二页| 91狼人| 午夜福利免费福利视频| 日韩在线欧美精品一区二区| 国产超碰欧美| 少妇色综合| 亚洲精品天天影视综合网 | 东北黄色电影| 亚洲夜色在线| 99精品在线观看| 欧美性爱一级操| 人妻三级在线中文字幕| 日本在线伊人啪啪| 一区二区三区男人的天堂| 99热日| 日本中文字幕一区| 欧美性综合| 国产中文福利| 激情综合av| 久久夜色一区二区| 丝袜制服字幕在线| 欧美男女午夜啪啪| 久超碰在| 99re3这里只有精品| 女优免费一区二区永久| 91丨九色丨国产打屁股| 亚洲成人免费中文字幕| 日本成人A片免费看| 少妇高潮流水av免费| а√天堂资源官网在线资源| 日韩操啪| 牛牛操视频逼| 在线免费观看日韩一区| 国产精品嫩草久久久久| 亚洲欧洲日韩天堂av| 情趣丝袜无码操逼视频| 久久精品国内Av熟女高清| 欧美黄色手机在线观看| 日本不卡五区| 色婷婷六月丁香七月婷婷| 眼镜人妻101.com| 成人七区| 亚洲综合精品国产一区| 国产又大又硬又长又粗| 91色色色| 9+1视频网址| 色色国产| 国产传媒1234区| 2017大香蕉国产精品久久| 久草男人天堂| 亚洲区 欧美区| 久久久久久久97| 亚洲欧美电影| 操逼天美3区| 日本视频一区二区三区| 亚洲啪啪性视频| 天堂岛av| 免費人妻夜夜爽天天爽爽一区| 欧美一区二区三区大综合| 伊人青青一区成人视频在线观看区| 91伊人大香蕉| 中出20p| 欧美性性性| 中文字幕第9页萱萱影音先锋| 日本一级特级毛片视频| 熟妇操花| 亚洲一区二区三区麻豆传媒| 日本精品九九九| 91美女小视频| 国产无马视频| 懂色AV一区二区三区| 久久精品国产精品亚洲艾通辽熟妇| 男人下部插入女人下部| 国产av色网| 欧美天天| 手机在线A片| 日日日日日| 北条麻妃性愛视频| 777超碰| 在线视频 亚洲精品| 强奸乱伦Av网| 婷婷色色网| 亚洲诱惑天堂| 搡老女人911熟妇老熟女| 韩国一级做A片免费的| 一区黄二区黄| 欧美日韩制服| 久操网线| 乱子伦一区二区三区国产精品| 久久久91| 图片区小说区| 九九久久一区二区三区| 日本熟妇自慰性高潮一区二区三区| 国产精品人妻无码久久久老鸭窝| 五月激情综合网| 性交一区二区在线播放| aaa亚无码专区| 91美女丝袜诱惑视频| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 1769精品一区二区三区| 天天看特黄的免费网站| 亚洲91色| 美女超碰978| 亚洲清纯综合| 免费A V在线播放| 青青草啪啪网| 18禁无码永久免费无限制| 91熟女熟妇视频网站| 天天日熟妇| 91社操逼| 伊色综合天堂色97| 水滴偷拍| 国产在线视视频有精品| 97精品在线| 欧美巨大性舒爽顶到了| 狠狠爱综合| 欧美日韩人妻精品一区二区三区| 国产极品美女高潮无套在线观看| 另类 综合 日韩 欧美 亚洲| 亚洲av无码国产精品字幕| 女人天堂AV五区在线| 色偷偷综合91久久噜噜| 91人妻尻屄视频| 大香蕉色欲AV| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲精品中文字幕一区在线视频 | 操比国产| 亚洲天天自拍| 亚洲激情综合| 老女人综合网| 嗯……啊…嗯嗯…啊…好舒服| 亚洲天堂男人网| 国产亚卅97| 国产高清精品一区二区三区毛片 | 亚洲精品一区中文字幕乱码| 啊啊啊好舒服视频| 99热只有| 草B在线| 在线播放成人网站| 精品欧美乱码久| 99热伊人| 亚洲精品久久久久毛片A片拉屎| 91xingse| 国产成人综合在线播放| 大香蕉色欲AV| 亚洲色五月| 91在线国产后入风骚翘臀美女素人| 黄片不用下载在线观看| 干美女人妻| 欧美在线视频99| 成人av福利在线观看| 欧美国产有色电影| 巨爆乳肉感一区二区三区竹菊影视| 日本熟妇人妻一区二区三区| 精品四五区| 亚洲国产综合图区中文字幕 | 中文字幕亚洲永久精品| 啊啊啊啊,啊啊好多水| 色噜噜婷婷| aaa亚无码专区| 天天干天天中出av| 在线A日本| 清纯唯美第一页| 97干com| 亚洲古典另类欧美在线| 性91| 国产性爱欧美性爱在线| 久久婷婷视频| 欧美综合区| 亚欧洲日韩国产精品| 99综合免费视频| 一区二区三区免费视频入口| 丰满搜索结果 -第18页- 久久高清无码| 久操高青| 四虎在线免费视频| 欧美性天天影视| 国产老女人久久毛| 亚洲国产青青| 东北女人的毛片| 五月天婷婷色| 99re公开精品免费视频| 中文字幕在线观看网址| 人澡逼| 尤物av网站| 激情综合五月| 亚洲国产精品无码AV在线| 国产久久久久久| 五十路人妻在线| 亚洲第一二区另类图| 人妻丝袜无 码视频专区| 草草影院日本第一页| 亚洲国产97| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | a久久| 激情无码日韩| 色网站导航大全| 青娱乐黄色录像| 亚洲怡春院| 色婷婷蜜臀av| 99热超碰| 丁香五月天视频| 超碰人妻天天干| 国产黄色视频久久| 久久久无码视频| 超碰吊日色| 九九九九九九九九九九九蜜桃| 天天碰操中国年青熟妇| 97天天做| 国产传媒一区日韩| 久久人妻四季| 精品久久久久,69国产成人精| 色婷婷色99国产综合精品| 一级aaaaa欧美中文字幕录像片| 97久久精品| 亚洲97精品| 久久久精品网| 97视频免费播放| 不卡日本一区二区| 伦理第一页| 深夜视频| 91日韩网站| 久久99干一本高清| 加勒比综合88| 日韩一级二级三级| 亚洲婷婷丁香在线| 无码国产精品96久久久久孕妇| 熟女精品日韩一区二区三区| 蜜臀AV午夜精品久| 9久久精品| 91女优在线观看 | 人妻插插人妻人| 后入人妻一区| 亚州综合电影| 久久久久久久久久久999| 天天综合欧美综合| 97操97色| 天天干人妻| 久久精品成人一区二区三区蜜臀| 亚洲诱惑天堂 | 久久人爽| 青青青草伊人精品| 欧美日韩系列| 快灬快灬 一下爽蜜桃在线观看| 青青草一区二区高清无码视频| 校园春色亚洲无码| 久操视频在线| 97碰碰色| 国产亚洲深夜激情| 日韩精品国产一区二区| 国产亲戚伦亲在线| 五月天开心网| 夜夜操夜夜爽夜夜高潮| 精品无码一二三四区| 香蕉色网| 日韩兔费看黄片| 秋霞网—男女啪啪亚洲免费体验区 | 97久久精品亚洲中六字幕| 中文字幕人妻色偷偷久久皮 | 国模不卡| 九九色色| 日本精品人妻少妇一区二区| 大香蕉92| 97九色| 久久av成人无码免费| 能直接看AV的网站| 日本人体九九九九九九| 亚洲人在线成线成人| 国产1727欧美| 久久精品国产97欧美精品亚洲| 夜色91| 亚洲国产成人福利在线观看| 99热这里都是精品| 天天看高清麻豆| 亚洲欧美校园| 少妇一级婬片免费放一级a性色.| 国产精品美女在线一区| 日韩一区二区精品视频| 91欧美另类| 94色色电影网| 久久性爱网站| 中文字幕一区二区三区蜜臀| 美欧老女人97| 人妻丝袜一区二区三区在线| 亚欧性爱无码| 六九九九| 久操免费视频| 88xx成人精品视频| 男女一级A片大黄,一进一出| 曰韩欧美国产传媒麻豆第一区| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 久久精品人人做人人看| 99色综合| 色五月激情AV在线| AVE乱伦| 婷婷五月天成人网| 天美传媒av在线| 国内偷拍精品一区二区| 国产AV激情无码久久无码| 欧美成人亚洲精品| 亚洲人妻爽爽爽| 欧美精品久久久久久久久88| 成人网欧美风情| 97视频免费播放| 睡产熟女乱伦| 久久久专区| 一级性爱视频免费在线| 亚洲色偷偷色噜噜狠狠99网| 久热精品在线| 久久久国产亚洲精品系列| 91 国产丝袜在线放观看| 91精品导航| 乱伦熟女区| 久久 久久国内精品亚洲| 操逼逼一区视频| 久久久久久久少妇| 熟女人妻一区二区三区免费看 | 性爱视频免费网址| 清纯唯美激情四射| 天堂性色| 婷婷视频在线免费观看| 熟女AV一区| 成人av福利在线观看| 伊人色综合超碰| 欧美狠狠| 富二代亚洲精品99| 偷拍精品一区二区三区| 久久天天摸| 亚洲欧美人妻| 综合婷婷| 亚洲激情综合另类| 久操黄色视频| 国产91影院| 大香蕉中文aV在线| 日本亚欧爱爱| 婷婷香蕉| 久久六六| 欧美高潮在线| 国产女生在线| 久久亚洲一区女同性恋中文字幕| 激情综合婷婷| 大奶的诱惑| 成人A片男人的天堂| 中国一级特黄大片护士| 色哟哟1区2区| 久草免费在线一区二区| avav青青草久久夜| 一二三啪啪专区| 国产一区二区在线播放量| 性性久久| 另类图片五月天| 国产偷人伦激情在线观看| 色婷婷婷五月天激情四射| 午夜啪啪片| 97在线免费视频观看| 91色综合激情| 久久国内| 欧美天天综合| 先锋音影AV| 91精品女厕偷拍视频| 91性生活久久久| 欧美黑人精品一区二区| 久久久久白虎| 日韩情色AV| 5月婷婷6月六月丁香| 免费操逼91| 成人片视频| 午夜精品久久久久久久男人的天堂 | 日本色婷婷| 乱抡国产91| 亚洲有薄码区久久在线一区| 亚洲天堂人妻一区二区| 国产精品一区午夜福利| 欧美综合综合| 日韩av色图综合| 国产女人高潮嗷嗷嗷叫小说 | 97这里都是精品| 日韩人妻一区二区精品| 欧美综合天天| 91超碰在线播放| 人妻天天爽夜夜爽爽| 少妇高潮特黄A片| 偷拍 亚洲 欧美| 黄久在线| 亚洲免费精品一区| 色欲日韩欧美在线一区| 色九久| 美女黄码视频午夜| 天天综合网在线| 婷婷综合五月| 日欧亚洲二三区大片不卡| 福利视频网站| 无套后入双马尾| 动漫av中文| 亚洲精品丝袜| 日韩 欧美 另类 人妻| 久久人妻| 人妻天堂网| 日本高清熟女久久一区| 激情综合五月| 丝袜熟女一区二区三区| 国产无码高清操逼视频| 97色综合中文网| 99操| 久久的网站啊啊啊啊啊| 99热这里只有精品8| 美女操逼福利视频| 国产免费操逼| 日本操逼视频不卡直接放| 久久免费9| 国产97色在线 | 亚洲| 中文字幕在线2| 男人天堂久久日韩| 91大胆欧美| 丁香五月社区| 成人五月香网在线| 久久婷婷五月综合| 肉嘟嘟www视频在线观看高清| 久久男人的天堂| 五月天伊人网| 性交一区二区在线播放| 青青草大香蕉在线视频| 久久久熟妇熟女国产| 韩国轻伦国内自拍一区| 香蕉在线一区二区三区| 涩五月婷婷| 国产精品老师| 97啪啪| 日本韩欧美在线播放a| 六十路日本| 国模少妇一区二区三区 | 1769一区| 久久的免费性爱视频| 亚洲色图欧美激情| 婷婷10月天青娱乐| 东京热毛片调教| 99re99在线视频| 日本在线999| 精品国产乱子伦一区二区三区,精品一| 9丨久久九九九| 久久精品—区二区三区内射| 97天堂| 日产操逼| 国产精品ⅴ无码大片在线看.| 久久久久久亚洲Av无码精| 呦呦影院| 91成人精品在线播放| 天天躁日日躁XXXXYY| 久久久久婷婷| 人妻熟女av国产网站| 国产女人91精品嗷嗷嗷嗷| 一个人免费HD91视频| 超碰人人色| 4141514逼喷水三级片| 91久久18禁| 男人的天堂在线| 国产精品一区二区麻豆| 肥佬影院91| 精品视频在线观看精品| 国产亚洲性生活视频播放| 日本中文字幕不卡视频| 国产日韩区| 国产在线激情视频| 成人三级片无码| 免费视频在线观看啊啊啊啊啊| 久久亚州高清| 色亚州人久干视频在线观看免费版| 九九九九九九九九九五码| 亚洲 无码 有码 中文字幕| 青青草大香蕉视频| 操国产高清| 欧美三级中文字幕hd| 久久草草欧美精品| 在线视频一区二区传媒| 91操熟女视频| 91丝袜美女视频| 中文字幕蜜乳av| 欧美十八禁导航成人| 午夜高清成人在线视频| 欧美日韩91| 丁香婷婷激情五月天无毒不卡 | 天天干天天日天天射黄色| 老司机久久| 91情色在线| 婷婷丁香九月| 五月婷婷丁香| 日本高清熟女久久一区| 熟女久久| 性在久久久久久| 伊人天堂在线| 亚洲啪啪啪啪视香蕉| 亚洲一区日韩精品中文字幕| 日韩不卡a级视频专区| 精品久久久久,69国产成人精| 熟女高潮合集-永久久久-成人AV | 久久久久久中文版| 国产日韩怡红院| 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲国内精品成人不卡| 亚洲丝袜少妇在线| 亚洲黄色网址视频| 九九色精品| 精品免费国产二区三区| 91久久精品美女高潮喷水| 精品三级在线专区| 激情婷婷五月天| 欧美天天综| 美女啊啊啊啊啊啊| 亚洲最新a在线观看| 啊啊啊啊嗯嗯嗯用力好爽| 97超碰总站| 97干在线| 成人看片网站| 2019亚洲男人天堂| 五十路熟女人妻一区二区在线观看| 久久久久久91香蕉国产| 九七人妻在线| 精品国产91内射久久| 亚洲综合小说另类图欧美视频激情小说色五月天 | 97超碰色色| 99色视频| 精品十八在线观看| 91强热人妻| 99国产精品久久久在线播放| 久久久精品久久| 国产成年精品高清在线观看91| 日韩在线视频1234| 亚洲熟妇综合久久久久久| 九九亚洲| 男人的天堂2019AV| 欧中美三级一区二区三区| 99久久久久| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 久久久久久久久久久人妻| 欧美激情在线观看视频| www.人人cao| 欧美亚洲天天| 九月婷婷综合| 狠狠爱AV| 熟女被操视频网址| 91国产伊人大香蕉| 黄色大片免费在线| 欧美久久毛片基地| 老司机福利青青草| 九九久久久久久爱| 97爱爱爱| 国产精品国产自产拍高清AV| 国产精品日日摸夜夜添骚逼| 久久黄黄| 农村女一级毛卡片| 国产怡红院| 午夜亚洲WWW湿好大| 双插在线| a亚洲欧美色欲| 日日骚 av| 无码逼| 中文字幕av久久爽Av| 一区二区三区在线美女| 好看的久久不射无码影视影院| 日本伦乱九九九综合 | 五月丁香网站| 99热精品在线观看| 女色视频社区| 强奸乱伦 亚洲一区| 超碰国产情侣自拍网| 日本免费一级AAA大片器 | 精品国产精品一区二区| 91情色在线| 一区二区久久天天干狠狠| 国产美女在线精品免费看| 日本大香蕉| 在线看免费无码AV天堂的| 熟女熟妇一区二区三四区| 亚洲日韩AV视色| 久久午夜鲁丝片| 欧美激情综合| 久久国产AⅤ| 九九九久久久久| 欧美一级久久久久久久大片动画 | 欧美系列在线一区二区| 超碰97极品9| 久久欧美1卡2卡3| 一线黄色免费性爱片| 中文字幕欧洲有码| 青青草九九九九九| 国产www色在线观看| 超碰久超碰久| 国产污视频麻豆传媒一区二区| 国产超碰| 国产91影院| 亚州色站 日韩电影| 久久99精品视频| 亚洲最新Av| 三四中文字幕| 天天综合网入口~91| 18禁网站在线播放| 久久精品人妻一区| 丝袜色综合| 亚洲AV无码翔田千里网站| 亚洲天堂资源网| 国产第11页| 五月丁香大香蕉| 免费?级毛片无码?∨蜜芽试看| 亚洲欧美内射| 成人怡红院| 亚州色阁| 伊人久久婷婷| 牛牛aV| 国产精品盗摄 偷窥盗摄| 97色色色| 欧美,亚洲,日韩,v,天堂,手机在线观看| 精品人妻伦一二三区久久| 九月丁香综合网| 免费成人在线观看91| 一区二区三区一亚洲中文字幕、综合区灬 | 1禁看欧美黄片免费看| 国产色产精品在线观看| 久区视频| 欧美色997| 亚洲av乱伦色图网站| 国产欧美岛国精品一区| 女人精品内射国产99| 欧成人在线| 国产第11页| 中文字幕乱码人妻一区二区三区,99精品| 岛国精品视频在线观看| 国产特级毛片AAAAAA高潮流水| 一中国女人毛片水真多| 国产精品在线免费| 91久久国外网| 操淫穴亚洲五月丁香 | 先锋色眉乱伦资源| 精品性爱| 九九热AV| 曰韩人妻中文字幕在线| 欧中美三级一区二区三区| 91色射| 福利大香蕉| 99久久无色码| 91视频国品一二三区| 伊人久久大香大香线蕉中文| 天天看精品动漫视频一区| 欧美日韩在线小说 | 色老汉玖玖爱| www.色五月| 777奇米影视777四色| 操迟操逼在巾线Fre看| 91久久九九精品国产综合| 操操逼视频| AV一起草在线| 天天躁日日躁xxxxx| 一个国产在线综合网站| 欧美熟女逼久久久久久| 婷婷五月天色网| 蜜桃网熟妇| 啊啊啊慢点| 大香久久| 亚洲欧洲自拍| 操逼无码操逼| 中国操逼无码| 欧美日韩国产黄色片| 欧美天天干| 久久精品国产免费观看99| 日韩不卡毛片Av免费高清| 一个人免费HD91视频| 久久久久久久人妻| 久久99热这里只频精品6学生| 熟女人妻av在线资源,黄色的资源| 嗯嗯啊操我| 大胆91| 亚洲不卡不卡中文字幕不卡| 久极品在线观看| 黑人与人妻| 精品欧美日韩在线观看| 色香天天| 蜜乳AV免费观看| 成人免费在线网站| rion磁力链接| 亚洲砖码砖专无区2023| 激情 欧美 亚洲 小说| 亚洲无码视频免费在线观看网址!| 亚洲伊人久久综合97| 18禁网站在线播放| 免费一级视频特黄色大片| 91超碰人人| 十八禁黄色成人网站观看| 亚洲区限制级| 亚洲影视第一页| 东北熟女91| 免费的很黄很污的全部视频| 亚洲少妇中文字幕网址|