• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于GD32F305的多串口擴展模塊設計

    2023-05-30 09:56:20王維
    電子產(chǎn)品世界 2023年1期
    關(guān)鍵詞:單片機

    王維

    摘要:探討船舶導航儀對多串口的需求,提出一種用GD32F305單片機擴展多串口的方案,該方案采用USB 通信。以RK3128主板為例介紹該擴展方案的硬件連接,接著探討了單片機程序的具體實現(xiàn),最后介紹用libusb進行數(shù)據(jù)傳輸驗證。

    關(guān)鍵詞:串口擴展;GD32;單片機;USB

    船用很多電子設備是通過 RS-422串口傳輸數(shù)據(jù),比如導航儀通過 RS-422串口傳輸 NMEA -0183數(shù)據(jù),這些數(shù)據(jù)包括定位信息,導航信息,船艏信息,雷達信息等。這就要求船上的顯示終端需要有很多的串口來接收和發(fā)送數(shù)據(jù)。導航儀主板上的 SoC 芯片原生串口數(shù)量有限,有時不能滿足用戶需要,這就需要外接模塊來擴展串口。USB 總線連接簡單,信號只需要一對差分數(shù)據(jù)線傳輸,全速傳輸模式下帶寬可達12 Mbps;常見的船舶電子設備,其中 RS-422最高傳輸需求波特率為115200 bps,USB 全速模式下傳輸率超過其100倍。 USB總線擴展多個串口具有連線簡單,傳輸率高的優(yōu)勢,適合做多串口擴展。

    本文探討的擴展模塊基于單片機 GD32F305設計,采用 USB 總線擴展最多5路串口。GD32F305是兆易創(chuàng)新公司出品的一個單片機系列,該系列單片機有一路USB 總線,5路串口,CPU 核心采用 Cortex-M4,可以運行在120 MHz,功能和性能均可滿足設計要求。

    1信號連接框圖

    本文以一款 RK3128導航儀主板為例,探討串口擴展方案。圖1是主板信號連接圖,為重點說明擴展方案,信號只保留 USB 和串口部分。

    RK3128 是瑞芯微出品的 ARM Cortex-A7 4 核處理器,RK3128有3個原生串口,其中串口2和SD接口復用,實際可用的原生串口只有 2 個 , 不夠連接外部設備,因此采用本文所述方案擴展串口。如上圖 RK3128 有 1 個USB OTG,和 1 個 USB HOST 接口,其中 USB OTG用于其它通用外設(如 U 盤,鼠標) 和引導鏡像燒寫,USB HOST 接口連接 GD32F305RB 擴展串口;GD32 的5 個串口全部引出用于連接其它船用電子設備。

    GD32F305 系列單片機,CPU 核心采用 Cortex-M4,最大運行頻率為 120 MHz,內(nèi)置最少 64 KB SRAM,最少128 KB FLASH,包含1個USB OTG端口,5個串口(3個 USART 和 2 個 UART,5 個串口支持最高 9 Mbit/s波特率) 及其他豐富的外設資源。

    2單片機程序

    兆易創(chuàng)新提供了 GD32F305的固件庫,其中包含工程模板,啟動程序,豐富的外設調(diào)用程序及范例程序,并且還有用于簡化 USB 固件程序設計的 USB 程序框架。為加速開發(fā)過程,本方案充分利用了固件庫,并參照其中的 USB CDC 范例代碼 , 以 USB 程序框架為基礎設計了 USB 通信程序。單片機程序包括串口收發(fā)程序,USB 收發(fā)程序,數(shù)據(jù)轉(zhuǎn)發(fā)及命令處理程序,圖2是整個單片機程序的概要圖。

    3 串口收發(fā)程序

    串口收發(fā)封裝為以下函數(shù) :

    void uart_init();

    int uart_read(int chn, void*dat, int size);

    int uart_write(int chn, constvoid* dat, int size);

    int uart_ioctl(int chn, intcmd, void * args);

    uart_init() 為串口初始化函數(shù),用于初始化所有用到的串口,主要包括收發(fā)緩沖初始化,串口引腳功能初始化,功能寄存器初始化,中斷初始化。

    uart_read() 為串口接收函數(shù),chn為串口編號 , dat為接收數(shù)據(jù)緩沖指針,size 為數(shù)據(jù)緩沖的字節(jié)數(shù),返回值為實際讀取到的字節(jié)數(shù)。

    uart_write() 為串口發(fā)送函數(shù),chn為串口編號,dat為要發(fā)送的數(shù)據(jù)指針,size 為要發(fā)送的數(shù)據(jù)字節(jié)數(shù),返回實際寫入串口發(fā)送緩沖的字節(jié)數(shù)。

    uart_ioctl() 用于響應控制命令,chn為串口編號,cmd為命令編號,args為命令參數(shù),返回值根據(jù)不同命令定義。uart_ioctl() 主要處理串口波特率設置,回應當前對應串口發(fā)送緩沖字節(jié)數(shù)這兩個功能。

    uart_read() 和uart_write() 都是非阻塞設計,都是對相應的串口收發(fā)緩沖操作,實際數(shù)據(jù)收發(fā)是在中斷函數(shù)中處理。串口的中斷處理函數(shù)uart_irq_handle() 定義如下:

    如上代碼,串口中斷處理函數(shù)uart_irq_handle()調(diào)用了固件庫串口函數(shù)usart_interrupt_flag_get()來判斷當前串口是否觸發(fā)了接收和發(fā)送中斷,usart_data_ receive()用于從當前串口接收寄存器讀取接收到的數(shù)據(jù),usart_data_transmit()用于將1個字節(jié)的數(shù)據(jù)寫入當前串口的發(fā)送寄存器發(fā)送數(shù)據(jù)。bfifo_in_byte()和bfifo_out_byte()是一種環(huán)形緩沖bfifo的操作函數(shù),bfifo_in_byte()用于將1個字節(jié)數(shù)據(jù)寫入緩沖,bfifo_ out_byte()用于從緩沖讀取1個字節(jié)數(shù)據(jù),成功讀取返回 true,如果緩沖無數(shù)據(jù)則返回 false。

    串口一次收發(fā)字節(jié)數(shù)不固定,環(huán)形緩沖很適合這種中斷處理隨機字節(jié)數(shù)據(jù)流的收發(fā)。環(huán)形緩沖是一種有固定存儲空間的數(shù)據(jù)結(jié)構(gòu),有讀、寫兩個指針,讀取緩沖時只操作讀指針,不會修改寫指針;往緩沖寫入數(shù)據(jù)時只操作寫指針而不會修改讀指針,環(huán)形緩沖的這種指針操作機制使得操作指針時不需要對指針做中斷互斥保護,因此不需要在收發(fā)數(shù)據(jù)時關(guān)閉開啟中斷。

    環(huán)形緩沖的操作,要將指針的操作限定在環(huán)形緩沖大小之內(nèi),一般可以采用取模運算,比如以 f->ptr_out為環(huán)形緩沖的讀指針,f->size 為環(huán)形緩沖的字節(jié)大小,當讀取完一個字節(jié),讀指針前進為例,代碼如下:

    本方案采用的bfifo參照linux kernel 的kfifo, 在上述基礎上優(yōu)化了指針的操作,將環(huán)形緩沖的大小限定為2的 n 次方,n 為整數(shù),將取模操作用與運算替代以加速計算過程。同上述例子一樣的操作,設 f->mask=f-> size-1,代碼如下:

    由于串口接收到數(shù)據(jù)后,中斷處理函數(shù)將數(shù)據(jù)保存到了環(huán)形接收緩沖中,uart_read()函數(shù)只需要從環(huán)形接收緩沖將數(shù)據(jù)讀出保存到形參;uart_write()則將形參指向的數(shù)據(jù)寫入到相應的環(huán)形發(fā)送緩沖中,并判斷當前串口發(fā)送中斷是否關(guān)閉,如果發(fā)送中斷關(guān)閉則重新打開,單片機將觸發(fā)發(fā)送中斷,發(fā)送環(huán)形發(fā)送緩沖的數(shù)據(jù)。

    4 USB 數(shù)據(jù)收發(fā)程序

    USB 數(shù)據(jù)收發(fā)程序封裝為以下函數(shù):

    usb_init()為初始化函數(shù),主要初始化 USB 端口,USB 程序框架用到的定時器,USB 中斷,各種 USB 描述符等。

    usb_write()為 USB 數(shù)據(jù)送函數(shù),負責將數(shù)據(jù)通過 bulk 端點發(fā)往主機,dat為要發(fā)送的數(shù)據(jù)指針,size 為要發(fā)送的數(shù)據(jù)字節(jié)數(shù),返回實際發(fā)送的字節(jié)數(shù)。

    usb_read()是 USB 數(shù)據(jù)讀取函數(shù),負責讀取從主機發(fā)送往 bulk 端點的數(shù)據(jù),dat為數(shù)據(jù)接收緩沖指針,size 為緩沖字節(jié)數(shù),返回值為實際讀取到的字節(jié)數(shù)。

    usb_set_class_callback()用于設置 USB Class 請求回調(diào),callback 為回調(diào)函數(shù),callback 的參數(shù)wIndex,bRequest,wValue,wLength對應 USB 標準控制傳輸?shù)南鄳獏?shù),dat為數(shù)據(jù)緩沖指針,程序?qū)Request作為請求命令,當wLength>0時,程序根據(jù)bRequest內(nèi)容讀取dat或往dat寫數(shù)據(jù)。

    USB 數(shù)據(jù)收發(fā)程序相比串口數(shù)據(jù)收發(fā)程序復雜很多,因此本方案借助兆易創(chuàng)新的 USB 程序框架來簡化設計。 USB 程序框架實現(xiàn)了基本的 USB 傳輸,調(diào)用固件庫提供的 USB 設備初始化函數(shù),設置好相應的回調(diào)程序指針和 USB 描述符,可快速實現(xiàn)基本的 USB 數(shù)據(jù)傳輸。

    固件庫 USB 設備初始化函數(shù)為usbd_init(),其定義如下:

    其中參數(shù)udev為 USB 驅(qū)動句柄指針,usbd_init將初始化其數(shù)據(jù)結(jié)構(gòu),之后程序操作 USB 設備將用到該句柄。

    參數(shù) core 為 USB 設備驅(qū)動核心枚舉。USB 固件庫支持 USB 全速和 USB 高速設備,core 用來指示這兩種類型設備的其中1種。(全速設備帶寬為12 Mbps,可滿足設計,本方案實現(xiàn)的是全速設備;高速設備的帶寬為480 Mbps,實現(xiàn)高速USB 設備,需要外加 ULPI 芯片。)

    參數(shù) desc 為 USB 描述符指針,desc 定義了設備描述符、配置描述符、接口描述符等。這些描述符用來描述 USB 設備的屬性和用途。主機會在枚舉設備時獲取以確定設備是什么樣的設備,需要的總線資源,通訊方式等。

    參數(shù)class_core為 USB 類結(jié)構(gòu)體,該結(jié)構(gòu)體定義了 USB 類的初始化、反初始化、類請求、數(shù)據(jù)收發(fā)等函數(shù)指針,程序在初始化時設置好這些指針,這些指針將在 USB 程序框架中被調(diào)用。其定義如下:

    其中init為初始化函數(shù)指針,當 USB 連接時該指針指向的函數(shù)被調(diào)用,程序可在初始化函數(shù)中分配端點,初始化收發(fā)緩沖等;deinit為反初始化函數(shù)指針,USB 連接斷開時被調(diào)用,程序要在這里釋放資源;req_proc為設備請求函數(shù)指針,用于處理端點 0 控制傳輸,當主機通過端點 0 請求傳輸時,該指針指向的函數(shù)被調(diào)用,本方案在這里響應類請求,處理串口波特率設置和串口緩沖大小獲??;data_in是處理 data in 傳輸?shù)暮瘮?shù)指針,當主機向 USB 設備請求數(shù)據(jù)時,該指針指向的函數(shù)被調(diào)用,程序在這里準備好要發(fā)往主機的數(shù)據(jù);data_out是處理 data out 傳輸?shù)暮瘮?shù)指針,當主機往 USB 設備發(fā)送數(shù)據(jù)時,該指針指向的函數(shù)被調(diào)用,程序在這里接收主機下發(fā)的數(shù)據(jù)。

    分析 USB 程序框架,USB 數(shù)據(jù)傳輸采用 DMA,1次可能傳輸多個字節(jié)數(shù)據(jù);data_in和data_out都是在中斷處理程序中被調(diào)用,因此本文案設計一種環(huán)形緩沖加雙緩沖的方案來提高數(shù)據(jù)傳輸效率。環(huán)形緩沖用于避免變量互斥沖突,而雙緩沖用于提高 DMA 傳輸效率。

    上述雙緩沖,由1個寫緩沖和1個讀緩沖構(gòu)成,數(shù)據(jù)結(jié)構(gòu)如下:

    結(jié)構(gòu)體成員 buffer 為內(nèi)存緩沖,buf_len為雙緩沖的字節(jié)數(shù),程序分配雙緩沖時,分配 buffer 空間為雙倍buf_len字節(jié)數(shù); index 為數(shù)據(jù)索引,用于指示當前讀寫緩沖的地址;len為當前寫緩沖的數(shù)據(jù)字節(jié)數(shù)。

    當程序往雙緩沖寫數(shù)據(jù)時,先獲取寫緩沖的地址,寫緩沖的地址為buffer+index*buf_len,再將數(shù)據(jù)寫入寫緩沖的末尾,地址為buffer+index*buf_len+len,之后再根據(jù)數(shù)據(jù)大小累加len。

    當程序要讀取雙緩沖數(shù)據(jù)時,程序先讀取當前寫緩沖的字節(jié)數(shù),獲取當前寫緩沖的內(nèi)存地址,再對雙緩沖做一次數(shù)據(jù)緩沖翻轉(zhuǎn),將原來的讀寫緩沖互換。雙緩沖的翻轉(zhuǎn),重點是對 index 進行反運算,index =!index 。當 DMA 完成一次傳輸時,程序可以快速翻轉(zhuǎn)雙緩沖,將讀寫緩沖地址交給 DMA 控制器進行下一次數(shù)據(jù)傳輸。如此可達到減少 DMA 控制器等待時間的目的,以提高數(shù)據(jù)傳輸效率。

    關(guān)于往 bulk 端點發(fā)送數(shù)據(jù),本方案定義了一個前文所述的環(huán)形緩沖fifo_bulk_in和雙緩沖dbuf_bulk_in來緩存數(shù)據(jù),程序通過調(diào)用usb_write()函數(shù)完成。usb_ write()主要負責將形參數(shù)據(jù)寫入fifo_bulk_in,并檢測當前 USB 框架是否正在傳輸數(shù)據(jù),這個狀態(tài)由變量 is_ bulk_in_busy表示,如果還未啟動數(shù)據(jù)傳輸,則取出環(huán)形緩沖fifo_bulk_in的數(shù)據(jù)轉(zhuǎn)存至dbuf_bulk_in,翻轉(zhuǎn)dbuf_bulk_in,并調(diào)用固件庫函數(shù)usbd_ep_send()啟動一次 DMA 傳輸。當單片機完成一次傳輸,USB 框架會調(diào)用回調(diào)函數(shù)data_in(),此時根據(jù)data_in()傳入的端點號,判斷端點號為 bulk 端點準備 bulk 數(shù)據(jù)發(fā)送。檢測fifo_bulk_in是否有數(shù)據(jù)和上次傳輸?shù)淖止?jié)數(shù)是否為空,函數(shù)根據(jù)以下幾種情況處理:

    如果fifo_bulk_in有數(shù)據(jù),則和上述usb_write()檢測到未啟動傳輸時一樣,取fifo_bulk_in數(shù)據(jù)轉(zhuǎn)存至dbuf_bulk_in,翻轉(zhuǎn)dbuf_bulk_in,再次發(fā)起一次 DMA 傳輸。

    如果fifo_bulk_in無數(shù)據(jù),則發(fā)起一次0數(shù)據(jù)傳輸以表示當前傳輸完成

    當fifo_bulk_in無數(shù)據(jù),且上次是0數(shù)據(jù)傳輸時,則將is_bulk_in_busy變量設置為 false,表示 USB 程序框架已停止 bulk 數(shù)據(jù)發(fā)送

    bulk 端點數(shù)據(jù)接收也采用了一個環(huán)形緩沖和一個雙緩沖來緩存數(shù)據(jù),分別用變量fifo_bulk_out和dbuf_ bulk_out表示。

    當程序調(diào)用usb_read()時,先從fifo_bulk_out中取數(shù)據(jù)存儲到形參接收緩沖,接著檢查當前 bulk 端點是否正在接收數(shù)據(jù),該狀態(tài)用is_bulk_out_busy表示,當is_bulk_out_busy值為 false 時調(diào)用固件庫函數(shù)usb_ep_recv(),發(fā)起 DMA 傳輸將數(shù)據(jù)存至dbuf_bulk_out,并將is_bulk_out_busy值設置為 true。

    當 bulk 端點接收到數(shù)據(jù)時,USB 程序框架調(diào)用data_out(),此時取出dbuf_bulk_out的接收緩沖指針和接收數(shù)據(jù)字節(jié)數(shù)。先判斷fifo_bulk_out剩余空間是否大于 bulk 端點最大傳輸量,如果空間足夠則翻轉(zhuǎn)dbuf_ bulk_out并調(diào)用usb_ep_recv()發(fā)起下一次 DMA 傳輸;否則設置is_bulk_out_busy值為 false,表示 bulk 端點接收空閑。最后通過之前暫存的dbuf_bulk_out接收緩沖指針和接收數(shù)據(jù)字節(jié)數(shù)將本次傳輸接收到的數(shù)據(jù)轉(zhuǎn)存到fifo_bulk_out完成本次 bulk 端點數(shù)據(jù)接收處理。

    當主機向單片機請求類的控制傳輸時,USB 程序框架將調(diào)用回調(diào)函數(shù)req_proc,請求的內(nèi)容從req_proc的參數(shù) req 獲得,req 的類型usb_req定義如下:

    程序接收到類控制傳輸請求時,根據(jù) req->bm? RequestType判斷當前數(shù)據(jù)傳輸方向 s,如果是 IN 類型的傳輸,則調(diào)用前文所述usb_set_class_callback()設置的回調(diào)函數(shù),傳遞 req 的其它參數(shù),如果 req->wLength不為0,從回調(diào)函數(shù)讀取數(shù)據(jù)到全局變量ctlbuf準備將數(shù)據(jù)回傳給主機。將ctlbuf和 req->wLength傳遞給 USB 程序框架,USB 程序框架將發(fā)送數(shù)據(jù)和狀態(tài)給主機。當數(shù)據(jù)發(fā)送完成時,USB 程序框架調(diào)用前文所述 data_ in 通知程序,程序設置調(diào)用 API 通知 USB 程序框架無剩余數(shù)據(jù),完成本次控制傳輸請求。

    如果當前數(shù)據(jù)傳輸類型是 OUT 傳輸時,則先判斷 req->wLength是否為0,如果 req->wLength為0時,直接調(diào)用前文所述usb_set_class_callback()設置的回調(diào)函數(shù)即可。當 req->wLength不為0時,表示此次控制傳輸附帶數(shù)據(jù),此時程序先用全局變量last_req暫存 req 值,然后調(diào)用 API 通知 USB 程序框架將把此次傳輸?shù)臄?shù)據(jù)保存到ctlbuf。當 USB 程序框架接收完此次傳輸?shù)臄?shù)據(jù),將調(diào)用前文所述的data_out通知程序,這時程序?qū)鬟f上述last_req變量及ctlbuf通知前文所述usb_ set_class_callback()設置的回調(diào)函數(shù)。

    5數(shù)據(jù)轉(zhuǎn)發(fā)程序

    數(shù)據(jù)轉(zhuǎn)發(fā)程序負責將所有串口的數(shù)據(jù)通過 USB 端口轉(zhuǎn)發(fā)到主機,同時通過 USB 端口從主機讀取數(shù)據(jù)發(fā)送給指定的串口。中間的數(shù)據(jù)傳輸采用特定的數(shù)據(jù)格式對串口數(shù)據(jù)進行封裝,標記同步頭,串口編號,字節(jié)數(shù)。本方案采用的數(shù)據(jù)包格式如下:

    其中 sync 為同步頭,固定為兩個’$’字符,用于解析時找到數(shù)據(jù)包的起始位置;chn為串口編號,對應收發(fā)數(shù)據(jù)的串口;len為數(shù)據(jù)字節(jié)數(shù),用于表示后面dat的實際大小;dat為實際收發(fā)的數(shù)據(jù),此處定義的數(shù)組大小不作為實際數(shù)據(jù)大小。

    本方案定義了函數(shù)mux_pack_data()用于封裝串口數(shù)據(jù),其聲明如下:

    其中dst為數(shù)據(jù)緩沖地址,用于存放封裝好的數(shù)據(jù)包;chn為串口編號;dat為要傳輸?shù)臄?shù)據(jù);len為上述dat的數(shù)據(jù)字節(jié)數(shù);返回封裝后的數(shù)據(jù)字節(jié)數(shù)。

    數(shù)據(jù)轉(zhuǎn)發(fā)程序的串口接收部分主要操作為,逐一讀取各個串口的數(shù)據(jù),調(diào)用mux_pack_data()將數(shù)據(jù)封裝成一個個數(shù)據(jù)包存儲至臨時緩沖out_buf,最后調(diào)用前文所述 USB 收發(fā)程序的發(fā)送函數(shù)usb_write()將out_buf的數(shù)據(jù)發(fā)給主機。

    串口發(fā)送部分操作為,調(diào)用usb_read()函數(shù)從主機讀取數(shù)據(jù)并解析,根據(jù)解析的數(shù)據(jù)包調(diào)用uart_write()往對應的串口發(fā)送數(shù)據(jù)。解析函數(shù)為mux_parse_data(),其聲明如下:

    其中src和len為原始數(shù)據(jù)緩沖指針及數(shù)據(jù)大??; callback為回調(diào)函數(shù);回調(diào)函數(shù)的參數(shù)chn表示串口編號,dat為數(shù)據(jù)緩沖指針,len為數(shù)據(jù)字節(jié)數(shù)。這里將從usb_read()讀取到的數(shù)據(jù)傳入?yún)?shù)src和len,當mux_parse_data()解析到數(shù)據(jù)包,將通過 callback 通知,此時程序?qū)⒄{(diào)用uart_write()將數(shù)據(jù)發(fā)往指定串口。

    6命令處理程序

    命令處理程序主要負責響應主機設置串口波特率,獲取串口寫緩沖的請求。這些請求通過 USB 控制傳輸?shù)念愓埱髞硖幚?,程序通過上文所述usb_set_class_callback()設置類請求回調(diào)函數(shù)。類請求回調(diào)函數(shù)聲明如下:

    bRequest用于表示請求的命令,wIndex表示串口編號,wValue根據(jù)bRequest不同用于表示設置的值,dat和wLength用于當前請求需要補充的數(shù)據(jù)。

    用宏定義表示請求的命令,REQ_SET_BAUD,REQ_ALL_UART_WRITE_ROOM 分別表示設置串口波特率,請求所有串口的剩余寫緩沖空間。

    當主機請求設置串口波特率,handle_class_request將被調(diào)用,bRequest值為 REQ_SET_BAUD,wValue為波特率除以100的值(以9600為例,wValue值為96),wIndex表示串口編號,此時程序調(diào)用前文所述串口函數(shù)uart_ioctl()設置編號為wIndex串口的波特率為wValue×100。

    當主機請求所有串口寫緩沖時,bRequest值為 REQ_ALL_UART_WRITE_ROOM,程序調(diào)用uart_ ioctl()逐一獲取每個串口的剩余寫緩沖空間,寫至dat參數(shù)。傳遞至dat的數(shù)據(jù)結(jié)構(gòu)如下:

    typedef struct _all_room{

    uint8_t chn_num;

    uint16_t room[5];

    }all_room_t;

    其中chn_num為串口數(shù)量,room 為各個串口的剩余寫緩沖字節(jié)數(shù),每個串口的剩余寫緩沖字節(jié)數(shù)用2個字節(jié)的類型 uint16_t 表示。

    7傳輸驗證

    本方案 USB 數(shù)據(jù)傳輸采用libusb編寫測試程序在 LINUX 系統(tǒng)下驗證。libusb是一個在應用層調(diào)用的跨平臺 USB 庫,包含了 USB 傳輸所需要的 API。相比在編寫內(nèi)核驅(qū)動來驗證本方案的數(shù)據(jù)傳輸,采用libusb更快捷,更方便調(diào)試。

    本方案驗證傳輸采用了libusb中比較方便調(diào)試的同步 I/O API,聲明如下:

    int libusb_control_transfer(libusb_device_handle *dev_handle,

    uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,

    unsigned char *data, uint16_t wLength, unsigned int timeout);

    int libusb_bulk_transfer(libusb_device_handle *dev_handle,

    unsigned char endpoint, unsigned char *data, int length,

    int *actual_length, unsigned int timeout);

    其中l(wèi)ibusb_control_transfer()用于發(fā)起控制傳輸,參數(shù)dev_handle為 USB 設備句柄,data 為補充數(shù)據(jù)的指針,timeout 為超時毫秒數(shù),其它參數(shù)對應控制傳輸 USB 的標準定義。函數(shù)返回傳輸狀態(tài),成功傳輸返回枚舉值LIBUSB? SUCCESS。

    libusb_bulk_transfer()用于發(fā)起 bulk 傳輸,dev_ handle 為 USB 設備句柄,endpoint 為 bulk 端點編號,data 為接收或發(fā)送的數(shù)據(jù)緩沖指針,length 為數(shù)據(jù)字節(jié)數(shù),actual_length為實際傳輸?shù)淖止?jié)數(shù),timeout 為超時毫秒數(shù)。

    7.1本方案主機接收據(jù)傳輸驗證,主要流程如下:

    1)調(diào)用libusb_open_device_with_vid_pid(),根據(jù)設備 vid,pid打開 USB 設備 s

    2)通過libusb_control_transfer()設置各個串口的波特率

    3)通過電腦串口上發(fā)送測試文件到單片機的串口

    4)電腦測試程序通過libusb_bulk_transfer()從單

    片機 USB 口讀取數(shù)據(jù),通過轉(zhuǎn)發(fā)程序定義的協(xié)議解析

    數(shù)據(jù)包,根據(jù)串口號不同將數(shù)據(jù)分別存儲到不同的文件5)對比發(fā)送和接收到的文件

    7.2主機發(fā)送數(shù)據(jù)傳輸驗證,流程如下:

    1)在電腦測試程序通過libusb_control_transfer()設置各個串口的波特率

    2)電腦測試程序加載測試文件,通過轉(zhuǎn)發(fā)程序定義的協(xié)議將文件數(shù)據(jù)按各個串口封裝數(shù)據(jù)包,通過libusb_bulk_transfer()往單片機 USB 口發(fā)送數(shù)據(jù)

    3)通過電腦串口從單片機接收數(shù)據(jù)并根據(jù)不同串口保存到不同文件

    4)對比發(fā)送和接收到的文件

    由于 USB 傳輸速度遠高于本方案串口,為避免緩沖溢出導致數(shù)據(jù)丟失,主機發(fā)送數(shù)據(jù)時需要根據(jù)串口最大發(fā)送緩沖大小和設計的最高波特率定時通過libusb_ control_transfer()獲取各個串口的剩余發(fā)送緩沖空間,測試程序根據(jù)單片機串口剩余發(fā)送緩沖空間確定當時能發(fā)送的字節(jié)數(shù)。本方案設計單片機串口最大發(fā)送緩沖大小為1024個字節(jié),最高波特率為115200,根據(jù)最高波特率串口最高發(fā)送速度為 115 200/10等于 11 520 字節(jié) /s,根據(jù)以上參數(shù)可知最大緩沖填滿時間為 1 024/11 520 ≈ 88 ms,因此本方案輪詢單片機串口剩余發(fā)送緩沖時間間隔為 80 ms即可。

    測試程序運行命令如下 :

    ./mux-test -b 115200 -f ./origin.txt -s /dev/ttyUSB0-4

    mux-test 為測試程序,-b 選項為波特率,這里設置為 115200;-f 選項為測試數(shù)據(jù)文件名,這里為origin.txt,origin.txt 為 64kB 的文本文件;-s 為電腦的串口tty設備名,這里 /dev/ttyUSB0 - 4 表示加載 /dev/ttyUSB0、/dev/ttyUSB1、…… /dev/ttyUSB4。

    程序運行后,將從電腦串口讀取到的數(shù)據(jù)存儲到 ./tty目錄下,文件根據(jù)串口編號命名,為 0.txt、1.txt、…… 4.txt;從 USB 讀取到的數(shù)據(jù)存儲到 ./usb目錄下,文件根據(jù)單片機串口編號命名,為 0.txt、1.txt、…… 4.txt。當程序運行完,運行以下命令比較文件:

    for i in $(seq 0 4); do diff -s ./origin.txt ./tty/$i.txt ; done; \

    for i in $(seq 0 4); do diff -s ./origin.txt ./usb/$i.txt ; done

    以下是運行結(jié)果 :

    Files ./origin.txt and ./tty/0.txt are identical

    Files ./origin.txt and ./tty/1.txt are identical

    Files ./origin.txt and ./tty/2.txt are identical

    Files ./origin.txt and ./tty/3.txt are identical

    Files ./origin.txt and ./tty/4.txt are identical

    Files ./origin.txt and ./usb/0.txt are identical

    Files ./origin.txt and ./usb/1.txt are identical

    Files ./origin.txt and ./usb/2.txt are identical

    Files ./origin.txt and ./usb/3.txt are identical

    Files ./origin.txt and ./usb/4.txt are identical

    根據(jù)結(jié)果可以判斷出收發(fā)的數(shù)據(jù)完全一致。

    8 結(jié)束語

    本文首先分析了船舶導航儀對多串口的需求,并提出 USB 擴展多串口的方案,分析該方案的可行性及便利性,并提出兆易創(chuàng)新的 GD32F305 單片機來實現(xiàn)這一方案。接著以 RK3128 主板為例介紹該擴展方案的硬件連接,然后探討了單片機程序的具體實現(xiàn),最后介紹用libusb進行數(shù)據(jù)傳輸驗證。

    參考文獻:

    [1] GD32F305xx Datasheet Rev1.3[G].

    [2] GD32F30x_User_Manual_Rev2.8.pdf[G].

    [3] USBFS/HS Firmware Library User Guide Revision 1.0[G].

    [4] Firmware Library User Guide Revison 1.0[G].

    [5] USB in a Nutshell[G].

    猜你喜歡
    單片機
    基于單片機的SPWM控制逆變器的設計與實現(xiàn)
    電子制作(2019年13期)2020-01-14 03:15:28
    基于單片機的層次漸變暖燈的研究
    電子制作(2019年15期)2019-08-27 01:12:10
    基于單片機的便捷式LCF測量儀
    電子制作(2019年9期)2019-05-30 09:42:02
    小議PLC與單片機之間的串行通信及應用
    電子制作(2018年12期)2018-08-01 00:48:04
    基于單片機的平衡控制系統(tǒng)設計
    電子制作(2017年19期)2017-02-02 07:08:27
    Microchip推出兩個全新PIC單片機系列
    又黄又粗又硬又大视频| 亚洲av熟女| 身体一侧抽搐| 国产探花在线观看一区二区| 99久久综合精品五月天人人| www.自偷自拍.com| 看黄色毛片网站| 欧美最黄视频在线播放免费| 黄色毛片三级朝国网站| 国产乱人伦免费视频| 成人国产一区最新在线观看| 一a级毛片在线观看| 久久久国产精品麻豆| 国产精品精品国产色婷婷| 午夜福利在线观看吧| 日本撒尿小便嘘嘘汇集6| 国产片内射在线| 亚洲国产日韩欧美精品在线观看 | 亚洲精品国产精品久久久不卡| 最近最新中文字幕大全免费视频| 男插女下体视频免费在线播放| 欧美黄色淫秽网站| 91大片在线观看| 亚洲精品av麻豆狂野| 黄色成人免费大全| 国产男靠女视频免费网站| 少妇被粗大的猛进出69影院| 欧美黑人精品巨大| 国产免费av片在线观看野外av| 国产不卡一卡二| www.999成人在线观看| 一个人免费在线观看的高清视频| 狠狠狠狠99中文字幕| 午夜福利视频1000在线观看| 亚洲人成伊人成综合网2020| 9191精品国产免费久久| 特级一级黄色大片| 国产精品久久久久久久电影 | 国产麻豆成人av免费视频| 久99久视频精品免费| 免费在线观看日本一区| 国产精品影院久久| 九九热线精品视视频播放| 欧美色视频一区免费| 精品一区二区三区av网在线观看| 国产高清视频在线播放一区| 亚洲狠狠婷婷综合久久图片| 中出人妻视频一区二区| 国产精品国产高清国产av| 少妇人妻一区二区三区视频| 亚洲黑人精品在线| 国产片内射在线| 在线a可以看的网站| 两个人免费观看高清视频| 色播亚洲综合网| 色综合欧美亚洲国产小说| 亚洲欧美日韩东京热| 国产在线观看jvid| 日韩高清综合在线| 九色国产91popny在线| 熟女电影av网| 久久精品影院6| 国产av又大| 夜夜躁狠狠躁天天躁| 999久久久精品免费观看国产| 亚洲av美国av| av福利片在线| 9191精品国产免费久久| 男人舔女人下体高潮全视频| 91国产中文字幕| 亚洲av成人精品一区久久| 欧美三级亚洲精品| 床上黄色一级片| 免费在线观看黄色视频的| 天堂av国产一区二区熟女人妻 | 午夜福利在线观看吧| 丰满人妻熟妇乱又伦精品不卡| 一二三四在线观看免费中文在| 国产蜜桃级精品一区二区三区| 午夜福利在线观看吧| 天堂影院成人在线观看| 欧美三级亚洲精品| 国产精品爽爽va在线观看网站| 精品一区二区三区四区五区乱码| 亚洲欧美日韩东京热| 在线观看一区二区三区| 丝袜人妻中文字幕| 亚洲av成人精品一区久久| 免费在线观看影片大全网站| 天天添夜夜摸| 精品久久蜜臀av无| 岛国在线观看网站| 黄片小视频在线播放| 一本一本综合久久| 成人永久免费在线观看视频| 中文字幕人成人乱码亚洲影| 国产精品久久视频播放| 观看免费一级毛片| 国产精品久久久久久亚洲av鲁大| 日韩欧美免费精品| 身体一侧抽搐| 一进一出抽搐动态| 久久久精品大字幕| 在线观看66精品国产| 亚洲成人久久性| 亚洲乱码一区二区免费版| 男女下面进入的视频免费午夜| 床上黄色一级片| 性色av乱码一区二区三区2| 男插女下体视频免费在线播放| 少妇的丰满在线观看| 久久 成人 亚洲| 日本黄大片高清| 日韩精品免费视频一区二区三区| 中文字幕熟女人妻在线| 亚洲色图 男人天堂 中文字幕| 亚洲avbb在线观看| 亚洲中文日韩欧美视频| 女同久久另类99精品国产91| 国产亚洲精品第一综合不卡| 亚洲精品色激情综合| or卡值多少钱| 精品久久久久久成人av| 12—13女人毛片做爰片一| 午夜福利免费观看在线| 欧美另类亚洲清纯唯美| 日韩欧美 国产精品| 九九热线精品视视频播放| 性欧美人与动物交配| 曰老女人黄片| 日韩三级视频一区二区三区| 亚洲欧美精品综合久久99| 一二三四在线观看免费中文在| 亚洲18禁久久av| 亚洲人与动物交配视频| 国产乱人伦免费视频| 亚洲精品色激情综合| 午夜老司机福利片| 99国产精品一区二区三区| 国产蜜桃级精品一区二区三区| 亚洲色图 男人天堂 中文字幕| 中文字幕av在线有码专区| av国产免费在线观看| 国产成人影院久久av| 国产激情欧美一区二区| 色在线成人网| 国产精华一区二区三区| 99国产精品99久久久久| 国产免费av片在线观看野外av| 1024手机看黄色片| 又黄又爽又免费观看的视频| 精品乱码久久久久久99久播| 国产69精品久久久久777片 | 日韩欧美国产一区二区入口| 国模一区二区三区四区视频 | 精品无人区乱码1区二区| 91九色精品人成在线观看| 国产精品香港三级国产av潘金莲| 男人的好看免费观看在线视频 | 日日干狠狠操夜夜爽| 亚洲欧洲精品一区二区精品久久久| 一进一出抽搐gif免费好疼| 欧美性猛交黑人性爽| 久久久久国产一级毛片高清牌| 变态另类成人亚洲欧美熟女| 亚洲性夜色夜夜综合| 亚洲avbb在线观看| 日韩欧美国产一区二区入口| 99riav亚洲国产免费| 国产激情偷乱视频一区二区| 亚洲精品久久成人aⅴ小说| 真人一进一出gif抽搐免费| 在线观看舔阴道视频| 亚洲美女视频黄频| 日本撒尿小便嘘嘘汇集6| 国产精品98久久久久久宅男小说| 床上黄色一级片| 国产单亲对白刺激| 欧美一区二区精品小视频在线| 少妇裸体淫交视频免费看高清 | 97人妻精品一区二区三区麻豆| 18美女黄网站色大片免费观看| 成人欧美大片| 18禁黄网站禁片免费观看直播| 久久性视频一级片| 欧美激情久久久久久爽电影| 亚洲国产欧美人成| 亚洲avbb在线观看| av中文乱码字幕在线| 日本 欧美在线| 窝窝影院91人妻| 99re在线观看精品视频| 午夜激情福利司机影院| 在线观看66精品国产| 亚洲无线在线观看| 久久人妻av系列| av天堂在线播放| 色精品久久人妻99蜜桃| 亚洲中文日韩欧美视频| 欧美黑人欧美精品刺激| 91麻豆av在线| 欧美+亚洲+日韩+国产| 久久亚洲真实| 搡老熟女国产l中国老女人| 他把我摸到了高潮在线观看| 免费看日本二区| 不卡一级毛片| 欧美黑人巨大hd| 国产av麻豆久久久久久久| 日韩 欧美 亚洲 中文字幕| 麻豆国产av国片精品| 欧美激情久久久久久爽电影| 天天添夜夜摸| 可以在线观看毛片的网站| 男人舔女人下体高潮全视频| 免费在线观看黄色视频的| 国产乱人伦免费视频| 久久久国产精品麻豆| www.熟女人妻精品国产| 美女免费视频网站| 成人av在线播放网站| 激情在线观看视频在线高清| 国产精品av久久久久免费| 欧美大码av| 免费看a级黄色片| 禁无遮挡网站| av福利片在线观看| 亚洲精品中文字幕一二三四区| 一级毛片女人18水好多| 香蕉av资源在线| 欧美色欧美亚洲另类二区| 亚洲熟女毛片儿| 久久人妻福利社区极品人妻图片| 免费一级毛片在线播放高清视频| 少妇被粗大的猛进出69影院| 国产v大片淫在线免费观看| 黄色 视频免费看| 岛国在线免费视频观看| 久久久久免费精品人妻一区二区| 久久香蕉国产精品| √禁漫天堂资源中文www| 欧美又色又爽又黄视频| 亚洲一卡2卡3卡4卡5卡精品中文| 亚洲人成网站在线播放欧美日韩| 国产成人精品久久二区二区91| 国产激情偷乱视频一区二区| 亚洲国产欧洲综合997久久,| 成人18禁在线播放| 一a级毛片在线观看| 一本久久中文字幕| 日本一本二区三区精品| 国产视频一区二区在线看| 亚洲成人中文字幕在线播放| 亚洲精品粉嫩美女一区| 99精品久久久久人妻精品| 国产在线精品亚洲第一网站| 曰老女人黄片| 日韩欧美一区二区三区在线观看| 18美女黄网站色大片免费观看| 最近最新中文字幕大全电影3| 日本黄色视频三级网站网址| 88av欧美| 18禁黄网站禁片午夜丰满| 91九色精品人成在线观看| 丁香欧美五月| 免费搜索国产男女视频| 亚洲天堂国产精品一区在线| 我的老师免费观看完整版| 久久久久久大精品| 欧美成人免费av一区二区三区| 亚洲专区字幕在线| 欧美日韩中文字幕国产精品一区二区三区| 国产成人av激情在线播放| 午夜a级毛片| 夜夜夜夜夜久久久久| 国产一区二区三区视频了| 国产精品 国内视频| 成人永久免费在线观看视频| 国产精品自产拍在线观看55亚洲| 国产av麻豆久久久久久久| 亚洲激情在线av| 久久精品国产99精品国产亚洲性色| 亚洲专区中文字幕在线| 欧美人与性动交α欧美精品济南到| 国产黄片美女视频| 亚洲黑人精品在线| 亚洲午夜精品一区,二区,三区| 听说在线观看完整版免费高清| 黄色a级毛片大全视频| 国产蜜桃级精品一区二区三区| 久久精品国产99精品国产亚洲性色| 精品人妻偷拍中文字幕| 国产片特级美女逼逼视频| 成人亚洲欧美一区二区av| а√天堂www在线а√下载| 国产精品人妻久久久久久| 长腿黑丝高跟| 久久久精品大字幕| 亚洲18禁久久av| 精品人妻一区二区三区麻豆| 丰满的人妻完整版| 尤物成人国产欧美一区二区三区| 男女做爰动态图高潮gif福利片| 日本黄色片子视频| 村上凉子中文字幕在线| 免费在线观看成人毛片| 国产极品天堂在线| 日本撒尿小便嘘嘘汇集6| 男的添女的下面高潮视频| 国产精华一区二区三区| 成年女人看的毛片在线观看| 美女cb高潮喷水在线观看| .国产精品久久| 国产高清有码在线观看视频| 成人高潮视频无遮挡免费网站| av在线天堂中文字幕| 赤兔流量卡办理| 少妇的逼好多水| 在线免费观看的www视频| 国产精品久久久久久久久免| 亚洲精品成人久久久久久| 国产精品一二三区在线看| 日韩欧美 国产精品| 久久九九热精品免费| av天堂中文字幕网| 亚洲精品久久国产高清桃花| 在线观看免费视频日本深夜| 日韩高清综合在线| 欧美日韩一区二区视频在线观看视频在线 | 变态另类丝袜制服| 亚洲久久久久久中文字幕| 国产爱豆传媒在线观看| 日本免费一区二区三区高清不卡| 校园人妻丝袜中文字幕| 精品久久久久久久久久免费视频| 日韩av不卡免费在线播放| 欧美日韩乱码在线| 国产 一区 欧美 日韩| 亚洲欧美精品专区久久| 男人和女人高潮做爰伦理| 人妻制服诱惑在线中文字幕| 村上凉子中文字幕在线| 国产精品免费一区二区三区在线| 精品国产三级普通话版| 久久精品91蜜桃| avwww免费| av卡一久久| 91在线精品国自产拍蜜月| 晚上一个人看的免费电影| 国产午夜精品一二区理论片| 久久99精品国语久久久| 久久综合国产亚洲精品| 十八禁国产超污无遮挡网站| 亚洲欧美精品专区久久| 91在线精品国自产拍蜜月| 精品人妻一区二区三区麻豆| 国产成人精品久久久久久| 亚洲av免费在线观看| 桃色一区二区三区在线观看| 夜夜看夜夜爽夜夜摸| 欧美性感艳星| 中出人妻视频一区二区| 国产高清不卡午夜福利| 色噜噜av男人的天堂激情| 国产老妇伦熟女老妇高清| 亚洲无线观看免费| 亚洲av成人av| 啦啦啦啦在线视频资源| 岛国毛片在线播放| 亚洲国产欧洲综合997久久,| 色视频www国产| 国产精品久久久久久久电影| 日韩强制内射视频| 国内久久婷婷六月综合欲色啪| 日本免费一区二区三区高清不卡| 91久久精品国产一区二区三区| 中文字幕免费在线视频6| 一区二区三区高清视频在线| 少妇裸体淫交视频免费看高清| 国产高清三级在线| av免费观看日本| 日本爱情动作片www.在线观看| 秋霞在线观看毛片| 精品久久久噜噜| 少妇丰满av| 国产精品女同一区二区软件| 欧美成人精品欧美一级黄| 小说图片视频综合网站| 麻豆国产97在线/欧美| 亚洲人成网站在线播| 男人舔奶头视频| 春色校园在线视频观看| 不卡视频在线观看欧美| 国国产精品蜜臀av免费| 亚洲久久久久久中文字幕| 国产老妇女一区| 天美传媒精品一区二区| 亚洲国产精品国产精品| 成人三级黄色视频| 热99re8久久精品国产| 人人妻人人澡人人爽人人夜夜 | 国产成人a区在线观看| www日本黄色视频网| 午夜激情福利司机影院| 免费av观看视频| 国产精品av视频在线免费观看| 可以在线观看的亚洲视频| 国产精品一区二区在线观看99 | 久久这里有精品视频免费| 日韩精品有码人妻一区| 国产老妇伦熟女老妇高清| 99视频精品全部免费 在线| 听说在线观看完整版免费高清| 国产 一区 欧美 日韩| 99久久无色码亚洲精品果冻| 亚洲精品乱码久久久v下载方式| 不卡一级毛片| 亚洲va在线va天堂va国产| 亚洲欧美日韩东京热| 亚洲国产欧洲综合997久久,| 直男gayav资源| 国产精品一区二区性色av| 岛国在线免费视频观看| 国产成人午夜福利电影在线观看| 99热只有精品国产| 亚洲精品乱码久久久v下载方式| 免费观看a级毛片全部| 欧美色欧美亚洲另类二区| 尾随美女入室| 国产精品,欧美在线| 99热这里只有是精品在线观看| 午夜福利在线观看免费完整高清在 | 亚洲欧美日韩卡通动漫| 亚洲av中文字字幕乱码综合| 91午夜精品亚洲一区二区三区| 在线免费十八禁| 天天一区二区日本电影三级| 偷拍熟女少妇极品色| 国产在线男女| 国产av不卡久久| 精品久久久久久久久久免费视频| 日韩中字成人| 国产美女午夜福利| 在线天堂最新版资源| av在线播放精品| 久久久欧美国产精品| 亚洲欧洲日产国产| 国产日韩欧美在线精品| 亚洲精品色激情综合| 亚洲欧美中文字幕日韩二区| .国产精品久久| 国产成年人精品一区二区| 性欧美人与动物交配| 国产乱人视频| 69av精品久久久久久| 亚洲欧美成人精品一区二区| 91久久精品国产一区二区三区| 99久久精品一区二区三区| 亚洲一级一片aⅴ在线观看| 午夜福利成人在线免费观看| 精品人妻偷拍中文字幕| 日本一二三区视频观看| 成年版毛片免费区| 嫩草影院新地址| 国产免费男女视频| 成人特级av手机在线观看| 亚洲欧美日韩高清在线视频| 亚洲av.av天堂| 精品99又大又爽又粗少妇毛片| 亚洲精品自拍成人| 毛片女人毛片| 亚洲色图av天堂| 精品免费久久久久久久清纯| 欧美最黄视频在线播放免费| 99久久中文字幕三级久久日本| 国产精品蜜桃在线观看 | 国产一区亚洲一区在线观看| 亚洲天堂国产精品一区在线| 美女黄网站色视频| 观看免费一级毛片| 日日撸夜夜添| 国内久久婷婷六月综合欲色啪| 18禁黄网站禁片免费观看直播| 99热6这里只有精品| 久久久久久九九精品二区国产| 男插女下体视频免费在线播放| 网址你懂的国产日韩在线| 少妇猛男粗大的猛烈进出视频 | 精品人妻偷拍中文字幕| 亚洲五月天丁香| 久久久久国产网址| 狠狠狠狠99中文字幕| 国产精品一区二区三区四区免费观看| 狠狠狠狠99中文字幕| 伊人久久精品亚洲午夜| 一夜夜www| 国产av麻豆久久久久久久| 国产黄a三级三级三级人| 老师上课跳d突然被开到最大视频| 高清日韩中文字幕在线| 国产av一区在线观看免费| 精品国产三级普通话版| 国产乱人偷精品视频| 国产精品一及| 又爽又黄无遮挡网站| 免费看a级黄色片| 午夜爱爱视频在线播放| 日韩欧美 国产精品| 午夜精品在线福利| 天天躁夜夜躁狠狠久久av| 久久久久性生活片| 国产av在哪里看| 成人二区视频| 五月伊人婷婷丁香| 一级黄片播放器| 日产精品乱码卡一卡2卡三| 一级av片app| 一区福利在线观看| 亚洲国产精品久久男人天堂| 男女做爰动态图高潮gif福利片| 国产乱人偷精品视频| 97超视频在线观看视频| 精品99又大又爽又粗少妇毛片| 婷婷色综合大香蕉| 校园春色视频在线观看| 少妇人妻一区二区三区视频| 久久人人爽人人片av| 久久国产乱子免费精品| 一卡2卡三卡四卡精品乱码亚洲| av国产免费在线观看| 又爽又黄无遮挡网站| 18禁黄网站禁片免费观看直播| 晚上一个人看的免费电影| 亚洲欧美精品专区久久| 嘟嘟电影网在线观看| 国内揄拍国产精品人妻在线| 别揉我奶头 嗯啊视频| 日日撸夜夜添| 中文字幕久久专区| 狂野欧美激情性xxxx在线观看| 中文资源天堂在线| 国产高清视频在线观看网站| 亚洲av成人精品一区久久| 国产黄a三级三级三级人| 国内精品久久久久精免费| a级毛片a级免费在线| 国产免费男女视频| 99久久无色码亚洲精品果冻| 高清午夜精品一区二区三区 | 日本成人三级电影网站| 亚洲欧美清纯卡通| 久久精品国产亚洲av涩爱 | 夫妻性生交免费视频一级片| 免费观看的影片在线观看| 亚洲成人久久性| 少妇熟女欧美另类| 亚洲精品久久久久久婷婷小说 | 日本免费a在线| 欧美激情国产日韩精品一区| 国产成人a∨麻豆精品| 三级国产精品欧美在线观看| 国产人妻一区二区三区在| 人妻系列 视频| 男女啪啪激烈高潮av片| 三级毛片av免费| 悠悠久久av| 成年免费大片在线观看| 18禁黄网站禁片免费观看直播| av黄色大香蕉| 国产精品一区二区三区四区久久| 国产精品野战在线观看| 日本免费a在线| 人体艺术视频欧美日本| 美女cb高潮喷水在线观看| 久久精品91蜜桃| 国产精品嫩草影院av在线观看| 精品熟女少妇av免费看| 国产精品一区www在线观看| 欧美精品一区二区大全| 婷婷色av中文字幕| 色综合亚洲欧美另类图片| 精品国内亚洲2022精品成人| 久久久精品欧美日韩精品| 国产成人午夜福利电影在线观看| 免费观看人在逋| 亚洲性久久影院| 免费人成视频x8x8入口观看| 久久精品91蜜桃| 给我免费播放毛片高清在线观看| h日本视频在线播放| 亚洲精品久久国产高清桃花| 91久久精品电影网| 男女视频在线观看网站免费| 熟妇人妻久久中文字幕3abv| 欧美性感艳星| 婷婷精品国产亚洲av| 高清毛片免费观看视频网站| 亚洲精品自拍成人| 日本三级黄在线观看| 波多野结衣高清作品| 久久久久免费精品人妻一区二区| 夜夜爽天天搞| 国产精品一区二区性色av| 秋霞在线观看毛片| 亚洲欧洲国产日韩| 日韩大尺度精品在线看网址| 我要搜黄色片| 国产精品久久久久久久电影| 久久精品国产亚洲网站| 男人舔女人下体高潮全视频| 国产探花在线观看一区二区| 少妇裸体淫交视频免费看高清| 在线观看免费视频日本深夜| 在线免费十八禁| 欧美日本亚洲视频在线播放|