久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

RK3399 SPI外擴(kuò)WK2114四路串口:Linux驅(qū)動(dòng)與設(shè)備樹(shù)實(shí)戰(zhàn)

RK3399 SPI外擴(kuò)WK2114四路串口:Linux驅(qū)動(dòng)與設(shè)備樹(shù)實(shí)戰(zhàn) 簡(jiǎn)介基于RK3399平臺(tái)的WK2xxx系列SPI轉(zhuǎn)串口擴(kuò)展驅(qū)動(dòng)源碼專(zhuān)為需要擴(kuò)展多路串口的嵌入式Linux開(kāi)發(fā)者、RK3399方案工程師以及正在評(píng)估串口擴(kuò)展方案的學(xué)習(xí)者準(zhǔn)備。該驅(qū)動(dòng)利用WK2114芯片通過(guò)SPI接口擴(kuò)展出4個(gè)串口可應(yīng)用在工控板卡、物聯(lián)網(wǎng)網(wǎng)關(guān)、智能終端等對(duì)串口數(shù)量有較高要求的場(chǎng)景也適合相關(guān)項(xiàng)目初期驗(yàn)證使用。壓縮包內(nèi)共1個(gè)文件為1個(gè)C驅(qū)動(dòng)源文件整體約12KB代碼精簡(jiǎn)便于閱讀、移植和二次開(kāi)發(fā)可快速定位驅(qū)動(dòng)注冊(cè)與數(shù)據(jù)收發(fā)邏輯。目前已有229人學(xué)習(xí)/下載適合作為對(duì)照實(shí)現(xiàn)或排錯(cuò)參考。讀者可從中獲取WK2114的初始化時(shí)序、SPI讀寫(xiě)操作、串口回調(diào)接口封裝等核心代碼同時(shí)了解其在RK3399平臺(tái)上的驅(qū)動(dòng)組織方式為同類(lèi)SPI轉(zhuǎn)串口項(xiàng)目提供直接的代碼級(jí)參考。 做嵌入式Linux的遲早會(huì)遇到一個(gè)問(wèn)題主控的UART不夠用。RK3399這顆SoC在國(guó)產(chǎn)板卡里算是明星級(jí)產(chǎn)品接口豐富但你想同時(shí)掛一堆串口設(shè)備——PLC、工業(yè)儀表、GPS模塊、多路RS485傳感器——它原生的UART資源立刻見(jiàn)底。這個(gè)項(xiàng)目的核心就是在RK3399上通過(guò)SPI總線(xiàn)外擴(kuò)一顆WK2114芯片把一路SPI拆出四路標(biāo)準(zhǔn)串口并且把整套驅(qū)動(dòng)整理成了獨(dú)立可移植的壓縮包。如果你手上的板子也是RK3399或者你正在用其他主控想擴(kuò)展串口數(shù)量這篇博文會(huì)把我從硬件連接、驅(qū)動(dòng)框架選型、設(shè)備樹(shù)編寫(xiě)到數(shù)據(jù)面調(diào)通的完整過(guò)程原原本本拆給你看。代碼和配置都是能直接抄作業(yè)的。1. 需求從哪來(lái)RK3399平臺(tái)為什么會(huì)缺串口RK3399原生的UART接口數(shù)量并不少算上調(diào)試串口大概有6路可用的UART控制器。聽(tīng)起來(lái)好像夠用真上項(xiàng)目你就知道了。我遇到的實(shí)際場(chǎng)景是個(gè)邊緣計(jì)算網(wǎng)關(guān)需要同時(shí)接這幾路設(shè)備一路調(diào)試串口內(nèi)核日志永遠(yuǎn)不能挪作他用一路藍(lán)牙模塊RK3399雖然常配Wi-Fi/BT combo但BT的HCI協(xié)議要占一路UART一路4G模組AT指令PPP撥號(hào)至少要占一路兩路RS485總線(xiàn)底下各掛七八個(gè)傳感器節(jié)點(diǎn)一路RS232接老式PLC數(shù)一下這已經(jīng)6路出頭了而且有些還帶流控、有些波特率還不一樣。主控原生資源被瓜分干凈再想加設(shè)備就得想別的路子。擴(kuò)展串口的三條路線(xiàn)對(duì)比方案優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景USB轉(zhuǎn)串口如CH340/FT232即插即用Linux自帶驅(qū)動(dòng)占用USB帶寬線(xiàn)材多供電和信號(hào)質(zhì)量易出問(wèn)題臨時(shí)調(diào)試、桌面級(jí)設(shè)備I2C轉(zhuǎn)串口如SC16IS752接線(xiàn)少占用引腳少I(mǎi)2C速率偏低高波特率下吞吐不足低速、對(duì)帶寬不敏感的場(chǎng)景SPI轉(zhuǎn)串口如WK2114/WK2124速率高驅(qū)動(dòng)可控一片擴(kuò)4路需要寫(xiě)驅(qū)動(dòng)硬件上多一根片選和中斷嵌入式板卡、工業(yè)級(jí)產(chǎn)品我當(dāng)時(shí)直接在方案對(duì)比表里劃掉了前兩個(gè)。USB轉(zhuǎn)串口在工業(yè)現(xiàn)場(chǎng)不可靠接頭松一下、供電波動(dòng)一下就掉線(xiàn)I2C那點(diǎn)帶寬跑個(gè)115200都緊張更別說(shuō)多路同時(shí)收發(fā)。SPI轉(zhuǎn)串口是正路SPI時(shí)鐘跑個(gè)幾十MHz輕松每路UART分配個(gè)1Mbps的帶寬綽綽有余而且使用Linux內(nèi)核標(biāo)準(zhǔn)serial框架的話(huà)用戶(hù)態(tài)看到的就是/dev/ttyWK0~/dev/ttyWK3和原生串口行為一致上層代碼零改動(dòng)。注意選WK2114的關(guān)鍵原因是它一片帶4路UART且支持硬件流控RTS/CTS。如果你只需要兩路可以選WK2112如果只需要單路看WK2102。整個(gè)WK21xx系列的驅(qū)動(dòng)寄存器布局基本統(tǒng)一本文的思路直接通用。2. WK2114是怎么工作的一顆SPI從機(jī)拆出四路UART搞清楚芯片工作機(jī)制是寫(xiě)驅(qū)動(dòng)前最重要的一步。我建議任何拿到新片子的人都先把數(shù)據(jù)手冊(cè)里“功能框圖”那一頁(yè)看三遍再動(dòng)手寫(xiě)代碼。2.1 芯片內(nèi)部結(jié)構(gòu)WK2114本質(zhì)上是一個(gè)SPI從設(shè)備 4個(gè)UART控制器的橋接芯片。它內(nèi)部主要模塊是SPI從機(jī)接口通過(guò)4個(gè)引腳SPI_CLK、SPI_MOSI、SPI_MISO、SPI_CS與主控通信支持SPI Mode 0~3從機(jī)模式片選由主控控制四路UART控制器每路有獨(dú)立的發(fā)送緩沖、接收FIFO、波特率發(fā)生器、流控邏輯中斷輸出引腳INT當(dāng)任意一路UART的RX FIFO收到數(shù)據(jù)、或者TX FIFO從滿(mǎn)變空時(shí)INT引腳會(huì)拉低通知主控來(lái)處理主機(jī)側(cè)訪(fǎng)問(wèn)芯片本質(zhì)上只有兩種操作寫(xiě)寄存器和讀寄存器。SPI轉(zhuǎn)串口芯片的寄存器布局通常分兩類(lèi)一類(lèi)是全局控制寄存器比如中斷狀態(tài)、復(fù)位控制另一類(lèi)是每路UART獨(dú)立的配置寄存器波特率分頻值、數(shù)據(jù)位格式、FIFO水位、流控開(kāi)關(guān)等。2.2 數(shù)據(jù)收發(fā)路徑我要先說(shuō)清楚一個(gè)容易懵的點(diǎn)這支芯片的收發(fā)是“寄存器式”的不是“內(nèi)存映射式”的。也就是說(shuō)SPI主機(jī)要讀某路UART收到的一個(gè)字節(jié)需要先發(fā)一個(gè)“讀X路UART RX FIFO”的命令字再等芯片把字節(jié)從MISO引腳推回來(lái)。每次收發(fā)都是一次完整的SPI事務(wù)。這就帶來(lái)一個(gè)設(shè)計(jì)取舍**軟件在中斷里單字節(jié)操作還是利用芯片F(xiàn)IFO做批量搬運(yùn)**看芯片的FIFO大小典型WK系列芯片每路UART的RX/TX FIFO大約16字節(jié)具體按型號(hào)不同如果你每次中斷只讀一個(gè)字節(jié)SPI的往返開(kāi)銷(xiāo)會(huì)吃掉大量CPU時(shí)間。正確做法是中斷里來(lái)一次就把FIFO能讀出來(lái)的全部搬走。2.3 硬件連接細(xì)節(jié)硬件上踩過(guò)的坑我單獨(dú)列一張表給你連接項(xiàng)建議說(shuō)明VCC3.3V看芯片手冊(cè)一般3.3V供電別接到5V上SPI_CLK主控SPI時(shí)鐘腳頻率從低往上調(diào)見(jiàn)下文調(diào)試章節(jié)SPI_MOSI/MISO主控對(duì)應(yīng)數(shù)據(jù)腳方向別反了MOSI對(duì)MOSISPI_CS任意GPIO或主控片選我用的GPIO軟件片選更靈活I(lǐng)NT任意GPIO中斷腳必須接否則只能輪詢(xún)晶振按手冊(cè)要求有的型號(hào)需要外部晶振有的是內(nèi)置RC如果INT腳沒(méi)接到主控驅(qū)動(dòng)就退化成純輪詢(xún)模式除非你跑在很低波特率下否則丟數(shù)據(jù)的概率非常大。這腳一定要接這是這個(gè)驅(qū)動(dòng)的“事件驅(qū)動(dòng)”核心沒(méi)有它驅(qū)動(dòng)寫(xiě)出來(lái)就是個(gè)殘廢。3. 驅(qū)動(dòng)架構(gòu)選型在8250框架里做還是自己寫(xiě)UART驅(qū)動(dòng)這是整個(gè)項(xiàng)目里最值得花時(shí)間考慮的決定。Linux內(nèi)核里支持串口設(shè)備的框架有好幾層選擇的正確與否直接影響后續(xù)開(kāi)發(fā)量。3.1 三條技術(shù)路線(xiàn)對(duì)比路線(xiàn)一利用 kernel 的 8250 框架serial8250 port ops 鉤子內(nèi)核的8250驅(qū)動(dòng)是串口驅(qū)動(dòng)的“老大哥”它實(shí)現(xiàn)了所有標(biāo)準(zhǔn)tty操作open/read/write/ioctl然后通過(guò)struct uart_port里的幾個(gè)函數(shù)指針比如start_tx、stop_tx、handle_irq來(lái)對(duì)接具體硬件。如果你想復(fù)用8250框架需要把WK2114的“SPI讀寫(xiě)某個(gè)寄存器”封裝成這些回調(diào)里的具體實(shí)現(xiàn)。路線(xiàn)二基于serial_core自己實(shí)現(xiàn)uart_opsserial_core是比8250更底層的串口抽象層。你寫(xiě)一個(gè)平臺(tái)驅(qū)動(dòng)注冊(cè)struct uart_driver實(shí)現(xiàn)struct uart_ops里的startup、shutdown、start_tx、stop_tx、set_termios等回調(diào)函數(shù)。自由度大但樣板代碼多。路線(xiàn)三完全繞過(guò)內(nèi)核串口框架寫(xiě)一個(gè) misc/char 設(shè)備自己維護(hù)一個(gè)字符設(shè)備把SPI讀寫(xiě)邏輯全部包在驅(qū)動(dòng)里用戶(hù)態(tài)通過(guò)open/read/write/ioctl訪(fǎng)問(wèn)。優(yōu)點(diǎn)是代碼最短、最快出效果缺點(diǎn)是你得自己處理termios波特率、數(shù)據(jù)位、停止位、流控自己處理poll/select自己處理內(nèi)核并行訪(fǎng)問(wèn)的各種鎖。做出來(lái)的東西又糙又難維護(hù)我強(qiáng)烈不建議量產(chǎn)項(xiàng)目走這條路。3.2 我的最終選擇基于 serial_core 自己實(shí)現(xiàn) uart_ops為什么不用8250框架因?yàn)?250的底層邏輯是針對(duì)標(biāo)準(zhǔn)16550 UART的寄存器模型寫(xiě)的它默認(rèn)芯片里有一組I/O端口通過(guò) inb/outb 或 readb/writeb 直接訪(fǎng)問(wèn)。WK2114是SPI寄存器操作你要把“讀一個(gè)寄存器”的動(dòng)作變成“發(fā)一筆SPI讀事務(wù)”這中間塞進(jìn)去的適配層最終會(huì)讓你改到懷疑人生。而serial_core則給你留了更大的自由度波特率怎么算、數(shù)據(jù)怎么發(fā)射、中斷怎么處理全由你的uart_ops決定。雖然樣板代碼多但每根線(xiàn)頭都在你手里軟硬件聯(lián)調(diào)的時(shí)候能精確控制每個(gè)環(huán)節(jié)。選型邏輯可以一句話(huà)總結(jié)如果你用的橋接芯片寄存器布局和16550高度相似那復(fù)用8250省事如果芯片有自己的寄存器模型和FIFO機(jī)制那就接受serial_core的樣板代碼自己控制關(guān)鍵路徑。3.3 設(shè)備樹(shù)節(jié)點(diǎn)設(shè)計(jì)RK3399的設(shè)備樹(shù)里SPI主機(jī)節(jié)點(diǎn)是現(xiàn)成的。我要做的是在SPI總線(xiàn)下掛一顆WK2114子設(shè)備。設(shè)備樹(shù)節(jié)點(diǎn)這樣寫(xiě)spi1 { status okay; pinctrl-names default; pinctrl-0 spi1_clk spi1_mosi spi1_miso; cs-gpios gpio3 17 GPIO_ACTIVE_LOW; wk2114: spi0 { compatible wk,wk2114; reg 0; spi-max-frequency 10000000; interrupt-parent gpio3; interrupts 20 IRQ_TYPE_EDGE_FALLING; wk,uart-clk 48000000; wk,default-baud 115200; }; };幾個(gè)字段說(shuō)明cs-gpios把片選指定為GPIO控制而不是用SPI控制器自帶的硬件片選。這樣做的原因是軟件片選能在一次SPI傳輸前后更靈活地控制電平時(shí)序?qū)π酒想姇r(shí)序要求苛刻的場(chǎng)景非常有用。spi-max-frequency一開(kāi)始不要設(shè)太高我建議從1MHz起步確認(rèn)通信正常后再往上調(diào)。wk,uart-clk芯片內(nèi)部UART模塊的基準(zhǔn)時(shí)鐘波特率分頻值是根據(jù)它算的必須與硬件實(shí)際晶振/內(nèi)置時(shí)鐘一致否則波特率會(huì)偏。4. 驅(qū)動(dòng)骨架與數(shù)據(jù)通路從probe到tty設(shè)備這部分是核心代碼層面的拆解。我不會(huì)把完整驅(qū)動(dòng)幾百行貼上來(lái)太長(zhǎng)了但會(huì)把關(guān)鍵路徑上的函數(shù)設(shè)計(jì)思路和容易寫(xiě)錯(cuò)的點(diǎn)講透你把骨架搭起來(lái)后照著填細(xì)節(jié)即可。4.1 probe流程注冊(cè)一個(gè)標(biāo)準(zhǔn)的UART驅(qū)動(dòng)驅(qū)動(dòng)的入口是一個(gè)平臺(tái)驅(qū)動(dòng)/spi驅(qū)動(dòng)但最終注冊(cè)的目標(biāo)是uart_driver。整體流程是spi_driver.probe觸發(fā)拿到struct spi_device解析設(shè)備樹(shù)里的wk,*自定義屬性向內(nèi)核注冊(cè)struct uart_driver名字wk_uart有4個(gè)port為這四個(gè)port填充struct uart_port包括iotype、irq、ops指向我們自己的uart_ops調(diào)用uart_add_one_port把四個(gè)port分別注冊(cè)進(jìn)tty層這一步最重要的一句話(huà)是一個(gè)uart_driver對(duì)應(yīng)多個(gè)port每個(gè)port對(duì)應(yīng)一個(gè)/dev/ttyWKx節(jié)點(diǎn)。WK2114有4路UART就注冊(cè)4個(gè)portport id 0~3硬件上對(duì)應(yīng)芯片的UART0~UART3。4.2 數(shù)據(jù)線(xiàn)uart_ops 里的關(guān)鍵回調(diào)serial_core在數(shù)據(jù)進(jìn)出的關(guān)鍵節(jié)點(diǎn)會(huì)調(diào)用我們實(shí)現(xiàn)的uart_ops這些就是數(shù)據(jù)通路的各個(gè)“閘門(mén)”。發(fā)送路徑主控 - 外設(shè)static void wk_uart_start_tx(struct uart_port *port) { struct wk_uart_port *wkport to_wk_port(port); u8 data; while (!uart_circ_empty(port-state-xmit)) { data uart_xchg_buf(port, port-state-xmit.tail, 0); wk_spi_write_byte(wkport, port-line, REG_TX_FIFO, data); uart_xmit_advance(port, 1); // 檢查T(mén)X FIFO是否滿(mǎn)滿(mǎn)了就停 if (wk_spi_read_status(wkport, port-line) TX_FULL) break; } if (!uart_circ_empty(port-state-xmit)) mod_timer(wkport-tx_timer, jiffies 1); }這段代碼的核心邏輯是從內(nèi)核的circ_xmit環(huán)形緩沖區(qū)里取數(shù)據(jù)逐個(gè)寫(xiě)入芯片的TX FIFO寄存器。寫(xiě)之前要查T(mén)X FIFO是否滿(mǎn)滿(mǎn)了就停用定時(shí)器延后再來(lái)——這樣避免卡死中斷上下文。接收路徑外設(shè) - 主控WK2114有INT引腳所以接收路徑的驅(qū)動(dòng)核心在中斷處理函數(shù)里static irqreturn_t wk_uart_irq_handler(int irq, void *dev_id) { struct wk_uart_device *wkdev dev_id; int i; for (i 0; i 4; i) { if (wk_spi_int_status(wkdev, i) RX_PENDING) { while (wk_spi_read_status(wkdev, i) RX_FIFO_NON_EMPTY) { u8 c wk_spi_read_byte(wkdev, i, REG_RX_FIFO); uart_insert_char(wkdev-ports[i], 0, 0, c, 0); } uart_write_wakeup(wkdev-ports[i]); } } return IRQ_HANDLED; }要注意的是中斷里一次性把RX FIFO讀空。這比每次中斷只讀一個(gè)字節(jié)、然后靠?jī)?nèi)核tty_flip_buffer緩沖要高效得多。芯片的RX FIFO一般只有16字節(jié)如果不及時(shí)讀空下一個(gè)字節(jié)進(jìn)來(lái)就會(huì)覆蓋丟數(shù)據(jù)。4.3 波特率計(jì)算別讓分頻器背黑鍋uart_ops里的set_termios回調(diào)負(fù)責(zé)把用戶(hù)態(tài)設(shè)置的波特率比如9600、115200轉(zhuǎn)換成芯片的分頻值。這個(gè)函數(shù)如果寫(xiě)錯(cuò)了表現(xiàn)是串口輸出的數(shù)據(jù)全是亂碼或者對(duì)面收到的波特率不對(duì)。WK2114這類(lèi)芯片波特率分頻公式一般是static int wk_uart_set_baud(struct uart_port *port, unsigned int baud) { unsigned int divisor DIV_ROUND_CLOSEST(port-uartclk, 16 * baud); u8 quot_l, quot_h; if (divisor 1 || divisor 0xFFFF) return -EINVAL; quot_l divisor 0xFF; quot_h (divisor 8) 0xFF; wk_spi_write_reg(port, REG_LCR, 0x80); // 使能分頻鎖存 wk_spi_write_reg(port, REG_DLL, quot_l); wk_spi_write_reg(port, REG_DLM, quot_h); wk_spi_write_reg(port, REG_LCR, 0x03); // 8N1關(guān)閉分頻鎖存 return 0; }看到熟悉的DLL/DLM就明白了這套寄存器模型是老16550的經(jīng)典玩法。所以即便我說(shuō)“不用8250框架”芯片本身的寄存器語(yǔ)義和16550相通——這并不矛盾框架不用寄存器語(yǔ)義還是可以借鑒的。uartclk我上面設(shè)備樹(shù)里設(shè)了4800000048MHz不同WK芯片的時(shí)鐘來(lái)源不同這個(gè)值錯(cuò)了算出來(lái)的分頻值就全錯(cuò)。調(diào)波特率問(wèn)題的時(shí)候先拿邏輯分析儀抓芯片的TXD腳看實(shí)際波形頻率比什么排查都快。4.4 默認(rèn)波特率與初始化WK2114上電后UART端口并不會(huì)自動(dòng)配置到你要的波特率。必須在startup回調(diào)里做完整的初始化禁用FIFO中斷、清空FIFO、設(shè)置8N1默認(rèn)格式、設(shè)置中斷使能。static int wk_uart_startup(struct uart_port *port) { wk_spi_write_reg(port, REG_IER, 0x00); // 先關(guān)中斷防止初始化中途亂跳 wk_spi_write_reg(port, REG_FCR, 0x07); // 使能FIFO, 清空 wk_spi_write_reg(port, REG_LCR, 0x03); // 8N1 wk_uart_set_baud(port, 115200); wk_spi_write_reg(port, REG_IER, IER_RX_EN); // 開(kāi)接收中斷 if (port-irq 0) { request_irq(port-irq, wk_uart_int_handle, ...); } return 0; }startup在open()設(shè)備時(shí)被調(diào)用。每次串口被應(yīng)用重新打開(kāi)都會(huì)執(zhí)行一遍 startup 和 shutdown所以這段初始化代碼必須寫(xiě)干凈不能依賴(lài)上一次打開(kāi)時(shí)的殘留狀態(tài)。5. 實(shí)測(cè)中的攔路虎SPI時(shí)鐘、片選和FIFO溢出驅(qū)動(dòng)寫(xiě)完之后真正的硬仗才開(kāi)始。我在這塊板子上調(diào)了整整兩天遇到的三個(gè)問(wèn)題每一個(gè)都是典型中的典型。5.1 調(diào)高SPI時(shí)鐘后讀取寄存器全是0xFF現(xiàn)象spi-max-frequency設(shè)1MHz時(shí)能正常讀寫(xiě)寄存器調(diào)到10MHz之后讀回來(lái)的寄存器值全是0xFF。排查鏈路先用邏輯分析儀抓SPI總線(xiàn)發(fā)現(xiàn)MOSI上的數(shù)據(jù)波形明顯畸變邊沿變圓——這就是線(xiàn)纜/布線(xiàn)容性負(fù)載太重高頻下信號(hào)質(zhì)量撐不住。檢查RK3399 SPI引腳的驅(qū)動(dòng)能力配置發(fā)現(xiàn)是默認(rèn)的弱驅(qū)動(dòng)檔。在設(shè)備樹(shù)pinctrl里把SPI引腳的驅(qū)動(dòng)強(qiáng)度提到最高一檔波形立刻改善。更根本的做法把SPI時(shí)鐘降到5MHz配合提高驅(qū)動(dòng)強(qiáng)度穩(wěn)定跑住了。注意在pinctrl-0里除了指定引腳功能spi1_clk等還要看SoC的pinconf支持不支持設(shè)置驅(qū)動(dòng)強(qiáng)度spi1 { ... pinctrl-0 spi1_clk spi1_mosi spi1_miso; };如果SoC的pinctrl有pinconf-single的 bias/drive-strength 配置節(jié)點(diǎn)需要一并加上。經(jīng)驗(yàn)值SPI到轉(zhuǎn)串口芯片的走線(xiàn)長(zhǎng)度超過(guò)3cm時(shí)鐘頻率就別超過(guò)10MHz否則就要端接電阻。5.2 RX丟數(shù)據(jù)高波特率下頻繁溢出現(xiàn)象把外部設(shè)備波特率調(diào)到921600配合SPI時(shí)鐘10MHz連續(xù)收發(fā)100幀丟了一小半。這個(gè)坑不在芯片的FIFO而在我的中斷處理邏輯。排查鏈路一開(kāi)始懷疑是uart_insert_char被調(diào)用太慢被新的中斷打斷。打印實(shí)際中斷觸發(fā)頻率發(fā)現(xiàn)收滿(mǎn)一幀數(shù)據(jù)幾十字節(jié)中斷會(huì)觸發(fā)兩次以上——因?yàn)樾酒琑X FIFO是16字節(jié)幀長(zhǎng)超過(guò)16時(shí)先觸發(fā)一次中斷讀走前16字節(jié)然后剩余字節(jié)又觸發(fā)一次。問(wèn)題出在中斷觸發(fā)邊沿我設(shè)備樹(shù)里寫(xiě)的是IRQ_TYPE_EDGE_FALLING而芯片在收到16字節(jié)、FIFO非空期間INT腳一直是低電平只有清空后才會(huì)拉高。如果是沿觸發(fā)第二次中斷進(jìn)來(lái)時(shí)邊沿可能已經(jīng)被錯(cuò)過(guò)了。把中斷類(lèi)型改成IRQ_TYPE_LEVEL_LOW并且在中斷處理里用while循環(huán)把FIFO讀空再返回。這樣中斷函數(shù)只在FIFO為空后退出天然不會(huì)丟字節(jié)。這是本驅(qū)動(dòng)里最關(guān)鍵的一個(gè)經(jīng)驗(yàn)芯片有FIFO且FIFO數(shù)據(jù)不讀空INT不還原時(shí)一定要用電平觸發(fā)不能用邊沿觸發(fā)中斷里務(wù)必讀空FIFO。如果SPI讀比較慢還可以考慮把spi-max-frequency調(diào)到20MHz來(lái)縮短每次SPI讀的牙縫時(shí)間。5.3 與應(yīng)用層波特率不符亂碼的根因現(xiàn)象應(yīng)用層設(shè)置115200觀(guān)察波形發(fā)現(xiàn)實(shí)際是115613偏差約0.36%雖然沒(méi)超2%的容忍范圍但個(gè)別設(shè)備嚴(yán)格要求時(shí)就會(huì)亂碼。原因WK2114的基準(zhǔn)時(shí)鐘不是精確的整數(shù)分頻比。比如基準(zhǔn)時(shí)鐘48MHz想分頻出115200實(shí)際分頻值是 48000000/(16*115200)26.0417取整26后實(shí)際波特率是115384偏差0.16%。排查鏈路優(yōu)先把基準(zhǔn)時(shí)鐘選為能被常用波特率整除的值。比如12MHz、14.7456MHz、22.1184MHz這些“串口專(zhuān)用晶振頻率”配合芯片內(nèi)部時(shí)鐘源看支不支持。如果芯片允許外接晶體建議直接換成14.7456MHz之類(lèi)的高精度頻點(diǎn)。在set_termios里計(jì)算完分頻值后回讀實(shí)際波特率并打印調(diào)試信息這樣可以快速發(fā)現(xiàn)偏差過(guò)大的組合。很多同學(xué)看到亂碼第一反應(yīng)是改代碼其實(shí)先拿頻率計(jì)/示波器量一下TXD腳的實(shí)際波特率是最快的。5.4 大批量數(shù)據(jù)吞吐驗(yàn)證驅(qū)動(dòng)穩(wěn)定后我用下面這個(gè)命令做了長(zhǎng)時(shí)間壓測(cè)# 板子上把ttyWK0的數(shù)據(jù)重定向到ttyWK2 socat -v /dev/ttyWK0,raw,echo0,b115200 /dev/ttyWK2,raw,echo0,b115200 # 用串口調(diào)試助手往ttyWK0灌數(shù)據(jù) dd if/dev/urandom of/dev/ttyWK0 bs1024 count1000這個(gè)方案的邏輯是板載端把兩路串口短接在一起TXD接RXD形成自發(fā)自收環(huán)路然后通過(guò)數(shù)據(jù)比對(duì)校驗(yàn)是否丟字節(jié)。生產(chǎn)環(huán)境里最常用的還是/dev/ttyWK0接外部串口工具配合crcmod或者minicom做文件傳輸校驗(yàn)。6. 驅(qū)動(dòng)打包與跨平臺(tái)移植為什么發(fā)這個(gè).rar最后聊聊這個(gè)壓縮包本身。很多工程師拿到一份驅(qū)動(dòng)代碼只看.c和.h就完事了其實(shí)一個(gè)能交付的驅(qū)動(dòng)包應(yīng)該是一個(gè)自洽的小工程。這個(gè).rar里我塞了以下幾類(lèi)東西6.1 壓縮包內(nèi)容清單文件/目錄作用wk_uart.c/wk_uart.h驅(qū)動(dòng)主體含uart_ops和SPI讀寫(xiě)助手Makefile編譯內(nèi)核模塊用dts/wk2114.dtsRK3399下的設(shè)備樹(shù)節(jié)點(diǎn)示例dts/wk2114-pinctrl.dtsi引腳復(fù)用配置片段移植時(shí)按平臺(tái)改scripts/load.sh自動(dòng)完成insmod、mknod、權(quán)限設(shè)置scripts/test_uart.py環(huán)路測(cè)試腳本用python的serial庫(kù)做收發(fā)校驗(yàn)README.md編譯步驟、接線(xiàn)圖、注意事項(xiàng)這個(gè)結(jié)構(gòu)照顧到了三種使用者只想快速看到效果的人直接跑load.sh、要移植到其他平臺(tái)的人主要看dts和Makefile、想從零搞懂原理的人完整讀一遍wk_uart.c。6.2 從RK3399移植到其他SoC的注意點(diǎn)如果你不是RK3399而是全志V3s、i.MX6ULL或者樹(shù)莓派改動(dòng)主要集中在這幾個(gè)地方設(shè)備樹(shù)SPI主機(jī)節(jié)點(diǎn)名和引腳復(fù)用需要換成目標(biāo)平臺(tái)的。比如全志V3s可能叫spi1引腳在pinctrl里要定義spi1_pe0之類(lèi)。這是體力活看SoC手冊(cè)即可。中斷號(hào)RK3399上interrupts 20 IRQ_TYPE_LEVEL_LOW里的20是GPIO3_20的IRQ編號(hào)換平臺(tái)要用目標(biāo)平臺(tái)的GPIO中斷映射方式。SPI控制器差異有些平臺(tái)用spi-gpio模擬SPI有些用硬件控制器。驅(qū)動(dòng)代碼里的struct spi_device操作是通用的只要spi-device能被綁定成功剩下的邏輯完全不用改。時(shí)鐘樹(shù)uartclk的值直接填進(jìn)設(shè)備樹(shù)的wk,uart-clk需要和目標(biāo)平臺(tái)選的WK芯片實(shí)際時(shí)鐘一致。移植最關(guān)鍵的原則驅(qū)動(dòng)核心里的wk_uart_ops一行都不要?jiǎng)右獎(jiǎng)拥闹皇窃O(shè)備樹(shù)和平臺(tái)相關(guān)的SPI配置。6.3 一個(gè)容易被忽略的交付問(wèn)題驅(qū)動(dòng)簽名和Secure Boot如果你要部署到開(kāi)了Secure Boot的板卡上編譯出來(lái)的.ko文件必須被簽名否則insmod會(huì)直接被拒絕。這時(shí)候需要把簽名公鑰添加到內(nèi)核密鑰環(huán)或者臨時(shí)關(guān)閉Secure Boot。這個(gè)坑我提一句避免你到產(chǎn)線(xiàn)調(diào)試時(shí)抓瞎。7. 實(shí)測(cè)數(shù)據(jù)與經(jīng)驗(yàn)心得調(diào)試全部完成后我留了一組參考參數(shù)算是這次項(xiàng)目的收尾項(xiàng)目最終值SPI時(shí)鐘8MHz分頻基準(zhǔn)時(shí)鐘48MHz內(nèi)置每路UART波特率最高1Mbps穩(wěn)定3.3V電平下實(shí)測(cè)RX FIFO處理方式電平觸發(fā) 中斷內(nèi)讀空驅(qū)動(dòng)體積單模塊約12KB長(zhǎng)時(shí)間壓測(cè)4路同時(shí)115200收發(fā)48小時(shí)0丟字節(jié)經(jīng)驗(yàn)上最值得記住的三條SPI轉(zhuǎn)串口芯片的中斷腳一定要接而且要用電平觸發(fā)。這是高性能收發(fā)的命門(mén)。先把SPI通信驗(yàn)證扎實(shí)再上串口業(yè)務(wù)。寫(xiě)一個(gè)簡(jiǎn)單的spidev用戶(hù)態(tài)程序用spidev_test把芯片寄存器讀寫(xiě)改成“寫(xiě)一串01、讀回來(lái)校驗(yàn)”的形式能最快驗(yàn)證硬件鏈路有沒(méi)有壞。驅(qū)動(dòng)里所有SPI讀寫(xiě)路徑不要加任何自定義的msleep。SPI操作本身就是同步阻塞的sleep只會(huì)拖垮吞吐。這個(gè)驅(qū)動(dòng)后續(xù)如果想再壓榨性能可以往兩個(gè)方向深入一個(gè)是把SPI讀寫(xiě)改成DMA模式結(jié)合spi_async的異步接口把中斷處理時(shí)間壓到最低另一個(gè)是給每個(gè)port開(kāi)獨(dú)立的內(nèi)核kthread把FIFO搬運(yùn)從中斷上下文挪出去很適合放到高實(shí)時(shí)性場(chǎng)景。不過(guò)那是后話(huà)了先把基礎(chǔ)版跑通你手里的板子能多出四路穩(wěn)定的串口這波就不虧。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产在线综合网| 国产精品天干天干综合网麻豆| 亚洲欲| 无码人妻精品一区二区中文| 中文字幕黄色一起草| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 91在线视频免费中出| 日韩中文字幕视频| 国产精品乱码久久久久| 丝袜综合| 美女诱惑爱爱| 国产AV无码AV| 日韩无码视频黄色| 啊啊啊好舒服视频| 大香蕉青青9| 人妻少妇蜜桃视频欧美一区| 国产小视频91| 黄片aaaaa一区| 中文字幕在线免费观看 | 欧美丰满少妇交换91欧美精品| 国产久久视频| 亚洲另类综合欧美| 激情综合97| 日韩激情中文字幕有码| 无码高清国产AV| 久久久久久久人妻丝袜| 无码九九| 综合一区二区影视| 精品一国2| 日本丝袜美腿人妻九九| 亚洲天堂男人在线| 97色碰| 91精品久久综合熟女| 亚洲欧美另类激情小说| 91第一页| 中文字幕五月婷婷免费| 国产野战露脸在线播放| 日韩卡一卡二卡三在线| 久久社区一区二区三区| 国产成人 综合亚洲 天堂| 蜜臀久久99精品久久久久久酒店| 啊嗯嗯啊好大好爽| 亚洲男人天堂2| 久久久男人的天堂| 日韩AV噜噜噜一区二区三区四区| 亚洲图片欧美另类综合免费视频大大香| 丝袜天堂| 夜精品久无码| 免费超碰97久久| 爱爱动态试试看6 0秒| 国产精品小视频一区二区三区| 午夜一区二区三区国产| 99热只有这里有精品| 国产美女口爆吞精视频| 极品国产内射| 18啪啪手机免费性爱| 日本操逼aaaaa| 亚州熟女乱伦| 中文字幕丰满子伦无码专区在线视频最新| 国产成年女黄特黄| 乱伦熟女专区| 91狠狠色丁香婷婷综合久久精品| 中文字幕视频2区| 区一在线观看| 偷偷人人精品女女久久| 亚州综合在线| 少妇啪啪自拍| 亚洲激情av| 婷婷伊人| 亚洲精品欧洲精品| 内射卯月麻衣| 丰满人妻一区二区三区免费 | 蜜臀中文无码午夜| 欧美综合第一| 亚精品无码毛片一区二区三区| AV久日| 亚洲欧美骚| 国产91福利小视频在线观看 | 国产超碰人人操| 九九色色| 97超碰天天爱天天爱| 亚洲情色在线| 女人天堂网| 国产熟女精品一区二区| 艹精品| 深夜啪啪啪视频免费| 欧美亚洲美少妇一区二区| 日韩欧美资源| 色综合一本| 国产AV毛片| 可以看的av| 国产传媒日本欧美专区| 精品久| 国产成人手机视频激情| 久久精品色欧美aⅴ一区二区| www.色婷婷| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 亚洲一区二区麻豆影院| 99色骚| 无码人妻一区二区三区免费九色| 亚洲日韩成人性爱视频| 2019天天操天天爽天天拍| 91处女在线视频| 3PAV乱伦视频| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 水多多映视AV| 久久婷婷六月综合| 久久亚码| 国产强奸AV在线| 色综合色综合网| 粉嫩AV一区夜夜嗨| 精品78| 99色在线观看| 亚洲男人在线观看天堂| 亚洲操人| 神马久久久久久| 久久久久9| 亚洲蜜臀视频精品久久| 日韩一级性爱无码| 久久日本熟女精品一区| 国产兽交视频在线播放| 天天透伊人| 欧美激情内射| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 亚洲国产丝袜熟女av | 少好三P| 91精品女厕偷拍视频| 九九热男人天堂| 97碰碰色| 天天欧美色| 人妻少妇精品| 精品久久久久,69国产成人精| 91中出在线| 激情视屏国产乱伦强奸| 日日夜夜模| 国产精品免费日韩| 2003天天干夜夜操| 五月天婷婷色色| 日韩色图 一区二区| 女同性恋久久| 超碰97COm中文| 免费精品福利在线观看| 亚洲丝袜少妇在线| 婷婷色影院| 黄色成年| 天天舔九色婷婷| 人妻献身系列第54部| 99久久com免费视频′| 青青草中文字幕| av天堂影视中文在字幕在线中文| 中文字幕一二三| 国产不卡片| 蜜桃狠狠色伊人亚洲综合网站| 青草青青久久久久久国产| 立川理惠被中出无码| 美欧老女人97| 日韩免费性爱视频在线观看| 一级做受视频免费是看美女| 日韩久草| 97九色人妻| 免费a级毛片av无码久久精品中文字幕| 91色爽欧美| 亚洲毛片一级带毛片基地| 99国内熟女露脸视频| www色色com| 国产熟女无套内射| 中文字幕女同在线| 日韩美一区| 国产精品视频自拍在线| 日韩美女高潮喷水视频| 成人精品电影| A 天堂在线观看视频| 日本加勒比无码专区| 丝袜综合| 91neishe| 99精品视频在线观看免费| chaopen97久久| 中文字幕少妇色 | 成年人性爱日韩| 欧美日韩中文视频播放| 久久蜜桃一区二区| 欧美视频激情久久久久久| 婷色五月| 毛片电影一区二区三区| 成人精品久久久午夜福利| 欧美天天在线| 国产农村妇女精品1区二区| 美国日韩黄色片| 欧美极品美女aaaaaa级黄片| 久久一二三四五六七八九区| 欧美日本天堂| 黑丝少妇| 婷婷五月天激情网| 欧美麻豆成人同性GⅤ在线| 蜜臀久久99精品久久久久久无删减 | 性色aV一区二区三区噜噜| 狠操91,com| 大香蕉免| 91人妻丝袜无码| 色色五月天婷婷| 欧美aaaaaaa| 久久成年片色大黄全免费网站| 日韩欧美中文字亚洲慕| 天天操天天射青青草| 最新国产精品久久精品| 欧洲一级性爱视频在线观看| 国产精品久久妻无码网站| 亚州综合色| 亚洲成人在线资源| 99rre在线精品99re8| 欧美 熟女 日韩| 夜夜操天天肏| 插老姨肥穴| 偷拍欧美激情| 欧美亚洲一区二区久久久婷精品大包诱| 婷婷久久综合| 农村妇女一级二级三级视频| 亚洲色五月| 激情视频网址| 91久久国产综合久久| 中文字幕精品区先锋资源| 强奸乱伦AV网站| 少妇高潮流水av免费| a男人的天堂久久一级A毛片| 你懂的在线观看区国产| 免费观看网黄| 亚洲无码一二三区| 成人aⅴ一区二区三区| 国产精品呦一区二区三区| 热无码中文亚洲H一道本一区二区| 97超碰护士| 国产精品 视频| 一起草高清无码| 91久热| 国产美女口爆吞精| 老熟女阿 国产91| 中文字幕在线免费观看 | 欧美大波激情xxxx| 男人a天堂手机在线版| 日本性爱不卡视频| 人人色97| 国产人妻一区二区三区欧美毛片| 亚洲综合小视频小说在线观看| 欧美日韩淫加| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 亚洲天堂另类| 欧美一级黄色免费专区| 最新中文字幕在线亚洲| 亚洲色图殴美色图激情乱伦| 99操| 欧美国产一区二区三区麻豆传媒| 91久久久老司机| 日韩AV一区二区三区三州三州| 亚洲永久AV无码精品秋霞| 亚洲十八禁止| 欧美啪啪色吧在线| 久久激情婷婷| 琪琪精品免费一区二区三区| 伊人综合色网| 国产精品色约约| 老熟女91视频| 日本精品第一视频在'| 日韩乱码Av| 丝袜高跟澳门91视频| 中韩中文字幕在线观看| 美国日韩黄片| 久久综合激情| 亚洲一区制服诱惑| 91精品久久久| 欧美综合站| 成人欧美日超碰| 91美女视频直播| 东京热视频网| 欧美极度丰满熟妇hd| 天天看,天天做| 久久夜嗨| 97人人爱人人乐| 日韩操逼性鲍| 粘花网06av视频| 日日嗨AV一区二区夜夜| 91社区伊人| 亚洲AV永久无码一区仙野| 91九色网| 无码精品啪啪啪一区二区三区三州| 亚洲综合另类| 狠狠操狠狠爱| 欧美美逼| 亚洲天堂无码| 欧美一二在线| 日本人妻伦在线中文字幕| 国产又爽又黄| 老鸭窝日丰县女人| 麻花豆传媒剧国产MV出差| 日韩紧密久久| 青青草好吊色| 九月丁香| 女生久久网| 久久久久久久亚洲Av无码| 熟妇人妻一区二区| 免费视频在线一区二区不卡| 淫淫总合网| 亚洲久久久| 色色色99| 78m成人视线| 蜜臀操逼黄色视频操的好爽| 风月影院男女十八禁| 久久伊人亚洲AV无码网站| 97综合日韩| 亚洲影院成人| 99国产精品久久久在线播放| 欧美久久伊人| 欧美性色欧美| 97超级久久强资源| 粉嫩av在线| 超碰97爽| 日韩精品在线观看观看| 亚洲91大片| 综合 欧美 亚洲 日本| 欧美色图亚洲特色| 国产精品人妻一区二区| 97爱b| 久操网视频| 干B| 五月天黄色激情视频| 尤物视频偷拍免费| 久久久久免费少妇| 国产超碰AV在线精品| 天天综合AV| 亚洲中字幕日本一区二区三区| 96精品在线| 中文字幕天堂在线| 中文字幕一区二区三区蜜桃视频| 日本女优在线视频福利| 国产日韩美女小穴视频网站不卡| 麻豆天美国美国产| 久久‘黄片视频| 久久久999国产精品| 天天视频综合在线观看视频| 992视频一区| 欧美狠狠鲁| 亚洲成a人在线观看久| 亚洲极品| 91美腿丝袜在线观看| 天天看精品动漫视频一区| 嗯嗯啊啊操死我| 免费观看国产不卡av| 97天天插| 伊人五月天青青草婷婷| 中文字幕亚洲永久精品| 91精品国产一区三一| 丝袜性亚洲| 岛国激情视频在线观看| 78操B| 狠狠躁天天躁日日躁| 九九aV| 国产亚洲精品A在线观看下载| 嗯嗯啊啊好大好爽| 伊色综合天堂色97| 中文字幕五月婷婷免费| 清纯唯美亚洲综合| 伦理日韩国产久久| 超硑97精品| 九月丁香综合网| 东北女人操逼| 97欧美日韩综合| 人妻免费观看| 欧美日韩国产电影| 精品国产一区二区久久| 97干在线| 欧美性爱日韩高清| 97超碰人妻| 亚洲熟妇白浆无码AV| 亚洲AV高潮| 91碰碰| 久久香蕉国产线看观看猫咪av| 亚洲国产精品无码AV久久| 综合大香蕉美。| 亚洲av热热色| 神马久久久久久久久久久久| 亚洲综合婷婷| 久久这里是精品| www.av家庭乱伦| 久9精品| av线电影| 日日噜噜夜夜久久亚洲一区二区| 欧美色图亚洲特色| 91 国产丝袜在线放观看 | 欧美在线综合| 男人精品天堂一区| 亚洲自拍欧美色综合| 色情亚洲日本成人| 久久精品一区| 超碰 av 女人天堂| 97干天天| 欧美 亚洲 制服 精品| 婷婷中文字幕| 嗯啊不要在线| 日韩伦理久 久久 清纯| 麻豆AV短剧| 丰满搜索结果 -第18页- 久久高清无码 | 亚洲色棕合| 997色在线| 欧美激情精品久久久| 久久久久久久久国产| 精品国产乱码久久久兰草影视| 青青草原狼av| 中文字幕一区二区三区人妻少妇在线| 一区二区三区网站日日骚| 中文啪啪视频| 久久亚洲人妻| 无码九九| 玖玖久久久| 狠狠操使劲操| 青青伊人这里只有精品| 国产乱伦亚洲| 欧美经典一区二区三区| 丰满岳乱妇一区二区三区| 乱伦av国产| 国产精品午夜高潮呻吟久久av| 日本黄 R色 成 人网站| 一色网男人的天堂| 中文字幕人妻色偷偷久久皮 | 1769成人国产精品视频| 久操网视频| 夜嗨影院| 超碰97欧美在线| 精品少妇一区二区三区免费观看| 嗯~啊~快点 死我视频| 屌妞视频久久久久久久| 高清无码学生妹高潮| 超碰九7免费| 不卡中文字幕aⅴ在线| 不卡中文字幕aⅴ在线| 秋霞一级鲁丝片A片| 久久精品国产亚洲AV无码做| 五月丁香综合网| 国产精品久久久久久夜夜夜| 懂色av中文字幕| 国产一级高清免费观看| 中国国国产一级特黄毛片| 激情综合色| 91在线色| 欧美熟妇精品黑人巨大91| 亚洲无码成人精品| 国产精品国产自产高清AV| 亚洲天天操| 搞中出久久| 亚洲五月婷婷| 97爱b| 少妇蹲下露出大唇5| 九九精品网| 91一区二区三区蜜桃| 成人午夜视频免费播放| 免费看毛片操穴| 欧美久久人妻少妇一区二区| 男人的午夜天堂| 久草免费在线一区二区| 午夜性| 亚洲Av诱惑| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 国产捆绑一区| 99精品久久| 99综合自拍| 九九九九精品| 1024香蕉视频| 国产乱码久久久| 国产一级内射高清视频| 六月婷婷激情| 综合久久2017| 激情婷婷丁香| 人人澡人人干| 日本欧美国内在线| 中日韩久久久免费看| 黄色片,com| 色欲人妻一区二区在线| 韩国免费播放一级毛片| 久久本道| A 天堂| 天天淫人人妻日日色| 日韩欧视频| 亚洲午夜福利在线影院| 夜夜嗨免费视频| 51国产午夜精品视频| 天天综合,91综合永久| 国产精品午夜福利| 国产激情视频在线观看| 日日骚av| 五月婷婷六月激情| 性天堂| 久久久久性熟视频| 妇女性内射冈站HDWWWCOM| www.狠狠操| 婷婷10月天青娱乐| 亚洲无码色| JuliaAnn丝袜熟女系列| 一区二区久久天天干狠狠| 神马久久午夜| 大香蕉欧美伊| 日韩一区二区精彩视频| 亚洲人91| 黄色av一区二区在线| 蜜桃午夜视频一区二区| 91精品91久久久中77777| 激情在线青青操| 国产农村妇女一区二区| 国产h小视频在线观看免费| 亚洲精品一二三四区| 亚洲欧美国产va在线播放频| A一级色女| 婷婷伊人网| 麻豆成人影音在线| 欧美性爱一区二区三区四区 | 无码一区二区精品视频久久久春药| 超碰爽人妻熟女Av| 黑人狂躁日本妞一区二区三区| 国产女人9999| 色哟哟的毛片| 在线A日本| 日韩天天综合| 二对二中文字幕。| 亚洲欧洲综合视频在线| 国产美女在线精品免费看| 国产精品午夜福利视频| 性站 | 欧美另类色| 国产精品99精品视频网站| 久欲AV| 久无码| 午夜福利免费福利视频| 啊啊啊免费视频| 久久久久78| 丁香六月啪| 亚洲熟女精品| 欧美线天码中字| 久久久久久久久久久久久久9999| 亚洲精品国语在线播放| 校园春色 亚洲| 国产美女91视频| 欧洲色色| 亚欧性爱在线无码| 日韩亚洲中文字幕在线| 羞涩视频| 96国产精品| 欧美 青青草| 五月婷婷综合在线| 欧美日韩性爱视屏免费看了| 中文字幕乱码人妻二区三区| 加勒比综合| 国产精品69久久久久孕妇欧美| 蜜臀亚洲中文| 伊人影院中文字幕| 超碰精品在线| 中文自拍欧美影视| 国产极品美女高潮无套在线观看| 天天干天天操天天操夜夜操天天操 | 日韩欧美天天爽爽爽天天爽爽| 精品超碰中文在线| 99热久| 亚洲一本大道中文字幕无码在线| 国产精品永久免费10000| 亚洲天天操| 春色91| 可乐操亚洲蜜911| 啊嗯嗯啊好大好爽| 加勒比五月天| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 人妻AV在线| 人妻熟女av国产网站| www.av在线视频| 九月激情婷婷| 日本免费专区| 夜嗨影院| 亚洲天堂 视频你懂的| 日本色色色视频| 欧美日韩香蕉| 国产91久久九九免费精品无码| 国产99久久99热这里只有精品15 | AV高清一区| 欧美在线色图| 欧美后入视频| 精品无码一区二区人妻久久蜜桃| 亚洲熟女偷拍在线观看| 久久禁| 国产999精品久久久| 日本黄色精品| 日日超碰亚洲| 18禁无码永久免费无限制| 亚洲牲交| 中文字幕精品一区二| 91午夜无码| 亚洲欧综合另类无码一区| 性爱乱伦网址| 欧美成人都市人妻| 欧美18禁91| 97精品视频网站| 人妻少妇久久| 91欧美网| 1级黄色夫妻对换性交免费看| 国产最火爆久久国产网站网站| 370p日韩欧美亚洲精品| 国产激情av女片自拍| 久久九九99| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 精品国产99| 日韩亚洲97| 大香蕉中文在线| 久久透逼视频| 久久一区二区高清免费| 99色| 噜噜噜亚洲精品| 久久久内射良家| 午夜精品久久99蜜桃的功能章节| 国产精品爱欲| 久热99| 亚洲熟妇图片| 997色在线| 色在线视频导航| 天堂8在线新版官网| 91色碰| 超碰欧美97资源| 99无码狠狠久久| 在线观看黄色电话| 欧美综合色站| 国产精品欧美在线观看| 亚洲导航深夜福利| 亚洲日本男人天堂网| 热G综合热G中文| 欧美18 在线观看| 天天综合网站| 天天躁狠狠躁av| 韩日欧亚a级| 日本一区二区三区四区免费观看| 啊啊啊啊啊在线观看网址 | 天天综合精品| 亚洲做性| 嫩草影院性色| 97超视频在线观看| 黄色免费一级在线毛片| 亚洲另类在线观看| 中出20p| 国产女人和拘做爰视频 | 另类欧美综合| 嫖老熟女A片一二三区| 久久爽爽精品| 九九视频黄色片| 狠狠躁AV| 97啪啪| 超碰79人人乐| 亚洲中文字幕熟女少妇一区二区| 欧美婷婷五月天| 欧美日韩人人早| 少妇综合| 夜夜操夜夜爽夜夜高潮| 久久78| 校园春色制服丝袜中文字亚洲 | 免费观看啪视频| 亚洲啪啪啪啪视香蕉| www亚洲免费| 色诱中文字幕| 最新av中文字幕高清| 欧美亚洲激情小说| 大肥女高潮bbwbbwhd视频| 91 手机在线播放 绯色| 好吊色青靑草| 欧美黑人XXXⅩ高潮交| 麻豆成人AV| 久超碰在| 久久内射| 久久久com| 麻豆91熟妇人妻中文字幕茄子| 色情综合网| 久久国产精品m码| 大香蕉碰| 国产偷拍网站| 欧美久久婷婷| 小日子操bb在线看| 97天天插| 噜噜在线| 亚洲国产一级黄色视频| 人人澡综合涩| 天堂无码精品国产久| 欧美色图自拍| 很很干很很操| 亚洲A曰本VA欧美VA视频| 69精品在线| 欧美丝袜中文字幕07在线| 久久美女福利是上海美女| 男生通女生屁股| 荡小穴在线观看| 亚洲国产成人精品999| 99黄页网站| 久久婷婷综合国际产色怕| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 欧美日韩国产色图在线| 先锋女优在线观看视频| 欧美老妇综合网| 人人考人人摸人人干| 国产女人视频三四五区| 成熟熟女国产精品一区二区| 99性爱| 五月婷网站| 亚洲综合97| 亚洲女人毛茸茸91| 综合网欧| 精品妇女一区二区三区| 久久亚洲AV成人精品无码| 日韩无码极品| 99AV| 激情人妻另类| 九九久久国产精品| 黄污污污污| 天天躁日日躁XXXXYY| 乱性AV| 欧色网址| 欧洲站一级二级三级h| 热久久99999| 国产日本熟女顶级一区二区三区视频 | 韩国一级做A片免费的| 欧美区亚洲区偷拍区| 人人妻人人爽| 熟女熟妇一区二区三区视频| 青青草日本中文字幕| AV天天综合| 91美女丝袜诱惑视频| 国产a级午夜毛片| 十八禁av无码免费网站APP| 麻豆久久精品亚洲精品88| 天天摸天天操视频| 青青草一区二区三区四| 久草男人天堂| 国产丰满熟夫69mpp| 熟妇最新先锋一二三区| 精品国产乱码久久久久A| 精品久久人妻成人网| 把腿张开老子CAO烂你| 高清无码在线播放网站| 一级婬片120分钟试看| 亚洲色图综合| 97超碰护士| 中文字幕蜜乳av| 色五月AV| 又大又大又大又粗爽高潮观看| 99re这里只有| 密臀在线一区尤物| 久久久久久久唑| se..亚洲欧美| 98久久| 日韩成人高清一区二区| 久久久久久久强迫| 人人做,人人操,人人摸| 伊人丁香五月婷婷| 又大又长又粗又爽又黄| 国产精品激情久久久久久久| AA特级绝黄| 久久一区二区三区入口| 日本肉体xxxx裸交| 操91| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 日本网色| 人妻熟女字幕一区二区| 丰满人妻一区二区三区在线| 麻豆久久久久久久久丝袜| 97人人爱人人做人人乐| 日韩无码AB| 啊啊啊啊,啊啊好多水| 亚洲春色欧美| 91美女网站| 91深夜夜| 人人考人人摸人人干| 性吧在线视频| 久久亚洲天天做| 日韩 女同 综合| 一本色道人妻久久| 日韩激情无码影院| 日韩一区二区高清在线观看的| 爱媛媛久久国产福利| 99热这里都是精品| 91亚州欧美| 久久9免费视频| 极品色| 欧美极品性爱天天射| 曰韩无码777| 精品免费一区二区三区在线亚洲人成| 日韩精品9999| 18精品一二区| 精品久久久久久AV无码| 亚洲色图殴美色图激情乱伦| 97色色网| #NAME?| 9118禁| 亚洲少妇综合在线播放| 极品色社| 五月天亚洲网| 97精品国产| 麻豆啪啪啪视频| 九九成人精品| 天天干人人乐| 色呦呦呦在线观看视频| 久久发布国产伦子伦精品| 热热色色综合| 成人午夜高潮av猛片| 超碰人人超在线观看| 97se综合网| 大粗鳼巴久久久久| www.91逼逼.com| 91人妻视频在线| 97ai亚洲| 午夜无码精品免费看性色| 国产黄a三级三级三级av在线看| 大香蕉青青9| 中文AV制服乱伦| www.狠狠操| 自拍第一页| 无码天天操| 大香蕉伊在线久草麻豆天堂故事| 伊人网高清| 999岛国大片| 日本一久是| 强奸国产精品视频| 99久久综合| 香港澳门日本三级网站| 激情婷婷五月天| 自拍啪啪视频| 欧美性爱伊人| 九九人妻| 亚洲色图殴美色图激情乱伦| 97在线青| 曰韩精品视频一区二区| 啊啊啊在线观看免费视频| 男女无套 免费网站| 欧洲色色| 欧美日韩亚洲天堂| 99精品无码| 97亚洲在线| 96精品在线| 久操免费在线| 97超级久久强资源| 91啪啪| 中文字幕一区二区三区蜜臀| 麻豆天美91| 素人美腿视频网站| 久久亚洲中文字幕视频| 日韩AV色图| 黄片国产精品一区二区| 91超碰碰在线| 色久桃花影院在线观看| 亚洲青青草| 立川理惠无码一区二区| 91四海无码日韩欧美| 亚洲激情AV| 色欲av国内精品久久久久久| 国产精品青青草| 国产精品4p在线观看| 亚洲天堂情色| 亚洲乱码尤物193YW| 精品国产乱码久久久久久免费| 亚洲操人| 男人的天堂 在线一区| 欧美内射少妇| 天天摸夜夜添无码小视频| 日韩高清一二三| 激情AV| 午夜小电影在线插入淫高潮| 老师充足的奶水小说| 北约熟女超碰| 男人天堂无码| 日韩无码嘿咻黑热久| 亚洲一卡二卡在线免费| 欧美亚洲成人在线一区二区三区| 国产黄色av大片网站| 国产一区在线看| 婷婷激情一区二区三区俺也去| 久操网无码在线| 亚洲春色欧美| 少妇天堂网络| 熟妇操花| 免费精品无码一级毛片牛牛影视 | 午夜啪啪片| 欧美日韩狠狠爱| 国产精品午夜成人福利| 亚洲综合中文字幕有码| 91精品老女人| 综合一区二区影视| 欧美日韩99精品麻豆传媒| 亚洲一区二区三区播放在线| 麻豆天美在线| 青青草色情网站视频| 国产精品青草综合久久| 最新亚洲黄色免费电影 | 精品性爱无码在线播放| 五月婷亚洲精品天堂| 99精品久久久久久| 操逼操逼逼操操逼91| 亚州黄站| 日韩懂色网| 超碰国产在线| 狠狠操夜夜| 欧美精品宗合| 怡红院久久老司机| 区二区亚洲婷| 欧美综合骚| 日本视频在线观看污污污| 免费精品无码一级毛片牛牛影视 | 亚洲天堂精品日韩电影| 亚欧洲一区二区视频| 嗯~啊~快点 死我视频| 婷婷五月天激情网| 欧美激情性久久久久久| 夜夜躁狠狠躁日日躁av| 桃色人妻在线视频| 春色校园综合网| 另类图片五月天| 日本国产高清色www视频在线| 99久久精品国产系列| 免费国产| 蘋果手機免費看成人Av| 男人的天堂.com| 亚洲男人的天堂亚洲| 黄色视频特级毛片| 国产又猛又粗又爽又黄| 免费精品无码一级毛片牛牛影视| 久久久78| 欧美亚洲国产日本在线,久久精品国产| 91原创在线观看| 嗯啊不要在线观看嗯啊| 久久精品亚洲成a人天堂| 综合 欧美 亚洲 日本| yw尤物av无码点击进入麻豆| 大香蕉综合网| 久久久久久性爱免费视频| 亚洲素人综合| 大香交| 久超碰这里只有精品| 免费网色网站| 超碰综合色| 亚洲精品欧洲精品| 啊啊啊啊啊在线视频| 婷婷国产精品九区| 又黄又爽在线观看视频| 日韩草久视频| 超碰日本97美女人妻人人玩人人爱| 国内三级自拍小视频在线观看| 18禁超污无遮挡无码免费网| 欧美日本成人一区二区| AAAA级日本片免费视频| www国产无码| 欧亚日韩中文在线| 伊人国产成人av网站| 69国产对白刺激| 2024黄色视频| 人人操人人摸人人看人人插| 九九热久久99精品re| 中文字幕精品一区二| 99老司机精品视频在线观看| 91丝袜在线观看| jazzjazz国产精品麻豆| 中文字幕美女91| 黑人精品XXX一区一二区| 免费又黄又裸乳的视频| 无码精品人妻一区二区三区妖精 | 久久妇| 欧美黑人168页欧美黑人167| 综合网少妇| 少妇高潮九九九九| 国产高清亚洲日韩一区| 久热影视| 国产一区二区啪啪视频| 丁香色婷婷| 粉嫩国产精品久久久| 2026国产精品视频| 蜜桃网熟妇| 国产精品不卡高清在线观看| 最新av网站在线观看| 精品中文字幕第一页| 再深点灬舒服灬太大了好硬好爽| 五月丁香色情| 91欧美成人色站| 99最新日韩偷拍视频| 色九久| 26uuu偷拍亚洲欧洲综合| 日韩AC| 一本一道人妻久久一区二区三区| 传媒免费一区二区三区| 亚洲欧美综合图片| 精品无码欧美三级| 人人做人人妻人人夜视频| 美女尤物福利视频| 精品久久九| 熟妇色99| 日韩Va亚洲va欧美Ⅴa久久| 久久丁香五月婷婷| 欧美国产一区二区三区麻豆传媒| 青青草成人视频在线观看二区| 五月天人妻综合| 日韩免费av片高清无码| 天天操天天舔| 秋霞男人网| 草草草视频| 色狠狠 - 百度| 宅男午夜在线视频| 欧美78P| 国产一区二区精品久久99| 日韩女优在线| 久久这里只精品| 亚洲av国产av综合av卡| 五月天综合网| 欧美亚洲清纯| 天天综合-91入口| 一区三区啪啪| 欧色性第一页| 久久久日本电影| 人人摸人人叼| 国产熟女二区| 啪啪综合网| 26uuu成人影片| 亚洲精品日日夜夜52| 中文字幕久久精视频久久大全| 97se亚洲| 色牛牛AV| 久久精品电影| 成人小说视频在线精品欧美| 丁香五月天婷婷姐| 老鸭窝成人免费毛片视频| 久草国产在线视频| 国产丰满少妇久久久精品影院| 91人妻在线视频| 自拍鲍鱼一区在线高清观看免费| 亚洲男人天堂2013| 久热影视| 91美乳| 国产精品又黄又猛又粗| 九九热九九热| 亚洲欧美另类小说| 婷婷午夜| 少妇无码999| 欧美日韩91| 96国产精品| 97久久超碰| 亚洲伊人青青草| 亚洲第一狼人丝袜美女另类| 欧美曰韩国产精品| 青娱乐老司机视频| 夜夜夜久久| 高清有码一区二区| 99re这里只有精品3| 日韩小电影| 婷婷日韩一区二区三区中文字幕在线| 欧美日韩亚洲天堂| 欧美中出1| 久久久啊啊啊| 天天综合91在线| 日韩欧美加勒比| 欧美久久九九| 日本中文熟女视频| 综合网欧| 伊人精品久久网站| 精国久久一区二区三区98| 成人三一级一片aaa| 中文久久96| 亚洲国产欧美中文永久| 久久三区四区| 熟女人妻一区二区三区| 国产精品农村妇女精品| 天天干天天干天天干| 日本精品五区| 嫩草 人人网精品| av网站在线观看了| 久久久久极品| 五月丁香成人网| 超碰免费人妻人人| 亚洲精品一区二区免费在线观看| 日本不卡高清视频| 久久九九97| 91网亚洲| 国产精品久久久久久 百度| 综合熟妇一区二区三区| 久久啊哟| 久久亚洲AV无码专区国产精品 | 成年人三级黄色片视频| 97久久久久久久久久| 亚洲免费看片| 黑人精品XXX一区一二区| 超碰久在线天天做| 色优久久| 老司机天天操| 中文字幕一区二区无码成人 | 久久亚洲中文字幕视频| 91少妇通奸网站| 亚洲中文国际强奸字幕| 91欧美经典| 老女人老91妇女老热女| 调教熟妇 久久久久久| AV乱伦专区| 啊啊啊啊免费视频| 性色av一区二区| 免费在线观看AV无码网站| 日韩成人无码| 午夜福利 成人 91| 中文97国产| 韩国一级做A片免费的| 欧美黄色手机在线观看| 88在线一区二区三区| 久久久久久久久久久久久久久性生活视频 | 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 亚洲天堂中文字幕无码男同| 91社区拍啪人妻| 香蕉综合网| 人妻精品一区一区三区蜜桃91| www.一本大99| 屌色在线97视频| 欧美日韩性爱无码| 99久久久久久亚洲精品不卡| 欧美亚洲首页| 亚洲永久AV无码精品秋霞| 国产玖玖| 91粉嫩萝控精品福利网站_精品影音先锋国| 91av熟女人妻| 噜噜噜噜久久久精品免费| 亚洲天堂日本| 午夜天堂精品久久| 日韩欧美女优电影| 欧美精品久久久久久久久88| 午夜乱轮操逼视频免费看| 极品另类| 中文字幕第7页| 啊啊啊啊啊舒服| 色男人色天堂东京热| wwe 天天干.com| 女人爽到高潮久久久| 9l视频自拍9l九色成人| 一区二区三区精品视频| 国产精品美女在线一区| 2023天天操夜夜操| 蜜桃狠狠色伊人亚洲综合网站| 精品99999| 婷婷伊人綜合中文字幕小说| 97在线精品观看视频| 亚洲春色一区二区三区| 色狠狠一区二区三区香蕉| 青青草玖玖爱| 亚洲精品天天影视综合网| 粉嫩国产精品久久粉嫩| 99这里有精品| 玖玖色综合| 亚洲福利中文字幕在线| 日韩卡一卡二卡三在线| 性色av大全| 欧美爆乳精品一区二区| 欧美性性性| 91久久国外网| 超碰在线97国产| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 色图四区| www.男人的天堂| 好吊色综合| 欧美一级黄色免费专区| 男女无套 免费网站| 三级日韩一区二区三区| 一本精品日本在线视频精品|