亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        STM32在復雜系統(tǒng)中實現(xiàn)固件自動升級的方法

        2017-11-24 11:53:06
        關鍵詞:固件微控制器板卡

        (沈陽新松機器人自動化股份有限公司,沈陽 110168)

        STM32在復雜系統(tǒng)中實現(xiàn)固件自動升級的方法

        宋宇寧

        (沈陽新松機器人自動化股份有限公司,沈陽 110168)

        提供了一種應用STM32微控制器實現(xiàn)在復雜的硬件系統(tǒng)中完成固件自動升級的方法。通過以太網(wǎng)和SPI接口實現(xiàn)了ARM架構(gòu)STM32微控制器固件的傳輸、存儲和自動升級;通過JTAG接口協(xié)議實現(xiàn)了STM32微控制器對Xilinx公司Spartan-6系列FPGA固件的下載和升級。文中詳細介紹了固件自動升級方法的實現(xiàn)原理和開發(fā)流程,并提供了部分源碼及程序流程圖。經(jīng)實際產(chǎn)品驗證,該方法極大提升了現(xiàn)場升級維護硬件的效率,節(jié)約了服務成本,提高了產(chǎn)品的穩(wěn)定性。

        固件自動升級;STM32;微控制器;以太網(wǎng);FPGA

        引 言

        伴隨著市場上工業(yè)自動化及大型醫(yī)療器械產(chǎn)品的競爭加劇,產(chǎn)品的毛利潤不斷壓縮,降低產(chǎn)品的服務成本、提升產(chǎn)品的服務收益已經(jīng)成為企業(yè)利潤成長的重要形式。作為硬件升級與維護不可或缺的環(huán)節(jié),板卡的固件升級在工程設計及調(diào)試階段通常是應用仿真器連接板卡來進行。但在產(chǎn)品發(fā)布及售出之后,應用該方法會帶來很多問題:有些產(chǎn)品需要拆裝外殼,有些則需要在復雜的系統(tǒng)中手動連接下載電纜,除了延長設備維護的時間,提升服務成本外還會帶來額外的安全風險。因此,實現(xiàn)固件的自動升級成為每個大型的工業(yè)及醫(yī)療產(chǎn)品都必須考慮的服務功能。

        實現(xiàn)產(chǎn)品固件的自動升級需要依賴系統(tǒng)中的控制器,本文提出了一種基于ARM微控制器實現(xiàn)自身的固件以及為FPGA固件自動升級的方法,通過上位機及以太網(wǎng)傳輸固件,通過JTAG協(xié)議將FPGA固件下載到FPGA外擴的PROM中,整個過程不需要拆裝外殼及連接硬件仿真器,操作簡單且提升了效率。

        1 硬件方案概述

        大型的工業(yè)及醫(yī)療器械硬件系統(tǒng)實現(xiàn)的功能較多,結(jié)構(gòu)比較復雜,通常會采用x86、ARM以及FPGA多種硬件平臺實現(xiàn)系統(tǒng)功能,典型的系統(tǒng)硬件框圖如圖1所示。

        圖1 系統(tǒng)硬件框圖

        其中,基于x86平臺的PC104工控機通過有線以太網(wǎng)或者WiFi連接的方式與控制臺計算機連接,并通過集成的無線路由器與控制臺計算機及各ARM控制器板組成內(nèi)部局域網(wǎng)。PC104用于控制臺控制命令的轉(zhuǎn)發(fā)、各板卡狀態(tài)的反饋以及升級固件的傳輸?shù)裙δ堋RM控制器板卡采用STM32F407微控制器,主要用于實現(xiàn)板卡間協(xié)議通信,復雜算法的實現(xiàn)及固件自動升級功能。FPGA板卡采用Xilinx公司Spartan-6系列XC6SLX45T。由于FPGA內(nèi)部沒有大容量Flash存儲器,需要外擴PROM存儲固件程序。在設置配置方案后,板卡上電時將PROM中的固件讀出并加載到FPGA的SRAM中運行,配套PROM的型號為Xilinx XCF16P。FPGA板卡主要用于實現(xiàn)高速信號數(shù)據(jù)傳輸及控制命令的并發(fā)執(zhí)行。ARM控制器外擴的Flash用于存放ARM控制器和FPGA板卡的固件。ARM控制器和FPGA板卡之間通過串行及并行接口進行數(shù)據(jù)通信,并通過JTAG接口將FPGA外接的PROM以菊花鏈的方式連接,按照JTAG的協(xié)議規(guī)范將固件依次下載到菊花鏈上的各PROM中。

        2 STM32系列MCU與FPGA固件文件解析

        2.1 STM32系列MCU的固件文件介紹

        STM32系列的MCU(微控制器單元)可應用IAR for EWARM V6.40編譯環(huán)境進行開發(fā)設計,程序編譯后默認生成的固件格式后綴為.out,可通過JTAG仿真器及修改編譯環(huán)境的配置選項,直接將程序下載到MCU的內(nèi)部Flash中運行,也可下載到內(nèi)部SRAM中進行在線調(diào)試。

        如果采用自動升級方式,建議通過開發(fā)編譯環(huán)境的配置選項輸出一個*.bin文件,即二進制格式的固件文件。該文件不僅支持STM32固件的傳輸和自動升級,還可通過ST公司提供的STM32系列固件下載工裝軟件ST-link utility及ST-Link V2仿真器,將固件下載到STM32 MCU的內(nèi)部Flash中運行。

        圖3 菊花鏈的連接及FPGA配置方式

        ISE軟件是Xilinx公司推出的FPGA及CPLD集成開發(fā)環(huán)境,該軟件環(huán)境下編譯生成的FPGA固件格式通常包括.bit和.mcs格式兩種。編譯器默認生成.bit格式的固件文件,可通過JTAG仿真器將文件下載到內(nèi)部SRAM中,也可應用該文件實現(xiàn)FPGA固件的自動升級。BIT文件的組織格式通常為15字節(jié)的文件開始標記、文件名記錄、文件創(chuàng)建時間、配置數(shù)據(jù)開始標記及配置數(shù)據(jù),該文件可通過UltraEdit軟件查看。在通過網(wǎng)絡傳輸FPGA固件的過程中,通常只需要傳遞配置數(shù)據(jù),配置數(shù)據(jù)的起始部分固定為FF FF FF FF AA 99 55 66,所以在傳輸數(shù)據(jù)過程中只需要檢索關鍵字,識別到配置數(shù)據(jù)起始關鍵字后將前面的數(shù)據(jù)剔除即可。

        MCS格式文件為ASCII格式文件,文件內(nèi)容可通過文本編輯器查看。該文件格式是在ISE軟件中通過BIT文件經(jīng)位轉(zhuǎn)換及添加校驗信息等過程轉(zhuǎn)換生成。該文件格式可用于通過JTAG下載電纜對PROM的配置,也可用于固件自動升級后對固件文件的回讀校驗。

        3 硬件結(jié)構(gòu)簡化及FPGA固件配置方案

        如果只考慮實現(xiàn)ARM及FPGA固件的自動升級功能,可將系統(tǒng)的硬件方案進行簡化,因為STM32F407微控制器提供以太網(wǎng)MAC層接口,也可通過上位機直接與該控制器通過網(wǎng)絡接口連接,簡化的硬件框圖如圖2所示。

        圖2 簡化的系統(tǒng)硬件框圖

        通常,F(xiàn)PGA固件的下載方式是通過板卡上預留的JTAG接口來實現(xiàn)的。應用ISE軟件及JTAG仿真器將由BIT文件轉(zhuǎn)換生成的MCS文件下載到FPGA配置的PROM中,系統(tǒng)重新啟動后FPGA控制器讀取外部PROM的文件,并將配置文件自動下載到FPGA的SARM中運行。

        FPGA固件自動升級的配置方案及硬件連接如圖3所示,STM32控制器要為3個FPGA控制器傳遞升級固件,而實現(xiàn)過程是將STM32及3個PROM以菊花鏈的方式連接,按照JTAG軟件協(xié)議依次將固件下載到3個PROM中。系統(tǒng)重新啟動后,FPGA從PROM中分別讀取各自的配置文件,并加載到SRAM中實現(xiàn)各自的功能。

        4 固件升級實現(xiàn)方案及關鍵代碼

        固件升級的功能在IAR for EWARM V6.4集成開發(fā)環(huán)境中完成,STM32和FPGA固件升級代碼都通過STM32平臺實現(xiàn),STM32通過網(wǎng)絡接收上位機傳遞的固件升級代碼。FPGA固件升級的過程更加復雜,需要 STM32控制器按照JTAG協(xié)議將固件下載到FPGA外擴的PROM中。

        4.1 STM32自動升級方案

        STM32系統(tǒng)中除了要實現(xiàn)固件升級功能,還要完成板卡間通信、系統(tǒng)狀態(tài)監(jiān)控等多項功能。為了實現(xiàn)多任務調(diào)度及網(wǎng)絡傳輸功能,需要在STM32系統(tǒng)中移植μC/OS-II系統(tǒng)及LwIP以太網(wǎng)協(xié)議棧。μC/OS-II是Micrium(現(xiàn)被Silicon Labs收購)公司的一款可裁剪、可移植、搶占式多任務嵌入式實時內(nèi)核,廣泛應用于微控制器中。LwIP是瑞典計算機科學院開發(fā)的一個小型開源的TCP/IP協(xié)議棧,由于它能在保持TCP協(xié)議主要功能的前提下減少對RAM和存儲空間的占用,特別適合于硬件資源比較有限的MCU。操作系統(tǒng)的移植過程可以參考Micrium公司網(wǎng)站上基于STM32控制器的移植范例。

        圖4 .bin固件文件的存儲映射方案

        為了實現(xiàn)STM32固件自升級功能并提高系統(tǒng)的穩(wěn)定性,需要將STM32的固件分成3個部分,分別為引導代碼、備份代碼及應用代碼。3部分代碼分別建立3個工程開發(fā),最后將3個編譯生成的.bin文件通過VC++軟件合并為一個大小為256 KB的固件文件。如圖4所示,引導代碼存放的地址區(qū)間為0x00000~0x28000,是一個未移植操作系統(tǒng)的單循環(huán)任務,主要用于加載BSP文件并判斷系統(tǒng)的固件狀態(tài),如果有新固件存放在外部Flash中,則從外部Flash將固件讀取到內(nèi)部Flash中。

        當引導程序通過讀取內(nèi)部Flash標志位確認沒有新固件需要更新時,引導代碼將重映射的起始地址設置為應用代碼的起始地址,初始化用戶應用程序的堆棧指針后進行程序的重映射,程序會自動跳轉(zhuǎn)到應用程序中運行,重映射部分的代碼如下:

        //判斷用戶固件起始地址是否映射到內(nèi)部Flash地址

        if (((*(_ _IO uint32_t*)App_base_address) & 0x2FFE0000 ) == 0x20000000){

        JumpAddress = *(_ _IO uint32_t*) (App_base_address + 4);//App_base_address為應用代碼起始地址

        Jump_To_Application = (pFunction) JumpAddress;

        //初始化用戶應用代碼堆棧

        _ _set_MSP(*(_ _IO uint32_t*) App_base_address);

        Jump_To_Application(); //跳轉(zhuǎn)到應用程序

        }

        備份代碼存放在固件中的地址區(qū)間為0x28000~0x16800,它作為應用代碼的備份,只保留最基本的功能,當引導代碼檢測到上次固件升級失敗時,將加載備份代碼起始地址為重映射地址,并跳轉(zhuǎn)到備份代碼中運行,確保系統(tǒng)的基本功能能夠?qū)崿F(xiàn),防止因固件升級失敗導致板卡功能失效。

        應用程序代碼存放的位置為0x16800~0x3FFFF,共166 KB,用于實現(xiàn)全部的用戶自定義應用程序,包括STM32和FPGA的固件自動升級任務。μC/OS-II系統(tǒng)提供了任務調(diào)度、任務管理、內(nèi)存管理、任務間通信等基本功能,固件升級功能通過5個任務相互協(xié)調(diào)完成。這5個任務包括IP層任務、TCP層任務、網(wǎng)絡服務任務、FPGA升級任務、外部Flash讀寫驅(qū)動任務。

        (1)IP層任務和TCP層任務

        這兩個任務為TCP/IP協(xié)議棧的任務,負責Ethernet網(wǎng)絡數(shù)據(jù)傳輸,是以太網(wǎng)應用層和物理層之間銜接的橋梁。代碼主要來源于LwIP以太網(wǎng)協(xié)議棧,在此不進行詳細的設計說明,只給出協(xié)議棧工作流程圖。此協(xié)議棧對外的接口為標準的Socket接口函數(shù),圖5為TCP/IP協(xié)議棧的流程示意圖。

        圖5 TCP/IP協(xié)議棧流程圖

        圖6為TCP/IP協(xié)議棧在應用中的層次關系圖。網(wǎng)絡協(xié)議棧允許多任務通信。應用程序和協(xié)議棧的通信通過消息郵箱完成。對于每一個通信任務都有一個專用結(jié)構(gòu)體變量記錄任務中的信號量和消息隊列。在通信時,應用進程將消息放入到郵箱中,等待TCP進程來提取消息,TCP進程根據(jù)消息的類別進行不同的處理,處理完成后TCP進程發(fā)送消息到應用進程。

        圖6 TCP/IP協(xié)議棧在應用中的層次關系圖

        (2)網(wǎng)絡服務任務

        該任務主要用于與上位機之間建立連接并實現(xiàn)數(shù)據(jù)傳輸。此任務建立網(wǎng)絡服務器,接收來自于上位機的連接、服務請求,并接收升級固件。升級固件包括STM32和FPGA固件兩種,當接收到升級STM32的請求后啟動外部Flash讀寫驅(qū)動任務,將接收到的升級數(shù)據(jù)保存到外部Flash中,當收到完整的升級數(shù)據(jù)后將升級標志置為1并存儲到特定的Flash地址。重新上電之后,引導代碼優(yōu)先啟動,并檢查該標志位,如果為1,啟動升級流程,清空標志位。應用DMA將外部Flash中的固件讀出并拷貝到內(nèi)部Flash中然后進行重映射,程序?qū)⑻D(zhuǎn)到應用程序入口運行。此任務對外的接口為接收消息隊列和網(wǎng)絡層接口隊列(通過標準的Socket接口與TCP/IP進行通信)。圖7為網(wǎng)絡服務任務的流程圖。

        圖7 網(wǎng)絡服務任務流程圖

        (3)外部Flash讀寫驅(qū)動任務

        圖8 Flash讀寫驅(qū)動任務流程圖

        外部數(shù)據(jù)Flash讀寫任務主要負責將從網(wǎng)絡接收到的FPGA和STM32的升級文件通過SPI接口存儲到外擴的數(shù)據(jù)Flash中,并進行數(shù)據(jù)校驗。如果校驗失敗則上電后運行備份代碼,實現(xiàn)系統(tǒng)的基本功能。在任務中采用定時查詢的方式進行外部Flash的讀寫。任務啟動后首先初始化控制I/O,并檢測外部Flash狀態(tài),如果狀態(tài)正常則進入等待接收數(shù)據(jù)狀態(tài),否則發(fā)送錯誤信息。當通過接收消息隊列收到消息后,分別完成向外部Flash寫入數(shù)據(jù)和從Flash回讀校驗的工作,完成后將數(shù)據(jù)寫入成功信號發(fā)送給網(wǎng)絡服務任務。此任務對外的接口為接收消息隊列(用于接收其他任務的消息)和控制外部串行Flash的接口隊列。圖8為外部Flash讀寫任務的流程圖。

        4.2 FPGA自動升級方案

        圖9 FPGA升級任務流程圖

        FPGA的固件是通過網(wǎng)絡服務任務接收而來的。網(wǎng)絡服務任務傳遞消息給外部Flash讀寫驅(qū)動任務,調(diào)用寫外部Flash函數(shù)將數(shù)據(jù)按頁寫入到外部Flash中并進行回讀校驗,隨后啟動FPGA升級任務。將按頁讀取的數(shù)據(jù)通過JTAG協(xié)議寫入到FPGA外接的PROM存儲器中。重新上電后,經(jīng)過配置的FPGA會自動讀取PROM中的固件并運行。FPGA升級任務首先初始化I/O及JTAG接口,并申請用于保存外部Flash數(shù)據(jù)的緩存區(qū),順序地讀取固件數(shù)據(jù),通過異或校驗碼確定讀取數(shù)據(jù)的正確性,然后調(diào)用JTAG下載函數(shù)執(zhí)行程序下載。JTAG函數(shù)中每次讀取指定字節(jié)的數(shù)據(jù)并按照JTAG協(xié)議下載到FPGA的存儲器中,通過寫入之后的回讀校驗來驗證寫入固件數(shù)據(jù)的正確性。當所有固件數(shù)據(jù)都正確寫入后向網(wǎng)絡服務任務返回升級成功信號,否則返回錯誤信息。FPGA升級任務再次進入等待狀態(tài),等待任務啟動信號量的喚醒,圖9為FPGA升級任務流程圖。

        在FPGA升級任務中,JTAGRun_for_16P()函數(shù)通過JTAG下載時序?qū)⒆x出的固件升級數(shù)據(jù)下載到FPGA的PROM中,PROM的型號為XCF16P,函數(shù)中的關鍵子函數(shù)及實現(xiàn)方法如下:

        (1)Detect( )

        由圖3可知,STM32微控制器的JTAG與PROM是按照菊花鏈方式連接的,操作PROM之前需要先通過指令探測菊花鏈中PROM的數(shù)量,確定后續(xù)讀寫PROM的指令格式。JTAG TAP狀態(tài)機有6個穩(wěn)定的狀態(tài),其中Shift-IR和Shift-DR為兩個主要的穩(wěn)態(tài),分別用于傳遞指令和數(shù)據(jù)。探測器件數(shù)量應進入Shift-DR狀態(tài),將32位的0xFFFF FFFF數(shù)據(jù)通過TDI接口傳遞給PROM1,隨后按時鐘周期循環(huán)發(fā)送數(shù)據(jù)到TDI端口,直到TDO接口中收到該數(shù)據(jù),則PROM器件的數(shù)量為循環(huán)的次數(shù)減1。在循環(huán)了4次后,TDO端口收到0xFFFF FFFF數(shù)據(jù),所以PROM數(shù)量為3個。

        (2)Ispen( )

        向有效器件發(fā)送ISPEN命令,設置器件進入ISP狀態(tài),并進行Unlock操作,只有進入ISP狀態(tài)后,器件才可以進行擦除和寫入等其他操作。XSIR函數(shù)中的兩個參數(shù)分別表示指令編號及輸入指令后的等待時間;XSDR函數(shù)的4個參數(shù)分別表示要移入數(shù)據(jù)的長度、移入數(shù)據(jù)的起始地址、保存移出數(shù)據(jù)的地址及延時時間。

        {

        unsigned int command;

        unsigned int ucTdo = 1;

        GotoTapState( XTAPSTATE_RESET );

        XSIR( SVF_ISPEN, 0 );

        //ISPEN命令 command = 0xd0;

        XSDR( 8, &command, &ucTdo, 100 );

        XSIR( SVF_UNLOCK, 0 ); //解鎖

        command = 0x3f;

        XSDR( 24, &command, &ucTdo, 100 );

        }

        (3)Erase( )

        器件進入ISP狀態(tài)后進行擦除操作,依次輸入擦除指令和地址,并通過調(diào)用Check_STATUS函數(shù)周期性查詢寄存器的狀態(tài),判斷擦除是否結(jié)束。

        {

        unsigned int ucTdo;

        unsigned int command = 0;

        unsigned long int RunTimeTest;

        RunTimeTest = 0;

        XSIR( SVF_ERASER, 0 ); //擦除命令

        command = 0x3f;

        XSDR( 24, &command, &ucTdo, RunTimeTest );

        }

        (4)Write_row( )和Fvfy( )

        寫入和回讀校驗是通過Write_row( )和Fvfy( )函數(shù)完成的,F(xiàn)lash讀取函數(shù)按行將STM32外部Flash中的數(shù)據(jù)讀取到緩存中,每行512字節(jié)。因為MCS文件是BIT文件經(jīng)過位轉(zhuǎn)換而得到的,而實際PROM中的配置文件應該是MCS格式,所以從Flash讀取的數(shù)據(jù)需要將每個字節(jié)按位顛倒順序,再依次寫入PROM中。寫入和回讀的過程同樣按照先指令后數(shù)據(jù)的順序,循環(huán)將數(shù)據(jù)下載到PROM中存儲,如果回讀校驗失敗,則將升級失敗的結(jié)果傳遞給網(wǎng)絡服務任務,并通過網(wǎng)絡通信方式反饋給上位機。操作人員可以決定重新執(zhí)行升級流程或檢查軟硬件故障。

        結(jié) 語

        [1] 高世皓.利用HEX文件實現(xiàn)TMS320F28335的程序升級方法[J].單片機與嵌入式系統(tǒng)應用,2017(7):13-18.

        [2] 楊旭.基于微處理器的螺旋CT固件遠程升級的設計與實現(xiàn)[D].沈陽:東北大學,2009.

        [3] 劉火良,楊森. STM32庫開發(fā)實戰(zhàn)指南[M].北京:機械工業(yè)出版社,2013.

        [4] 徐文波,田耕.Xilinx FPGA開發(fā)實用教程[M].北京:清華大學出版社,2012.

        [5] 程小艷.嵌入式STM32F107VCT6微處理器接口模塊開發(fā)及應用研究[D].合肥:合肥工業(yè)大學,2012.

        宋宇寧(工程師),主要從事基于ARM架構(gòu)的嵌入式系統(tǒng)軟硬件開發(fā)與設計工作。

        RealizationofFirmwareAutomaticUpdatinginComplexSystemBasedonSTM32

        SongYuning

        (SIASUN Robot&Automation Co.,Ltd.,Shenyang 110168,China)

        In the paper,a method of firmware automatic updating in complicated hardware system through STM32 microcontroller is proposed.The ARM architecture STM32 microcontroller firmware transmission,storage and automatic upgrade are achieved through Ethernet and SPI interface.Spartan-6 series FPGA of Xilinx firmware download and upgrade are achieved through the STM32 microcontroller and JTAG protocol.In the paper,the realization principle and development flow of the firmware automatic upgrade method are introduced in detail.Some source codes and program flow chart are also provided.By the actual product verification,the method greatly enhances the efficiency of on-site hardware updating and maintenance,saves the service costs,and improves the stability of the product effectively.

        firmware automatic updating;STM32;microcontroller;Ethernet;FPGA

        TP368.1

        A

        2017-08-21)

        猜你喜歡
        固件微控制器板卡
        基于PCI9054的多總線通信板卡的研制
        基于FPGA的多通道模擬量采集/輸出PCI板卡的研制
        物聯(lián)網(wǎng)技術(shù)在微控制器實驗教學中的應用
        電子制作(2017年14期)2017-12-18 07:07:58
        基于固件的遠程身份認證
        一種基于光纖數(shù)據(jù)傳輸?shù)亩喟蹇ㄜ浖绦驘龑懠夹g(shù)
        提取ROM固件中的APP
        電腦愛好者(2015年7期)2015-04-09 08:54:02
        Atmel針對新一代物聯(lián)網(wǎng)應用發(fā)布全新32位微控制器
        最新STM32設計工具增加對混合信號微控制器的支持
        一種通過USB接口的可靠固件升級技術(shù)
        一種通用模擬量及開關量信號采集板卡的設計
        男女猛烈无遮挡免费视频| 99爱这里只有精品| 国产视频网站一区二区三区| 97超碰国产一区二区三区| 亚洲精品一区二区三区四区久久| 男女真人后进式猛烈视频网站| 日产学生妹在线观看| 日日碰狠狠躁久久躁| 一区一级三级在线观看 | 激情综合色五月丁香六月亚洲| 欧美不卡视频一区发布| 精品少妇人妻成人一区二区| 国产免费人成网站在线播放| 看国产亚洲美女黄色一级片| 日韩精品在线免费视频| 亚洲h在线播放在线观看h| 国产又黄又猛又粗又爽的a片动漫 亚洲精品毛片一区二区三区 | 日本视频一区二区三区一| 亚洲国产午夜精品理论片在线播放| 乱码精品一区二区三区| 国产欧美日韩网站| 亚洲天堂av在线免费看| 精品人妻系列无码人妻漫画| 伊人久久五月丁香综合中文亚洲| 亚洲综合色一区二区三区小说| 久久精品国产亚洲av热明星| 大陆少妇一区二区三区| 国产一区二区黄色录像| 国产精品无码av一区二区三区| 中文字幕天堂网| 制服丝袜人妻中出第一页| 亚洲无毛成人在线视频| 亚洲成a∨人片在线观看不卡| 欧美成人精品一区二区综合 | 丰满少妇被猛烈进入| 国产69精品一区二区三区 | 久久香蕉国产线熟妇人妻| 亚洲av无码一区二区三区网站| 日本老年人精品久久中文字幕| 很黄很色的女同视频一区二区| 国产综合精品一区二区三区|