999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于STM32的程序遠(yuǎn)程升級(jí)設(shè)計(jì)與實(shí)現(xiàn)

2016-09-08 01:35:51張巖松葛俊鋒胡文月
電子設(shè)計(jì)工程 2016年1期
關(guān)鍵詞:嵌入式程序

張巖松,葛俊鋒,葉 林,胡文月

(華中科技大學(xué) 自動(dòng)化學(xué)院,湖北 武漢 430074)

基于STM32的程序遠(yuǎn)程升級(jí)設(shè)計(jì)與實(shí)現(xiàn)

張巖松,葛俊鋒,葉 林,胡文月

(華中科技大學(xué) 自動(dòng)化學(xué)院,湖北 武漢430074)

隨著各類嵌入式設(shè)備的廣泛應(yīng)用,對(duì)嵌入式設(shè)備程序升級(jí)的需求也愈發(fā)強(qiáng)烈。文中在闡述“在應(yīng)用中編程(In Application Program,IAP):原理的基礎(chǔ)上,以STM32為平臺(tái),設(shè)計(jì)了通過以太網(wǎng)升級(jí)程序的方案,實(shí)現(xiàn)了以STM32為代表的嵌入式設(shè)備程序固件的實(shí)時(shí)升級(jí),滿足了相關(guān)需求,更為物聯(lián)網(wǎng)和智能化設(shè)備的功能完善提供了指導(dǎo)和幫助。

IAP;STM32;程序遠(yuǎn)程升級(jí);物聯(lián)網(wǎng)

IAP是除ICP和ISP外一種方便快捷的應(yīng)用程序更新方法。用戶可以在遠(yuǎn)程無需通過機(jī)械操作實(shí)現(xiàn)對(duì)目標(biāo)板程序的實(shí)時(shí)更新操作,通信方式可以選擇串口、以太網(wǎng)、WIFI等多種方式,可以有效解決在遠(yuǎn)程苛刻條件下用戶程序不能及時(shí)更新的問題。該技術(shù)提高了嵌入式系統(tǒng)的可拓展性與可維護(hù)性,在物聯(lián)網(wǎng)項(xiàng)目中具有實(shí)際應(yīng)用價(jià)值。文中首先介紹了IAP的工作原理、程序流程及燒寫細(xì)節(jié),并以此為基礎(chǔ),分別對(duì)STM32系列微控制器的互聯(lián)型和非互聯(lián)型兩大類MCU產(chǎn)品設(shè)計(jì)了遠(yuǎn)程程序升級(jí)方案,實(shí)現(xiàn)了對(duì)STM32全產(chǎn)品類的程序升級(jí)支持,即可通過以太網(wǎng)遠(yuǎn)程實(shí)時(shí)升級(jí)STM32上的用戶程序。

表1 STM32啟動(dòng)模式Tab.1 Start mode of STM32

圖1 儲(chǔ)存器映像Fig.1 Memory map

1 IAP原理

1.1儲(chǔ)存結(jié)構(gòu)

STM32是一種32位微處理器[1],共有4GB線性地址空間,分為8個(gè)主要存儲(chǔ)塊,每個(gè)塊512MB。其中第一塊為代碼區(qū),內(nèi)部包括嵌入式閃存、系統(tǒng)存儲(chǔ)區(qū)、選項(xiàng)字節(jié)等。第二塊內(nèi)部包含嵌入式SRAM區(qū)等。系統(tǒng)的外設(shè)地址及廠商定制的外設(shè)地址分布在其余存儲(chǔ)塊中。

對(duì)于STM32,可以通過BOOT[1:0]引腳選擇3種不同啟動(dòng)模式。

一般來說,程序的代碼文件及常量存儲(chǔ)在閃存存儲(chǔ)器,程序的變量、堆棧存儲(chǔ)在SRAM區(qū)。程序文件的大小受閃存及SARM的限制,用戶程序的代碼文件及常量占用存儲(chǔ)區(qū)的大小要小于閃存存儲(chǔ)區(qū)總?cè)萘浚脩舻淖兞考岸褩U加脙?nèi)存的大小要小于STM32的SARM容量。否則,程序不能運(yùn)行或運(yùn)行時(shí)發(fā)生崩潰。

表2 互聯(lián)型STM32儲(chǔ)存器組織結(jié)構(gòu)Tab.2 Memory structure of the STM32 connectivity line

不同型號(hào)的STM32閃存儲(chǔ)存器容量不同[2],分為小容量(16K-32K)、中容量(64K-128K)、大容量(256K-512K)以及互聯(lián)型(105及107系列微控制器);而按照不同容量,儲(chǔ)存器組織成32個(gè)1K字節(jié)/頁(小容量)、128個(gè)1K字節(jié)/頁(中容量)、128個(gè)2K字節(jié)/頁(互聯(lián)型)、256個(gè)2K字節(jié)/頁(大容量)的主存儲(chǔ)器塊和一個(gè)信息塊。

1.2基本原理

IAP即是在正在運(yùn)行程序的微控制器上對(duì)其閃存區(qū)部分進(jìn)行燒寫[3],燒寫完成后,微控制器的程序指針及堆棧指針重定向,指向新寫入的程序代碼段和重新初始化的堆棧,執(zhí)行新程序,從而實(shí)現(xiàn)程序的在線升級(jí)。要實(shí)現(xiàn)IAP功能,需要兩個(gè)項(xiàng)目程序代碼,第一個(gè)項(xiàng)目程序代碼可以定義為裝載程序,第二個(gè)項(xiàng)目程序代碼可以定義為用戶程序。兩個(gè)項(xiàng)目程序文件分別存儲(chǔ)在人為劃分的兩個(gè)不同閃存存儲(chǔ)器存儲(chǔ)區(qū)。特別的,也可以同時(shí)存在多個(gè)用戶程序文件,分別存儲(chǔ)在由人為劃分的閃存存儲(chǔ)器的不同分區(qū)中。當(dāng)閃存存儲(chǔ)區(qū)存儲(chǔ)多個(gè)程序文件時(shí),微控制器在同一時(shí)刻只能單獨(dú)執(zhí)行一個(gè)項(xiàng)目程序,當(dāng)需要升級(jí)用戶程序或要執(zhí)行其他用戶項(xiàng)目程序時(shí),需要微控制器執(zhí)行跳轉(zhuǎn),執(zhí)行目標(biāo)程序代碼。

2 IAP實(shí)現(xiàn)

2.1裝載程序

IAP的實(shí)現(xiàn)有賴于一個(gè)邏輯清晰、代碼簡(jiǎn)明的裝載程序,負(fù)責(zé)管理和更新用戶程序。微控制器上電或者復(fù)位后,系統(tǒng)首先執(zhí)行啟動(dòng)程序,啟動(dòng)程序的工作即是初始化堆棧及微控制器內(nèi)核,對(duì)于STM32來說,即是其CM-3內(nèi)核,完成初始化工作后,系統(tǒng)開始執(zhí)行main函數(shù),在main函數(shù)中,首先判斷在閃存中指定地址設(shè)置的標(biāo)志位是否被改寫[4],若已被改寫,則說明用戶程序文件已成功燒寫至指定閃存存儲(chǔ)器區(qū),則接下來執(zhí)行程序跳轉(zhuǎn),程序指針重定向并指向用戶程序文件起始地址,堆棧指針指向用戶堆棧的起始地址,對(duì)于實(shí)現(xiàn)IAP功能的微控制器來說,裝載程序與用戶程序共用同一段SARM空間,所以在執(zhí)行程序跳轉(zhuǎn)過程中,在確定堆棧指針指向堆棧起始位置的同時(shí),要清空堆棧以留出空間供用戶程序使用。若閃存中指定地址設(shè)置的標(biāo)志位未被改寫,則說明需要對(duì)用戶程序進(jìn)行更新,則下一步執(zhí)行時(shí)鐘和外設(shè)的初始化,完成初始化后開始接收待更新的用戶程序文件,直至接收完成。完成對(duì)用戶程序文件的接收后則開始在預(yù)先人為設(shè)定的位置燒寫用戶程序文件至閃存存儲(chǔ)器。確定燒寫完成且無誤后,改寫在指定地址設(shè)置的標(biāo)志位,執(zhí)行軟件復(fù)位。微控制器復(fù)位后重新對(duì)標(biāo)志位進(jìn)行判斷,這時(shí)閃存中指定地址設(shè)置的標(biāo)志位已被改寫,系統(tǒng)跳轉(zhuǎn)執(zhí)行新的用戶程序,整個(gè)程序更新工作完成。

圖2 裝載程序流程圖Fig.2 Flow chart of the boot software design

程序跳轉(zhuǎn)的代碼如下:

//定義pFunction為函數(shù)指針數(shù)據(jù)類型

typedef void(*pFunction)(void);

//取出閃存指定地址中的數(shù)據(jù)

//判斷取出數(shù)據(jù)是否與設(shè)定標(biāo)志位數(shù)據(jù)相同

//判斷用戶代碼的堆棧地址是否落在 0x20000000~ 0x2001ffff區(qū)間中,即小于RAM的128K容量

//取堆棧的棧頂?shù)刂?/p>

//取復(fù)位地址

//強(qiáng)制類型轉(zhuǎn)換為程序指針

//將用戶代碼的棧頂?shù)刂吩O(shè)為棧頂指針

//設(shè)置程序指針為復(fù)位地址

其中,USER_FLASH_FLAG_PAGE_ADDRESS為用戶設(shè)定的閃存存儲(chǔ)器指定標(biāo)志位地址,USER_FLASH_FLAG_ VALUE為用戶設(shè)定的閃存標(biāo)志位數(shù)據(jù)內(nèi)容,USER_FLASH_FIRST_PAGE_ADDRESS為用戶設(shè)定的燒寫用戶程序文件到指定的閃存存儲(chǔ)區(qū)的起始地址。STM32上電后后檢測(cè)BOOT引腳的電平來決定程序指針的位置,如BOOT設(shè)置為FLASH啟動(dòng),啟動(dòng)后微處理器會(huì)先取兩個(gè)地址:一個(gè)是棧頂?shù)刂罚硪粋€(gè)是復(fù)位地址。

2.2用戶程序

用戶程序除了負(fù)責(zé)實(shí)現(xiàn)用戶目標(biāo)功能外,還要配合裝載程序,在接收升級(jí)命令后實(shí)現(xiàn)對(duì)裝載程序的跳轉(zhuǎn)[5]。一般地,當(dāng)一個(gè)項(xiàng)目程序開始響應(yīng)一個(gè)中斷后,系統(tǒng)會(huì)自動(dòng)定位一張向量表,并且根據(jù)中斷號(hào)從表中找出中斷服務(wù)程序的入口地址,然后跳轉(zhuǎn)過去執(zhí)行。而在這里的用戶程序中,中斷向量表的起始地址與原閃存中存儲(chǔ)的中斷向量表已發(fā)生偏移,所以中斷向量表需要重定向,即配置向量表偏移量寄存器,使之指向新的向量表。在用戶程序的開始首先完成中斷向量表的重定向,接著對(duì)系統(tǒng)進(jìn)行初始化,然后完成用戶程序目標(biāo)功能,在這個(gè)過程中,用戶程序利用中斷或者輪詢一直在監(jiān)聽串口命令,若得到升級(jí)程序命令則擦除閃存存儲(chǔ)器中指定位置設(shè)置的標(biāo)志位,進(jìn)而執(zhí)行軟件復(fù)位,使系統(tǒng)開始執(zhí)行裝載程序。

圖3 用戶程序流程圖Fig.3 Flow chart of the user software design

要實(shí)現(xiàn)系統(tǒng)軟件復(fù)位,一般有3種方法:看門狗超時(shí)引起復(fù)位、軟件復(fù)位、自編匯編代碼。3種方法本質(zhì)上相同,這里具體介紹利用庫(kù)函數(shù)軟件復(fù)位的方法:

__set_FAULTMASK(1);

NVIC_SystemReset();

__set_FAULTMASK()是系統(tǒng)封裝的匯編代碼,參數(shù)為1時(shí)執(zhí)行FAULTMASK復(fù)位;FAULTMASK是一個(gè)只有1個(gè)位的寄存器。當(dāng)它置1時(shí),只有NMI中斷才能響應(yīng),所有其他的異常,包括硬fault中斷都被屏蔽。NVIC_SystemReset()是STM32庫(kù)函數(shù),實(shí)現(xiàn)系統(tǒng)軟件復(fù)位。STM32為實(shí)現(xiàn)軟件復(fù)位專門劃出了一個(gè)寄存器用來做這種軟件復(fù)位功能,即SCB-> AIRCR寄存器。我們只需置位該寄存器的SYSRESETREQ位即可把內(nèi)核送往系統(tǒng)復(fù)位發(fā)生器的請(qǐng)求線置為有效,從而引起整個(gè)芯片系統(tǒng)的復(fù)位。一般從SYSRESETREQ被置為有效,到復(fù)位發(fā)生器執(zhí)行復(fù)位命令,往往會(huì)有一個(gè)延時(shí)。在此延時(shí)期間,處理器仍然可以響應(yīng)中斷請(qǐng)求。為防止處理器進(jìn)入其他中斷服務(wù)程序,最好在發(fā)出復(fù)位請(qǐng)求前,先把FAULTMASK置位。

2.3程序文件的生成和燒寫

裝載程序和用戶程序的代碼經(jīng)過編譯、鏈接生成可執(zhí)行文件,而最終燒寫進(jìn)閃存中的程序文件一般需要特定的文件格式。hex文件和bin文件是燒寫程序常用的兩種文件格式,其中hex文件包含地址等信息,而bin文件只包含數(shù)據(jù)本身,所以在燒寫hex文件時(shí),一般不需指定地址,而燒寫bin文件時(shí),需要指定燒寫的地址。

由于hex文件用ASCII來表示數(shù)據(jù),且文件中包含其他附加信息,hex文件一般大于bin文件。在升級(jí)程序時(shí),用戶程序一般采用bin文件格式。一般通過MDK軟件可以直接生成hex文件以及.axf文件,利用MDK軟件自帶的格式轉(zhuǎn)換工具fromelf.exe,可以實(shí)現(xiàn).axf文件到.bin文件的轉(zhuǎn)換。當(dāng)然也可以通過J-Flash ARM軟件轉(zhuǎn)換文件格式,在轉(zhuǎn)換為bin文件時(shí),可以看到bin文件的起始地址和終止地址,以及在文件各個(gè)地址中存儲(chǔ)的數(shù)據(jù)。

對(duì)STM32內(nèi)部閃存進(jìn)行燒寫,需要遵循以下流程:閃存解鎖,清除相關(guān)標(biāo)志位,擦除閃存,寫入閃存,鎖定閃存。程序文件的燒寫與標(biāo)志位的燒寫本質(zhì)上相同,都是按照規(guī)范的流程進(jìn)行文件的擦除和燒寫,其中程序文件在全部接收后燒寫到指定閃存存儲(chǔ)區(qū),而標(biāo)志位由用戶指定,在程序頭文件中定義,燒寫至裝載程序和用戶程序占用存儲(chǔ)區(qū)域之外的特定地址,一般為閃存存儲(chǔ)區(qū)末端,這樣可以有效的避免程序文件覆蓋標(biāo)志位的情況出現(xiàn)。

3 程序遠(yuǎn)程升級(jí)方案

STM32系列微控制器分為非互聯(lián)型及互聯(lián)型,主要區(qū)別在于互聯(lián)型內(nèi)部集成了以太網(wǎng)模塊,可以利用片上運(yùn)行的嵌入式TCP/IP協(xié)議棧進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的收發(fā)。針對(duì)兩種型號(hào)存在的差異,分別設(shè)計(jì)了合適的方案。

3.1非互聯(lián)型方案

本方案采用大容量STM32作為實(shí)驗(yàn)平臺(tái),預(yù)留一路串口作為升級(jí)程序的命令及接受文件的通信通道,通過TTL轉(zhuǎn)RS232或者RS485的芯片轉(zhuǎn)換為RS232或RS485信號(hào),進(jìn)而與網(wǎng)絡(luò)模塊的通信,對(duì)于非互聯(lián)型的STM32,要實(shí)現(xiàn)遠(yuǎn)程的通信,一定要借助相應(yīng)的網(wǎng)絡(luò)模塊或網(wǎng)絡(luò)芯片,將串口數(shù)據(jù)轉(zhuǎn)換為網(wǎng)絡(luò)數(shù)據(jù)再聯(lián)入以太網(wǎng)[6]。相關(guān)芯片如Wiznet的W5100、W5500系列芯片,內(nèi)嵌TCP/IP協(xié)議棧,可以通過SPI與微控制器通信,并可外接RJ45聯(lián)通網(wǎng)絡(luò)。相關(guān)模塊也有較多的公司開發(fā),如聯(lián)創(chuàng)科技公司的TCP-232模塊。模塊的另一端通過RJ45連接網(wǎng)絡(luò)雙絞線聯(lián)入以太網(wǎng),也可與終端PC直連,終端PC有相應(yīng)的通訊上位機(jī)。

本方案適合已經(jīng)在廣泛應(yīng)用中的非互聯(lián)型STM32,可以通過串口與聯(lián)網(wǎng)模塊通信,從而實(shí)現(xiàn)通過以太網(wǎng)升級(jí)用戶程序。應(yīng)該注意的是,由于芯片的型號(hào)不同,芯片的閃存大小和內(nèi)存大小也不盡相同,設(shè)計(jì)時(shí)要考慮清楚。

3.2互聯(lián)型方案

對(duì)于互聯(lián)型STM32,微處理器本身內(nèi)置以太網(wǎng)模塊支持通過以太網(wǎng)收發(fā)數(shù)據(jù),包括一個(gè)符合802.3協(xié)議的MAC(介質(zhì)訪問控制器)和專用的DMA控制器。該模塊支持默認(rèn)的獨(dú)立于介質(zhì)的接口(MII)和精簡(jiǎn)的獨(dú)立于介質(zhì)的接口(RMII),可以與外接的物理層(PHY)芯片直連,外部以太網(wǎng)PHY芯片與標(biāo)準(zhǔn)RJ45接口連接,目標(biāo)板可以直接以網(wǎng)絡(luò)雙絞線接入以太網(wǎng)。在另一端,連接終端PC的網(wǎng)絡(luò)雙絞線聯(lián)入同一網(wǎng)絡(luò),即可實(shí)現(xiàn)終端PC對(duì)目標(biāo)板的實(shí)時(shí)程序更新[7]。

LWIP協(xié)議是瑞典計(jì)算機(jī)科學(xué)院開發(fā)的開源輕量型TCP/ IP協(xié)議棧。LWIP協(xié)議棧支持UDP、TCP等協(xié)議。LWIP協(xié)議減少了內(nèi)存使用率和代碼大小,使LWIP協(xié)議適合在資源有限的嵌入式系統(tǒng)中應(yīng)用[8]。

移植到STM32內(nèi)的LWIP協(xié)議棧可以完成方案所需的通訊需要。在本方案中,利用應(yīng)用層協(xié)議HTTP(超文本傳輸)協(xié)議,以微控制器所在硬件平臺(tái)為Web服務(wù)器,而終端PC作為Web客戶端,通過網(wǎng)頁瀏覽器實(shí)現(xiàn)對(duì)微控制器用戶程序文件的升級(jí)。

無論是非互聯(lián)型方案還是互聯(lián)型方案,其程序升級(jí)的原理、裝載程序與用戶程序的流程以及程序固件的燒寫在本質(zhì)上是相同的。在考慮了芯片的存儲(chǔ)結(jié)構(gòu)、硬件差異之后,該方案同樣適用于其他類型的微控制器。

4 結(jié) 論

本文介紹了STM32系列控制器的儲(chǔ)存結(jié)構(gòu)、IAP的基本原理,并以此為基礎(chǔ)對(duì)STM32系列微控制器的互聯(lián)型及非互聯(lián)型產(chǎn)品都相應(yīng)的設(shè)計(jì)實(shí)現(xiàn)了通過以太網(wǎng)更新程序的方案。此種方式具有方便靈活,簡(jiǎn)單易用的優(yōu)點(diǎn)。未來,在物聯(lián)網(wǎng)、可穿戴智能設(shè)備上該技術(shù)有更廣泛的應(yīng)用前景。

[1]Joseph Yiu.宋巖譯.ARM Cortex-M3權(quán)威指南[M].北京:北京航空航天大學(xué)出版社,2009.

[2]意法半導(dǎo)體 (中國(guó))投資有限公司.STM32參考手冊(cè)[EB/ OL].www.stmcu.org,2010.

[3]姜曉梅,李祥和,任朝榮,等.基于ARM的IAP在線及遠(yuǎn)程升級(jí)技術(shù)[J].計(jì)算機(jī)應(yīng)用,2008(2):519-521.

[4]闕凡博.基于stm32的程序遠(yuǎn)程升級(jí)設(shè)計(jì)[J].儀器儀表用戶,2013(5):90-92.

[5]李興鶴,蔡亮,宋吉波,等.STM32用戶基于IAP的程序更新技術(shù)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012(1):74-75.

[6]張舞杰,南亦民.基于STM32F103VB的應(yīng)用編程技術(shù)的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009(10):2820-2822.

[7]Qingqing Xu.A design and implement of IAP based on HTTP[J].2011 International Conference on Computer Science and Service System,2011(6):1918-1922.

[8]Adam Dunkels.Design and Implementation of the lwIP TCP/ IP Stack[J].Swedish Institute of Computer Science,2001.

[9]董昊,石九龍,劉錦高.基于STM32F103的貼片機(jī)控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].電子設(shè)計(jì)工程,2014(4):158-161,165.

[10]江洋,劉宇紅,韓云杰.基于STM32的智能家居系統(tǒng)應(yīng)用研究[J].電子科技,2014(4):105-107,111.

[11]蔡光昭,洪遠(yuǎn)泉,周永明.基于STM32的超聲波測(cè)速測(cè)距系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2014(24):87-89.

Design and implementation of remote program upgrade based on STM32

ZHANG Yan-song,GE Jun-feng,YE Lin,HU Wen-yue
(Department of Automation,Huazhong University of Science and technology,Wuhan 430074,China)

With the wide application of the embedded device,the demand for upgrading the program for embedded devices is increasingly strong.In this paper,a new method to upgrade program in STM32 by the network is proposed after introducing the principle of the IAP.In this method,the firmware of Embedded devices such as STM32 can be upgraded in real time.IAP not only meets the relevant needs,but also provides the guidance and assistance to the improvement of Internet of Things and the intelligent equipment.

IAP;STM32;remote program upgrade;Internet of Things

TN98

A

1674-6236(2016)01-0131-04

2015-05-27稿件編號(hào):201505244

國(guó)家自然科學(xué)基金資助項(xiàng)目(61104202);中央高校基本科研業(yè)務(wù)費(fèi)專項(xiàng)資金資助項(xiàng)目(2014QN170)

張巖松(1991—),男,遼寧北票人,碩士研究生。研究方向:傳感器與智能檢測(cè)技術(shù)。

猜你喜歡
嵌入式程序
試論我國(guó)未決羈押程序的立法完善
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發(fā)平臺(tái)
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
Altera加入嵌入式視覺聯(lián)盟
主站蜘蛛池模板: 午夜性刺激在线观看免费| 国产午夜不卡| 欧美日韩福利| 国产男女XX00免费观看| 找国产毛片看| 国产SUV精品一区二区| 日韩欧美国产区| 国产精品一区二区国产主播| 亚洲床戏一区| 日本国产在线| 性做久久久久久久免费看| 国产丰满大乳无码免费播放| 国产精品女同一区三区五区| 无码国产偷倩在线播放老年人| 国产精品久久久久婷婷五月| 久久这里只精品国产99热8| 在线a视频免费观看| 国内精品一区二区在线观看| 国内精品视频| 无码aaa视频| 国产99久久亚洲综合精品西瓜tv| 91在线丝袜| 97se亚洲| 尤物成AV人片在线观看| 人妖无码第一页| 视频二区亚洲精品| 国产成人综合网| 欧美国产综合色视频| 成人一区专区在线观看| 午夜限制老子影院888| av大片在线无码免费| 国产凹凸视频在线观看 | 国产午夜精品一区二区三区软件| 一级爆乳无码av| 青青青国产视频| 三上悠亚一区二区| 99在线视频免费| 波多野结衣视频网站| 亚洲视频在线青青| 亚洲欧美日韩色图| 免费一级毛片在线观看| 亚洲国产91人成在线| 91精品专区国产盗摄| 2020久久国产综合精品swag| 国产亚洲美日韩AV中文字幕无码成人| 韩日午夜在线资源一区二区| 久久久久久高潮白浆| 老汉色老汉首页a亚洲| 亚洲人成亚洲精品| 呦视频在线一区二区三区| 老司机久久99久久精品播放| 99精品免费在线| 国产麻豆精品久久一二三| 大陆精大陆国产国语精品1024| 亚洲三级色| 国产欧美日韩专区发布| 欧美日韩一区二区在线免费观看| 国产成人一区| 亚洲国模精品一区| 精品剧情v国产在线观看| 色综合久久88| 国产日韩欧美视频| 国产欧美日韩另类| 五月婷婷综合网| 不卡无码h在线观看| 99这里只有精品在线| 无码综合天天久久综合网| 中文字幕 91| 国产成人永久免费视频| 久久精品视频一| 波多野结衣久久高清免费| 九九九精品成人免费视频7| www.狠狠| 欧美中文字幕一区二区三区| 99久视频| h网站在线播放| 亚洲人在线| 精品国产欧美精品v| 国产96在线 | 久久免费观看视频| 大香伊人久久| 国产一级妓女av网站|