一款基于環形隊列接收升級數據包的BootLoader

一起學嵌入式 2025-08-14 19:31

掃描關注一起學嵌入式,一起學習,一起成長

大家好,之前分享過很多軟件版本升級相關的文章:#軟件版本升級

今天分享一篇MCU端基于環形隊列接收升級數據包的實現文章,希望能夠幫助到大家。

以下為原文:


本文所用的型號是STM32F103C8T6,這個IC有64KFlash和20K的RAM,也有小道消息說有后置隱藏的64K,也就是說其實是有128K,我一直也沒有測試,有空測測,有大神這樣說,估計是可以的。

這里重點記錄一下我寫的IAP思路和代碼以及細節和遇到坑的地方。

先大體的概述一下,最后貼上我認為重點的代碼。

在概述之前先要解決一個問題,那就是sram空間和flash空間的問題,sram只有20K,flash有64k。

解決的辦法有很多:

1)最常見的就是自己寫上位機軟件,通過分包發送,期間還可以加入加密算法,校驗等等。

2)使用環形隊列,簡單點說就是個環形數組,一邊接收上位機數據,一邊往flash里面寫。

這里條件限制就采用第二種方法。所以即使是分給A和B的25K空間的flash空間,sram只有20K也是不能一次接收完所有的bin數據的,這里我只開辟了一個1K的BUF,使用尾插法寫入,我的測試應用程序都在5-6K,用這樣的方法可以在9600波特率下測試穩定,也試過57600的勉強可以的,115200就不行了。

環形隊列代碼如下:

C文件:

#include "fy_looplist.h"
 
#include "fy_includes.h"
 
 
#ifndef NULL
#define NULL 0
#endif
 
#ifndef min
#define min(a, b) (a)<(b)?(a):(b) //< 獲取最小值
#endif
 
#define DEBUG_LOOP 1
 
static int Create(_loopList_s* p,unsigned char *buf,unsigned int len);
static void Delete(_loopList_s* p);
static int Get_Capacity(_loopList_s *p);
static int Get_CanRead(_loopList_s *p);
static int Get_CanWrite(_loopList_s *p);
static int Read(_loopList_s *p, void *buf, unsigned int len);
static int Write(_loopList_s *p, const void *buf, unsigned int len);
 
struct _typdef_LoopList  _list=
{
    Create,
    Delete,
    Get_Capacity,
    Get_CanRead,
    Get_CanWrite,
    Read,
    Write
};
 
 
//初始化環形緩沖區
static int Create(_loopList_s* p,unsigned char *buf,unsigned int len)
{
    if(NULL == p)
    {
#if DEBUG_LOOP
        printf("ERROR: input list is NULL\n");
#endif
        return 0;
    }
    p->capacity = len;
    p->buf = buf;
    p->head = p->buf;//頭指向數組首地址
    p->tail = p->buf;//尾指向數組首地址
 
    return 1;
}
 
//刪除一個環形緩沖區
static void Delete(_loopList_s* p)
{
    if(NULL == p)
    {
#if DEBUG_LOOP
        printf("ERROR: input list is NULL\n");
#endif
        return;
    }
 
    p->buf  = NULL;//地址賦值為空
    p->head = NULL;//頭地址為空
    p->tail = NULL;//尾地址尾空
    p->capacity = 0;//長度為空
}
 
//獲取鏈表的長度
static int Get_Capacity(_loopList_s *p)
{
    if(NULL == p)
    {
#if DEBUG_LOOP
        printf("ERROR: input list is NULL\n");
#endif
        return -1;
    }
    return p->capacity;
}
 
//返回能讀的空間
static int Get_CanRead(_loopList_s *p)
{
    if(NULL == p)
    {
#if DEBUG_LOOP
        printf("ERROR: input list is NULL\n");
#endif
        return -1;
    }
 
    if(p->head == p->tail)//頭與尾相遇
    {
        return 0;
    }
 
    if(p->head < p->tail)//尾大于頭
    {
        return p->tail - p->head;
    }
 
    return Get_Capacity(p) - (p->head - p->tail);//頭大于尾
}
 
//返回能寫入的空間
static int Get_CanWrite(_loopList_s *p)
{
    if(NULL == p)
    {
#if DEBUG_LOOP
        printf("ERROR: input list is NULL\n");
#endif
        return -1;
    }
 
    return Get_Capacity(p) - Get_CanRead(p);//總的減去已經寫入的空間
}
 
 
//  p--要讀的環形鏈表
//  buf--讀出的數據
//  count--讀的個數
static int Read(_loopList_s *p, void *buf, unsigned int len)
{
    int copySz = 0;
 
    if(NULL == p)
    {
#if DEBUG_LOOP
        printf("ERROR: input list is NULL\n");
#endif
        return -1;
    }
 
    if(NULL == buf)
    {
#if DEBUG_LOOP
        printf("ERROR: input buf is NULL\n");
#endif
        return -2;
    }
 
    if(p->head < p->tail)//尾大于頭
    {
        copySz = min(len, Get_CanRead(p)); //比較能讀的個數
        memcpy(buf, p->head, copySz);  //讀出數據
        p->head += copySz;     //頭指針加上讀取的個數
        return copySz;      //返回讀取的個數
    }
    else //頭大于等于了尾
    {
        if (len < Get_Capacity(p)-(p->head - p->buf))//讀的個數小于頭上面的數據量
        {
            copySz = len;//讀出的個數
            memcpy(buf, p->head, copySz);
            p->head += copySz;
            return copySz;
        }
        else//讀的個數大于頭上面的數據量
        {
            copySz = Get_Capacity(p) - (p->head - p->buf);//先讀出來頭上面的數據
            memcpy(buf, p->head, copySz);
            p->head = p->buf;//頭指針指向數組的首地址
            //還要讀的個數
            copySz += Read(p,(char*)buf+copySz, len-copySz);//接著讀剩余要讀的個數
            return copySz;
        }
    }
}
//  p--要寫的環形鏈表
//  buf--寫出的數據
//  len--寫的個數
static int Write(_loopList_s *p, const void *buf, unsigned int len)
{
    int tailAvailSz = 0;//尾部剩余空間
 
    if(NULL == p)
    {
#if DEBUG_LOOP
        printf("ERROR: list is empty \n");
#endif
        return -1;
    }
 
    if(NULL == buf)
    {
#if DEBUG_LOOP
        printf("ERROR: buf is empty \n");
#endif
        return -2;
    }
 
    if (len >= Get_CanWrite(p))//如果剩余的空間不夠
    {
#if DEBUG_LOOP
        printf("ERROR: no memory \n");
#endif
        return -3;
    }
 
    if (p->head <= p->tail)//頭小于等于尾
    {
        tailAvailSz = Get_Capacity(p) - (p->tail - p->buf); //查看尾上面剩余的空間
        if (len <= tailAvailSz)//個數小于等于尾上面剩余的空間
        {
            memcpy(p->tail, buf, len);//拷貝數據到環形數組
            p->tail += len;//尾指針加上數據個數
            if (p->tail == p->buf+Get_Capacity(p))//正好寫到最后
            {
                p->tail = p->buf;//尾指向數組的首地址
            }
            return len;//返回寫入的數據個數
        }
        else
        {
            memcpy(p->tail, buf, tailAvailSz); //填入尾上面剩余的空間
            p->tail = p->buf;     //尾指針指向數組首地址
            //剩余空間                   剩余數據的首地址       剩余數據的個數
            return tailAvailSz + Write(p, (char*)buf+tailAvailSz, len-tailAvailSz);//接著寫剩余的數據
        }
    }
    else //頭大于尾
    {
        memcpy(p->tail, buf, len);
        p->tail += len;
        return len;
    }
}
 
 
/*********************************************END OF FILE********************************************/

1、整體思路

把64K的flash空間分成了4個部分,第一部分是BootLoader,第二部分是程序A(APP1),第三部分是程序B(APP2),第四部分是用來存儲一些變量和標記的。下面是空間的分配情況。

BootLoader程序可以用來更新程序A,而程序A又更新程序B,程序B可以更新程序A。

最開始的時候想的是程序A、B都帶更新了,干嘛還多此一舉,其實這個Bootloader還是需要的。

如果之后程序A、B和FLAG三部分,假設一種情況,在程序B中更新程序A中遇到問題,復位后直接成磚,因為程序A在起始地址,上電直接運行程序A,而程序A現在出問題了,那就沒招了。

所以加上BootLoader情況下,不管怎么樣BootLoader的程序是不會錯的,因為更新不會更新BootLoader,即使更新出錯了,還可以進入BootLoader重新更新應用程序。

我見也有另外一種設計方法的,就是應用程序只有一個程序A,把程序B區域的flash當作緩存用,重啟的時候判斷B區域有沒有更新程序,有的話就把B拷貝到A,然后擦除B,我感覺這樣其實也一樣,反正不管怎么樣這部分空間是必須要預留出來的。

這里在keil中配置的只有起始地址和大小,并沒有結束地址,我這里也就不詳細計算了。總體就是這樣的。

2、Bootloader部分

BootLoader的任務有兩個,一是在串口中斷接收BIN的數據和主循環內判斷以及更新APP1的程序,二是在在程序開始的時候判斷有沒有可用的用戶程序進而跳轉到用戶程序(程序A或者程序B)。

簡單介紹下執行流程:

系統上電首先肯定是執行BootLoader程序的,因為它的起始地址就是0x08000000,首先是初始化,然后判斷按鍵是否手動升級程序,按鍵按下了就把FLAG部分的APP標記寫成0xFFFF(這里用的宏定義方式),再執行執行App_Check(),否則就直接執行App_Check()。

App_Check函數是來判斷程序A和程序B的,最開始BootLoader是用swd方式下載的,下載的時候全片擦除,所以會執行主循環的Update_Check函數。

此時串口打印出“等待接收APP1的BIN”,這個時候發送APP1的BIN過去,等接受完了,會寫在FLAG區域寫個0xAAAA,代表程序A寫入了,下次啟動可以執行程序A。

主要代碼部分

#include "fy_includes.h"
 
/*
晶振使用的是16M 其他頻率在system_stm32f10x.c中修改
使用printf需要在fy_includes.h修改串口重定向為#define PRINTF_USART USART1 
*/

 
 
/*
Bootloader程序
 
完成三個任務
 
步驟1.檢查是否有程序更新,如果有就擦寫flash進行更新,如果沒有進入步驟2
步驟2.判斷app1有沒有可執行程序,如果有就執行,如果沒有進入步驟3
步驟3.串口等待接收程序固件
 
*/

 
#define FLAG_UPDATE_APP1 0xBBAA
#define FLAG_UPDATE_APP2 0xAABB
#define FLAG_APP1 0xAAAA
#define FLAG_APP2 0xBBBB
#define FLAG_NONE 0xFFFF
 
_loopList_s list1;
u8 rxbuf[1024];
u8 temp8[2]; 
u16 temp16;
u32 rxlen=0;
u32 applen=0;
u32 write_addr;
u8 overflow=0;
u32 now_tick=0;
u8 _cnt_10ms=0;
 
static void App_Check(void)
{
    //獲取程序標號
    STMFLASH_Read(FLASH_PARAM_ADDR,&temp16,1);
 
    if(temp16 == FLAG_APP1)//執行程序A
    {
        if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//可執行?
        {
            printf(" 執行程序A...\r\n");   
            IAP_RunApp(FLASH_APP1_ADDR);
        }
        else
        {
            printf(" 程序A不可執行,擦除APP1程序所在空間...\r\n");
            for(u8 i=10;i<35;i++)
            {
                STMFLASH_Erase(FLASH_BASE + i*STM_SECTOR_SIZE,512);
            }
            printf(" 程序A所在空間擦除完成... \r\n");
            printf(" 將執行程序B... \r\n");
            if(((*(vu32*)(FLASH_APP2_ADDR+4))&0xFF000000)==0x08000000)//可執行?
            {
                printf(" 執行程序B...\r\n");    
                IAP_RunApp(FLASH_APP2_ADDR);
            }
            else
            {
                printf(" 程序B不可執行,擦除APP2程序所在空間...\r\n");
                for(u8 i=35;i<60;i++)
                {
                    STMFLASH_Erase(FLASH_BASE + i*STM_SECTOR_SIZE,512);
                }
                printf(" 程序B所在空間擦除完成...\r\n");
            }
        }
    }
    
    if(temp16 == FLAG_APP2)//執行程序B
    {
        if(((*(vu32*)(FLASH_APP2_ADDR+4))&0xFF000000)==0x08000000)//可執行?
        {
            printf(" 執行程序B...\r\n");   
            IAP_RunApp(FLASH_APP2_ADDR);
        }
        else
        {
            printf(" 程序B不可執行,擦除APP2程序所在空間... \r\n");
            for(u8 i=35;i<60;i++)
            {
                STMFLASH_Erase(FLASH_BASE + i*STM_SECTOR_SIZE,512);
            }
            printf(" 程序B所在空間擦除完成... \r\n");
            printf(" 將執行程序A... \r\n");
            if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//可執行?
            {
                printf(" 執行程序A...\r\n");    
                IAP_RunApp(FLASH_APP1_ADDR);
            }
            else
            {
                printf(" 程序A不可執行,擦除APP1程序所在空間...\r\n");
                for(u8 i=10;i<35;i++)
                {
                    STMFLASH_Erase(FLASH_BASE + i*STM_SECTOR_SIZE,512);
                }
                printf(" 程序A所在空間擦除完成...\r\n");
            }
        }
    }
    
    if(temp16 == FLAG_NONE)
    {
        printf(" 擦除App1程序所在空間...\r\n");
        for(u8 i=10;i<35;i++)
        {
            STMFLASH_Erase(FLASH_BASE + i*STM_SECTOR_SIZE,512);
        }
        printf(" 程序A所在空間擦除完成...\r\n");
    }
}
 
 
static void Update_Check(void)
{
    if(_list.Get_CanRead(&list1)>1)
    {
        _list.Read(&list1,&temp8,2);//讀取兩個數據
         
        temp16 = (u16)(temp8[1]<<8) | temp8[0];
                    
        STMFLASH_Write(write_addr,&temp16,1);
        write_addr+=2;
    }
 
    if(GetSystick_ms() - now_tick >10)//10ms
    {
        now_tick = GetSystick_ms();
        _cnt_10ms++;
        if(applen == rxlen && rxlen)//接收完成
        {
            if(overflow)
            {
                printf("接收溢出,無法更新,請重試 \r\n");
                SoftReset();//軟件復位
            }
            else
            {
                printf(" \r\n 接收BIN文件完成,長度為 %d \r\n",applen);
                
                temp16 = FLAG_APP1;
                STMFLASH_Write(FLASH_PARAM_ADDR,&temp16,1);//寫入標記
                temp16 = (u16)(applen>>16);
                STMFLASH_Write(FLASH_PARAM_ADDR+2,&temp16,1);
                temp16 = (u16)(applen);
                STMFLASH_Write(FLASH_PARAM_ADDR+4,&temp16,1);
                
                SoftReset();//軟件復位
            }
        }else applen = rxlen;//更新長度
    }
    if(_cnt_10ms>=50)
    {
        _cnt_10ms=0;
        Led_Tog();
        if(!rxlen)
        {
            printf(" 等待接收App1的BIN文件 \r\n");
        }
    }
}
int main(void)
{
    NVIC_SetPriorityGrouping( NVIC_PriorityGroup_2);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //開啟AFIO時鐘
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //禁止JTAG保留SWD
    
    Systick_Configuration();
    Led_Configuration();
    Key_Configuration();
    Usart1_Configuration(9600);
    USART_ITConfig(USART1, USART_IT_IDLE, DISABLE);//關閉串口空閑中斷
 
    printf(" this is bootloader!\r\n\r\n");
    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == SET)
    {
        Delay_ms(100);
        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == SET)//開機按下keyup進行更新
        {
            printf(" 主動更新,");
            temp16 = FLAG_NONE;
            STMFLASH_Write(FLASH_PARAM_ADDR,&temp16,1);
        }
        else
        {
            
        }
    }
 
    App_Check();
    
    printf(" 執行BootLoader程序... \r\n");
    _list.Create(&list1,rxbuf,sizeof(rxbuf));
 
    write_addr = FLASH_APP1_ADDR;
    
    while(1)
    {  
        Update_Check();
    }
}
 
//USART1串口中斷函數
void USART1_IRQHandler(void)
{
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        u8 temp = USART1->DR;
        if(_list.Write(&list1,&temp,1)<=0)
        {
            overflow=1;
        }
        rxlen++;
    }
}

其中的宏:

//FLASH起始地址
#define STM32_FLASH_BASE 0x08000000     //STM32 FLASH的起始地址
#define FLASH_APP1_ADDR    STM32_FLASH_BASE+0x2800    //偏移10K
#define FLASH_APP2_ADDR    STM32_FLASH_BASE+0x8c00    //偏移35K
#define FLASH_PARAM_ADDR    STM32_FLASH_BASE+0xF000    //偏移60K

3、程序A和程序B部分

這兩個都是用戶程序,這兩個程序都帶有更新程序功能,我這里用作測試的A和B程序大體都差不多,不同的地方就是程序A接收的BIN用來更新程序B,程序B接收的BIN用來更新A,還有就是中斷向量表便宜不同以及打印輸出不同。

應用程序部分沒什么說的,程序A和B很類似,這里貼上A的代碼

#include "fy_includes.h"
 
/*
晶振使用的是16M 其他頻率在system_stm32f10x.c中修改
使用printf需要在fy_includes.h修改串口重定向為#define PRINTF_USART USART1 
*/

 
 
/*
APP1程序
 
完成兩個任務
 
1.執行本身的app任務,同時監聽程序更新,監聽到停止本身的任務進入到狀態2
2.等待接收完成,完成后復位重啟
 
*/

 
#define FLAG_UPDATE_APP1 0xBBAA
#define FLAG_UPDATE_APP2 0xAABB
#define FLAG_APP1 0xAAAA
#define FLAG_APP2 0xBBBB
#define FLAG_NONE 0xFFFF
 
_loopList_s list1;
u8 rxbuf[1024];
u8 temp8[2]; 
u16 temp16;
u32 rxlen=0;
u32 applen=0;
u32 write_flsh_addr;
u8 update=0;
u8 overflow=0;
u32 now_tick;
u8 _cnt_10ms=0;
 
static void Update_Check(void)
{
    if(update)//監聽到有更新程序
    {
        write_flsh_addr = FLASH_APP2_ADDR;//App1更新App2的程序
        overflow=0;
        rxlen=0;
        _list.Create(&list1,rxbuf,sizeof(rxbuf));
        
        printf(" 擦除APP2程序所在空間...\r\n");
        for(u8 i=35;i<60;i++)//擦除APP2所在空間程序
        {
            STMFLASH_Erase(FLASH_BASE + i*STM_SECTOR_SIZE,512);
        }
        printf(" 程序B所在空間擦除完成...\r\n");
        
        while(1)
        {
            if(_list.Get_CanRead(&list1)>1)
            {
                _list.Read(&list1,&temp8,2);//讀取兩個數據
                 
                temp16 = (u16)(temp8[1]<<8) | temp8[0];
                            
                STMFLASH_Write(write_flsh_addr,&temp16,1);
                write_flsh_addr+=2;
            }
            
            if(GetSystick_ms() - now_tick >10)//10ms
            {
                now_tick = GetSystick_ms();
                _cnt_10ms++;
                if(applen == rxlen && rxlen)//接收完成
                {
                    if(overflow)
                    {
                        printf(" \r\n 接收溢出,請重新嘗試 \r\n");
                        SoftReset();//軟件復位
                    }
                    
                    printf(" \r\n 接收BIN文件完成,長度為 %d \r\n",applen);
                    
                    temp16 = FLAG_APP2;
                    STMFLASH_Write(FLASH_PARAM_ADDR,&temp16,1);//寫入標記
                    temp16 = (u16)(applen>>16);
                    STMFLASH_Write(FLASH_PARAM_ADDR+2,&temp16,1);
                    temp16 = (u16)(applen);
                    STMFLASH_Write(FLASH_PARAM_ADDR+4,&temp16,1);
                    
                    printf(" 系統將重啟....\r\n");
                    SoftReset();//軟件復位
                }else applen = rxlen;//更新長度    
            }
            
            if(_cnt_10ms>=50)
            {
                _cnt_10ms=0;
                Led_Tog();
                if(!rxlen)
                {
                    printf(" 等待接收App2的BIN文件 \r\n");
                }
            }
        }//while(1)
    }
}
 
 
static void App_Task(void)
{
    if(GetSystick_ms() - now_tick >500)     
    {
        now_tick = GetSystick_ms();
        printf(" 正在運行APP1 \r\n");
        Led_Tog();
    }
}
 
int main(void)
{
    SCB->VTOR = FLASH_APP1_ADDR;   
 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //開啟AFIO時鐘
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); //禁止JTAG保留SWD
    
    Systick_Configuration();
    Led_Configuration();
    Usart1_Configuration(9600);
    printf(" this is APP1!\r\n");
    
    Delay_ms(500);
    
    while(1)
    {
        Update_Check();
        App_Task();
    }
}
 
//USART1串口中斷函數
void USART1_IRQHandler(void)
{
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        u8 temp = USART1->DR;
        if(update)
        {   
            if(_list.Write(&list1,&temp,1) <= 0 )
            {
                overflow = 1;
            }
        }
        else
        {
            rxbuf[rxlen] = temp;
        }
        rxlen++;
    }
    if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
    {
        u8 temp = USART1->DR;
        temp = USART1->SR;
        
        if(strstr((char *)rxbuf,"App Update") && rxlen)
        {
            update=1;
            USART_ITConfig(USART1, USART_IT_IDLE, DISABLE);//關閉串口空閑中斷
        }
        else
        {
            Usart1_SendBuf(rxbuf,rxlen);
        }
        rxlen=0;
    }
    
}

這里如果要移植需要注意的就是向量表的偏移以及更新擦寫的區域。

4、剩余的4Kflash空間部分

這里其實只是用來存儲2個變量,一個是程序運行標記,一個是接收到的程序長度,程序標記還有點把子用,程序長度其實要不要都無所謂。

5、遇到的坑

最值得一說的就是更新部分,最開始程序沒有加入擦除flash,遇到的情況就是下載完BootLoader后發送app1沒問題,在app1中更新App2也沒問題,然后app2再更新app1就出問題了。

直觀的結果就是循環隊列溢出,原因就是app2在更新app1前沒有去擦除app1所在的flash,所以在寫的時候就要去擦除,這樣就寫的很慢,然而串口接收是不停的收,所以就是寫不過來。

原文:https://blog.csdn.net/qq997758497/article/details/90211868

文章來源于網絡,版權歸原作者所有,如有侵權,請聯系刪除。



關注我【一起學嵌入式】,一起變得更優秀。


覺得文章不錯,點擊“分享”、“”、“推薦” 唄!

一起學嵌入式 公眾號【一起學嵌入式】,RTOS、Linux編程、C/C++,以及經驗分享、行業資訊、物聯網等技術知
評論
  • 在芯片總成本中占比不到 1%,卻可能因一處品質偏差導致整片晶圓報廢——半導體切割/研磨膠帶,正隨著先進封裝的爆發,成為封測產線選型中最謹慎對待的耗材之一。但鮮有人注意到,決定這層膠帶性能上限的,是上游一層更薄的基膜。這個長期由日本企業主導的隱形環節,正在出現國產突圍的信號。一、需求之變:先進封裝與“韜定律”重塑膠帶市場AI 算力芯片、HBM 高帶寬存儲、Chiplet 芯粒等先進封裝產品持續放量,國內封測產線擴產節奏不減。作為晶圓減薄與切割工序的必需耗材,晶圓膠帶的需求同步擴容。據 QYRese
    芯膜前沿 2026-07-31 16:35 275瀏覽
  •     長期專注WiFi領域,也算是行業老兵了!同行閑聊中,時不時能提起我和我們!從疫情起,國產替代風生水起,起起落落,大浪淘沙,生存下來的都是強者!    WiFi模塊應用廣泛,對于高端市場和特定市場,要求WIFI模塊需要過CE/FCC之類的認證,也就是說沒有認證的模塊,不具備導入產品設計.接下來就和大家聊聊認證模塊選型參考!    WIFi模塊硬件方面主要考慮以下九點特性:    1
    納拓科技 2026-07-31 17:56 137瀏覽
  • 智能寵物用品這幾年快速普及,自動清理幾乎成了智能貓砂盆的標配。貓咪用完離場,設備自動翻轉清理,養寵家庭省去了每天彎腰清理的麻煩。但自動清理的第一步,是先準確判斷貓到底在不在盆里。這個看似簡單的問題,在小空間里并不容易做好。近場檢測的痛點:距離太遠反而誤事貓砂盆內部空間有限。如果傳感器的檢測距離設得偏大,盆外路過的貓、人甚至物品都會被誤判為貓在盆內,結果該清理時不清理、不該清理時亂清理,體驗直接崩壞。這類產品的核心訴求其實就一句話:近距離、小范圍、精準識別,不能有半點誤判。常規感應方案常因檢測距離
    唯創知音語音芯片 2026-07-31 16:51 223瀏覽
  • Synopsys 這次沒有再給行業看一條只能站在展臺邊圍觀的 demo。7 月 27 日,Synopsys 在 DAC 2026 期間公布兩條 autonomous EDA workflow:一條處理 debug closure,另一條處理 implementation and closure。客戶可以通過 Synopsys 申請在 Microsoft Discovery 上評估,AMD 正在評估這些工作流能否用于下一代產品開發。公告里最扎眼的是 25%–40%。Synopsys 稱
    麒芯說AI 2026-07-31 14:21 168瀏覽
  • 光芯片,正在從光模塊的“配角”逆襲為AI產業鏈的“命門”2026年3月,英偉達一紙公告震動整個光通信行業——分別向Lumentum和Coherent各投資20億美元,合計40億美元。這哪是什么財務投資,這是一次對AI基礎設施關鍵環節的“掐尖式”卡位。光芯片,這個曾經被市場當作光模塊BOM表里一個標準配套元器件的東西,正在成為AI產業鏈上“卡位”最強、話語權最硬的環節。一、為什么是光芯片?老黃早就把話挑明了英偉達CEO黃仁勛的原話是:數據傳輸速度已成為人工智能發展的新瓶頸。AI集群從萬卡級往十萬卡
    用戶1774416745629 2026-07-31 11:22 283瀏覽
  • 摘要防爆自控系統同時布設本安信號、工業總線、動力供電三類線路,僅依靠標識標牌管控插接極易出現人為錯插問題,高壓動力回路竄入本安弱電回路會突破安全柵限能標準,產生點火風險。依托 A、D、K 標準化機械防呆編碼體系,搭配護套顏色區分管理,適配 3 針 3 孔免焊接冷壓增安型防爆航插、5PIN 總線防爆航空插頭、8 芯焊接防爆法蘭插座的選型使用,從物理結構層面杜絕防爆接近開關連接器、防爆傳感器航插接頭混用插接問題,補齊防爆系統被動安全防護體系。關鍵詞圓形防爆連接器,防呆編碼防爆航插,防爆航空插頭,防爆
    用戶1783664076620 2026-07-31 18:29 273瀏覽
  • 在EMC測試過程中,傳導發射(Conducted Emission,CE)超標是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標曲線背后,可能對應著完全不同的干擾機理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負載、電纜布局或接地結構引起的連鎖反應。 · 150kHz~1MHz 超標:多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標:通常共模噪聲占主導,干擾通過火線/零線對地回路傳播。 如果條件允許,用電流探
    譽磁電磁兼容EMC 2026-07-31 18:45 302瀏覽
  • 今年好幾個客戶都問過我同一件事。藍牙音頻產品到底用 WT2605 這種單芯片,還是老老實實 MCU 外掛藍牙模組。兩種方案我都落地過,說點實在的,WT2605 剛出來那陣我也犯嘀咕,怕是營銷噱頭,真拿來做完一版樣機才服氣。一、選型先看三個維度外圍數量。這是最直觀的。傳統做法是 MCU 加藍牙模組,再加音頻編解碼、功放、晶振和一堆阻容,板子上密密麻麻十幾二十顆料。WT2605 把藍牙、解碼、功放全收進一顆,外圍就剩少量被動件。開發周期。傳統方案得自己接藍牙協議棧,配網、A2DP 解碼、音頻通路一一
    唯創知音語音芯片 2026-07-31 16:35 316瀏覽
  • 行業痛點凸顯,飛凌嵌入式FET3572-C重磅登場工業4.0與AIoT發展下,嵌入式核心板作為設備“工業大腦”,面臨性能與功耗的雙重考驗——既要支撐復雜算法和多路數據處理,又要兼顧便攜設備、工業終端的低功耗需求,傳統核心板“高性能必高功耗”的困境制約設備升級。為此,飛凌嵌入式推出基于RK3572處理器的FET3572-C核心板,以2×Cortex-A73+6×Cortex-A53八核架構為核心,實現“性能翻倍、功耗減半”的突破,為中高端嵌入式場景提供優質算力底座。八核異構架構,解鎖性能功耗最優解
    飛凌嵌入式 2026-07-31 09:47 178瀏覽
  • 摘要在防爆電氣設計中,只參照芯數選型而忽略額定載流量,長期滿負荷運行會出現插頭發熱、接觸面氧化、IP67 密封受熱老化等問題。結合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數對照表,區分冷壓免焊接、焊接兩種接線結構的安全載流數值,設置合理電流冗余系數,搭配使用環境修正參數,規范防爆接近開關連接器、防爆法蘭插座的選型計算方式。關鍵詞圓形防爆連接器,載流參數表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產品概述圓形防爆連接器觸點載流能力由插針直徑、
    用戶1783664076620 2026-08-03 09:18 85672瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設計 2026-08-03 10:21 85894瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 爱唯侦察9集完全版| 畸零与色情| 亲爱的客栈2| 狄仁杰第四部免费全集播放| 91制造厂在线免费观看| 雷神暂退好莱坞| 《秘密列车》电视剧| 大江大河3免费看全集技巧| 藏精阁在线观看| 高清《桃恋者》电视剧| 《女销售的销售秘密》2| 战火青春43集免费观看| 壮志凌云女飞行员版本| 八尺夫人法国满天星法版演员表| 艾斯奥特曼中文版| 电视剧你比星光美丽免费观看 | 绅士们2电影完整版在线观看| 旧里番无修在线观看| 少林足球国语高清百度影音| 东京吸血鬼酒店| 房奴试爱电视剧原声开头| 如狼似虎的母爱第三季剧情介绍| 你不懂电视剧网| 美国禁忌满天星| 周防雪子快播| 斗龙战士60集| 台剧浪漫女家教免费观看 | 天使的诱惑| 麦乐迪女超人系列在线观看免费版| 电视剧夫妻密码| 《裸体按摩师2》| 火口的两人| 爱我几何原声在线完整版| 最新韩国电视剧| 持续侵犯高傲女教师| 年轻的继坶5免费观看| 飞机上的特殊服务电影| 龙卷风优化| 超级女特工下载| 《需要爸爸播种美国》英文版资源| 噬人鲨大战食人鳄国语| 黄奕演过电视剧| 灯草花和灯高清免费| 人生路不熟电影免费观看完整版 | 周深 跨年劳模| 战狼6在线观看完整免费| 影城大亨粤语| 斗罗大陆209| 不良义姐电影| 错点鸳鸯| 恐怖食人鱼3| 《新人类毒医肥尸》在线观看| 华丽的外出未删减| 樱兰男公关部| 摇曳百合第三季| 安斋拉拉手机在线观看影片| 电影《影》| 法国满天星《古墓丽影》完整版在线| 黑暗荣耀电视剧| 金银梅5普通版在线观看免费| 青楼十2房在线观看| 电影女超人在线观看完整版| 薄冰电视剧全集免费观看完整版 | 当幸福来敲门美国版| 战狼6免费观看在线播放下载| 魔都精兵的奴隶 第二季| 黄金小子| 火影剧场版4| 日本电影和讨厌社长出差旅| 忘年的恋曲电影免费观看| 妖精的尾巴15| 一个男人和一个女人电视剧| 罗丽星克莱尔的电影| 石纪元 第四季 Part 3| 电影意大利无法满足| 兰若寺电影| 高压监狱完整版免费观看| 高压监狱在线观看完整免费高清原声高烧美国电影 | 画皮之真爱无悔片花| 锻刀电视剧全集免费观看| 凯登克罗斯在线免费观看| 赘婿在线观看免费完整版高清 | 插曲的痛45全集免费观看高清版 | 《灭火宝贝(高压监狱)》| 聊斋艳谭第3集| 酒店1-75集| 《前任1》高清完整版| 二十一世纪指南在线 | 萌宠撒欢节| 色九月高清日韩| 慈禧秘密生活 国语| 红蝎子3之妖惑人心| 高清《搜神传》电视剧| 百日郎君| 湘潭县| 死神来了1中文版| 仙逆在线看| 荷兰空姐2019年上映的日本空姐是谁| 唐朝诡事录西行在线全集免费 | 八重神子拿黄瓜奖励| 《陆判官换心2》徐锦江在线观看| 镀金时代第二季| 伽师县| 地下婴儿乐队| 喜洋洋与灰太狼羊羊运动会| 星球大战4| 血疫电影完整免费观看| 《初恋时间》1-6全集免费| 复仇者联盟2免费版高清观看| 九洲天空城| 维修师傅艳遇韩国观看| 《窃欲无罪》电影| 军鸡在线观看| 撸二哥网站| 高清我们是坏蛋理发师未删减| 御用闲人粤语| 战争之暴行女囚电影正版观看 | 黄秋生《雨夜屠夫》| 生死营救| 黏黏糊糊的你第1集| 电影《聚会的目的2》的上映时间| 吸血鬼日记第四季14集| 红磨坊百度影音| 电视剧新警事| 一锁五十年| 美国开放酒店2| 千年魔界| 极度兽性在线观看| 隐身帽子在线播放完整版视频| 萤火之森动漫| 天堂有难| 美容店的待遇5HD| 特种兵火凤凰全集| 警死厅24时| 新三国1至95集免费观看| 时空悍将| 刘海戏金蟾| 漂流欲室 在线观看| (已屏蔽)| 火影忍者全集土豆网| 如此美好| 爱我几何完整版免费观看原声在线播放 | 东北警察故事2谢苗| 新女员工部长的教育| 史诗电影| 我想打死你| 傻婿觉醒全集免费| 钱塘老娘舅| 上海滩之陈真免费全集在线观看 | 爱的二八定律电视剧免费观看完整版| 美容是特殊待遇5| 新妈妈的礼物| 爱情睡醒了28| 《睫毛膏4》美国| 疯狂小说家电影| 艾玛 德考尼斯| 和表姐同居免费观看| 美乃雀所有影片免费观看| 女生亲嘴| 拳王粤语版| 二媳妇的味道| 密室之不可告人下载| 天网追踪电视剧免费观看| 圣特罗佩1982完整版| 无耻第一季免费观看全集| 向风而行全集40集| 义子的侵犯电影| 虫族之心剧情| 聊斋画皮全集| 荣誉法则(成人版)英文2012| 河南卫视华豫之门| 欢天喜地七仙女38集| 满天星《西部牛仔》| 电视剧女人花| 黑夜传说4 觉醒| 东京食种| 《高压监狱2在》完整版法国免费看| 七夜怪谈电影| 有只僵尸暗恋你下载| 丈夫的上司来家拜访日剧免费观看全| 大电影赛尔号| 银梅瓶电视剧全集电视剧在线观看免费| 百想艺术大赏名单| 邻家女人丈夫不在的日子| 新天师斗僵尸2| 建党大业| 济公传奇2| 法国版《女超人:麦乐迪》电影在线观| 危情英雄| 白百何益达广告完整版| 扇娘电视剧全集| 萌探探探案免费观看西瓜影视 | 周末情人免费| 聚会的目的1在观完整有限中字| 馒头逼电影在线观看| 《正人君子》完整版电影在线观看| 三年片免费看大全中国电影| 快手同框怎么弄| 老湿电影院体检区| 南妹儿动感光波| 中原镖局全集| 江西卫视经典传奇| 黛比浪漫女家教免费播放| 国家形象电视剧高清| 炸天小姐免费观看| 哥哥姐姐的花样年华电视剧| 82板杨敏思版本1-5电影在线观看 新女员工部长的教育 | 夺命网红2| 双子星公主 第2部| 终结者创世纪西瓜| 华丽的外出完整版| 杨敏思金瓶悔1一5集演员表| 男子悬崖旁求婚后女友不慎坠亡| 电影需要帮我播种的英文| 风流才子纪晓岚插曲| 牙医姊妹电影完整版| 《很想很想你》电视剧| 星光灿烂猪八戒| 欧洲无线一线二饯三w955| 恐龙战队国语版| 棒棒影院| 《芈月传》| 女房产销售员3| 人生七年 纪录片| 至尊红颜武媚娘全集| 天星术张涵予在线观看| 赘婿免费观看| 汪清县| 第一点血2| 年轻善良的嫂嫂3韩国| 温柔女教师在线观看电视剧大全| 玩偶姐姐陪玩第四部片尾BGM| 爱上包养我的女人| 义姐是不是良妈妈喂养动漫| 棋魂第2部| 杨贵妃秘史演员表| 法国版女超人:麦乐迪在线观看 | 女超人卖乐迪| 迷雾电影韩国在线看| 欢笑老弄堂| 银瓶梅| 肉浦团 在线观看| 素女真经电影剧情解析| 斗罗大陆101| 在线爱我几何女人| 天罚电视剧在线观看完整版| 有翡在哪个卫视播出| 工藤拉拉全部免费观看电视剧| 豪华列车3万元票价值吗| 长安三万里免费观看完整| 我不做潘金莲| 国风按摩1一6| 短剧《撕夜》免费观看| 冰封(重生之门)| 欧美5| 马成的喜悦| 海洋之恋泰剧特别篇| 特罗佩斯的姑娘们| 遇见王沥川免费观看| 尸体派对2| 恶魔岛电影| xl司令真人版高清| 家族荣誉4国语| 中国油价处在世界什么水平| 丛林激战| 黄金勇者| 且试天下电视剧免费观看完整| 巴不得妈妈粤语| 西班牙版《掌中之物》| 神与律师事务所| 女人与公狼配| 来自妈妈的绣感2国语版叫什么名字| 圣山村谜局电影完整版在线观看| 电影龙蛇争霸| 校园大逃杀| 黄河在咆哮 电视剧| 冰河剧集法国空姐4| 李丽珍舒淇徐锦江一起演过的电影| 《和讨厌的社长出差七天旅》| 泡芙小姐第2季| 老九门番外之虎骨梅花| 千金丫鬟电视剧免费观看完整版| 老公是全球大佬:闪婚首富短剧全集| 广场舞最美西藏| 化神短剧全集免费| 芙人少女大人十四岁姑娘正片电影 | 律师大人巴布印度电视剧在线观看| 女人村庄演员表| 兽兽 BT| 卖房子的女销售91制片厂| 扫黑风暴电视剧| 你给老子不上班| 坎贝奇电影高清免费看| 新闻女王电视剧粤语在线观看| 幸得相遇离婚时短剧免费观看| 电视剧封神榜| 《刚结婚部长出差的日子》| 世界第一初恋ova| 罪恶都市电影| 人猿泰山未删减版1991劳拉| 影迷电影网| 电视剧老女人6| しぼっちゃうぞ中文在线观看| 坎贝奇品味人生完整版电影| 杨千嬅演唱会下载| 我的僵尸女儿未删减| 女生男生一起愁愁愁电视剧在线| 星球大战3百度影音| 哈利波特3迅雷下载| 勇敢的心第二部45集免费看视频| 高压监狱2在线完整免费| 夜店诡谈迅雷下载| 韩剧《我的女友》免费观看| 保姆的特别待遇2| 滥竽充数免费| 我和我的三个姐姐| 银魂263| 爱我几何无删减版| 光阴里的故事| 超级经纪人在线观看| 淫乱之女| 牙医姐妹1986完整版资源| 发情期继妹| 消失的十一层| 《渔夫的荒野史记》剧情解析视频在| 赛伦满天星| 邻居家的姐姐| 龙门镖局11| 部长出差的日子免费在线观看| 国际风云电影完整版| 魔法留学生国语版全集| 战火熔炉在线观看| 妈妈爱上了儿子| 任达华电影全集国语高清| 僵尸先生电影| 《牙医姊妹》未删减版| 胸肌撕裂者| 决战秋瓷炫三部曲| 好姑娘免费高清在线观看| 永胜县| 姐妹影院| 我的心肝宝贝国语版| 屈辱花嫁调教中文字幕| 第八个嫌疑人演员表| 需要爸爸种的种子| 韩版恶作剧之吻网络版| 青岛DJ小可| 《总统夫人》星克莱尔1997年满天星在| 周弘版《村姑》台湾版演员表| 影星杰·凯利未删减| 在线观看璀璨人生| 韩国三级水电工 | 保罗1—4在线观看免费中文| 瑜伽学院 电影| 廊坊市| 特战荣耀免费观看| 故乡的泥土电视剧| 锵锵锵锵锵锵锵锵在线观看 | 素食主义者电影| 初体验5第一季免费观看| 少林足球国语高清百度影音| 人类星球 电影| 电视剧再爱我一次| 铿锵铿锵铿铿锵免费观看| 台媒高度关注东部战区军演| 宋小宝2022年最新小品| 闺蜜的朋友中字ID| 石田光电影| 狠狠地撸2015最新版| 紫钗奇缘大结局| 特殊的保险推销员8| 色戒完整未删减版在线观看| 半夜被口醒是一种什么样的感受| 新活佛济公全集| 《婚礼的前一天》| 寂静之地3免费完整国语版| 黑夜传说4 觉醒| 皮皮鲁与鲁西西之罐头小人| 杰西简牺牲最大的电影| 陈冠希道歉| overflower第一季全集下载| 奇葩说第六季| 车仁表四大名捕| 平安唱的我爱你中国| 啊父老乡亲电视剧全集免费观看| 《急诊护士》在线播放| 天龙八部43| 理发店里的特殊待遇4在线观看| 神墓在线观看全集免费观看动漫| 《社长夫人的美貌》哪里能免费看| 变形金刚2快播| 女子私人监狱免费版| 家族正名:恩怨了结短剧全集| 咒电影完整版高清免费观看| 肉欲横流| 我的爱宥丽| 过气明星逆袭全集免费| 四分钟泰剧在线观看免费高清| 美国电影娃娃脸| 麦乐迪《女超人》在线播放| 地下交通站电视剧| 方世玉2| 千斤肉板栗免费观看| 新梁山泊与祝英台| 韩国综艺runningman| 肯德桑德兰满天星主演是谁| 上甘岭电影| 烧饼皇后下载| 密桃荷尔蒙| 你是谁学校2015| 筋疲力尽| 大兵的寝室第一季免费观看| 李玲:高价药很多人享受不到| 乱世淫侠| 北越暴行3全集在线播放| 猫爷张华简介| 欧美人与禽ZoZ0善交| 台剧黛比女家教在线看| 电影倩女幽魂2| 贾乃亮和李小璐合唱的歌曲| 卡一卡二在线入口| 汤方大胆人体艺术| 步步惊心qvod| 妻子游泳教练HD中字| 苏醒宠妻:植物人老公短剧全集| 特利迦奥特曼普通话| 法国空姐2019满天星法版:星辉照耀 | 做aj的视频大全电视剧那些好看的视频都哪去了? | 金基范电视剧| 斯巴达满天星版| 扫毒风暴高清完整版免费观看电影| 剑道尘心剧场版免费播放| 孤男寡女免费观看电视剧战狼4影视大全| 摇滚七十年代| 蜡笔小新爱奇艺| 有菜电影| 仔仔影视| 唐人街探案2免费版在线观看| 三级健身房教练| 韩剧搞笑一家人2| 变态研讨会| 朝国年经继4免费看 | 我的好继拇HD| 和尚的一场梦电影速度看高清| 九首歌下载| 在线观看国产免费的电视剧在线 | 天海翼 片子 女教师| 安徽公共频道在线直播| 最强反套路系统动漫在线观看| 吞噬星空104| 白蛇传说之法海| 名山县| 我家娘子惹不起电视剧免费观看| 同桌上课揉我下面好湿H| 张伟丽vs苏亚雷斯回放| 19岁大学生免费观看电视剧详情| 咖喱辣椒粤语| 甄嬛传土豆| 战狼6欧式少女的播出时间和地点介绍| 天生一对下载| 我的世界大电影免费观看| 美国满天星《无法无天》| 涿州怎么读| 姐姐免费观看国语全集| 性解命| 免费同志| 他年她日电影| 九龙坡区| 棋手颜成龙再回应肛珠作弊传言| 野花韩国视频在线观看免费高清| 暴风眼 电视剧| 战狼16欧式少女完整剧情| 电影《霸占》在线观看| 意大利电影免费观看完整版| 电影《千金奴》免费观看全集高清| 韩剧《我的女友》免费观看| 十九岁观看免费高清完整版| 傻儿司令| 哈尔滨夜店| 执掌大权:豪门弃少短剧全集 | 黄河在咆哮 电视剧| 有爱就有家电视剧| 白峰美羽主演的为父报仇在线观看视| 电视剧亲爱的仇敌免费观看| 华为Mate70系列进入最后阶段| 《酒店服务员》在线观看| 罗曼蒂克地下室骑马多少分钟| 《妻子的闺蜜》大结局| 女版《壮志凌云》| 火星上的维纳斯| 黑皮辣妹是我的兄弟第一季免费| 战狼4欧美版免费观看完整版国语电影 | 好久不见42集免费播放| 勇敢的心百度影音| 大风歌全集| 啄木鸟:女版《壮志凌云》音译成中文| 天王状师| 爬山虎的资料| 电影心理罪| 麦乐迪女超人在线无删减电影免费观看 | 罗小黑战记35集免费观看| 电影《美味快递员》演员阵容| 五凤朝阳刀评书| 夏日口袋动漫免费观看| 国风按摩院小电影| 氪金玩家动漫免费观看全集| 巴黎夜未眠| 法国空乘10| 冲出虚拟世界| 陷入我们的热恋| 炽道在线观看全集免费观看| 春晓舞蹈| 《花子vs倔强的驱魔师》1-4集在线观看 | 3d 肉蒲团| 新员工入职秘书| 僵尸道长2高清| 装台全集电视剧免费观看| 暖暖的微笑在线观看免费完整版| 圣诞十二劫| 美丽桃子5:美丽人生星辰| 黄日华个人资料简介| 《需要爸爸播种子》免费观看在线播放_HD/无删减_1080P高清完整版电影 - 天堂 | 风语者国语| 重生宠妾进阶录短剧免费观看| 我是刑警34集全免费| 《瓜达卢佩的玫瑰》免费观看| 罗马的房子 下载| 明日之战电影之完整免费观看 | 方清平单口相声下载| 王大花的革命生涯| 电影《丰年经继坶3》解析| 电视剧纵横四海| 西游记续集电视剧| 王李丹妮演的修理工电视剧| 开端全集在线观看| 佐野美铃| 高压监狱1法国电影完整版| 青青草原影视| 少妇与情人苹果园偷欢| 壮志凌云啄木鸟满天星法版| 潜龙轰天3野兽之腹| y行动和舒立克的其它冒险| 俘虏之锁~处女们的束缚| 地位变 改变土妹子的纯洁异新交往 | 《激战丛林》电影在线观看意大利| 蜂脸女人| 两个人在线观看免费国语版| 美国粉红大白菜在线播放| 命案2023国语版在线播放| 民权县| 苹果电影未删减版| 大宋少年志2结局| 《需要爸爸播种子》在线观看播放_HD/高清_免费无删减完整版电影 - 星辰影院 | 高清《地狱乐 第二季》电视剧| 十九岁完整版在线观看好看| 古惑仔之少年激斗| 王宥胜主演的电视剧| 玩命爱一个姑娘完整版| 男爵夫人的调教| xl司令动漫第一季全集| 打蛇电影完整版免费观看国语| 比蒙巨兽| 北越暴行全集无删减| 致命女人第一季| 《丰满的继牳5》在线观看| 浮之手1| 终极强奸之兽性诱惑| 鹰什么大队| 《妻子与游泳教练》主演| 铃芽之旅在线观看| 放飞旅行团全集观看| 交换上司的秘书免费| 金牌保镖| 高清《人生导师》电影在线观看免费| 翘臀嫩美少年被调教灌尿| 鉴证实录2粤语| 黑白配高清完整版| 张思德的故事| 金瓶梅在线高清观看无删减| 双女任务免费观看完整版全集| 你的名字高清樱花动漫| 奔跑吧第十一季免费观看| 吴健版农民伯伯2国语版百度| 毒战韩国版未删减版在线观看| 岳母刺字| 新有菜未删版| 皮囊之下电影完整高清在线播放| 电影长津湖战役完整版播放免费观看| 《特殊游泳课》波多野结衣| 墨白电视剧免费观看在线观看超清 | 奔跑吧兄弟第十一季| 《在一起》免费观看| 电影我要爸爸的种子HD正版 | 我知道我爱你电视剧| 磨静号中文字幕电影| 百家讲坛项羽| 执迷1V2海棠| site:yalan365.com| 庆余年第二季欧美剧犯罪片| 高清加油吧!中村君!!未删减| 浪漫女教师黛比无删减版| 《许我耀眼》电视剧免费观看全集 | 给我一碗小米粥| 《赤壁》电影| 高清《雏菊》| 女超人麦乐迪电影无删减| 彭佳慧残酷的温柔| 终于轮到我恋爱了电视剧| 高柳家的花嫁动画片在线| 老公不在我和公发| 金鸡sss 电影| 白峰美羽在线观看视频中文字幕| 一帘幽梦大结局| 南剑北鞭铁扇子| 灰姑娘电影| 韩国美人图| 广州民宅突发火灾| 男生女生一起相愁愁愁观看电视剧 | 泫雅否认曾对同学校园暴力| 母亲爱上儿子同学的美剧| 他是谁电视剧免费观看完整版国语| 汕尾市| 爱情残酷物语| 国乒提前包揽混双冠亚军| 黑帮大佬我和我第365天男主| 七龙珠z剧场版| 丰胸乳房按摩电影| 银河奥特曼s免费观看全集中文版| 暴躁太子爷| 白峰电影在线观看在| 美人心计35集| 渣男退散短剧全集| 理伦片驯服小峓子2| 后宅争斗:主母不好当短剧全集| 农民伯伯和乡下妹妹电视剧| 韩剧命运派对| 《出差遇暴雨》完整版免费观看| 人猿泰山成人| 魔域桃源主题曲| 水手服饲养未减版主演是谁| 电影《废都》国语免费播放| 慈禧秘密生活高清完整K8| 成龙12生肖电影免费版| 《无颜之月》完整版在线播放 | 小潮院长| 《分娩按摩》2图片视频| 八年级下册英语单词领读| 《入青云》36集免费| 五号特工组 电视剧| 战狼6免费版高清播放| XL司令第二季无马赛免费观看真人版 | 铁蛋的一天全集| 去上司家拜访电影免费观看| 九龙城寨在线观看免费版| 郝邵文电影全集国语| 蒋玲玲| 因为爱情有幸福免费观看| 无心法师第4季免费播放| 《换脸》电影在线观看| 《家政老师2》免费观看韩剧 | 总会再相见全集观看| 巴基斯坦电影人世间| 《险恶的绣感》亮点在| 华丽的外出电影韩国版在线观看| 倩女幽魂电影在线观看免费完整版 | 《女警坠落2》在线观看| star467| 电视剧烈火凤凰| 维修工的艳遇在线| 我的妹妹电影| 阿嬷爱国版歌曲| 我的漂亮的小瘦子3| 高清《他乡的童年》在线观看 | 女皇之刃ova| 硝烟散尽| 艳母在线观看视频| 女法医:古代断案全集免费| 满天星麦乐迪电影在线观看 | 酒店1—20集全集免费高清| 桃色天使终极猎杀| 恶女花魁| 日剧《家庭教师上门拜访》| 红唇滚滚1993| 日历女孩 韩国电影| 《美容院:特殊待遇》在线| 正义的重量电视剧| 樱桃电影| 大牛影库存战狼6| 梦驼铃原唱| 电视剧武则天全集| 马戏团高清完整版在线观看| 高跟鞋smvk| 赘婿免费观看| 九重紫连续剧| 坎贝奇无憾完整版免费观看| 《他不配》大结局视频| 曹颖个人资料简介| 萨迪1980满天星免费播放| bastard暗黑破坏神| 真假面骑士| 特殊的治疗室6| 鸣鸟不飞:乌云密布电影| 禁止的爱善良的小蛦子 在钱| 戒爱电影在线观看完整版免费| 新有菜电影大全观看| 随唐演义 全集| 上海电视台节目预告| xl司令第2季无马赛免费观看高清初级 | 我们的秘密第二部| 少狼第一季| 黑白配HD1080免费全集| 芹叶铁线莲| 金婚50集完整版免费观看| 欲体焚情女主角| 《美容院:特殊待遇在线观看| 全职高手动漫在线观看| 初恋是CV大神电视剧| 麦乐迪马克斯女超人免费观看| 默绘女高| 大阅兵重播| 美国1985G点原版| ⅩL司令全集| 电影《牙医姊妹》在线播放| 唐探1900电影免费播放| 凯登克劳斯电影作品在线观看| 金马奖55届完整版高清| 追光者电视剧免费观看完整版| 安娜的妈妈偷看儿子手机是哪一集 | 1987渔夫荒野史记全集| 霍莉桑普森| 包拯大干秦香莲| 甲种公牛1976意大利| 《听话女仆》动漫在线看全集免费| 舒淇三圾片在线观看| 燃烧电视剧全集30集| 韩国美容店的待遇5HD电影| 新生电视剧剧情介绍| 良辰好景知几何电视剧免费看| 法国电影女超人(麦乐迪)免费观看| 天亮了汤晶锦| 盲井 完整版| 阜新市| 塔日酒店电影在线观看 | 能听到我的心吗| 需要爸爸种子在线| 欢喜密探电视剧免费全集在线观看| 赤狐书生免费观看全集| 城步| 法国空4| 仙逆第122集在线观看| 俄剧《叶卡捷琳娜二世》第一季| 男女一起愁愁愁免费| 恶搞之家拍脏片八季是哪一集| 最近我的妹妹有点怪电影| 逃出生天快播| 巴西按摩师无删减版在线观看百度云 | 帝王之妾全集| 美国禁忌症结局3| 电视剧深海谍战| 威尼斯三部曲之3| 疯狂动物城中文版免费观看| 日韩电影《女律师的坠落》| 我与梦露的一周| 星河至尊| 女销售3| 相逢是首歌 俞静| 电视剧游击兵工厂| 四十团圆短剧免费观看| 男生女生相愁愁愁电视剧在线观 | 大中国原唱| 地狱护士另一个版本电影叫啥 | 华晨宇无字歌| 电视剧平凡之路| 欲望中的女人电影| 木下檀檀子免费观看平台 | 电视剧战狼战狼在线观看免费| 韩剧隐身的帽子完整版| 姥姥的外孙泰剧在线观看| 甜蜜家园2今日播出| 美国《粉红大白菜》剧情介绍| 边缘行者 电影| 118号美女试睡员电影| 漂白免费观看完整版| 《法国空乘5》免费看| 吉泽明步高清种子| 无处藏身全集电视剧免费观看| 琉璃免费观看| 渔夫荒野史1988版在线观看免费| 约会大作战8| 冰激凌怎么画最好看| 《满天星女版西部通缉令》在线观看| 麦乐迪《家庭矛盾》4在线免费观看 | 满天星《老板的女儿》| 《藏海传》免费看全集网站| 大叔的爱泰剧一共多少集| 林心如夏雨荷| 莫莉3特别的酒店免费| 笑过2012| 做我的主人第一季免费看| 木浦黑帮天堂| (已屏蔽)| 爱上特种兵免费观看| 生活大爆炸第十季| 亲爱的妈妈3在线韩国免费观看| overflower高清无马| 对学生会长的忠告未增删| 魔鬼女集中营| 以家人之名在线| 上门推销避孕套当场试免费板| 罗刹海市歌完整版| 《公的浮之手中字》免费| 劳荣枝庭审直播| 在线观看瓜达卢佩的玫瑰| 暗夜雄狮电影| 迎风的青春电视剧免费观看全集 | 男按摩师性爱电影| ayy4电影| 创业电影| 和喜玉兰免费观看全集播放| 我要再来一次| 好妈妈5国语在线观看| 误判粤语抢先版在线观看| 三年大全国语在线观看| 真相电视剧在线观看完整版| 黑镜第五季| 《轮到你了妹妹》韩剧| 《花与蛇·牙医》| 中国星力量第二期| 《迷案奇踪》电影| 绅士的品格 手机| 年轻保险销售员2| 桃色三国| 飞天小女警z中文版全集| 花街狂奔电影| 我学生的妈妈5字| 和前男友一起出差电影免费在线观看| 大漠枪神全集免费观看完整版| 如果我不曾见过太阳第二季 | 徐若瑄 av| 憧憬成为魔法少女第二季| 激战丛林电影完整版在线播放 | 《鬼咬鬼》高清国语版| 哈里波特7| 德兴市| 韩剧美容院特殊待遇| 人世间原唱| 九龙城寨电影| 淫媒传奇| 凯登大战黑人| 那曲在线| 怀来至北京跨省公交停运|