免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

Linux串口觸摸屏接入全解析:從UART配置到輸入子系統(tǒng)

Linux串口觸摸屏接入全解析:從UART配置到輸入子系統(tǒng) 前陣子把一塊 7 寸串口觸摸屏接到 ARM Linux 主板上時(shí)我以為這個(gè)活半小時(shí)就能搞定。畢竟板子內(nèi)核里已經(jīng)帶了 8250 串口驅(qū)動(dòng)屏幕模塊自己也有觸摸功能接上 UART 之后無(wú)非就是在應(yīng)用層發(fā)指令、讀坐標(biāo)。結(jié)果真正調(diào)起來(lái)才發(fā)現(xiàn)Linux 下做串口屏和單片機(jī)上完全是兩碼事。設(shè)備樹(shù)里串口引腳的 pinctrl 沒(méi)配好觸摸坐標(biāo)上報(bào)到 Linux 輸入子系統(tǒng)之后的映射關(guān)系也是錯(cuò)的跑一會(huì)兒還會(huì)丟字節(jié)。折騰了兩三天最后問(wèn)題基本都在內(nèi)核配置和輸入子系統(tǒng)接入方式上反而屏幕本身沒(méi)出什么幺蛾子。這次就把我做 Linux 串口觸摸屏的完整設(shè)計(jì)和排錯(cuò)過(guò)程總結(jié)一下給后面要做類似方案的朋友一個(gè)參考。主題圍繞 Linux 內(nèi)核如何正確支持串口屏、串口觸摸數(shù)據(jù)怎么變成標(biāo)準(zhǔn) Linux 輸入事件以及這個(gè)過(guò)程中容易踩到的各種坑。1. 串口屏項(xiàng)目的技術(shù)邊界Linux下不是“接上就能用”1.1 串口屏與普通LCD的本質(zhì)差異很多人剛接觸串口屏?xí)r會(huì)有一個(gè)思維慣性覺(jué)得屏幕就是顯示設(shè)備要么走 HDMI、要么走 RGB/MIPI最多再加個(gè) I2C 觸摸芯片。但串口屏的原理完全不同。它本身就是一塊帶 MCU 的獨(dú)立顯示模組內(nèi)部有自己的顯存、字庫(kù)和控件庫(kù)主控只需要通過(guò)串口發(fā)一條“顯示一張圖”“設(shè)置某個(gè)文本控件”之類的指令剩下的渲染工作全部在屏幕內(nèi)部完成。這帶來(lái)一個(gè)非常大的好處Linux 側(cè)不需要維護(hù) framebuffer也不需要關(guān)心分辨率、刷新率、圖層疊加這些復(fù)雜功能。整個(gè)過(guò)程看起來(lái)就是“打開(kāi)一個(gè)串口設(shè)備往里寫指令再讀取返回”。但也正因?yàn)槿绱薒inux 內(nèi)核側(cè)的工作邊界變得很微妙。你不需要去寫一個(gè) LCD 控制器驅(qū)動(dòng)但你必須保證串口設(shè)備穩(wěn)定可用、數(shù)據(jù)不丟、觸摸事件能進(jìn)入 Linux 標(biāo)準(zhǔn)的輸入子系統(tǒng)。否則就會(huì)出現(xiàn)“屏幕顯示正常但觸摸點(diǎn)了沒(méi)反應(yīng)”這種最尷尬的局面。1.2 Linux側(cè)要解決的三層問(wèn)題接串口屏?xí)r我習(xí)慣把問(wèn)題拆成三層來(lái)看。第一層是硬件載體層。串口屏一般走 TTL 電平的 UART少數(shù)工業(yè)場(chǎng)景會(huì)轉(zhuǎn) RS232 或者 RS485。這一層要做的事情包括確認(rèn) SoC 的 UART 引腳是否被其他外設(shè)占用、設(shè)備樹(shù)里的串口節(jié)點(diǎn)是否使能、波特率和校驗(yàn)位是否和屏幕一致。內(nèi)核側(cè)主要涉及 pinctrl、串口驅(qū)動(dòng)、設(shè)備樹(shù) aliases。第二層是數(shù)據(jù)通道層。串口屏的通訊協(xié)議通常是一幀一幀的里面可能有幀頭、命令字、長(zhǎng)度、負(fù)載、校驗(yàn)和、幀尾。Linux 的read()是流式讀取不保證一次拿到完整的一幀所以需要一個(gè)狀態(tài)機(jī)或者緩沖機(jī)制來(lái)拼包。這一層可以在用戶態(tài)做也可以寫一個(gè)內(nèi)核模塊做 line discipline。第三層是輸入事件層。這是 Linux 串口屏和單片機(jī)串口屏最大的區(qū)別。單片機(jī)可以直接把觸摸坐標(biāo)拿去用但 Linux 下各種圖形框架Qt、GTK、Flutter默認(rèn)從/dev/input/eventX讀取輸入事件所以串口屏上報(bào)的觸摸數(shù)據(jù)必須轉(zhuǎn)換成標(biāo)準(zhǔn)的input_event結(jié)構(gòu)。要么通過(guò) uinput 從用戶態(tài)注入要么在內(nèi)核里注冊(cè)一個(gè) input device 驅(qū)動(dòng)。這三層只要有一層沒(méi)做對(duì)整個(gè)系統(tǒng)用起來(lái)就會(huì)很別扭。2. 內(nèi)核側(cè)支持串口屏UART設(shè)備樹(shù)、驅(qū)動(dòng)與DMA配置2.1 先讓tty節(jié)點(diǎn)穩(wěn)定可用的關(guān)鍵配置內(nèi)核對(duì)串口屏的支持核心其實(shí)就是“把串口這個(gè)基礎(chǔ)外設(shè)整利索”。以 ARM Linux 上常用的設(shè)備樹(shù)為例一個(gè)串口節(jié)點(diǎn)往往要打開(kāi)兩樣?xùn)|西status okay和對(duì)應(yīng)的pinctrl。uart3 { pinctrl-0 uart3_tx_pins uart3_rx_pins; pinctrl-names default; status okay; };看起來(lái)簡(jiǎn)單但實(shí)際板卡上會(huì)有很多隱性沖突。最常見(jiàn)的是這個(gè)串口被內(nèi)核 console 占用了。很多 BSP 默認(rèn)把consolettyS0,115200寫在內(nèi)核啟動(dòng)參數(shù)里而ttyS0恰好就是要接串口屏的串口。這時(shí)候即使你的應(yīng)用能打開(kāi)/dev/ttyS0內(nèi)核日志也會(huì)時(shí)不時(shí)地往這個(gè)串口上吐數(shù)據(jù)屏幕就會(huì)間歇性亂碼。解決方式有三個(gè)換一個(gè)不沖突的串口節(jié)點(diǎn)比如把串口屏接到ttyS1。修改console啟動(dòng)參數(shù)讓內(nèi)核日志輸出到別的串口。用earlycon或者獨(dú)立調(diào)試串口把普通串口完全釋放給業(yè)務(wù)。另一個(gè)我踩過(guò)的坑是設(shè)備樹(shù)里串口的時(shí)鐘和別名。有些平臺(tái)需要配置clocks屬性否則串口波特率計(jì)算會(huì)偏差很大例如 115200 實(shí)際跑出來(lái)是 110000 左右屏幕端就會(huì)一直亂碼。調(diào)試時(shí)可以先在內(nèi)核 dmesg 里看串口驅(qū)動(dòng)的初始化信息確認(rèn)最終的波特率分頻系數(shù)是否符合預(yù)期。2.2 串口驅(qū)動(dòng)選型與調(diào)度依賴Linux 下最常見(jiàn)的串口驅(qū)動(dòng)是 8250 系列和 PL011 系列。8250 通常對(duì)應(yīng)兼容 16550A 的 UART很多 x86 板卡和部分 ARM SoC 都走這一套PL011 則是 ARM 平臺(tái)常見(jiàn)的驅(qū)動(dòng)比如樹(shù)莓派和一些基于 AMBA 總線的 SoC。這兩個(gè)驅(qū)動(dòng)在內(nèi)核 config 里的選項(xiàng)不一樣CONFIG_SERIAL_8250y CONFIG_SERIAL_8250_CONSOLEy CONFIG_SERIAL_AMBA_PL011y CONFIG_SERIAL_AMBA_PL011_CONSOLEy如果裁剪內(nèi)核的時(shí)候漏掉了對(duì)應(yīng)選項(xiàng)系統(tǒng)可能連/dev/ttyS0或/dev/ttyAMA0都不會(huì)出現(xiàn)。檢查的時(shí)候不要光看有沒(méi)有這個(gè)設(shè)備節(jié)點(diǎn)還要確認(rèn)驅(qū)動(dòng)有沒(méi)有真正 probe 成功。串口屏對(duì)實(shí)時(shí)性的要求其實(shí)不高但觸摸體驗(yàn)對(duì)“連續(xù)上報(bào)”很敏感。如果系統(tǒng)負(fù)載高用戶態(tài)讀串口的線程被調(diào)度器長(zhǎng)時(shí)間掛起觸摸事件就會(huì)一陣一陣地卡。比較好的做法是把讀取線程設(shè)置成高優(yōu)先級(jí)實(shí)時(shí)線程或者用poll/select加超時(shí)的阻塞式讀取不要用忙等循環(huán)。Linux 的串口驅(qū)動(dòng)內(nèi)部有等待隊(duì)列機(jī)制poll會(huì)在數(shù)據(jù)到達(dá)時(shí)喚醒進(jìn)程這對(duì)觸摸讀取已經(jīng)足夠。2.3 DMA/FIFO的取舍與實(shí)測(cè)效果內(nèi)核里的串口驅(qū)動(dòng)為了降低中斷頻率一般都會(huì)打開(kāi) FIFO常見(jiàn) 16550A 的 FIFO 是 64 字節(jié)。但串口屏的數(shù)據(jù)量其實(shí)很小觸摸坐標(biāo)動(dòng)靜也就幾十個(gè)字節(jié)顯示指令一般也不會(huì)超過(guò)幾百字節(jié)所以 FIFO 溢出風(fēng)險(xiǎn)并不高。另外很多 BSP 會(huì)默認(rèn)給串口打開(kāi) DMA 支持。DMA 能夠把數(shù)據(jù)從 UART FIFO 搬到內(nèi)存減少 CPU 中斷但在某些平臺(tái)上反而會(huì)帶來(lái)問(wèn)題DMA 描述符分配失敗、緩存一致性問(wèn)題、或者 DMA 通道和別的驅(qū)動(dòng)沖突。實(shí)際測(cè)試下來(lái)如果只是接一塊串口觸摸屏關(guān)閉 DMA 讓數(shù)據(jù)走傳統(tǒng)中斷FIFO系統(tǒng)更穩(wěn)。關(guān)閉方式因平臺(tái)而異有一些是在設(shè)備樹(shù)里配置dmas屬性為空或去掉dma-names有些是內(nèi)核 config 里關(guān)閉CONFIG_SERIAL_8250_DMA。關(guān)鍵判斷依據(jù)是看實(shí)測(cè)是否丟字節(jié)。我曾經(jīng)遇到一個(gè)平臺(tái)開(kāi)著 DMA 時(shí)串口屏的觸摸坐標(biāo)偶爾多出幾個(gè) FF 字節(jié)關(guān)了 DMA 之后連續(xù)點(diǎn)了半個(gè)小時(shí)都沒(méi)出現(xiàn)異常。這種問(wèn)題排查起來(lái)很耗費(fèi)時(shí)間不如一開(kāi)始就按“數(shù)據(jù)量小就關(guān) DMA”的原則處理。3. 串口協(xié)議解析策略內(nèi)核處理還是用戶態(tài)處理3.1 串口屏通信數(shù)據(jù)幀的基本模樣串口屏品牌很多協(xié)議也各不相同但常見(jiàn)協(xié)議的結(jié)構(gòu)往往差不太多。拿市面上主流的幾類串口屏來(lái)說(shuō)發(fā)送指令一般是“幀頭 命令 參數(shù) 幀尾”觸摸上報(bào)則是“幀頭 觸摸狀態(tài) X坐標(biāo) Y坐標(biāo) 幀尾”。假設(shè)某串口屏的觸摸包格式是這樣0xAA 0x01 0x00 0x80 0x01 0x2C 0x00 0xFF 0xFF 0xFF其中0xAA是幀頭0x01表示觸摸按下后面0x0080是 X 坐標(biāo)大端0x012C是 Y 坐標(biāo)0xFF 0xFF 0xFF是結(jié)束標(biāo)志。不同品牌會(huì)有不同設(shè)計(jì)有的用長(zhǎng)度字段有的用 CRC16 校驗(yàn)有的用累加和校驗(yàn)。解析時(shí)務(wù)必先看明白兩個(gè)問(wèn)題這條協(xié)議是定長(zhǎng)的還是變長(zhǎng)的有沒(méi)有校驗(yàn)字段定長(zhǎng)協(xié)議解析最簡(jiǎn)單每次讀到固定字節(jié)數(shù)就能處理變長(zhǎng)協(xié)議需要根據(jù)長(zhǎng)度字段來(lái)循環(huán)讀。校驗(yàn)字段也不能忽略工業(yè)環(huán)境下的串口線經(jīng)常會(huì)受干擾沒(méi)有校驗(yàn)的協(xié)議很容易出現(xiàn)“觸摸亂跳”。3.2 兩種解析路線的對(duì)比這里有一個(gè)經(jīng)常被問(wèn)到的選擇串口協(xié)議解析到底放在內(nèi)核里還是用戶態(tài)我的回答是默認(rèn)放用戶態(tài)。理由有三個(gè)調(diào)試方便。用戶態(tài)程序可以隨便printf可以用腳本模擬串口屏回包不用反復(fù)重新編譯內(nèi)核。協(xié)議迭代快。串口屏廠商偶爾會(huì)出固件升級(jí)波協(xié)議微調(diào)用戶態(tài)改起來(lái)成本低。內(nèi)核社區(qū)不建議在驅(qū)動(dòng)里維護(hù)業(yè)務(wù)協(xié)議。內(nèi)核自帶的大量串口驅(qū)動(dòng)只負(fù)責(zé)數(shù)據(jù)搬運(yùn)不解析業(yè)務(wù)幀。但有一種情況我會(huì)考慮寫內(nèi)核模塊屏幕觸摸事件需要參與系統(tǒng)的休眠喚醒策略。比如系統(tǒng)休眠后串口屏來(lái)觸摸事件要喚醒系統(tǒng)這時(shí)候用戶態(tài)進(jìn)程已經(jīng)被凍結(jié)無(wú)法及時(shí)處理就必須在中斷/驅(qū)動(dòng)層做事件檢測(cè)。另一個(gè)場(chǎng)景是觸摸數(shù)據(jù)量極大用戶態(tài) read 已經(jīng)成了性能瓶頸雖然這種情況在串口屏項(xiàng)目里很少出現(xiàn)。同時(shí)也要提醒一點(diǎn)有一些想“玩得高級(jí)”的人會(huì)試圖動(dòng)態(tài) hook tty 設(shè)備的file_operations攔截read和write來(lái)實(shí)現(xiàn)串口數(shù)據(jù)過(guò)濾甚至透明加密。這種思路確實(shí)能解決問(wèn)題但風(fēng)險(xiǎn)很高。內(nèi)核里隨便替換file_operations很容易造成引用計(jì)數(shù)混亂而且不同內(nèi)核版本的tty_operations結(jié)構(gòu)體定義不一致升級(jí)一次內(nèi)核就要重新適配。與其這樣還不如正兒八經(jīng)注冊(cè)一個(gè) line discipline把串口數(shù)據(jù)流在鏈路層做自定義處理。3.3 粘包、斷包與狀態(tài)機(jī)解析串口本身是字節(jié)流不是“一包一包”的。用戶態(tài)調(diào)用read()時(shí)有可能一次拿到半包數(shù)據(jù)也有可能一次拿到兩包數(shù)據(jù)。這就叫斷包和粘包。很多初次做串口屏的人吃了這個(gè)虧——以為read()返回多少字節(jié)就是完整的一幀結(jié)果發(fā)現(xiàn)坐標(biāo)偶爾錯(cuò)亂。正確做法是引入一個(gè)簡(jiǎn)單的狀態(tài)機(jī)逐字節(jié)處理enum parse_state { ST_IDLE, ST_HEAD, ST_CMD, ST_LEN, ST_DATA, ST_TAIL }; for (size_t i 0; i len; i) { switch (state) { case ST_IDLE: if (buf[i] FRAME_HEAD) state ST_HEAD; break; case ST_HEAD: if (buf[i] FRAME_HEAD) // 連續(xù)兩個(gè)幀頭按協(xié)議處理 continue; cmd buf[i]; state ST_CMD; break; // ... 其余狀態(tài)處理 } }另外還需要一個(gè)超時(shí)機(jī)制。如果收到半個(gè)包之后就再也沒(méi)有后續(xù)字節(jié)一定要在超時(shí)后復(fù)位狀態(tài)機(jī)否則下一個(gè)幀頭到來(lái)之前會(huì)一直卡在中間狀態(tài)。這個(gè)超時(shí)的經(jīng)驗(yàn)值一般取“若干個(gè)字節(jié)間隔”串口波特率 115200 時(shí)5~10ms 超時(shí)就已經(jīng)足夠。解析完成之后還可以順便在/proc或/sys下導(dǎo)出一些統(tǒng)計(jì)信息比如收了多少幀、校驗(yàn)錯(cuò)誤多少次、解析成功多少次。這樣在客戶現(xiàn)場(chǎng)出了問(wèn)題時(shí)能快速判斷是協(xié)議解析問(wèn)題還是電磁干擾問(wèn)題。4. 從觸摸數(shù)據(jù)到標(biāo)準(zhǔn)input事件串口觸摸屏接入Linux輸入子系統(tǒng)4.1 evdev/input子系統(tǒng)的基礎(chǔ)Linux 下幾乎所有輸入設(shè)備——鍵盤、鼠標(biāo)、觸摸屏、遙控器——最終都會(huì)通過(guò) input 子系統(tǒng)向上層報(bào)事件。用戶空間的圖形庫(kù)經(jīng)常監(jiān)聽(tīng)/dev/input/eventXevdev就是這一層的內(nèi)核驅(qū)動(dòng)。串口屏的觸摸功能要跟 Linux 生態(tài)無(wú)縫配合就得把坐標(biāo)上報(bào)到 evdev。接入方式有兩種用戶態(tài)通過(guò) uinput 模擬輸入設(shè)備或者內(nèi)核態(tài)寫一個(gè) input driver。uinput 的優(yōu)點(diǎn)是極其靈活int fd open(/dev/uinput, O_WRONLY | O_NONBLOCK); ioctl(fd, UI_SET_EVBIT, EV_KEY); ioctl(fd, UI_SET_KEYBIT, BTN_TOUCH); ioctl(fd, UI_SET_EVBIT, EV_ABS); ioctl(fd, UI_SET_ABSBIT, ABS_X); ioctl(fd, UI_SET_ABSBIT, ABS_Y); ioctl(fd, UI_DEV_CREATE); struct input_event ev {0}; ev.type EV_ABS; ev.code ABS_X; ev.value x; write(fd, ev, sizeof(ev)); ev.type EV_SYN; ev.code SYN_REPORT; ev.value 0; write(fd, ev, sizeof(ev));用 uinput 時(shí)核心邏輯就是解析串口幀 → 算出真實(shí)坐標(biāo) → 寫一個(gè)input_event→ 發(fā)送SYN_REPORT。這個(gè)鏈路非常清晰而且不用改內(nèi)核、不用重新編譯設(shè)備樹(shù)適合大多數(shù)商業(yè)項(xiàng)目。內(nèi)核態(tài)的 input driver 適合對(duì)延遲極其敏感、或者需要深度休眠喚醒的場(chǎng)景。實(shí)現(xiàn)上大致是注冊(cè)一個(gè)input_allocate_device()創(chuàng)建的設(shè)備設(shè)置好ABS_X/ABS_Y的最小值和最大值然后在一個(gè)內(nèi)核線程或中斷上下文里調(diào)input_report_abs()和input_sync()。這種方法要求你對(duì)內(nèi)核模塊開(kāi)發(fā)有足夠的把握否則一個(gè)空指針就能讓整個(gè)系統(tǒng) panic。4.2 坐標(biāo)換算與校準(zhǔn)串口屏返回的坐標(biāo)值取決于屏幕內(nèi)部觸摸面板的 ADC 采樣范圍。有些屏幕的 X 范圍是 0~4095有些是 0~1023Y 范圍也可能和屏幕分辨率不是嚴(yán)格對(duì)應(yīng)。但 Linux 輸入子系統(tǒng)上報(bào)的坐標(biāo)范圍必須是設(shè)備描述里聲明的absmax否則用戶態(tài)拿到之后還要二次換算。通常做法是把串口屏上報(bào)的原始值線性映射到屏幕的實(shí)際分辨率linux_x (raw_x - x_min) * (screen_width - 1) / (x_max - x_min) linux_y (raw_y - y_min) * (screen_height - 1) / (y_max - y_min)這里最容易忽略的一點(diǎn)是觸摸面板的零點(diǎn)方向。有些屏幕的 X 坐標(biāo)從左往右增加有些卻是反的Y 軸也是一樣。如果映射之后觸摸點(diǎn)和顯示點(diǎn)仍然是鏡像的就要對(duì)坐標(biāo)做反轉(zhuǎn)。校準(zhǔn)也不能只做一次。實(shí)際項(xiàng)目里屏幕可能被更換、屏幕玻璃面板存在裝配誤差、或者貼了不同厚度的保護(hù)膜都會(huì)導(dǎo)致觸摸坐標(biāo)漂移。Linux 桌面環(huán)境一般用 libinput 的校準(zhǔn)矩陣嵌入式 Qt 環(huán)境可以用 tslib 的ts_calibrate生成校準(zhǔn)參數(shù)按映射公式寫進(jìn)應(yīng)用配置即可。經(jīng)驗(yàn)上在顯示畫面正確的前提下先用evtest查看上報(bào)值再用一個(gè)小畫布程序驗(yàn)證“按下位置和光標(biāo)位置”是否一致是最快的校準(zhǔn)方法。4.3 多點(diǎn)觸摸和按鍵組合上報(bào)常見(jiàn)串口屏里帶多點(diǎn)觸摸的型號(hào)也不在少數(shù)。Linux 內(nèi)部對(duì)多點(diǎn)觸摸使用 MT 協(xié)議Type B 是比較主流的實(shí)現(xiàn)方式需要用到input_mt_slot和input_mt_report_slot_state。假設(shè)屏幕支持兩個(gè)觸摸點(diǎn)上報(bào)邏輯大概是input_mt_slot(dev, 0); input_mt_report_slot_state(dev, MT_TOOL_FINGER, true); input_report_abs(dev, ABS_MT_POSITION_X, x0); input_report_abs(dev, ABS_MT_POSITION_Y, y0); input_mt_slot(dev, 1); input_mt_report_slot_state(dev, MT_TOOL_FINGER, true); input_report_abs(dev, ABS_MT_POSITION_X, x1); input_report_abs(dev, ABS_MT_POSITION_Y, y1); input_mt_report_slot_state(dev, MT_TOOL_FINGER, false); input_sync(dev);注意協(xié)議解析層要怎么區(qū)分“多點(diǎn)”與“單點(diǎn)”。很多串口屏的觸摸協(xié)議在單點(diǎn)觸摸和多點(diǎn)觸摸下走的是不同的命令字不能混用。如果協(xié)議文檔不夠詳細(xì)可以在屏幕上放兩個(gè)手指慢慢移動(dòng)直接打印收到的十六進(jìn)制原始數(shù)據(jù)來(lái)反推。還有一類串口屏是做“控件跳轉(zhuǎn)”的屏幕上的按鈕會(huì)主動(dòng)上報(bào)“按鍵編號(hào)”而不是絕對(duì)坐標(biāo)。這種場(chǎng)景下更簡(jiǎn)單——直接把按鍵編號(hào)映射成EV_KEY事件交給上層應(yīng)用處理。但要注意區(qū)分觸摸類是單擊還是長(zhǎng)按否則上層會(huì)收到一大批重復(fù)按鍵事件。5. 實(shí)測(cè)中的問(wèn)題清單亂碼、丟幀、漂移與開(kāi)機(jī)時(shí)序5.1 亂碼和串口參數(shù)不一致亂碼是最容易定位、也最常見(jiàn)的問(wèn)題。大部分串口屏出廠默認(rèn)波特率是 9600 或者 115200如果你的應(yīng)用stty設(shè)置成了 57600或者內(nèi)核 console 啟動(dòng)參數(shù)里用了別的串口參數(shù)就會(huì)出現(xiàn)一堆亂碼。排錯(cuò)時(shí)先做三件事stty -F /dev/ttyS3 115200 raw -echo cat /dev/ttyS3第一確認(rèn)內(nèi)核啟動(dòng)階段沒(méi)有往這個(gè)串口打印日志第二確認(rèn)上位機(jī)的波特率和屏幕固件一致第三確認(rèn)串口電平匹配。TTL 串口屏接 RS232 電平轉(zhuǎn)換器或者在相反方向接板載 RS232 口都會(huì)出現(xiàn)不穩(wěn)定亂碼。這里再順便提一個(gè)容易忽略的校驗(yàn)位問(wèn)題。很多串口屏默認(rèn)是8N1也就是 8 個(gè)數(shù)據(jù)位、無(wú)校驗(yàn)、1 個(gè)停止位。但用老款迪文屏或某些工業(yè)屏?xí)r可能會(huì)是8E1或8O1。如果應(yīng)用層一直用 8N1 去讀偶校驗(yàn)的屏幕偶爾能收到正確數(shù)據(jù)但整體上是隔三差五亂碼。5.2 丟幀與緩沖區(qū)配置“丟幀”從表面看是觸摸卡頓、指令沒(méi)反應(yīng)但底層原因往往在 Linux 的數(shù)據(jù)鏈路里。一個(gè)常見(jiàn)原因是用戶態(tài)讀取線程被高負(fù)載任務(wù)拖住串口接收緩沖區(qū)溢出后新來(lái)的數(shù)據(jù)被丟棄。Linux tty 驅(qū)動(dòng)本身有接收緩沖區(qū)但默認(rèn)大小有限。如果你確定某路串口數(shù)據(jù)量比較大或者讀取線程確實(shí)響應(yīng)不及時(shí)可以嘗試調(diào)大 tty 的 flip buffer 或者使用TIOCVHANGUP清理緩沖。更常見(jiàn)的做法是提高讀取線程優(yōu)先級(jí)struct sched_param param { .sched_priority 50 }; pthread_setschedparam(thread_id, SCHED_FIFO, param);如果平臺(tái)支持把當(dāng)前線程綁到和 UART 中斷親和性一致的 CPU 核上也能減少調(diào)度延遲。另外一個(gè)容易造成“數(shù)據(jù)看起來(lái)丟了”的原因是 DMA 未配置好卻開(kāi)著 DMA。DMA 描述符不夠時(shí)UART 收到的數(shù)據(jù)沒(méi)有及時(shí)搬到內(nèi)存硬件 FIFO 一旦溢出就會(huì)丟字節(jié)。遇到這種情況直接看/proc/interrupts里對(duì)應(yīng)串口的中斷計(jì)數(shù)增長(zhǎng)是否正常和dmesg里有沒(méi)有報(bào)DMA timeout之類的錯(cuò)誤。5.3 觸摸漂移與坐標(biāo)零點(diǎn)錯(cuò)誤觸摸漂移最典型的癥狀是“點(diǎn)擊屏幕右上角光標(biāo)卻出現(xiàn)在左上角附近”。除了第 4 章說(shuō)的坐標(biāo)映射和零點(diǎn)方向問(wèn)題之外還有一種漂移是“越往邊緣越偏”這通常說(shuō)明屏幕觸摸面板本身不是線性的。很多串口屏支持在屏幕內(nèi)部做觸摸校準(zhǔn)你可以在屏的工程配置里手動(dòng)校準(zhǔn)一次之后再往 Linux 側(cè)輸出坐標(biāo)。這種二次校準(zhǔn)的效果往往比純線性映射更準(zhǔn)因?yàn)槠聊粌?nèi)部的校準(zhǔn)固件能修正非線性誤差。如果換了不同批次、不同尺寸的串口屏校準(zhǔn)參數(shù)務(wù)必要重新做一遍。不要為了圖省事把上一塊屏的校準(zhǔn)文件直接拷貝到新設(shè)備里尤其是從老型號(hào)屏幕換到新型號(hào)屏幕時(shí)坐標(biāo)范圍可能完全不一樣。5.4 上電時(shí)序與串口屏的“假故障”最后說(shuō)一下上電時(shí)序。很多工控板是 Linux 系統(tǒng)和串口屏同時(shí)上電串口屏內(nèi)部 MCU 啟動(dòng)可能需要幾百毫秒甚至一秒而 Linux 用戶態(tài)程序可能更早地嘗試向串口屏發(fā)初始化指令。這時(shí)候屏幕還沒(méi)就緒程序等不到應(yīng)答就會(huì)誤判為“串口屏壞了”。解決方式是加一個(gè)初始化握手機(jī)制。程序打開(kāi)串口節(jié)點(diǎn)后不急著發(fā)業(yè)務(wù)數(shù)據(jù)先發(fā)送一條查詢指令等待屏幕返回確定應(yīng)答連續(xù)重試幾次都失敗才報(bào)錯(cuò)。同樣如果系統(tǒng)里有獨(dú)立看門狗喂狗線程應(yīng)該和串口讀取線程分開(kāi)。因?yàn)樽x串口偶爾會(huì)阻塞如果讓同一個(gè)線程既讀串口又喂狗一旦串口屏瞬時(shí)無(wú)響應(yīng)看門狗可能先超時(shí)復(fù)位整個(gè)系統(tǒng)造成更嚴(yán)重的問(wèn)題。6. 選型與工程落地建議從STM32到Linux的遷移經(jīng)驗(yàn)6.1 串口屏品牌選型時(shí)的內(nèi)核視角市面上常見(jiàn)的串口屏品牌比如淘晶馳、迪文、大彩都有各自的開(kāi)發(fā)生態(tài)。選型時(shí)除了看屏幕分辨率、色深、UI 組態(tài)軟件好不好用之外還要特別關(guān)注兩點(diǎn)。第一串口協(xié)議是否公開(kāi)、文檔是否完整。有的屏幕協(xié)議只在廠商的組態(tài)軟件里封裝不提供公開(kāi)指令表這種就很難在 Linux 下穩(wěn)定擴(kuò)展。第二觸摸上報(bào)是否走同一路串口。有些屏幕支持觸摸數(shù)據(jù)通過(guò)單獨(dú)引腳輸出有些必須和顯示指令共用同一路 UART這會(huì)直接影響你的串口資源配置。另外新舊型號(hào)切換也要留個(gè)心眼。某些品牌的老型號(hào)屏幕固件和新型號(hào)使用不同的協(xié)議格式代碼里最好不要把協(xié)議解析寫死在業(yè)務(wù)邏輯里而是單獨(dú)抽象一層方便后面換屏?xí)r只改協(xié)議適配。6.2 內(nèi)核裁剪與系統(tǒng)打包時(shí)的注意事項(xiàng)如果產(chǎn)品要量產(chǎn)內(nèi)核裁剪是繞不開(kāi)的一步。裁剪時(shí)最容易犯的錯(cuò)誤就是把“看起來(lái)沒(méi)用”的輸入子系統(tǒng)給裁掉了。串口屏雖然不走 I2C 觸摸芯片但它一旦通過(guò) uinput 注入輸入事件就需要CONFIG_INPUT_UINPUT上層圖形庫(kù)讀取觸摸點(diǎn)則需要CONFIG_INPUT_EVDEV。CONFIG_INPUTy CONFIG_INPUT_EVDEVy CONFIG_INPUT_UINPUTy CONFIG_SERIAL_8250y CONFIG_SERIAL_COREy這幾個(gè)選項(xiàng)建議直接編進(jìn)內(nèi)核而不是編譯成模塊否則系統(tǒng)啟動(dòng)時(shí)如果沒(méi)有提前insmod/dev/input目錄下就會(huì)少設(shè)備節(jié)點(diǎn)。同時(shí)還要注意 udev 規(guī)則。串口屏設(shè)備節(jié)點(diǎn)權(quán)限如果不做處理普通用戶態(tài)程序可能打不開(kāi)/dev/ttySx。在開(kāi)發(fā)板階段直接跑 root 可能沒(méi)感覺(jué)到了產(chǎn)品要做降權(quán)運(yùn)行時(shí)節(jié)點(diǎn)權(quán)限就會(huì)變成一個(gè)問(wèn)題。KERNELttyS[0-9]*, MODE0660, GROUPdialout KERNELuinput, MODE0660, GROUPinput6.3 和裸機(jī)開(kāi)發(fā)不同的幾個(gè)思維轉(zhuǎn)變從 STM32 裸機(jī)方案遷移到 Linux最大的差異是多任務(wù)環(huán)境。裸機(jī)里你可以寫一個(gè)while(1)循環(huán)原地等待串口數(shù)據(jù)完全可控但在 Linux 里會(huì)有藍(lán)牙、WiFi、看門狗、業(yè)務(wù)線程等一大堆進(jìn)程搶 CPU 和中斷資源串口讀取線程必須用阻塞式 IO 加超時(shí)而不是忙等。另一個(gè)差異是調(diào)試方式。裸機(jī)可以直接用 JTAG 打斷點(diǎn)看寄存器Linux 下判斷串口問(wèn)題就應(yīng)該先用evtest、stty、dmesg、/proc/tty/driver/serial這些工具和接口做快速定位而不是一上來(lái)就改內(nèi)核代碼。串口屏項(xiàng)目里絕大多數(shù)問(wèn)題都出在配置不在驅(qū)動(dòng)本身。最后分享一個(gè)小經(jīng)驗(yàn)如果串口屏在開(kāi)發(fā)板上工作正常換到量產(chǎn)主板上出現(xiàn)觸摸漂移或亂碼先別急著懷疑代碼優(yōu)先檢查主板串口電平參考電壓和信號(hào)完整性。很多小批量主板會(huì)把 UART 走線拉得太長(zhǎng)又沒(méi)加 ESD 防護(hù)和上拉電阻干擾引起的丟幀比軟件問(wèn)題更難查。在硬件端正、協(xié)議解析正確的基礎(chǔ)上內(nèi)核和用戶態(tài)的配置只要按我前面說(shuō)的幾個(gè)原則去處理這套方案基本能穩(wěn)定跑很久。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
六月婷婷五月丁香首页| 婷婷五月六月丁香| 婷婷五月色图| 婷婷综合九色伊人| 97综合在线| 激情5月婷婷狠狠干| 婷婷丁香五月基地| 欧美丰满熟妇BBB久久久| 激情久久丁香| 狠色狠色综合久久| 99热这里只有在线播放| 色就是色婷婷五月亚洲激情| www.99精品在线| 国产亚洲在线观看| 无码啪啪| 高清不卡一区| 五月天伊人综合| 天天久久综合| 久久久久人无码人妻| 婷婷五月天激情综合| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV | 综合色图婷婷| 无码99| 亚洲激情婷婷| 六月丁香社区| 婷婷丁香五月综合激情小说| 天天夜天天色天天| 9久热这里只有精品| 五月丁香另类图片| 婷婷久久网| 六月丁香成人| 九九精品99久久久| 香蕉网久久| 五月丁香久久久| 久久婷婷亚洲| 亚洲亚洲人成综合网络| AAA级久久久精品| 思思热精品在线| 另类图片五月天| www狠狠| 日日色五月天| 五月丁香亭亭天天舔| 99热这里在线精品| 免费的日逼视频| 国产成人网站在线观看| 久操大香蕉| g00d人体西西| 久激情网| 久久久妻人人人| 久久综合综合久久| 丁香五月婷婷亚洲色图| 免费99情趣网视频| 国产VA亚洲VA96| 人人干AV| 成人va在线播放| 五月成人天| 精品A√| 日屌日日操日日色| 久久92| 色五月五月天色婷婷色五月| 九九激情综合| 狠狠综合久久综合| 婷婷色五月天第7色| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 精品无码久久久久久久久| av九九| 伊人婷婷大香蕉| 五月伊人婷婷999| 91午夜婷婷狠狠久久综合9色| 婷婷色色综合| 吊色AV男人的天堂| 五月婷婷内射网| 99这里有精品免费| 亚洲成人在线五月天| 亚洲色激情| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 激情综合网五月丁香| 久久久久亚洲AV成人无码电影| 亚洲人妻Av| 91人人操.COM| 色五月,com| 天花AV无码| 婷婷久久性爱| 校园激情 亚洲| 婷婷激情视频欧美视频自拍视频欧美剧| 天天综合中文| www.狠狠| 强伦轩人妻一区二区电影| 婷婷伊人綜合中文字幕小说| 日日狠狠久久偷偷四色综合免费| 五月婷婷黄色| 欧美日韩国产成人在线| 五月天天天操天天爽夜夜操| 夜夜干夜夜操| 亚洲V国产V欧美V久久久久久| 黄网在线免费观| 日本熟女啪啪| 小视频aaa久久久| 久热这里只有精品66| 色色色九九九五月婷婷| 人人爽欧美婷婷久久久五月丁香| 久久这里面只有精品视频| 五月天婷婷黄色| 丁香婷婷激情| 天天肏在线视频| 人人操操| 四色99久久| 五月丁香婷婷色色| 丁香婷婷五月人体| 亚洲色色色色| 六月婷婷综合| 婷婷激情伍月网| 日日噜狠狠色| 国产看真人毛片爱做A片| 久久aaaaa| 狠狠色婷婷7| 天天操屄网| www久| 亚洲视频一区| 五月丁香猫咪久久婷婷综合视频激情四射网入口| 五月天激情网址| 五月天成人网在线观看| 欧美性爱丁香五月| 中文不卡一二三区| 日韩一级片| 色综合久久综合| 三级成人网站| 亚洲乱码日产精品BD在线观看| 丁香五月婷婷天堂大香蕉| tingtingjiqingwuyue| 丁香五月婷婷在线观看| 国产精品24r| 全亚洲最大的婷婷五月天网站COM| 色欲久久久久| 奇米色大香蕉| 久久思思热视频| 亚洲色网络| www.com任你艹| 黄涩毛片| 99精品视频免费观看近期发布| www.婷婷六月天| 韩国三级五月天婷婷。| 9 7总站超级碰免费视频| 狠狠操天天操| 亚洲A片成人无码久久精品青桔| 久热一本| 日韩aaa| 伊人玖玖网| 婷婷五月婷| 欧美成人精品A片免费一区99 | 日日做夜夜爱| 一级韩国产精品毛| 天天日本夜夜谢| 97色精品视频 | 人妻VideOssS人妻高清| 91干婷婷| 日本婷婷色日| 9l视频自拍9l九色9l成人| 欧洲激情精品婷婷| 久久狠狠干| 天天狠狠夜夜狠狠2023| 中文字幕网站在线观看| 丁香五月激情啪| 狠狠色丁香久久婷婷综合五月| 久久这里有| 国产精品久久久丁香五月八戒视频| 综合网亚洲| 色婷婷五月色| 国产看真人毛片爱做A片| 亚洲激情综合| AV成人在线网站| 激情综合色| 超碰人妻公开在线| 色婷婷五月天在线观看| 婷婷丁香六月| 亚洲欧美综合7777色亭亭| 亚洲情a| 丁香婷婷综合色五月激情国产基地| 开心五月深爱五月丁香五月激情五月| 久久久噜噜噜www成人| 丁香六月成人| 婷婷激情伍月网| 欧洲色区| 日本狠狠色| 丁香五月手机在线| 国产特级毛片AAAAAAA高清| 五月丁香六月合| 99re欧美精品| 婷婷久久五月| 99热在线观看这里只有精品| 五月婷婷人人人操| 丁香五月影| 99热在线这里| 五月综合视频在线| 日本女人久久| 九八Av| 激情丁香六月| 思思久ren热| 天天情色五月天| 日韩丁香涩| 五月激情婷婷国产精品久久久久久| 99超碰在线观看| 超碰人人艹| 婷婷五月天va| 激情婷婷丁香五月天| 久热这里| 亲子乱AV一区二区三区下载| 国产婷婷五月色情综合| 再次出发二| 五月丁香A∨在线| 玖玖在线视频| 五月婷婷六月丁香综合在线| 色色网站观看| 六月婷久久| 2018国产大陆天天弄| 午夜色丁香| 五月天婷婷色| 九热视频在线精品15| 99精彩视频| 久久久久久人妻| 色色色视频免费无码 | 婷婷六月丁香综合| 99久.| 黄色av网站在线免费播放| www.henhenl| 久噜久噜| 亚洲开心激情网| WWW·色色色·COM| 丁香狠狠操| 大香蕉啪啪啪| 丁香婷婷久久| 婷婷五月综合网| 少妇激情五月天| 好好日激情五月天| peg 2区三区四区的| 婷婷爱爱蜜臀天天操| 激情图片亚洲| 婷婷丁香91综合| 性爱视频久久| 激情丁香五月婷婷| 色五月激情五月| 色偷偷色婷婷| 99热主页日本| 久久丁香五月婷婷| 99色色网| 成人做爰高潮A片免费视频| 夜夜撸天天操| 五月婷婷综合在线| 99re在线播放| 激情98色婷婷五| 成人做爰A片免费看视频| 在线播放成人网站| 亚洲色婷婷| 色综合久久88色综合天天99| www.色99| 久热久| 国产色色视频| 中文字幕乱码亚洲精品一区| 狠狠一日| 六月婷婷视频| 91操碰| 婷婷五月丁香基地在线视频官网| 天天摸.天天mo| 亚洲精品视频在线| 色欲香综合网| 婷婷日日夜夜| 欧美日韩123| 中文字幕AV网址| 狠狠爱婷婷| 激情综合色婷婷啪啪六月天| 99日本黄站| WWW99热| 99玖玖在线视频| 另类小说色婷婷| 丁香五月婷婷偷拍| 色综合色| 午夜激情四射影院| 99人碰碰碰| 色色爽爽天天| 色综合久久伊伊婷婷五月| 丁香激激情网| 亚卅毛片| 国产午夜精品一区二区三区四区| 二区成人视频| 九九黄色网| 婷婷日| 亚洲婷婷丁香五月视频| 99re6久热只有精品6在线直播| 日韩在线99| 丁香五月电影| 色五月 婷婷, 大香蕉| 九月婷婷在线观看| 久思思热视频在线观看| 五月婷婷自拍| 欧美久热| 日本黄色精品| 欧洲亚洲免费视频区| 婷婷亚洲色| 26UUU欧美激情一区二区| 日本一级一级一级一级| 五月婷婷久久爱| 色婷亚洲五月丁香| 丁香花五月天| 天天天天天日| 亚洲欧洲一二| 亚洲色情激情丁香五月| 91男同| 日本操天堂| 激情综合色婷婷啪啪六月天| 天天在线久久综合| 97综合在线| 中文字幕无码人妻少妇免费视频| 中文字幕九九九九| 99色性爰网络| 操碰色一区就去操| 五月婷婷开心深| 丁香五月亚综合图片| 久久xxxx| 99日精品视频| 99热在线观看精品免费| 欧美大肥婆大肥BBBBB| 久久青青日本视频| 婷婷五月天性| 九九色热| 丁香婷婷久久| 欧美精产国品一二三区| 草久私拍| 26UUU精品一区二区c〇m| 超碰人人射| 99五丁香月| 91操人| www99热| 久久a热| 91日日日| 婷婷丁香六月| 高清成人综合| 五月精品| 9999热在线免费观看| 日日爽天天| 99久久9| 亚洲最大在线| 中文资源在线a | 五月丁香婷婷成人网| 操操碰| 91尤物九色在线| 五月天色区| 色亭亭丁香五月天| 热成人网| 日韩久综合| 日本五月天一页| 操B视频在线播放| 看黄的网站18禁| 五月婷婷六月天| 欧美色偷拍| 操射国产日本| 日本三日本三级少妇三级66| 激情综合网五月| 人人操人人妻| 天天综合中文| 日亚二欧美| 欧美在线视频免费播放| 99热日韩| 丁香六月综合激情| 人人舔人人色人人高潮| 五月综合激情啪啪啪啪啪| 婷婷丁香五月天综合网| 婷婷五月天免费99| 天天爽天天摸天天爱| 欧美色必爱| 丁香六月无码| 久婷婷五月天影院| 丁香色五月天| 涩涩五| www.ywav| 色丁香五月| 丁香五月影视| 欧美人与性动交CCOO| 夜夜操少妇| 婷婷欠久少妇| 综合网亚洲| 99久免费视频| 成人一级片| 伊人婷婷青青cao| 思思热精品在线| 五月丁香久人妻中文| 亚洲永久免费| 五月丁香 啪啪啪| 嫩草AV久久伊人妇女超级A| 秋霞学生妹一二级| 九月停停| 91精品综合久久久久久五月丁香| 国产五月丁香在线| 欧美成人猛片AAAAAAA| 五月色导航| 丁香亭亭激情四射| 免费婷婷| 九九这里精品| 五月天丁香婷婷社区| 婷婷五月丁香六月| 情欲综合网| 苗黎美女四级成人版一级二级毛片| 夜夜操少妇| 色婷九九九| 97丁香五月| 丁香六月婷婷激情综合| 婷婷丁香无码专区| 天天干天天干天天干天天干天| 韩日在线熟女| 亚洲四色五月| 亚洲婷婷五月天| 色色免费网战视频| 午夜婷婷| 日逼影音先锋男人资源站| 久久免片| 玖久精品视频9| 丁香花操逼| 六月色色| 激情第四色| 婷婷五月成人系列| 五月丁香啪啪综合网| www.夜夜操| 5月婷婷6月六月丁香| 黄色三级日本| 亚韩精品视频1区| 精品99在线| 九九热这里只有精品12| 五月天婷婷操逼视频| 天天日夜夜| 久久网思思| 久久精品夜色噜噜亚洲a∨| 91九色在线视频| 丁香五月婷婷动漫| 97婷婷丁香| 亚洲视频在线观看| 日本色色视频| 91久久1118| 亚洲成AV人片在线观看| 青青久在线视频免费观看| 亚洲最大五月天成人网| 天天干天天日天天插 | 日本色色色| 欧韩性爱| 超碰在线99热| 大香蕉免费9| AA片在线观看视频在线播放| 色五月激情综合网| 色狠狠综合网| 91精品久久久久、久五月天| 天天夜天天色天天| 婷婷在线五月天观看| 婷婷五月天成人| 久操人| 亚洲欧洲中文日韩久久AV乱码| 91seav| 99热这里只有精品18| 色五月天天在线观看资源站| www.五月天婷婷| 超碰中文字幕在线| Www.久久| 一级内射毛片| 精品视频二级九九| 中文字幕人妻AV| 欧类av怡春院| 538在线精品| 婷婷久久五月天| 丁香五月欧美激情| 91超碰在线播放| 色丁香五月| 久草热视频在线观看| 亚洲 在线 性爱| 18av天堂| 97狠狠色| 99久久黄色顶级视频| 久操大香蕉| 9操在线| www.精品99| 五月Huangsewang| 99精品国产在热久久| 婷婷色网| 乱乱av| 国产精品美女久久久久AV超清| 久草热8精品视频在线观看| www久| 成人五月丁香社区| 大香蕉啪啪啪| 人人操av| 色涩视频久久| 天综合日日夜综合7799| 九九综合| 伊人网欧美在线男人天堂五月丁香| 久99视频在线观看| 6月丁香婷婷激情| 六月亚洲| 丁香五月色欲| 精品51XX| 任你爽视频| 激情五月婷婷五月| 免费观看全黄做爰的视频| 超碰操日| 婷婷五月天综合久久| 综合久久9| WWW丁香五月| 色狠狠六月| 丁香婷婷色五月天| 大天天伊人| 五月丁香婷婷啪啪| 亚洲精品**不卡在线播he| 操碰99在线视频观看| 大香蕉99| 天天拍天天做视频| 天天日,天天干,天天操| 婷婷视频网| 综合AV网| 99热爱爱干干日| 九九av| 四虎99热在线观看网站| 亚州综合色| 超碰国产在线| 综合亚洲色色| 五月丁香婷婷婷激情爱爱| 大香蕉网站,大香蕉综合| 亚洲欧美婷婷五月色综合| 在线播放成人| site:901-07.com| 久色五月婷婷综合| 五月激情综合网| 无语停婷丁香网| 超碰免费人妻| 久久久久人妻精选| 专区无日本视频高清8| 91熟妇大香蕉| 在线,国产,色,热视频| 五月天激情小说| BBWCUCKOLD精品熟妇| 欧美熟妇一区二区三区| 色五月婷婷天天操夜夜操| 超碰二区| 超碰成人影视| 开心久久xxx色| 激情 婷婷| 先锋影音av色五月天资源站| 五月丁香亭亭操逼| 99热这里是精品| 亚州美女| 综合97五月| 2017人人操| www.91五月| 热九九精品| 五月四色婷婷| 老美AA片| 六月丁婷婷| AA久久| 99热只有精品在线| 欧美成人精品老美女噜噜噜| 人妻AV中文系列| 大香蕉婷婷| 婷婷五月天综合AV| www.九月婷婷丁香.com| 热热久久99| 久久久亚洲精品一区二区三区浴池| 激情五月天的婷婷| 天天天操天天天日| 两性婷婷丁香五月| 国产精品激情五月天色婷婷| BBWCUCKOLD精品熟妇| 五月丁香六月婷| 色五月大| 98永久精品| 99视频在线精品免费观看2| 五月停性愛| 色婷婷深爱五月| 天天色天天| 精品国产va久久久久| 神马欧美精| 六月丁香开心婷婷欧美| 热久精品| 4399在线观看免费高清黄色视频| 婷婷亚洲五月| 色哟哟精品| 91肏| www.婷婷亚洲基地| 激情五月天婷婷| 久久综合爱| 996日日爱| 久热天堂| 久久五月丁香| 夜夜大香蕉婷婷丁香| 操操人人| 五月婷视频久久| 亚洲啪视频| 五月婷六月综合在线观看| 99热66| 久久机热这里只有精品免费视频| 白人荫道BBWBBB大荫道| 婷婷激情六月中文| 色www99| www激情| 婷婷趴趴| 五月天婷婷激情在线色图| 小视频aaa久久久| 专区无日本视频高清8| 五月天欧美 另类小说| 人人综合色| 婷婷五月天视频亚洲| 婷婷玖玖五月天| 五月婷婷丁香五月| 天天操天爱综合| 亲子乱av一区二区三区的| 99日在线视频| 日本狠狠爽| 香蕉视频性爱BB做爱| 97热在线精品| 欧美大奶熟女噜噜噜噜| 欧美十二区| 色婷婷六月天| 青青草蜜臀| 超碰v| 五月天五月天激情网| 99资源在线视频| 激情五月久久| 色五月丁香六月欧美综合| 激情婷婷黄色五月| 狠狠色综合网| 久久婷婷五月天激情唯美| 曰曰久久| 狠狠婷婷色| 婷婷激情九月| 婷婷五月丁香五月天| 婷婷丁香91| 日本强伦片中文字幕免费看| 先锋资源婷婷| www,五月丁,com| 中美日韩成人在线| 综合在线观看99| 九色PORNY9l原创自拍| 日日插日日干| 亚洲色婷婷色| 91热网址| 97人人操人| 日本欧美成人片AAAA| 视频色色色色色色| 久久成人综合五月天| 日本操片| 亚洲欧美成人在线观看| 色婷婷成人做爰A片免费看网站| 欧州色色| 丁香五月婷婷狠狠色| 哇嘎成人久久| 色吧婷婷五月亚洲| 青青草激情网| 色色色色网| www色婷婷久久综合久色| √天堂资源在线人妻熟女| 人人色人人弄人人操| 亚洲成人AV在线观看| 亚洲情欲| 精品人妻久久久久久久| site:pzdcoin.com| 午夜丁香丁香婷婷| 久久婷婷五月天蜜桃| 9久热视频| 欧州婷婷五月天综合| 99热在线精品观看| 任你操精品免费| 五月花婷婷| 婷婷五月色综合| 99久在线观看| 国产激情av| 六月激情网| 人人草碰| 3DAV亚洲香蕉久久 一区二区| 天天干一干| 亚洲精品99| 色色色色综合| 婷婷金品综合视频| 色综合99| 久久人人妻| 99久久网站| 色色五月婷| 婷婷五月香蕉| 天天舔天天爽| www色色com| 99热首页| 亚洲蜜桃精久久久久久久久久久久| 五月婷婷在线免费观看| 777色婷婷爱五月| 夜夜骑操AV| 欧美激情 日韩无码 婷婷 五月天| 这里只有精品视频视频在线观看| 综合激情五月天| 日本久热| 天天在线天天综合网色| 99re热| 婷婷爱综合| 狠狠色婷婷丁香六月| WWW.开心五月天.COM| 丁香婷五月天| 人人摸人人搞| 久9视频免费播放| 人人97碰| 久久精品99国产精品日本| 日产精品久久久久久久蜜臀| 成人五月丁香花| 成人VAV视频在线观看| 很很色丁香久久停停| 丁香婷婷五月激情| 丁香五月天激情婷婷丁香六月| 丁香五月天欧洲在线| 婷婷五月天伊人网在线观看视频| 91大屁股| 99热这里只有精品热| 五月丁香五月婷婷| 成人精品在线观看| 五月丁香亭亭电影久久| 久九男女天堂| 综合 激情 婷婷| 黄色av高清| 激情无码网| 五月婷婷六月丁| 综合综合网| 五月天亚洲综合网| 五月激情天| 男人的天堂99| 98永久精品| 五月婷婷激情刺激| 夜夜撸日日骑| 狠狠五月天| 丁香五月天久久| 婷婷五月天久草在线| 色六月婷婷| 五月天成人伊人| 99热日| 激情又色又爽又黄的A片| 热99.com婷婷| 9999热精品在线免费播放| 色色色色色色色色色色色色色色,网站| 久久久com| 热热色色五月天婷婷| 久久99精品日本| 深爱激情五月天婷婷网| 射区导航| 色婷婷五月天| 丁香色婷婷| 丁香六月亭亭久久综合| 激情久久久| 亚洲乱码w在线观看| 思思久久精品视频| 91精品久久久久久| 激情五月天色色色| 啪啪干伊人婷婷| 91玖玖| 五月丁香亭亭AV女优| 蜜臀A∨在线水帘洞| 六月丁香六月婷婷欧美| 亚洲中文字幕AV在线| 超碰91av| 丁香六月成人网| 丁香五月伊人| 久久免费操| 亚洲天天操| 无码人妻丰满熟妇奶水区码| 久久婷视频| 欧美综合在线五月天色婷婷| 久色资源| 综合五月婷婷| 五月丁香色婷婷色| 69色婷婷| 操人妻视频91| 日本eVa一区=区视频| 深爱激情九九五月天| 五月激情啪啪| 日韩九区| 狠狠色五月| 丰满少妇猛烈A片免费看观看| 激情宗合哪里能看| 五月婷婷久久综合| www.婷婷亚洲基地| 97热在线精品| 色婷婷成人网| 操九色| 在线成人av播放| 五月婷婷婷婷网| av五月天婷婷丁香| 色婷婷成人五月| 七月丁香婷婷 色色| 岛国av电影网站| 免费无码毛片一区二区A片| 视频这里只有精品| 国产精品久久久久久亚洲毛片| 欧美激情综合| 色综合色色| 欧美大奶熟女噜噜噜噜| 婷婷五月天视频| 丁香五月 综合| 色5月婷婷| 婷婷久久夜| 无码成人AAAAA毛片AI换脸| 色狠狠综合网| 婷婷色情 | 激情丁香五月激情婷婷| 中文AV网站| 婷婷五月天在线观看免费| 综合久久六月| 少妇搡BBBB搡BBB搡毛茸茸 | 91se在线观看| 激情亚洲婷婷| 天天综合网91| 五月激情综合网| 九九热这里只有精品9| 991自拍视频| 丁香婷婷影院| 色婷婷五月影视| 丁香五月成人婷婷| 久久久18| 丁香五月婷婷色综合| 99热这里只有精品无码| av在线免费播放观看| 丁香六月婷婷色XXXXX| 五月婷婷六月丁香综合| 91性高潮久久久久久久久| 影音先锋 婷婷| 国产综合A片| 色欲久久久久久综合网综合网| 国产伦理精品高清在线观看网站一区二区| 色噜噜狠狠色综无码久久合欧美| 丁香激激情网| 97日在线视频| 亚洲中文字幕在线观看| 俺去也五月天婷婷| 色五月婷婷婷婷婷婷婷婷婷婷| 天天综合网站| 99日这里只有精品| 五月婷在线观看| 校花娇喘呻吟校长陈若雪视频| 日本色狠狠| 大香蕉手机视频| 草榴成人影片| 婷婷丁香五月麻豆| 激情五月婷婷综合色播小说| 久久98热re| 国产毛片精品一区二区色欲黄A片| 久久婷婷综合五月趴| 丝袜人妻| 激情丁香五月综合| 99热国产这里只有精品| 久久人妻www| 国在线激情网| 欧美日韩成人在线网站| 欧美经典片免费观看大全| 亚洲激情网站无码| 大香蕉五月| 日本精品人妻无码77777| 国产精品视频免费看| 97人人干人人操| 无码动漫av| 777精品成人a v久久| 天天搡日日搡aaaaⅩ| 天天狠狠综合精区| 天天日日夜夜| 五月亭亭开心网| 人人添人人| 丁香五月综合高清在线| 97性高潮久久久| 亚洲深喉aV| 色色婷婷丁香| 激情综合在线观看| www夜夜操comwww| 五月丁香av在线| AV在线大香蕉| 一月婷婷色色| 韩国97天堂| 大香蕉啪啪啪| 九九色人| 激情影院丁香五月| 丁香五月a| 五月激情综合婷婷| 丁香六月色香蕉视频| av激情在线| 99婷婷五月天激情| 久久九九热re6这里有精品| 国产亚洲精品久久久久久牛牛| 51国精产品自偷自偷综合| 丁香五月激情啪啪| 激情五月色综合国产精品| 久操大香蕉| 婷婷久久性爱| 日本少妇裸体做爰高潮片| 丁香成人五月天| 淫视馆aV二区一区| 99久久99九九九99九他书对| 天天做天天爱天天玩| 99热官网精品在线| 色婷婷综合网站| 五月天黄色激情小说| 丁香婷婷六月激情| 情欲综合网| 人人操Av| 色欲五月天| 色综合色综合婷婷热| 丁香五月婷婷久久久| 深爱五月月天| 婷婷在线免费| 亚洲九九夜夜| 丁香五月婷婷啪啪啪| 午夜天堂啪啪| 五月天啪啪视频| 日日噜人人人做人| 中文网AV| 5月婷婷激情6月| 伊人五月人妻精品| 亚洲情a| 涩涩涩.com| 久热免费| 国产精品色婷婷久久久精品| 超碰成人在线观看| 超碰人人草| 久久免费精彩视频| 99热在线观看| 日本久碰| 亚洲无码www| www.zbzhongsen.com| 99re在线观看| 国产伦亲子伦亲子视频观看| 字幕网AV中文字幕| 色色影院黄大片| 亚洲婷婷丁香| 激情丁香淫荡婷婷| 五月婷久久在线| 人人摸人人澡人人| 99爱爱| 强辱丰满人妻HD中文字幕| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 狠狠色噜噜色狠狠狠综合色 | 色五月色情| 超级碰碰91| 色综合久久88| 操操操av| 激情网五月婷婷| 91久久综合亚洲鲁鲁五月天| 亚洲热视频| 操逼亚洲天堂| 激情综合99| 五月天婷婷六月| 97色色色色色| 日韩成人网址| 五月丁香网站| 婷婷久久婷婷| 久热伊人| 色色色成人网| 九九热最新| 风流少妇A片一区二区蜜桃| 这里只有精品视频| 五月丁香888| 99re免费在线视频| 我要色综合五月婷婷| 人人人舔人人人操人人人摸人人人97| 丁香五月色色| 99精品综合| 五月婷婷激情啪啪| 国产精品人妻在线网址| 99热丁香| 26UUU精品一区二区c〇m| 五月天成人网在线观看| 色婷网| 26uuu成人网| 97人人超| 天天爱天天狠天天透| 九九热超碰| 97热精品| 色播丁香婷婷五月激情| 婷婷狠狠操| 人人操人人添人人摸97| 亚洲 激情 中文| 五月天激情久久| av操逼网| 国产 码在线成人网站| 天天射影院| 99热在线观看| 婷婷97狠狠干| 超碰成人av| 色五月婷婷影视| 五月丁香亚州综合网| 久久99激情五月天| 久久亚洲婷婷| 开心五月婷婷| 大香人妻| 婷婷激情啪啪| 国产成人一区二区三区在线观看| 婷婷丁香五月91| 99热在线精品观看| 午夜不卡久久精品无码免费 | 国外亚洲成AV人片在线观看| 久草大| 激情五月天com| 婷婷六月成人| 五月丁香六月激情综合啪啪| 婷婷五月激情网| 国产三级片91| 另类视在线| 五月天天综合网色婷婷| 日日撸日日操| 青青草国产亚洲精品久久| 另类色网| 五月天大香蕉| 99久视频| 久久国产色| 99在线视频精品| 九九综合伊人| 日韩黄色电影| 九九 激情 网| 另类视屏| 亚洲情色一区| www.99热精品| 免费啪啪亚州视频| www.久久久久久久久久久| 强伦轩人妻一区二区电影| 67194中文在线| 婷婷五月天香蕉| 狠狠五月天| 亚洲综合丁香婷婷六月天| av大片在线| 五月花成人网| 成人丁香婷婷| 涩涩婷婷五月| 五月激情久久| 99re8这里只有精品99re8热视频| 青青草五月天| 久久这里只有精品8| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 婷婷香五月综合激情| 国产AV国片偷人妻麻豆| 天天做天天干天天综合网| 99色在线| 五月天婷五月天综合网在线观| 少妇性按摩无码中文A片| 婷婷激情鹿城五月天| 99久热视频在线| 激情99在线视频| www,色婷婷| 99日本精品视频热| 十月丁香婷婷| 99热在线观看| 79精品视频在线观看,| BT综合在线视频观看| 婷婷久草| 狠狠狠狠狠狠狠狠草| 丁香婷婷欧美综合| 99热这里只有精品8| 狠狠爱婷婷爱| 成人做爰A片免费看网站找不到了| 99久久久久久| 人妻丰满精品一区二区A片| 天天操夜夜爽歪歪| 人人操 色| 色婷婷亚洲婷婷| 草婷婷在线| 丁香 亚洲 久久| 99色在线视频| 久久久区区一久久久久久| 六月婷婷色综合| 五月激情婷婷女| 亚洲最大在线| 99视频只有精品| 丁香桃色网| 色五月琪琪| avh片在线观看| 97丁香五月| www。五月天激情| 欧美激情-区二区三区| 五月婷六月| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 婷婷五月天综合亚洲| 亚州色婷婷| 影音先锋激情网| 9人人操人人看| 青青久在线视频免费观看| 天天久| site:esunnet.com| 中文字幕在线不卡视频| 另类视频在线| 99热这里只有精品无码| 亚洲人妻av| 日韩婷久| 婷婷丁香久久| 六月婷婷色色色| 五月婷婷六月爱| 综合五月婷婷| 99精品女人天堂| 欧亚成人A片一区二区| 色噜噜97视频在线观看| 色婷婷综合中心| 91久久久久久| 精品一二三区久久AAA片| 色久女| AV操操操| 婷婷激情六月综合| 色综合久| 91亚洲天堂| 91a片爽| 国产精产国品一二三在观看| 停婷丁五月在线| 色色免费网战视频| 五月婷婷激情四季| 婷婷五月天色色| 午夜丁香综合婷婷| 伊人网色婷婷五月天| 综合色图区| 五月天激情四射网站| 国产综合网在线| 婷婷色Av| 就要去操亚洲成人精品五月天丁香婷婷| 九九精品热播| 在线不卡AC| 射婷婷中文字幕| 国产人妻777人伦精品HD| 色婷婷五月色| 综合XX网| 日本操B视频| 婷婷噜噜| 热99AV网站| WWW激情五月天| 5月丁香综合网| 嫩草AV久久伊人妇女超级A| 欧美影院婷婷| 91色在线/日韩| 色情五月| 色婷婷瘦婷婷日韩| 大香蕉久操| 丁香五月偷拍| 99免费在线视频| 91精品婷婷国产综合久久| 婷婷综合色图| 这里只精品热在线18| 五月亭亭六月色| 青草青草久热这里只有精品| 亚洲激情综| 日韩在线视频中文字幕| 丁香六月在线综合| 三级毛片视频| 天堂久久久久天堂网| 熟女人妻一区二区三区免费看| 另类少妇人与禽zOZZ0性伦| 色噜噜狠狠色综无码久久合欧美| 综合五月婷婷| 五月婷婷激情| 婷婷五月天激情网| 51精品国自产在线| 黄色AAAA韩国guochansanji| 大香蕉久久综合网| 久久久久五月丁香| 婷婷中文字幕网站| 丁香五月婷婷少妇| 五月久久网| 日本一毛片| 色色综合色视频| 少妇激情五月婷婷| 欧洲激情五月天| 亚洲激情综合免费| 99热网站在线观看| 亚洲精品国产精品乱码不99| 色五婷婷开心缴| 激情五月天视频| 丁香婷婷大香蕉| 五月丁香色综合| 天天操天天插| 丁香五月色激情| 99手机在线精品视频| 黄色成人网站在线播放| 色婷婷五月天激情| 99区视频| 国产综合网在线| 丁香九月婷| 久久婷婷亚洲| 天天综合网~91| 久久婷婷丁香| 五月丁香六月在线欧美| 久久五月婷婷开心网| 狠狠摸狠狠摸| 五月丁香色色网| 黄桃AV无码免费一区二区三区| seuuu婷婷| 欧美五月婷婷| 五月色丁香婷婷中文字幕| 开心五月激情婷婷| av网址在线| 日本女色人人| 91jiuseshunv| 亚洲综合激情五月天婷婷| 四月婷婷丁香| 天天插天天干| 国产欧美性成人精品午夜| 婷婷丁香91| 99热最新精品| 第五色色色婷婷| 久久综合首页| 91欧美| 91pornav在线| 偷拍91九色| 26uuu欧美亚洲日韩| 精品女人九九九| 九九无码| 强伦轩人妻一区二区电影| 第四色婷婷色五月| 女人天堂AV| 男同91 | 五月天天天色| 婷婷五月天社区| 99热网址| 黄桃AV无码免费一区二区三区| 久久99最新地址| 性爱综合网| 婷婷五月天激情开心网| 婷婷五月成人| 成人在线网站| 狠狠五月天婷婷激情网。| 九九久久99精品免费观看www| 丁香六月成人| 丁香五月AV在线| 激情丁香五月天| 亚洲第一成人无码A片| 欧美日韩99| 六月丁香成人网| 一本大道熟女人妻中文字幕在线| 五月激情婷婷综合| 一级A片天天操夜夜操| 激情99| 久草性爱| 五月六月激情| 国产精品久久久久久久久久 | 五月婷婷色影院| 99热成人在线观看| 国产精品久久久久久久久久 | 激情五月天婷婷| 五月丁香无码| 久久视频在线| 超碰人妻公开在线| 久久只有精品| 色色色色色网站| 超碰人人摸人人操| 婷婷五月俺要去| 99操碰| 五月丁香香蕉| 超碰99久久| 丁香五月婷婷Av| 成人综合伍月天| 亚洲视频一区| 激情五月综合视频| 日本久久精品| XX久久| 婷婷色五天| 精品少妇人妻AV无码专区偷人 | 久久久久久人妻| 久久五月丁香综合| 另类小说五月天综合网| 色99视频| 人妻久久久久| 九九色婷婷| 久久九九@| 色噜噜狠狠色综无码久久合欧美| 五月丁香亭亭A片| 天天操天天日天天爽| 国产精品第一国产精品| 亚洲视99| 久久小视频| 激情文学 综合 九月| 俺也去在线视频|