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

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(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)源碼專為需要擴(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)組織方式為同類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總線外擴(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總線底下各掛七八個(gè)傳感器節(jié)點(diǎn)一路RS232接老式PLC數(shù)一下這已經(jīng)6路出頭了而且有些還帶流控、有些波特率還不一樣。主控原生資源被瓜分干凈再想加設(shè)備就得想別的路子。擴(kuò)展串口的三條路線對(duì)比方案優(yōu)點(diǎn)缺點(diǎn)適用場(chǎng)景USB轉(zhuǎn)串口如CH340/FT232即插即用Linux自帶驅(qū)動(dòng)占用USB帶寬線材多供電和信號(hào)質(zhì)量易出問(wèn)題臨時(shí)調(diào)試、桌面級(jí)設(shè)備I2C轉(zhuǎn)串口如SC16IS752接線少占用引腳少I2C速率偏低高波特率下吞吐不足低速、對(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)一下就掉線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框架的話用戶態(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從滿變空時(shí)INT引腳會(huì)拉低通知主控來(lái)處理主機(jī)側(cè)訪問(wèn)芯片本質(zhì)上只有兩種操作寫(xiě)寄存器和讀寄存器。SPI轉(zhuǎn)串口芯片的寄存器布局通常分兩類一類是全局控制寄存器比如中斷狀態(tài)、復(fù)位控制另一類是每路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)銷會(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中斷腳必須接否則只能輪詢晶振按手冊(cè)要求有的型號(hào)需要外部晶振有的是內(nèi)置RC如果INT腳沒(méi)接到主控驅(qū)動(dòng)就退化成純輪詢模式除非你跑在很低波特率下否則丟數(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ù)路線對(duì)比路線一利用 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)。路線二基于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ù)。自由度大但樣板代碼多。路線三完全繞過(guò)內(nèi)核串口框架寫(xiě)一個(gè) misc/char 設(shè)備自己維護(hù)一個(gè)字符設(shè)備把SPI讀寫(xiě)邏輯全部包在驅(qū)動(dòng)里用戶態(tài)通過(guò)open/read/write/ioctl訪問(wèn)。優(yōu)點(diǎn)是代碼最短、最快出效果缺點(diǎn)是你得自己處理termios波特率、數(shù)據(jù)位、停止位、流控自己處理poll/select自己處理內(nèi)核并行訪問(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 直接訪問(wèn)。WK2114是SPI寄存器操作你要把“讀一個(gè)寄存器”的動(dòng)作變成“發(fā)一筆SPI讀事務(wù)”這中間塞進(jìn)去的適配層最終會(huì)讓你改到懷疑人生。而serial_core則給你留了更大的自由度波特率怎么算、數(shù)據(jù)怎么發(fā)射、中斷怎么處理全由你的uart_ops決定。雖然樣板代碼多但每根線頭都在你手里軟硬件聯(lián)調(diào)的時(shí)候能精確控制每個(gè)環(huán)節(jié)。選型邏輯可以一句話總結(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總線下掛一顆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層這一步最重要的一句話是一個(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ù)線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是否滿滿了就停 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是否滿滿了就停用定時(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é)把用戶態(tài)設(shè)置的波特率比如9600、115200轉(zhuǎn)換成芯片的分頻值。這個(gè)函數(shù)如果寫(xiě)錯(cuò)了表現(xiàn)是串口輸出的數(shù)據(jù)全是亂碼或者對(duì)面收到的波特率不對(duì)。WK2114這類芯片波特率分頻公式一般是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ě)干凈不能依賴上一次打開(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總線發(fā)現(xiàn)MOSI上的數(shù)據(jù)波形明顯畸變邊沿變圓——這就是線纜/布線容性負(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)串口芯片的走線長(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)收滿一幀數(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ò)了。把中斷類型改成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觀察波形發(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這些“串口專用晶振頻率”配合芯片內(nèi)部時(shí)鐘源看支不支持。如果芯片允許外接晶體建議直接換成14.7456MHz之類的高精度頻點(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里我塞了以下幾類東西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à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之類。這是體力活看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)線調(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用戶態(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ò)那是后話了先把基礎(chǔ)版跑通你手里的板子能多出四路穩(wěn)定的串口這波就不虧。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情婷婷五月天在线观看| 人人爽欧美婷婷久久久五月丁香| 涩综合网| 五月丁香福利| 99热伊人| 天天色,天天操,天天射| 五月天婷婷丁香成人网| 久久爱婷婷| 日韩久综合| 涩五月婷婷| 精品99在线观看| 激情影院丁香五月| 一本久道综合色婷婷五月| 婷婷九月丁香| 深爱激情网婷婷| 777精品久无码人妻蜜桃| 国内裸舞二区| 五月婷久草| 亚洲色五月婷婷| 五月 激情视频| 91九色成人原创视频| 色婷婷色五月天| 9在线9在线婷婷在线国产| 天天操夜夜橾| 色人久久| 啪啪啪丁香五月| 五月天综合婷婷| 91九色中文| 激情99热| Jh7Uf088VHafNm| 日本在线wwww| 丁香五月婷婷啪啪| 成人色图情色成人网 www.5b5b5bcom 五月天 | 26UUU欧美激情一区二区| 日韩美女在线视频19| 国产精品色| 伊人久久婷| 婷婷丁香十月| 俺去也五月| 婷婷涩五月| 东京热免费视频| 成人婷婷色五月天| 丁香婷婷五月综合影院| 男同91| 丁香五月欧美激情| 久久网站免费亚洲| 中文字幕av亚洲| 中文字幕在线日亚洲9| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 久久久精品色色色| 婷婷综合激情| 2022久久婷婷| 成人做爰A片免费看网站找不到了| 99热最新网址| 五月丁香大香蕉| 大战熟女丰满人妻AV| 色播激情五月天| 97人妻碰碰碰久久久久-最近国语高清| 久久9久| av色婷婷| 91人无码久久久久久| 亚洲婷婷91丁香| 美女100%露全身无挡网站| 色婷狠狠| 黄桃AV无码免费一区二区三区| 欧美这里只有精品| 另类综合网| 亚洲一个色| 五月天伊人久久| 99精品成人无码A片观看金桔| 女人被男人吃奶到高潮| 五月婷婷免费在线观看视频| 色五月婷婷啪啪五月| 五月丁香婷婷基地| 激情爱爱网站| 婷婷五月丁香花综合| 日本久久激情| 久久天天| 久久99成人性爱高清视频| 五月丁香六月婷| 激情五月天99色| 色五天综合| 五月天激情国产综合婷婷婷| 久久激情五月婷婷| 99精品久久| 日日操夜夜爽| 开心五月天激情网| 在线视频激情网站| 99热只有| 丁香婷婷人妻综合网| 激情五月天在线观看色婷婷| av无码电影| 天天日色情| 色欲天天综合网| 亚洲综合婷婷| 精品激情| 天天日,天天干,天天操| 五月丁香六月婷综合成人综合| 99热这| 伊人狠狠操| 五月天天丁香婷婷在线中| 99热新网址| 五月天大香蕉AV| 久草免费福利视频| 99re免费视频| 色五月婷婷五月天激情综合| 99免费热视频在线| 日日.c| 色九九九九| 丰满熟女人妻一区二区三| 一级A片天天操夜夜操| 五月综合亚洲色| 亚洲AV人人操| www.激情五月天。com| 97婷婷狠狠| 久久久久8888| 午夜丁香丁香婷婷| 婷婷丁香五月天综合网| 久久99这里只有精品视频| 日操五月婷| 99re思思精品视频在线观看| 色婷婷丁香五月丁香| 九九这里只有精品| 另类丁香综合| 丁香婷婷视频一区二区| 成人综合网站| 熟女激情网| 久久爱婷婷| 婷婷五月天伊人| 久久香蕉丁香| 亚洲人人操| 大香蕉伊人丁香五月| 婷婷五月天激情小说| 就爱射中文字幕资源网| 综合亚洲五月天| 成人欧美一区二区三区在线观看| 五月婷AV| 日韩高清成人| 天天干天天拍| 色综合播放| 丁香六月婷婷色XXXXX| 欧美成人日韩| 激情五月婷婷免费视频| anquye五月| 激情五月天小说| 天天弄天天操| 狠狠狠狠狠干| 在线一起草av| 5月丁香啪啪啪| 国产免费一区二区在线A片视频| 91在线视频观看午夜福利| 啪啪综合网| 亚洲久久日| 天天做天天爱天天爽| 九九热99在线视频| 九九综合九九| 久久96热| 久色激情| 亚洲亚洲人成综合网络| se99热久久一本| 婷婷久热| 亚洲成人黄色网| 色色色热| 老师的粉嫩小又紧水又多A片视频| 久久综合五月天激情小说网站 | 国产av网| 色婷网| 五月久久噜噜| WWW.桔色成人.COM| 午夜69成人做爰视频| 亚洲mm免费| 色婷婷超碰| 99这里有精品免费| 97碰人人操| 超碰狠狠操| 丁香五月婷婷综合激情哟哟哟| 五月婷在线观看| 三年高清大片免费观看国语| 亚洲成人中心| 日日操人人操| 激情五月丁香五月| 墨西哥毛片内射精| 另类天堂| 五月丁香六月婷婷精品| 六月丁香啪| 久久久91| 天天干狠狠艹| 五月天婷婷色色| 久久99草五月婷婷| 丁香 婷婷五月| 激情五月婷婷丁香| 无码激情AAAAA片-区区 | 岛国在线观看91| 超碰av天堂| 五月丁香六月婷婷中文版| 六月天婷婷| 99色综合| 日日噜噜夜夜狠狠久久丁香六月| 99视频这里有精品免费观看| 日本熟妇乱妇熟色A片蜜桃| 狠狠爱婷婷色| 亚洲色婷婷视频| 色色A| 亚洲天堂大香蕉| 日本综合久久| 欧美日朝成人| 色九九九九| 91久久精品国产91性色TV| 超级碰碰91| 五月婷婷九月婷婷九月婷婷| 国产成人精品一区二三区熟女在线| 色色综合激情| 激情五月天激情综合网| 91色呦哟| www,欧美干干干干干干| 婷婷香蕉| 色热久资源| 狠狠干综合| 久久婷婷免费| 激情综合网亚洲色图| 色五月天综合网| www,超碰| 五月丁香六月婷婷网| 无码激情AAAAA片-区区| 五月天激情站| 亚洲激情综合| 99视频精品视频| 超碰在线人人| 五月丁香久久网| 六月婷婷五月丁香| 久久嘟嘟丁香| 国产成人AV在线播放| 一级内射毛片| 亚洲色婷婷五月天| 无码网站视频| 五月婷婷激清网| 色狠狠综合| 成人网在线视频| 久色欧美| 性爱网六月丁香| 天天操夜夜爱| 婷婷字幕在线| 岛国AV网| 六月婷婷视频| 天天弄天天操| 欧美激情中文字幕| 久久92| 色婷婷AⅤ| 这里只有精品网| 最新无码专区| 激情色视频| 五月天大香蕉av| 丁香五月婷婷亚洲综合精品在线| 青草青草视频2免费观看| 丁香五月网站| 国产FREESEXVIDEOS性中国| 婷婷啪啪| 性做久久久久久久免费看| 五月丁香手机在线| 五月天婷婷综合网| 五月婷婷色吧!| 久久婷婷五月天激情新地址| 丁香六月亭亭久久综合| 9久操| 天天天天天天操| 超碰9在| 99九九视频精彩在线| 偷拍91九色| 九月婷婷激情| AV伊人青草丁香六月| 婷婷五月激情图片| 久久 这里只有精品1| 亚洲激情四射色| 久久女人九九| 五月婷婷综合在线| 综合激情伊人影视在线| AA片在线观看视频在线播放| 婷婷五月天在线综合| 丁香婷婷综合喷| 五月丁香婷婷综合| 日本97在线观看| 99热在线观看| 久久久亚洲精品一区二区三区浴池 | 婷婷五月天久久久| www.五月婷婷| 激情五月婷婷色播网| 中文字幕网伦射乱中文| 久久久久丁香婷婷五月天| 天堂综合久久| 97自拍视频在线| www.人人操人人看人人想人人摸 人人人人操,COM | 色欲AVV| 日日夜夜狠狠操| 啪啪操超碰| 亚洲日日操| 天天舔天天摸天天射| 色色婷婷丁香| 婷婷免费精品视频| 超极99精品| 五月丁香777| 五月天丁香婷| AA片在线观看视频在线播放| 婷婷五月天精品| 久久久久激情| 99在线资源视频| 人妻久久久久| 色婷婷香蕉在线| 26uuu精品一区二区| 99啪| 成人超碰网| 99色色视频| 久久丁香五月综合六月激情红杏视频| 99九九这里有免费视频| 久色网| www.五月天性.com| 色5月婷婷色| 五月综合激情网| 日日夜夜天天综合| 亚洲日韩人妻操逼| 天天肏天天肏天天肏| 狠狠色综合网| 五月婷婷五月天| 综合五月天亚洲婷婷| 九九久久玖玖爱| 亚洲永久免费| 丁香五月婷中字幕| 好好日激情五月天| 久久狠狠干| 欧美日韩精品人妻狠狠躁免费视频 | 色色综合激情| 国产精品第一国产精品| 丁香五月婷婷激情网| 婷婷舔| 色激情五月| 野战J办公桌椅H| 91超碰在线播放| 五月天激情国产综合AV| 免费无码毛片一区二区A片| 天天婷婷| 婷婷五月偷拍| 色久在| 色五月婷婷操逼| 婷婷丁香日韩五月| 国产精品大香蕉| 婷婷五月天影视首页| 丁香婷婷六月天| 超碰超碰在线| 亚洲激情五月| 人人摸人人干| 国产无套精品一区二区| 五月天激情综合| 99亚洲视频| 五月婷婷九月婷婷九月婷婷| 丁香五月激情六月| 专区无日本视频高清8| 九九热99熟女| 婷婷丁香五月天激情| 天天色五月| 99精品激情| 国产操肏网站| 色婷婷最新域名| 一起草AV入口| 无码激情AAAAA片-区区| 激情综合五月丁香| 婷婷丁香人妻天天爽| 九九热最新| 日日撸日日操| www.sezonghe| 激情 婷婷 插| 99性爱无码| 五月天另类综合网| 天天草天天舔| 婷婷免费成人视频| 日操| 丁香六月天AV| 亚洲成人AV高清字幕| 色色亚洲| 亚洲精品又粗又大又爽A片| 97中文在线| 婷婷五月综合啪| 99热地址| 婷婷 伊人 久久| 久久久久人妻网址| 精品人妻一区二区| 五月天天久久香| 草五月| 无人精品在线视频| 人人草人人舔| 99久超碰| 狠狠爱综合网| 九九99久久| 伊人啪啪网| 99久久9| 五月丁香婷婷久久| wwwss在线观看| 天天爽综合| 久久机热这里只有| 99思思热只有在这里看| 五月婷精品| 天天爽日日爽夜夜爽| 婷婷丁香综合成人| 六月激情久久| 精品成人久久久久久久_一二三四视| 日韩色五月| 日本三久久| 99在线69| 色婷婷激情| 色五月激情五月| 日韩艹比| 九九精品re免费视频| 黄色五月婷| 99re热在线观看| 久热免费视频| 免费看欧美成人A片无码| 国产午夜精品AV一区二区麻豆| 国产肥白大熟妇BBBB视频| BBWCUCKOLD精品熟妇| 精品亚洲国产成AV人片传媒| 欧美色偷偷大香| 99丁香五月婷婷在线| 久久3p| 国产一级片| WWW五月天| 艾小青av| 91视频综合网| av九九| 超碰九热| 久久狠狠干| 99久久精彩视频。| 成人九九视频| 日本九九视频| 亚洲精品字幕在线观看| 91精品久| 中文字幕在线日亚州9| 久一这里有精品国产| 毛片新网地| 久久婷婷五月天蜜桃| 99色热视频| 婷婷色网| 超碰人人99| 婷婷大香蕉| 亚洲AV无码久久精品色欲| 丁香 婷婷 亚洲 熟女| 婷婷五月天天爽| 五月婷婷综合视频| 婷婷五月丁香激情图片| 日本va欧美va欧美va精品| 狠狠色婷婷丁香六月| 五月婷婷六月丁香在线| 天天干天天拍| 国产操逼网站| 91九色超碰| 九九人人自拍| 婷婷色日本| www热久久yy9| 国产性av| 91天天操天天干天天射| 亚洲欧州色情在线观看| 在线观看中文字幕| 丁香97综合| 婷婷欧美偷拍综合| 亚洲熟妇无码乱子AV电影| 天天操夜夜操| www.久久爱.c n| 久久99热这里只有精品23| 天天综合在线网| 久久婷婷六月综合综合| 五月天久久激情| 久婷婷五月丁香在线观看| 婷婷五月视屏| 疯狂做受XXXX高潮A片动画| 91超级碰人人操| 丁香五月婷婷啪| 第四色五月天| 成人AV在线中文版| WWW,激情五月天,COM| 激情五月婷婷开心网| 色噜噜综合网| 六月丁香停| 天天撸夜夜爽| 久久丁香五月婷婷| 色婷婷伊人| 天天舔天天摸视频| 国产精品第一国产精品| 成人视频一区| 九九热婷婷| 婷婷五月天社区| 婷婷五月激情小说| 超碰伊人碰婷婷五月| 色五月天堂| 99久久综合| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 综合激情五月天| 色偷偷色婷婷| 岛国AAAV| 亚洲mm色| 丁香网站| 亚洲无码成人网| 玖玖五月| 任你干嘛免费视频播放| 79色色| 日本猛少妇色XXXXX猛叫| 爽极品色| 婷婷五月综合社区| 激情九色| 九九热免费视频| 免费观看日韩成人av| sewuyue第四色| 国产精品色| 狠狠久久婷五月| 狠狠干,狠狠操| 久久久日韩特色特黄AAAA| 婷婷激情鹿城五月天| 丁香婷婷深情五月亚洲| 亚洲精品99| 六月婷久久| 99久久精品亚洲综合| 色五月综合激情| 五月丁香六月婷婷操操操| 免费看欧美成人A片无码| 亚洲色情久久| 九九亚洲| 天天综合亚洲综合网天天αⅴ| 丁香六月激情综合| www.99视频| 日韩AV片| 久操人妻| 99亚州综合精品成人网| 五月6香色婷婷视频| 久99热| 日本啪啪天堂| 色五月婷婷综合| 人妻AV在线| 色播丁香| Xx色综合| 香蕉久久国产AV一区二区| 天天色天天干天天插| 丁香五月成人| 丁香五月久久综合| 猫咪伊人AV| 79色色| 久久久九九视频精品18| 网站免费一站二站| 久久大香蕉同僚| 高清视频一区| 美女亚洲五月丁香| 色色啊| 久久图色4| 五月丁香婷婷五月| 婷婷丁香五月天影院 | 色欲丁香| 免费的日逼视频| 99在线精品免费视频| 色五月视频无码播放| 色婷丁香91| 超碰熟女拍拍| 99re在线视频| 色色婷婷丁香| 色五月婷婷DVD| 激情婷婷五月综合| 操逼视频一区| 99热在线里有精品| 99福利视频导航| 日日撸夜夜操| 欧美一级色| 玖玖在线视频| VfJxEwPH| 五月婷婷欧美| 极品人妻VIDEOSSS人妻| 亚洲天天| 超碰免费在线| 97干在线视频精品店| 另类综合色| 亚洲丁香花色| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 婷婷激情五月天在线视频| 久操欧美在线观看97| 丁香六月婷婷一区二区三区| 黄网网站在线播放| 夫妇交换刺激做爰| 综合网五月| 99re6热在线精品视频播放速度 | 九九精品丁香花| 色婷婷天堂| 色五月无码| 久热精品9999| 99色精品| 丁香婷婷视频一区二区| 婷婷亚洲综合| 五月天婷婷av| 99色热| 久久99成人性爱高清视频| 狠狠五月天| 天天操夜夜爽| 久久激情视频| 亚洲色频| 能看的av| 99热这里只有精品5| 日本va欧美va欧美va精品| 综合久久丁丁香婷| WWW.99热| 五月婷av| 国产99精品免费视频| 色婷婷综合网| 久草a片| 天天插天天干| 五月天伊人| 888精品福利地址| 五月丁香婷婷激情四射迷人| 男女啪啪做爰高潮无遮挡| 99热这里只有精品3| 99热99网| 99热网址| 九九精品9| 久久机热/这里只有精品| 26uuu另类亚洲欧美日本一| 99久在线精品99re8热| 99热伊人综合| 无码日本精品XXXXXXXXX | 黄色成人网站在线播放| 婷婷五月天成人综合网| 天天肏屄夜夜爽| 91porn一起草| 无毒黄色网址| AA片在线观看视频在线播放| 人人摸人人摸| 欧美成人日韩| 久久er99| 久久成人天| 青青草原中文字幕| 国产操B视频| 男同色五月开心五月激情五月| 九色视频91| 伊人久久大香蕉网| 色婷婷婷婷五月天| 五月天色网站| 午夜 外网 精品 在线| 久热综合| 97超碰在线免费观看| a免费在线| 国色天香成人网| 青草五月天| 最新久久网址| 超碰爱爱爱| 五月天激情亚洲| 99亚洲大片精品永久在线观看| 久久这里只有国产| 婷婷色在线| 色五婷婷| 婷婷激情在线| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 精品综合网在线| 无码日本精品XXXXXXXXX| 激情五月天影院| 67194成I人在线观看线路1| 激情第四色| 色五婷婷开心缴| 五月丁香龟婷婷| 日日激情网| 丁香五月婷婷激情123| 丁香丁香激情网| 激情五月天在线观看婷婷| 五月婷婷丁香综合| 五月婷婷色色色| 久久精品视频99| 日本色天堂| 久热黄色| 婷婷五月丁香久久| 91精品丝袜久久久久久| 五月丁香色色网| 欧美人久久| 美女激情综合| 综合激情五月天| 色婷婷综合视频| 丁香五月色情| 深情六月婷婷综合久久| 婷五月丁香| 欧美性爱特黄一级aaaassss| 天天天添天天操| 五月婷婷九| 亚洲aV写真天天综合网久久| 丁香五月婷婷在线观看| 26uuu国产| 97干在线播放| 激情五月天婷婷丁香| 五月天丁香网| 中文字幕 中文字幕明步| 婷婷伊人久久无码色五月| 亚洲操女| 午夜成人在线免费视频| 国产ava| 天天开心天天色| 久久黄色免费视频| 婷婷五月天熟妇| 五月天天爱| 九九干视频| 99热18| 精品一二三区久久AAA片| 乱乱av| 爱狠射| 欧美精品啪啪| 色色色在线免费视频| 天天撸夜夜爽| 五月婷婷中文字幕AV| 热热色色五月天婷婷| 99热亚洲| 秋霞少妇AV网站| 在线五月婷| 九九久久高清| 99热九九这里只有精品| 中文字幕丁香五月| 丁香五月综合AV在线| 五月婷婷人人人操| 日本猛少妇色XXXXX猛叫| 校园春色亚洲色| 色99在线看| site:901-07.com| 丁香婷婷伊人| 九九99九九99九九99视频网| 99成人| 秋霞九九无码| 亚洲综合色色| 欧洲亚洲欧洲99久久| 中文av网| 婷婷五月天在线观看| 99久久久久| 日本韩国视频在线观看社区免费的9| 美腿丝袜AV天堂网| 天天摸.天天mo| 色停停五月天| 丁香在线视频| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 婷婷天天插天天爱| 91精品久久久久、久五月天| 五月丁香婷婷综合| 欧美久人人| www.激情五月天.com| 激情综合网五月激情| 亚洲六月色| 激情五月婷婷丁香综合网| 日本91在线| 五月婷婷之美女图片| 色情综合网| 秋霞九九无码| 色狠狠五月天| 婷婷五月综合网| 日日日日日| 视频一二区| 热久久视频99| 国产成人亚洲综合A∨婷婷| 日韩小视频在线99| 九九热这里只有精品31| 国熟女视频| 九九婷婷网五月天| 色播综合| 五月丁香综合中文| 99久热这里有精品| 欧美在线97| 天天干电影| 五月婷av| 九九在线视频| 亚洲乱码日产精品BD在线观看| 久久综合久色欧美综合狠狠| 色婷婷丁香五月在线| www色综合| 少妇性按摩无码中文A片| 五月丁香花激情综合网| 狠狠操狠狠干综合| 天天插天天插| 91久久久久久| 五月婷婷九| 一级A片天天操夜夜操| 99在线观看精品视频| 婷婷终合色图| 深情五月天| 人与禽A片啪啪| 99热在线播放| 庭庭久久内射| 婷婷五月六月丁香| 亚洲色婷婷视频| 国外亚洲成AV人片在线观看| 日本99热| 激情综合区| 丁香五月婷婷天堂大香蕉| 激情网婷婷婷| 成人αV视频免费观看| 99在线观看亚洲| 久热91| 日本久久超碰| 久久婷婷五月| 亚洲色图啪啪| 久久这里有精品视频| 99噜噜噜在线播放| 色色啊| 久久免费精彩视频| 操碰91| 人妻人人操| 9久久久久久久久久久| 色五月婷婷网| 综合伊人久久| 日日干夜夜干| 久久久久久99精品无码| 天天干,天天日| 中文字幕黄色片| 色五月自偷自拍婷婷婷婷| 久久婷婷五月综合伊人| 最新国产AV| 亚洲丁香五月在线观看| 97超碰,人人舔,人人操,人人摸| 色五月激情五月丁香五月婷婷啪啪综合 | 色情网综合| 激情图片99| 五月天成人综合| 大香婷婷| 久久久久婷| 日本欧美国产| 亚洲六月婷婷| 我爱大香蕉| 五月婷婷色五月| 五月丁香爱婷婷深深| 婷婷亚洲综合| 五月婷婷开心深| 少妇人妻人伦A片| 99精品视频在线| 丁香88AV五月婷婷| 五月天激情子轮| 无码人妻一区二区一牛影视| 中文av网站| 2015WWW永久免费观看播放| 五月丁香影院| 另类视频综合| 丁香婷婷久久| er99免费视频在线| 久热re视频在线观看网站| 久久婷婷五月综合色和| 五月婷免费视频| 五月丁香激情婷婷| 亚洲国产精品VA在线看黑人| 丁香五月日啪| 色综啪啪网| 欧美成人网99网| 激情五月天的婷婷| 五月婷婷基地| 日本在线免费中文com.| 色色色香蕉五月婷| 日日杆天天| 婷婷色九月| 五月丁香影院| 思思久久99热只有频精品66| 伊人九九综合| www.五月天婷婷| 操逼在线视频| 婷婷九月丁香天堂丁香天堂| 久久久久婷婷| 色播播之激情五月婷婷| av不卡网站| 成人视频在线免费播放| 精品视频这里只有精品| 久久婷婷五月综合色丁香花| 丁香五月天激情综合| www.超碰在线| 九九亚洲天堂| 日本3级片一区2区| 激情五月丁香综合蜜桃| 在线观看日韩12345区| 99九九视频| 99视频精品视频| 婷婷六月丁综合| 五月婷亚洲精品AV天堂| 在线色五月婷婷| 第五婷婷伊人丁香| 五月激情小说| 99九九精品视频| 91碰免费视频| 亭亭五月基地在线| 狼人狠狠操| 亚洲婷婷乱乱丁香| 亚洲综合999| 高清无码网址| 色亭亭五月天丁香综合AV - 百度 - 百度| 另类图片天天影视在线观看| 五月日韩中文字幕| 久久伦乱| 色婷婷色久综| 97碰碰视频| 免费无码毛片一区二区A片 | 国产亚洲成AV人片在线| 九九热免费| 五月激情婷婷开心| 丁香无月在线观看| 久久玖玖99| 激情开心五月天| 99在线小视频| 欧美激情Va| 97五月婷婷| 538在线精品| 超碰在线精品| 开心婷婷五月中文字幕组| 99热在线观看| 人人草碰| 国产片XXXXA片国语对白| 欧洲一区二区| 久久久人妻门| 激情五月深爱五月观看| 国产精品视频网| 777米奇影视第四色| 超碰免费大香蕉| 影音先锋人妻出差| 久久精品爱爱| 色99色| 九九九激情网| 国产精品色| 97碰碰在线观看视频| 另类国产综合| 激情小说五月天社区丁香 | 一区=区操屄高清大全av| 五月天婷婷久久| 五月婷婷久久大香蕉| 丁香五月婷婷激情中文| 99区视频| 人人操99| 91互操| 色婷综合| 五月停性愛| 夜夜操狠狠操| 可以直接看的AV| 99热免费| 久久er99| 久久婷婷婷婷伊人| 成人色站,在线视频,看片-SS1AV| 五月婷在线影院| 色99免费视频中文| 日韩一级| 国产黄色在线观看| 这里只有精品久久| 久久伊人五月天| 香蕉国产2013| 91精品久久久久、久五月天| 可以直接看的AV网站| 五月情四婷婷| 婷婷久久午夜网| 久久久WWW| 久久久久久99精品无码| 精品动漫 无码av| 成人国产网| 日日噜噜夜夜狠狠久久丁香五月| 国产激情久久| 五月婷婷七月丁香| 99在线观看视频免费| 激情五月丁香五月| 色五月大香蕉婷婷| 超碰一区二区| 婷婷字幕在线| 99久久97| 激情五月婷婷色综合| 成人丁香五月天| 国产一二三四五六七八视频| 夜夜夜夜做天天天做无码视频| WWW色五月天| 激情网战码亚洲A| 五月天无码| 亚洲六月色婷婷| 久草丁香婷婷五月天婷| 五月停亭久久电影| 婷久久久| 久久综合综合综合| 激情五月婷婷她| 玖玖玖婷婷婷| 欧美色色日韩| 九九九九九九毛片| 丁香五月婷婷Av| 9有码中文| A片一曲| 色999亚洲人成色| 婷婷八月激情| 欧美色骚婷婷五月天| 亚洲五月六丁香激情| 五月天色婷婷小说| 青青福利网| 日韩欧美一级大黄网站| 夜夜操天天干| 天天综合色| 五月丁香好婷婷A片网| 五月天堂婷婷| 五月色丁香| 亚洲乱码精品久久久久..| 中字幕视频在线永久在线观看免费| 无码少妇高潮喷水A片免费| 桃色成人网| 激情五月婷婷色综合| 日本色色影院| 啪啪综合| 久久婷婷五月国产色综合激情| 99热这里只有精品21| 亚洲AAA| 精品免费99| 综合图片色色| 国产精品日本一区二区在线播放| 类似婷婷激情综合网站| 亚洲在线操| 九九亚洲| 超碰成人黄色网| 亚洲天堂青草| 欧美性爱一区| 欧美五月丁香在线| 丁香五月在线观看综合| 婷婷五月花丁香| 99热免费精品| 4399成人黄A片| 碰超亚洲| 久久色五月| 色欲婷婷夜夜| 玖玖资源站视频| 伊人玖玖网| 91色色色| 91丨九色丨国产| 日韩精品一区二区亚洲AV观看| 亚洲高清在线| 东北婷婷五月天| 激情五月综合婷婷| 91精品综合久久久久久五月丁香| 黑人巨粗进入警花疼哭A片| 天堂网亚洲色图| 无码人妻电影| 六月丁香婷婷尤物| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 婷婷丁香成人五月天| 嫩草AV久久伊人妇女超级A| 午夜无码精品色综合久久| 欧美激情五月天| 91人妻PORNY九色大屁股| 激情五月婷婷丁香综合网| 狠狠爱婷婷爱| 天天摸日日舔狠狠添婷婷婷 | 99乱视频| 这里只有精品久久| 91人人看| 99re热视频这里只有综合亚洲| 五月天自拍视频| WWW.夜夜操.com| 97色色在线视频| 五月天另类视频| 9色天堂| 欧美狠狠草| 99热久| 精品一二三区久久AAA片| 色久一| 怡红院99| www.射伊蕉婷婷| 嫩草AV久久伊人妇女超级A| 99久在线精品99re5热视频| 日韩抽插操逼| 色婷婷国产精品综合在线观看| .精品久久久麻豆国产精品| 97干婷婷| 色婷婷五月亚洲| 99热在线精品观看| 丁香五月婷婷www..com| 激情五月图| 天堂综合久久 | 91美女被操| 99爱在线| 丁香六月 婷婷六月| 丁香五月中文字幕色播| 99视频在线观看地址| 91精品无码| 日日操夜夜骑| 8090在线影视少妇| 色五月91| 五月天六月婷婷| 天天躁日日躁狠狠躁日日躁2022年5月9日| 成年人夜夜喷水| 日韩99色99| 极品少妇高潮啪啪AV无码| 性视频久久| 婷婷五月天激情免费在线观看| 99热精品在线在线| 丁香婷婷五月激情| 综合网视频| 美女婷婷激情亚洲| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 久久婷婷伊人| 五月婷婷啪啪啪| 亚洲视频图片婷婷五月| 中字幕视频在线永久在线观看免费| www.婷婷亚洲基地| 天天爽天天爽视频| 综合色在线| 久一这里有精品国产| 色综合久久久久| 99热销国产这里有精品| 新伍月婷婷| 99人妻碰碰久久久禁片| 丁香五月六月久久综合| 五月情婷婷| 亚洲国产99| 激情综合色婷婷啪啪五月天| 日本色99| 久婷视频| 五月丁香激情婷婷综合| www.狠狠| 91狠狠色丁香婷婷综合久久精品| 五月天综合激情网| 1234操逼网| 欧美婷婷五月| 热91久| 激情综合4月| 激情六月综合| 欧洲亚洲免费视频9| 色五月婷婷五月天| 九月丁香欧美综合| 深情五月天| 婷婷福利影院| 五月天电影网| 国产69精品久久久久999小说| 天天弄天天爽| 婷婷五月天视频| 欧美激情综合| 国产激情久久久| 99ri精品视频在线观看| 九九热啪啪| 久久综合中文字幕| 天天操综合网| 大天天伊人| 99热66| 婷婷色操| 4438激情网| 玖玖在线| 天天噜日日噜综合无码| 久久 婷婷 五月天| 久99在线视频| 玖玖无码中文| 婷婷综合网| 婷婷五月丁香基地在线视频官网| 婷婷综合色色| 综合网色| 深爱激情五月网| 六月激情久久婷婷| 五月婷婷激情| 五月丁香六月激情网| 伊人久久大香线蕉精品| 久8色色| www网站在线观看| 蜘蛛女侠2003满天星免费观看| 开心久久网婷婷| 亚洲婷婷欧美婷婷| 日韩精品超碰在线观看| 超碰成人在线观看| 任你草| 五月丁香六月激情综合| 五月丁香在线国产 | 婷婷丁香色情| 九月婷婷综合| 激情五月婷婷综合| 激情五月丁香在线观看直播| 丁香六月婷婷操逼网| 79精品视频| 日韩日比视频| 超碰在线人妻| 狠狠色婷婷7| 日韩成人中文| 开心色五月天久久久久久久| 日本九九网| 久久五月综合| 六月伊人婷婷| 久久久久视剧HD| 色情五月天丁香社区| 在线播放成人网站| 成人做爰A片免费看网站找不到了| 色情播放| 亚洲色五月婷婷| 99ri国产| 丁香成人综合| 久久日曰| 五月丁香婷婷啪啪| 激情综合色五月六月婷婷| 婷婷情色五月| 激情四射婷婷| 立川无码av| AV亚洲在线| 欧美视频五区| 九九99视频精品| 国产高清视频91九九九久久久| 九月婷婷激情| 99热精品少| 久久38视频| 97资源碰碰| 逼逼AV| 欧美啪啪五月天| 深爱五月激情五月| 五月停停丁香| 日韩av在线电影| 亚洲欧洲中文日韩久久AV乱码| 激情五月六月婷婷| 啪啪一区| 狠狠爱五月婷婷综合六月| 六月丁香色色| 丁香五月骚喷水视频| 六月丁香激情| 激情五月天色色| 91成人性爱视频| 色丁香五月天射婷婷爱婷婷| 2050人人操免费工开爱 | 九热视频| 丁香九月婷婷色| 武则天精品久久| AV色色天堂中文| 99ri精品| ss视频xx91| 就是色婷婷五月亚洲色| 玖玖综合色区在线观看| 久久大香蕉| 2025年最新亚洲在线欧美| 亚洲综合久| 丁香亭亭激情四射| 婷婷久久色| 五月天成人小说| www.91.com处女在线直播| 99色免费| 成人无码精品1区2区3区免费看| 天天色粽合合合合合合合| 开心五月婷婷六月丁香| 九九色大香蕉| 五月婷婷很很色| 思思热在线播放| 六月丁香五月天| 六月婷婷无码观看| 影音先锋毛片网站| 久99在线| 伊人在线视频| 激情五月婷| 日逼免费视频| 六月99天天婷婷激情综合| 丁香香蕉婷婷| 国产成人AV| 91chinese在线| 夜夜骑天天操| 能看的AV网站| 欧亚洲在线高清视频| 97在线日本| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 这里只有精品久久| 久久婷婷色色| 操人妻视频91| 五月色丁香婷婷中文字幕| www久| 婷婷中文字幕网| 99热爆在线| 五月激情综合网| 99日本精品视频热| 欧美色色色色色| www激情网| 狠狠干天天内射| 91九色精品女同系列| 久艹伊| 国产97在线日韩亚洲女人被黑人巨大| 天天干,夜夜爽| 九九九热精品| 99精品免费| 色99热| 婷婷丁香激情| 五月丁香视频在线观看| 99色在线| 激情丁香社区| 国产精品视频免费看| 色青五月天|