SDIO wifi Marvell8801/Marvell88w8801 介紹(二) ---- SDIO協議介紹

原創 專注于無線通信的蓬勃 2020-01-11 16:02

代碼工程的GITHUB連接:
https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi





Marvell自己實現驅動系列文章分為幾篇介紹:



















每篇更新打開專欄可以看到

在介紹SDIO協議之前,我們來看下Wi-Fi市面上的種類

1. WI-FI接口介紹

市面上大致有這幾種Wi-FI,其中優缺點也是我個人簡介,大家一看就好,至于有不同意見,可以交流
1)UART WIFI,以ESP8266為代表,主要實現方式是芯片內集成了wifi driver tcp/ip protocol rtos memory IC等等,讓你可以直接AT命令控制芯片
優點:使用便利,開發者不需要懂WIFI driver,TCP/IP protocol,RTOS的概念
缺點:功能受限,可定制化比較低,需要外掛一個MCU
另外,ESP8266也分為AT板和SDK板,SDK也可以克服以上缺點,但是我沒有使用過SDK,所以不能胡說錯誤的引導你們
2)SDIO WIFI
3)USB WIFI
其中SDIO和USB市面上就比較多了,大部分的Wifi芯片都是以上兩種接口,Marvell88w8801支持USB2.0和SDIO2.0 ,USB wifi大家看名字應該就能想象到時什么東西,就是類似于一個USB dongle,下圖模樣
在這里插入圖片描述
SDIO WIFI我們后續會介紹,所以大家不要急
4)PCIE WIFI如圖
在這里插入圖片描述
5)OPENWRT WIFI
由于我沒有做過這個,所以不做評論

2. SDIO協議介紹

做一個簡短性的話語總結,SDIO有分為FUNC的概念,你可以把FUNC比作功能區,FUNC0是每個SDIO card必須實現的,FUNC1~7是可選存在的,一般的WIFI card會實現FUNC1,在每個FUNC中又會有寄存器的概念,FUNC0中的寄存器地址是SDIO協議規定,FUNC1~FUNC7中的寄存器地址是vendor(芯片廠商)去實現的,所以要訪問一個地址的數據,首先要告知FUNC,然后再告知register address,整個大背景在這,好啦,SDIO講解到此為止~哈哈,玩笑啦,帶著這些去讀下面的內容吧,會讓你更容易理解

2.1 SDIO硬件接口介紹

SDIO設備的硬件操作接口有3種方式:
A、 SPI mode;
B、 SD 1-bit mode;
C、 SD 4-bit mode;
這3種方式的硬件接口及管腳定義如下面圖、表:
在這里插入圖片描述
圖1 SDIO硬件接口(連接了2組sdio設備)
在這里插入圖片描述
表1 SDIO各種模式管腳對應關系
本文不對SPI mode的相關內容介紹,有關SPI mode的內容不做過多說明。

2.2 SDIO 概念介紹

2.2.1 Common I/O Area (CIA)
The Common I/O Area (CIA) shall be implemented on all SDIO cards. The CIA is accessed by the host via I/O reads and writes to function 0. The registers within the CIA are provided to enable/disable the operation of the I/O function(s), control the generation of interrupts and optionally load software to support the I/O
functions. The registers in the CIA also provide information about the function(s) abilities and requirements. There are three distinct register structures supported within the CIA. They are:
1) Card Common Control Registers (CCCR)
2)Function Basic Registers (FBR)
3)Card Information Structure (CIS)
如圖所示,就是FUNC0的CIA
在這里插入圖片描述
下面我們來一一介紹CCCR,FBR,CIS
Card Common Control Registers (CCCR):CCCR說白了就是FUNC0的一些寄存器,地址和功能如下,另外,如果把所有的都列出內容實在太多,在這里只是列舉一些重要的,如果想獲取所有的功能,請自行參考SDIO協議:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
2.2.2 Function Basic Registers (FBR)
In addition to the CCCR, each supported I/O function has a 256-byte area used to allow the host to quickly determine the abilities and requirements of each function, enable power selection for each function and to enable software loading. The address of this area is from 00n00h to 00nFFh where n is the function number (1 to 7). This per-function area is structured as follows:
在這里插入圖片描述
2.2.3 Card Information Structure (CIS)
The Card Information Structure provides more complete information about the card and the individual functions. The CIS is the common area to read information about all I/O functions that exist in a card. The design is based on the PC Card16 design standardized by PCMCIA. All cards that support I/O shall have a common CIS and a CIS for each function. The CIS is accessed by reads to a fixed area as shown in Table 6-5 This one area serves the card as a Common CIS and also as the storage area for each function. The common area and each function have a pointer to the start of its CIS within this memory space.
在這里插入圖片描述
另外,CIS是tuple實行存在的,所以如果讀出來需要自己解析,在后面小節會抽出一章節講解tuple.
2.2.4 SDIO 命令/相應介紹
SDIO spec中有提到幾點SDIO card必須要實現的以及可選要實現的命令,如下
在這里插入圖片描述
必須要實現的有:CMD0,CMD3,CMD5,CMD7,CMD15,CMD52,CMD53
可選實現的有:CMD8,CMD11,CMD15
Marvell88w8801的datasheet上也有說這顆芯片支持的CMD,算是把強制需要support的都做了,選擇支持的一個沒做,哈哈
在這里插入圖片描述
但是我們一般用到的有CMD0,CMD3,CMD5,CMD7,CMD52,CMD53,所以以這幾個命令來做簡短說明
1)CMD0:用于從SDIO mode切換到SPI mode
2)CMD3:詢問相對可用地址,response是R6
在這里插入圖片描述
代碼如下:


/******************************************************************************
 *	函數名:	hw_sdio_cmd3
 * 參數:  	para(IN)		-->發送cmd3的參數
 			resp			-->cmd3的返回值
 * 返回值: 	返回執行結果
 * 描述:	發送cmd3
******************************************************************************/
static uint8_t hw_sdio_cmd3(uint32_t para,uint32_t *resp)
{
    uint8_t error_status;
    uint32_t response;
    SDIO_CmdInitTypeDef SDIO_CmdInitStructure;

    SDIO_CmdInitStructure.SDIO_Argument = para;
    SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_CMD3;
    SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
    SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
    SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
    SDIO_SendCommand(&SDIO_CmdInitStructure);

    /* 等待發送完成 */
    while (SDIO_GetFlagStatus(SDIO_FLAG_CMDACT) == SET);
    error_status = hw_sdio_check_err();

    if (HW_ERR_OK != error_status)
    {
        return error_status;
    }

    /* 獲取到response的結果 */
    response = SDIO_GetResponse(SDIO_RESP1);
    if (resp)
    {
        *resp = response;
    }

    return (error_status);
}

R6的格式格式為,只有紅框內的數據才是軟件可以獲取的,其他的都是交于硬件去搞定
在這里插入圖片描述
Bit 0~15是card status,如下圖
在這里插入圖片描述
Bit 16~31就是我們獲取的相對地址,需要軟件解析出來,搭配CMD7來使用
解析代碼如下:


/******************************************************************************
 *	函數名:	hw_sdio_parse_r6
 * 參數:  	r6(IN)			-->R6的入參
 			rca(OUT)		-->rca的返回值
 * 返回值: 	返回執行結果
 * 描述:	解析R6的response
******************************************************************************/
static uint8_t hw_sdio_parse_r6(uint32_t r6,uint32_t *rca)
{
    HW_ENTER();
    if(rca)
    {
        *rca = RCA_IN_R6(r6);
        HW_LEAVE();
        return HW_ERR_OK;
    }
    HW_LEAVE();
    return HW_ERR_SDIO_INVALID_PARA;
}

3)CMD5, It is used to inquire about the voltage range needed by the I/O card.命令格式如下
在這里插入圖片描述
Stuff Bits: Not used, shall be set to 0.
S18R: Switching to 1.8V Request
I/O OCR: Operation Conditions Register. The supported minimum and maximum values for VDD. The layout of the OCR is shown in Table 3-1. Refer to Section 4.10.1 for additional information
OCR如下圖
在這里插入圖片描述
CMD5的response如下圖:
在這里插入圖片描述
C: Set to 1 if Card is ready to operate after initialization
Number of I/O Functions: Indicates the total number ofI/O functions supported by this card. The range is 0-7. Note that the common area present on all I/O cards at Function 0 is not included in this count. The I/O functions shall be implemented sequentially beginning at function 1.
Memory Present: Set to 1 if the card also containsSD memory. Set to 0 if the card is I/O only.
S18A: Switching to 1.8V Accepted (Supported in SD mode only)
I/O OCR: Operation Conditions Register.
代碼如下:


/******************************************************************************
 *	函數名:	hw_sdio_cmd5
 * 參數:  	para(IN)			-->入參
 			resp(OUT)			-->返回值
 			retry_max(IN)		-->最大嘗試次數
 * 返回值: 	返回執行結果
 * 描述:	發送cmd5
******************************************************************************/
static uint8_t hw_sdio_cmd5(uint32_t para,uint32_t *resp,uint32_t retry_max)
{
    uint32_t index;
    uint32_t response;
    uint8_t error_status;
    SDIO_CmdInitTypeDef SDIO_CmdInitStructure;

    HW_ENTER();
    SDIO_CmdInitStructure.SDIO_Argument = para;
    SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_CMD5 ;
    SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
    SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
    SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
    for (index = 0; index < retry_max; index  )
    {
        SDIO_SendCommand(&SDIO_CmdInitStructure);
        /* 等待發送完成 */
        while (SDIO_GetFlagStatus(SDIO_FLAG_CMDACT) == SET);
        error_status = hw_sdio_check_err();

        if (HW_ERR_OK != error_status)
        {
            continue;
        }
        response = SDIO_GetResponse(SDIO_RESP1);

        /* 判斷是否OK */
        if(C_IN_R4(response))
        {
            if (resp)
            {
                *resp = response;
            }
            break;
        }
    }

    HW_LEAVE();
    return error_status;
}

4)CMD7
在這里插入圖片描述
代碼如下:



/******************************************************************************
 *	函數名:	hw_sdio_cmd7
 * 參數:  	para(IN)			-->入參
 			resp(OUT)			-->返回值
 * 返回值: 	返回執行結果
 * 描述:	發送cmd7
******************************************************************************/
static uint8_t hw_sdio_cmd7(uint32_t para,uint32_t *resp)
{
    uint8_t error_status;
    uint32_t response;
    SDIO_CmdInitTypeDef SDIO_CmdInitStructure;

    HW_ENTER();
    /* Send CMD7 SDIO_SEL_DESEL_CARD */
    SDIO_CmdInitStructure.SDIO_Argument = para;
    SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_CMD7;
    SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
    SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
    SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;
    SDIO_SendCommand(&SDIO_CmdInitStructure);

    /* 等待發送完成 */
    while (SDIO_GetFlagStatus(SDIO_FLAG_CMDACT) == SET);
    error_status = hw_sdio_check_err();

    if (HW_ERR_OK != error_status)
    {
        return error_status;
    }
    /* 獲取返回結果 */
    response = SDIO_GetResponse(SDIO_RESP1);
    if (resp)
    {
        *resp = response;
    }

    HW_ENTER();
    return (error_status);
}

5)CMD52:CMD52是一個使用頻率很高的CMD,主要是用于讀寫SDIO的寄存器的命令
The IO_RW_DIRECT is the simplest means to access a single register within the total 128K of register space in any I/O function, including the common I/O area (CIA). This command reads or writes 1 byte using only 1 command/response pair. A common use is to initialize registers or monitor status values for I/O functions. This command isthe fastest means to read or write single I/O registers, as it requires only a single command/response pair.
命令格式如下,紅框內飾軟件需要實現的東西,其他的交給硬件:
在這里插入圖片描述
R/W Flag: This bit determines the direction of the I/O operation. If this bit is 0, this command
shall read data from the SDIO card at the address specified by the Function Number and the Register Address to the host. The data byte is returned in the response, R5. If this bit is set to 1, the command shall write the bytes in the Write Data field to the I/O location addressed by the Function Number and the Register Address. If the RAW flag is 0, then the data inthe register that was written shall be read and that value returned in the response.
RAW Flag: The Read after Write flag. If this bit isset to 1 and the R/W flag is set to 1, then the
command shall read the value of the register after the write. This is useful to allow writing to a control register and reading the status at the same address. If this bit is cleared, the value returned in the R5 response shall be the same as the write data in the command. If this bit is set, the data field of the R5 response shall contain the value read from the addressed register after the write operation.
Function Number: The number of the function within the I/O card you wish to read or write. Note that function 0 selects the common I/O area (CIA).
Register Address: This is the address of the byte ofdata inside of the selected function to read or write. There are 17 bits of address available so the register is located within the first 128K
(131,072) addresses of that function.
Write Data/Stuff Bits: For a direct write command (R/W=1),this is the byte that iswritten to the selected address. For a direct read (R/W=0), this field is not used and shall be set to 0
響應類型:
在這里插入圖片描述
Stuff Bits Not used, shall be set to 0
Response Flags 8 Bits of flag data indicating the status of the SDIO card. Table 5-1 shows the format of these flag bits.
Read or Write Data: For an I/O write (R/W=1) with the RAW Flag set (RAW=1) this field shall contain the value read from the addressed register afterthe write of the data contained in the
command. Note that in this case, the read-back data may not be the same as the data written to the register, depending on the design of the hardware. For an I/O write with the RAW bit=0, the SDIO function shall notdo a read after write operation, and the data in this field shall be identical to the data byte in the write command. For an I/O read (R/W=0), the actual value read from that I/O location is returned in this field.
代碼如下:

/******************************************************************************
 *	函數名:	hw_sdio_cmd52
 * 參數:  	write(IN)			-->執行操作,read or write
 			func_num(IN)		-->func的編號
 			address(IN)		-->address地址
 			para(IN)			-->要寫的參數
 			resp(OUT)			-->讀要返回的數據
 * 返回值: 	返回執行結果
 * 描述:	執行CMD52的動作
******************************************************************************/
uint8_t hw_sdio_cmd52(uint8_t write,uint8_t func_num,uint32_t address,uint8_t para,uint8_t *resp)
{
    uint8_t error_status;
    uint8_t response;
    SDIO_CmdInitTypeDef SDIO_CmdInitStructure;

    SDIO_CmdInitStructure.SDIO_Argument = write ? 0x80000000 : 0x00000000;
    SDIO_CmdInitStructure.SDIO_Argument |= func_num << 28;
    SDIO_CmdInitStructure.SDIO_Argument |= (write && resp) ? 0x08000000 : 0x00000000;
    SDIO_CmdInitStructure.SDIO_Argument |= address << 9;
    SDIO_CmdInitStructure.SDIO_Argument |= para;

    SDIO_CmdInitStructure.SDIO_CmdIndex = SDIO_CMD52;
    SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
    SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
    SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;

    SDIO_SendCommand(&SDIO_CmdInitStructure);
    /* 等待發送完成 */
    while (SDIO_GetFlagStatus(SDIO_FLAG_CMDACT) == SET);
    error_status = hw_sdio_check_err();

    if (HW_ERR_OK != error_status)
    {
        return  HW_ERR_SDIO_CMD52_FAIL;
    }

    response = SDIO_GetResponse(SDIO_RESP1) & 0xff;
    if((!write) && resp)
    {
        *resp = response;
    }
    return  HW_ERR_OK;
}

6)CMD53:同樣是一個高頻使用的CMD,主要用于對某一個地址進行多數據寫入或者多數據讀出的CMD,此命令分為兩種模式:block mode和byte mode,block mode必須是寫入或者讀出block size整數倍的數據,byte mode是可以寫入或者讀出任意大小的數據
命令格式:
在這里插入圖片描述
R/W Flag: This bit determines the direction of the I/O operation. If this bit is 0, this command
reads data from the SDIO card at the address specified by the Function Number and the Register Address to the host. The read data shall be returned on the DAT[x] lines. If this bit is set to 1, the command shall write the bytes from the DAT[x] lines to the I/O location addressed by the Function Number and the Register Address.
Function Number: The number of the function within the I/O card you wish to read or write. Note that function 00h selects the common I/O area (CIA).
Block Mode (Optional) this bit, if set to 1, indicates that the read or write operation shall be performed on a block basis, rather than the normal byte basis. If this bit is set, the Byte/Block count value shall contain the number of blocks to be read/written. The block size for functions 1-7 is set by writing the block size to the I/Oblock size register in the FBR (Refer to Table 6-3 and Table 6-4). The block size for function 0 is set by writing to the FN0 Block Size register in the CCCR. Card and hostsupport of the block I/O mode is optional. The host can determine if a card supports block I/O by reading the Card supports MBIO bit (SMB) in the CCCR (Refer to Table 6-2). The block size used when Block Mode = 1 and the maximum byte count per command used when
Block Mode = 0 can be read from the CIS inthe tuple TPLFE_MAX_BLK_SIZE (Refer to Section 16.7.4) on a per-function basis.
OP code Defines the read/write operation as described in Table 5-2
在這里插入圖片描述
? OP Code 0 is used to read or write multiplebytes of data to/from a single I/O register address. This command is useful when I/O data is transferred using a FIFO inside of the I/O card. In this case, multiple bytes of data are transferred to/from a single register address. For this operation, the address of the register is set into the Register Address field. Data is transferred on the DAT[0] orDAT[3:0] lines as defined for SD memory cards.
?OP Code 1 is used to read or write multiple bytes of data to/from an I/O register address that increment by 1 after each operation. This command is used when large amounts of I/O data exist within the I/O card ina RAM like data buffer. In this operation,the start address is loaded into the Register Address field. The first operation occurs at that address within the I/O card. The next operation shall occur at address 1 with the address incrementing by 1 until the operation has completed. As with OP Code 0, the number of bytes is set in the Byte Count field of the command.
Register Address: Start Address of I/O register to read or write. Range is [1FFFFh:0]
Byte/Block Count :If the command is operating on bytes (Block Mode = 0), this field contains the number of bytes to read or write. A value of 000h shall cause 512 bytes to be read or written.
在這里插入圖片描述
If the command is in block mode (Block Mode=1), the Block Count field specifies the number of Data Blocks to be transferred following this command. A value of 000h indicates that the count set to infinite. In this case, the I/O blocks shall be transferred until the operation is aborted by writing to the I/O abort function select bits (ASx) in the CCCR (Refer to Table 6-1 and Table 6-2). Table 5-3 shows the relationship between the value in the command and the actual number of bytes transferred.
代碼如下:

/******************************************************************************
 *	函數名:	hw_sdio_cmd52
 * 參數:  	write(IN)			-->執行操作,read or write
 			func_num(IN)		-->func的編號
 			address(IN)			-->address地址
 			incr_addr(IN)		-->地址是否累加
 			buf(IN/OUT)			-->如果操作是寫,那么此參數就是要write的buffer
 									如果操作是讀,那么此參數就是read返回的buffer
 			size(IN)			-->讀或者寫的size
 * 返回值: 	返回執行結果
 * 描述:	執行CMD53的動作
******************************************************************************/
uint8_t hw_sdio_cmd53(uint8_t write, uint8_t func_num,uint32_t address, uint8_t incr_addr, uint8_t *buf,uint32_t size)
{
    uint16_t func_cur_blk_size;

    if((phw_sdio_core->func)[func_num])
    {
        func_cur_blk_size = (phw_sdio_core->func)[func_num]->cur_blk_size;
        if(func_cur_blk_size == 0)
        {
            return HW_ERR_SDIO_BLK_SIZE_ZERO;
        }
    }
    else
    {
        return HW_ERR_SDIO_INVALID_FUNC_NUM;
    }

    if(write)
    {
        /* CMD53 write */
        hw_sdio_cmd53_write(func_num,address,incr_addr,buf,size,func_cur_blk_size);
    }
    else
    {
        /* CMD53 read */
        hw_sdio_cmd53_read(func_num,address,incr_addr,buf,size,func_cur_blk_size);
    }

    return  HW_ERR_OK;
}

2.2.5 SDIO init介紹
關于SDIO init流程,我們先以一個圖示介紹,由于此圖示是結合SD memroy card一起的,所以我們在圖中以箭頭表示流程,如圖所示:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
其中有一些術語如圖所示:
在這里插入圖片描述
大概過程如下:
1)發送CMD5沒有參數,主要用于獲取OCR的范圍
2)FUNC的數目和OCR如果合法那么就重新發送CMD5,帶著OCR的參數
3)得到RESPONSE后,查看MP的filed,正常來說SDIO MP應該為0,所以走B case
4)B case下IO為1,并且S18為0,所以直接走CMD3,然后是IO=1,MEM=0,也就是SDIO整個初始化完畢,但是SDIO還有一些其他選項需要做,比如選擇SDIO設備,讀取一些CCCR的信息,切換SDIO bus width,提高SDIO CLK,解析CIS,設置BLOCK size之類的,下面我貼出我在STM32寫的代碼,僅供參考流程,這部分也在我的GITHUB能找到


/******************************************************************************
 *	函數名:	hw_sdio_init
 * 參數:  		NULL
 * 返回值: 	返回執行結果
 * 描述:		SDIO init
 				pin腳分配
 				PC8->SDIO D0 PC9->SDIO D1 PC10->SDIO D2 PC11->SDIO D3
 				PC12->SDIO CLK
 				PD2->SDIO CMD
******************************************************************************/
uint8_t hw_sdio_init()
{
    uint32_t rca;
    uint8_t func_index;
    uint32_t cmd3_para;
    uint32_t cmd3_resp;
    uint32_t cmd5_para;
    uint32_t cmd5_resp;
    uint32_t cmd7_para;
    uint32_t cmd7_resp;

    GPIO_InitTypeDef GPIO_InitStructure;
    SDIO_InitTypeDef SDIO_InitStructure;
    //NVIC_InitTypeDef NVIC_InitStructure;

    HW_ENTER();
    hw_chip_reset();
    hw_sdio_core_init();
    /* 使能GPIO C/D的RCC時鐘 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
    /* 使能SDIO RCC時鐘*/
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);
    /* 使能DMA2時鐘,SDIO的DMA在DMA2 CHANNEL 4 */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

    /* 設置推挽復用 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    /* SDIO初始化,CLK:400KHZ,數據寬度:1 bus */
    SDIO_DeInit();
    /* HCLK = 72MHz, SDIOCLK = 72MHz, SDIO_CK = HCLK/(178   2) = 400 KHz */
    SDIO_InitStructure.SDIO_ClockDiv = SDIO_CLK_400KHZ;
    SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising ;
    SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
    SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
    SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
    SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
    //SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Enable;
    SDIO_Init(&SDIO_InitStructure);

    /* 設置為SDIO I/O模式 */
    SDIO_SetSDIOOperation(ENABLE);
    /* Set Power State to ON */
    SDIO_SetPowerState(SDIO_PowerState_ON);
    /* Enable SDIO Clock */
    SDIO_ClockCmd(ENABLE);

    /* 設置SDIO中斷,搶占優先級為3,相應優先級為4 */
#if 0
    NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = WIFI_PREE_PRIO;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = WIFI_SUB_PRIO;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    SDIO_ITConfig(SDIO_IT_CCRCFAIL |SDIO_IT_DCRCFAIL | SDIO_IT_CTIMEOUT |\
                  SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR |SDIO_IT_RXOVERR | \
                  SDIO_IT_STBITERR|SDIO_IT_SDIOIT, ENABLE);
#endif
    /* 開啟SDIO的DMA,此位置尤其重要,如果在CMD53中每次開啟,那么會DMA lock住 */
    SDIO_DMACmd(ENABLE);

    /* 發送cmd5 */
    cmd5_para = 0;
    if(hw_sdio_cmd5(cmd5_para,&cmd5_resp,SDIO_RETRY_MAX))
    {
        HW_LEAVE();
        return HW_ERR_SDIO_CMD5_FAIL;
    }

    /* ocr 3.2V~3.4V*/
    cmd5_para = 0x300000;
    if(hw_sdio_cmd5(cmd5_para,&cmd5_resp,SDIO_RETRY_MAX))
    {
        HW_LEAVE();
        return HW_ERR_SDIO_CMD5_FAIL;
    }

    /* 解析R4 */
    hw_sdio_parse_r4(cmd5_resp);

    /* 發送cmd3獲取地址 */
    cmd3_para = 0;
    if(hw_sdio_cmd3(cmd3_para,&cmd3_resp))
    {
        HW_LEAVE();
        return HW_ERR_SDIO_CMD3_FAIL;
    }

    hw_sdio_parse_r6(cmd3_resp,&rca);

    /* 發送cmd7選地址 */
    cmd7_para = rca << 16;
    if(hw_sdio_cmd7(cmd7_para,&cmd7_resp))
    {
        HW_LEAVE();
        return HW_ERR_SDIO_CMD7_FAIL;
    }

    /* 獲取CCCR版本和SDIO版本 */
    hw_sdio_get_cccr_version(&phw_sdio_core->cccr_version);
    hw_sdio_get_sdio_version(&phw_sdio_core->sdio_version);

    /* 切換到4 bus width,切換24M clk */
    hw_sdio_set_bus_width(SDIO_BUS_WIDTH_4);
    SDIO_InitStructure.SDIO_ClockDiv = SDIO_CLK_24MHZ;
    SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_4b;
    SDIO_Init(&SDIO_InitStructure);


    /* 讀取每個func的CIS指針并且解析 */
    for(func_index = 0; func_index < phw_sdio_core-> func_total_num; func_index  )
    {
        uint32_t cis_ptr;
        hw_sdio_get_cis_ptr(func_index,&cis_ptr);
        hw_sdio_cis_read_parse(func_index,cis_ptr);
    }

    /* enable Func */
    for(func_index = SDIO_FUNC_1; func_index < phw_sdio_core-> func_total_num; func_index  )
    {
        hw_sdio_enable_func(func_index);
    }

    /* 使能中斷 */
    hw_sdio_enable_mgr_int();
    for(func_index = SDIO_FUNC_1; func_index < phw_sdio_core-> func_total_num; func_index  )
    {
        hw_sdio_enable_func_int(func_index);
    }

    /* 設置block size */
    for(func_index = SDIO_FUNC_1; func_index < phw_sdio_core-> func_total_num; func_index  )
    {
        hw_sdio_set_blk_size(func_index,SDIO_DEFAULT_BLK_SIZE);
    }
    HW_LEAVE();

    return HW_ERR_OK;
}

2.2.6 SDIO tuple介紹

在上面小節中有說到讀取的CIS是tuple chain,我們先來看下tuple的格式
在這里插入圖片描述
1個byte的TPL_CODE,類似于ID
1個byte的LEN
不定長的tuple body,但是不超過255

Tuple code list如下圖
在這里插入圖片描述
我們還是只拿一個制造商tuple code來說明下,讓你們大概知道tuple code是什么就足夠了吧
在這里插入圖片描述

專注于無線通信的蓬勃 朝氣蓬勃——不積跬步 無以至千里, 不積小流 無以成江海
評論
  • 導語在現代高速數字電路設計中,信號的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實踐。濾波器芯片作為凈化傳輸鏈路的關鍵屏障,其核心挑戰在于:能否有效識別并濾除那些隱匿在電平跳變過程中的亞納秒級瞬態脈沖干擾,這類干擾持續極短,卻足以在高速鏈路中引發誤觸發。然而,傳統函數發生器受限于采樣率與邊沿速率,根本無法忠實復現如此狹窄且陡峭的異常波形。針對此困境,德思特TS-AWG7000系列任意波形發生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態脈沖提供精細刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  • 產品使用18V供電,配套4串鋰離子電池,需要設計一個充電器。因為輸入18V,電池最高 16.8V,壓差僅 1.2V。因為壓差太小。使用開關型的充電控制芯片不穩定。嘗試自行設計一個。整體采用分立三極管 + TL431架構,分4個功能單元:使能控制回路、限流環路、TL431 精密恒壓反饋環路、PNP 功率管主功率輸出回路;實現完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經 R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導通,對地拉低 R1、R2 組成的分壓控制節點電位;該節點直
    southcreek 2026-08-07 13:45 345瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩定起振的成品,要經過十幾道精密工序。它內部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個生產過程里哪怕0.1微米的誤差,都會直接廢掉整批產品,這也是小尺寸晶振過去長期依賴進口,國內廠商花了十幾年才啃下量產硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 387瀏覽
  • 在前六期中,我們已經分別討論了 CRA 的適用范圍、整體影響、漏洞通報義務、風險評估與技術文檔證據鏈、第三方組件與 SBOM 供應鏈治理,以及產品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業已經能夠回答幾個核心問題:產品是否落入 CRA 適用范圍,產品由哪些組件構成,企業如何證明自己在設計、開發和上市前采取了必要的安全措施,以及產品上市后如何持續維護和安全下線。但對于真正準備落地 CRA 合規的企業來說,還有一個更現實的問題:CRA 的法規條文相對原則化,企業應當如何把“網絡安
    虹科云科技 2026-08-03 16:51 169025瀏覽
  • 做藍牙音箱的工程師大概都碰過這個局面。產品要連手機放歌,要本地播開機提示音和按鍵音,還要接 App 做配網和狀態上報。三件事拆開,早先的常規做法是音頻藍牙一顆料、數傳藍牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍牙、BLE 數傳和 MP3 本地播放三樣全包了。對藍牙音箱來說,最實在的好處就
    唯創知音語音芯片 2026-08-06 15:14 293瀏覽
  • 文:杜杰編輯:侯煜當地時間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯邦通信委員會(FCC)正式更新《受管制清單》,新增兩大類設備——境外生產的先進機器人設備、境外生產的聯網電力逆變器。FCC在官方情況說明書中明確,該類境外制造產品,“會對美國國家安全或美國民眾的人身安全構成無法承受的風險”。本次新規設置明確豁免機制:經美國國防部(DoW)、電力逆變器品類經美國國土安全部(DHS)審核并授予“有條件批準”,認定對應設備品類不存在重大安全風險,即可獲得準入豁免。同時政策嚴格執行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 331瀏覽
  • 在物聯網從“萬物互聯”邁向“萬物智聯”的進程中,LTE Cat.1憑借其在速率、成本與網絡覆蓋之間的完美平衡,正成為中低速物聯網市場的絕對主力。隨著2G/3G網絡的逐步退網以及新國標對終端設備智能化、定位功能的強制要求,Cat.1模組迎來了爆發式的增長窗口。在這一關鍵節點,基于華為海思Hi2131芯片設計的LTE Cat.1模組,憑借其在能效、射頻、架構及物理規格上的底層創新,成功打破了“高性能必高功耗”的傳統魔咒,為行業提供了極具競爭力的連接最優解。核心技術優勢:重塑Cat.1能效與連接標桿海
    用戶1778981989717 2026-08-05 21:04 177瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統號卡的不確定性,隨身WiFi憑借穩定連接、多設備共享、獨立設備和靈活套餐等優勢,成為務實可靠的備選方案。1、流量卡黃金時代要結束了通信行業正迎來一場前所未有的“地震式”調整——曾讓無數用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設計 2026-08-03 10:21 128885瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 119963瀏覽
  • 摘要在防爆電氣設計中,只參照芯數選型而忽略額定載流量,長期滿負荷運行會出現插頭發熱、接觸面氧化、IP67 密封受熱老化等問題。結合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數對照表,區分冷壓免焊接、焊接兩種接線結構的安全載流數值,設置合理電流冗余系數,搭配使用環境修正參數,規范防爆接近開關連接器、防爆法蘭插座的選型計算方式。關鍵詞圓形防爆連接器,載流參數表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產品概述圓形防爆連接器觸點載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128645瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 西安地铁保安女子完整版| 电影斗牛剧情| 韩剧爱情中毒| 锵锵锵锵锵锵锵免费看完整版| 哪里可以看天与地| 秋瓷炫《生死决断》播放 | 快乐星球第五部| 修理工调教老板娘电影| 《猎罪图鉴》1| 临时劫案电影免费完整在线观看| 法国《荣誉守则》免费观看| 功夫小子金米| 一起同过窗第三季| 家族的诞生| 金银梅5普通话在线观看国语版免费| 美景之屋2中国版电视剧 | 年轻的保险推销员| 神秘马戏团在线观看免费高清中文| 哪吒2之魔童闹海| 法国女仆满天星美版结局| 《萌萌妈妈》动漫第3集| 街拍美臀| 烟花巷里禁忌之恋| 50岁阿姨观看电视剧日本| 中央财办:经济已挺过最困难时刻 间之契在线观看完整免费版动漫 霜花店 完整版优酷 | 高清阿尔法未删减| 顶楼韩剧| 抗日奇侠演员表| 原始武器 国语| 北越暴行女民兵1-3集全| 生存游戏在线观看完整版免费| 《逍遥》电视剧| 《家庭矛盾4》麦乐迪观看| 恶作剧之吻韩版网络版| 冰糖炖雪梨在线观看免费| 妻子8在线观看高清电视剧| 反黑粤语在线观看| 变形金刚1高清在线观看| 台湾版红楼梦| 金银梅1-5美国普通话| 歌曲披着羊皮的狼| 美国禁忌3结局| 《主播女孩重度依赖》| 爱我几何电影在线观看免费完整版 在线播放 | 在线播放丈夫被继子强暴,阴道紧绷的益女。住在高级住宅区的33岁人妻。每次被 | 边境大逃亡完整版免费观看| 黎明的强奸者在线播放| 人民的名义dvd版| 强奸2电影| 偏偏不喜欢电影在线观看| 某小说家的日记未删减| 电视剧亲情保卫战| 青苹果 电影| 我的娜塔莎下载 | 主播夏娃| 泰山与珍妮HD未删减| 战狼6欧美版免费观看完整版国语下载 | 梦里水乡mtv| 女子护卫队电影在线观看| 战国basara石田三成| 妈妈的职业5免费观看完整版| 堂吉诃德动画片| 满分追爱公式| 琉璃全集| 婚前协议电视剧| 青涩体现意大利| 倾城之恋读后感| 电影荣誉守则| 林丹装路人打球| PPPD-258在线| 战略大作战| 贤妻在线观看| 逆袭传奇:绝世弃少全集免费| 时尚王 电视剧| 皇后驾到短剧| 鸭王2迅雷下载| 末日逃生2电影在线观看| 娜妲莉的情人| 南阳市| 四个少夫按摩精油伦理片| 韩国理论电影| 电视剧淬火年代全集免费观看| 莱利里德黑白配在线观看高清 | 兽性新人类2| 偷窥无罪2诱人犯罪| 善良的妈妈| 国语鬼片电影| 伍六七之记忆碎片动漫| 秦雪梅哭灵| 大宋传奇赵匡胤电视剧| xl司令第一季无马赛免费观看高清在线看| 星际传奇3高清| 嘎嘎影院电影在线观看高清| 亲密在线观看| 水润女人申胜业刘志贤主演角色介绍| 双枪李向阳| 《飞机上特殊服务5》电影| 鸡宝厨房| 美国禁忌3中文| 蝴蝶效应1| 人猿泰山1995版电影简介| 忘年之恋美国电影| 电影女囚| 准备好纸巾的舞蹈| 我的左手电影| 秘密列车第8集在线观看| 新九品芝麻官粤语| 小时代1电影在线观看| 电视剧我的特一营| 一天三次的岳和女胥HD| 老严有女不愁嫁片尾曲| 女儿国满天星美国| 海底小纵队中国之旅| 电影营销技巧未删减巴西| 长乐曲在线观看| 私人助理2法国版电影免费看 | 电视剧旋转的爱| 豫剧包青天| 侏罗纪世界3免费观看完整版 | 斗鱼静宝宝| 美丽小蜜蜂10姐姐叫| 雪在烧电视剧| 年经保姆年经3| 大侦探福尔摩斯| 难哄第21集免费观看| 非诚勿扰 2| 身份互换:我才是真豪门全集免费 | 《你是男的我也爱》| 《家庭矛盾》麦乐迪| 流水迢迢在线观看| 三姐妹瑜伽健身4| 电车痴汉小说| 麦乐迪满天星HD版| 厨艺大师第三季| 冢本在线播放| 狙击手电影免费观看完整版| 《性的暴行》1在线观看| 变异巨蟒在线播放| 金银梅日本| 任达华的三级| 三位大学位按摩记| 电视剧悬崖全集| 有些路不走不甘心走了满身伤痕| 逃跑新郎| 甜蜜惩罚13| 天狼星行动在线观看| 我主沉浮在线观看| 净水器换滤芯方法| 新施公案优酷有全集| 孤单的儿媳免费观看全集| 啄木鸟灭火行动| 日本电影乳房按摩在线看| 依海风情| 意大利电影此时此刻| 插曲的痛免费高清完整版| 鹿鼎记陈小春版演员表| 朝国继6| 善良的姐夫| 韩剧美容院特殊待遇| 韩剧松药店的儿子们| 女超人麦乐迪无删减版迅雷| 玉蒲团之愉情宝鉴在线观看| 逆局全24集在线播放| 天罡传免费观看全集高清| 我要当空姐 电视剧| 变形记阳光的背后| 欢喜冤家电视剧在线观看免费| 《孽欲追击档案之邪杀》| 陆小凤传奇之海兰花| 鬼吹灯全部电影免费看| 潜艇总动员| 笨贼妙探国语| 周香允在线观看| 高清《她唇之下》电影| 动画片喜羊羊与灰太狼免费观看| 希特勒回来了| 《有翡》全集在线观看| 人间空间时间与人| 好女孩电影| 女婿有劲枪枪到底岳峰扮演者| 判我更幸福| 密室大逃脱第二季| 成熟玫瑰| 卫青不败由天幸| 嘎哇在线观看高清电影免费| 思春期1~4集动漫无删减| 丁巴度电影在线看| 《快乐到死》电影| 我的不良义姐动漫第2集免费| 正宗泡菜制作方法教程| 黑白配HD中文版在线观看| 男子火车上拒换座被辱骂| 我要爸爸播种子电影观看完整版| 电视剧温柔的背后在线观看| 女大学生按摩3| 斗破苍穹在线观看全集免费播放| 《拳击手2满天星版》| 小岳母韩国电影| 公的浮之手中字在线观看| 剿匪英雄 电视剧| 伦理《法国空乘4观看 | 唐宫美人天下杨幂| 电视剧卧底归来| 东北抗联电视剧| 死囚大逃杀| 笼中女囚电影完整版| 《朋友的妻子》在线观看| 角斗英雄| 国庆60周年晚会高清| 斗罗大陆2绝世唐门完整免费观看 哈利波特与凤凰社在线观看 | 罪恶王冠my dearest| 天海翼视频在线| 三年高清在线观看免费大全韩剧| 误入军统的女人优酷| 丘比特的圈套全集| 刀剑神域小说全集| 电视剧小娘惹全集观看| 农民伯伯下乡记| 女老师3免费观看全集电视剧| 美国娃娃脸4(经典版)在线观看| 血滴子电影下载| 战狼6免费观看高清完整版| 万湖会议电影| 法国空乘2017完整版| 海上嫁女记剧情| 《需要爸爸播种美国》演员全集| 《哪吒1》免费观看完整版| 千金赤子板栗| 回复术士的重来人生在线观看免费| 星际传奇2| 和尚的一场梦电影速度看高清| 特利迦奥特曼第一集免费看| 康熙王朝50集全免费播放| 五福星电影| 电车魔女2| 比特铃手机diy大师| 秀才爱上兵剧情| 白雪公主美国版电影| 当我飞奔向你免费看全片| 浴火重生西路军| 长津湖在线观看免费| 再唱山歌给党听 索朗旺姆| 播播开心| 斩服少女完整版在线观看| 房奴试爱电视剧第一集开头 | 傻哥蹦迪| 木下檀檩子在线| 海扁王2百度影音| 禁忌结局-9| 宝贝计划电视剧| 暴躁少女在线观看免费版英文| 纳粹狂魔中文免费观看全集| 最强反套路系统动漫第二季| 葫芦兄弟动画片| 落地镜play| 高清《尸城》| 机器人总动员全集| 二十一天电视剧| 湘北小成| 《女的心愿》台湾原版| 我在精神病院学斩神动漫| 正在播放: JUL-945 在没有丈夫的平日里,我被打工归来的无与伦比的岳父强奸, | 大地资源高清在线视频播放免费版| 朝国的继4| 六年级毕业考试分数| 金银悔5—10| 屠宰森林| 塔日酒店在线观看完整免费高清版| 功夫小子金米| 啄木鸟:女版《壮志凌云》百度网盘| 最高通缉犯电影| 法国空乘5免费高清原声满天星美版百度| 泽塔奥特曼第一集| 花月佳期| 神秘缔造者| 法国空乘法版免费看| 重生八零:媳妇有点辣全集免费| 墨西哥10.5级地震| 国产在线观看免费全集电视剧大全| 冯德伦太极| 夜蒲在线观看| 电视剧夫妻密码| 人马配速60分钟视频教程大全 | 黑色的眼泪麻生香织| 体感预报| 牙医姐妹86日版免费看| 电视剧红玫瑰黑玫瑰| 宁德市| 草莓100| 隐龙老爸风华绝代短剧免费观看| 千山暮雪在线观看| 白丝学生羞涩被弄喘不停视频| 拳击手在线观看| 电影《厨房激战2》在线播放| 2010《暮光同城》双男主| 银魂188| 日本维修工艳遇24小时视频| 巡回检察组43| 《义子侵犯》完整版| 电视剧保姆与保安| 仁心解码2粤语24| 老阿姨在线观看免费版电视剧 | 姑娘我爱你舞蹈| 女子面试后被说漂亮女人不可靠 | 铯妮玛亚洲欧洲夫妻轮换角色| 张学良新传| 闯入17天| 战狼6免费高清版999加拿大版免费观看 | 事物的秘密在线观看| 走着瞧在线观看| 解放电影| 高清心不由己| 小沈阳 不差钱| 免费电影网站在线观看完整版| 白峰正版国语全集下载| 电影婚礼2008| 性按摩电影| 铁证悬案| 愿有人陪你颠沛流离电视剧| 战将电视剧全集| 香蕉先生不睡觉| 日本一卡二卡在线播放| 无颜之月1到5免费动漫| 驯服小峓子未删减版土豪漫画| 寄往电视台的神秘影像未删减| 《法国空乘2018法版》| 洪金宝儿子儿媳被曝双双出轨| 美好的时光电视剧在线播放| 长安如故在线观看| 许我耀眼| abo动画成结模拟免费观看| 最后一刻| 私人航空在线观看免费版完整版| 年轻的嫂2| 牙医姊妹1986电影免费观看| 《机械师6》在线观看高清免费| 19岁电影完整版观看免费全集| 十面埋伏在线观看| 一路向西电影在线观看| 红高粱电视剧迅雷下载| 碟中谍8:最终清算未删减| 爱情睡醒了40| 再见了大别山吕继宏| 特殊游泳教练免费看| 一路向西 主演| 妻子8免费播放在线观看第二季| 变形金刚3国语版| 莫莉特别的酒店免费观看| 一路向西快播观看| 开封王婆回应已婚男事件| 妖精的尾巴175| 金毛犬段景住| 花蝴蝶4大全免费多少集| 火口的两人| 双女任务在线观看免费版完整版| 逍遥法外迅雷下载| 《雪豹》免费观看| 成年以后千万别整牙| 电视剧二婶| 《美丽的秘密》完整版| 禁忌女孩2在线泰剧观看| 蓝色隐形帽在线观看免费高清| 极速恋人中泰剧14集特别篇 | 电锯人第一季在线观看完整版高清| 免费观看完整版| 麦乐迪超人在线观看视频免费| 迦楠大人的白给是恶魔级全集观看| 我的游泳女教练免费观看| 将门嫡女沙场:不输男儿郎短剧全集| 怀玉公主电视剧全集免费| 骑马舞mv| 方子传免费观看| 善良的妈妈中字开头9个字是什么| 紫川电视剧| 男女一起愁愁电视剧免费播放在线观看| 幸福到万家在线观看免费| 秦夫人找你离婚80全集| 想要爸爸| 进口媳妇在线观看免费西瓜| 酒店激战 第1-5集 免费观看李丽珍| 《维修工艳遇》2007| 我是骚包| 流星花园泰剧免费观看| 快播电影在线观| 三年成全主演名单| 超决战!贝利亚银河帝国| 明媒正娶的妻子国语| 灌篮高手电影版2022| 四海漫游| 比尔HR版满天星| 电影《寡妇村》海外版| 毕节市| 高清《天下烘焙》 | 电视剧王贵与安娜| 李连贵熏肉大饼| 电影三人一次性体检| 斗罗大陆2绝世唐门10| xl司令第一季无马赛免费观看,正版| 韩讯五第二部| 我的花样继子| 古惑仔电影| 同志寓言电影| 酒店激2一8集什么时候播放| 新媳妇的美好时代| 美国式忌保罗讳1--4| 少女与动物高清免费观看| 仙剑奇侠传3 电视剧| 云南蔡总 裸体| 名侦探柯南:零的执行人电影| JUL-945三船美铃在线播放| 美丽的夜晚 beast| 社长的秘书在线观看| 她妈妈的公主| 广场舞火火的姑娘云裳| 性迷宫 电影 1999| 眷思量免费观看全集| 《渔夫的荒野史记》免费观看 | 大嫂大嫂电视剧| 3d铺团之极宝乐鉴宝4免费观看| 我在90分钟cut截了一段| 台湾版《荒野渔夫》电影在线观看| 大江大河2部免费观看| 北京青年36| 妈妈需要播种日本电影吗| 无极 预言| 《部长来我家》| 夏范动画| 金梅瓶2 国语在线播放| 黛比| 加利福尼亚山谷女孩们| 血洗金三角| 龙腾四海国语高清| 父母爱情免费观看| 法国私人航空电影在线观看| 邪恶帝国的兴起| 旧里番内衣办公室无删减观看| 降魔的2粤语在线观看| 《欲乱上班族》在线观看| 老婆6免费完整版电视剧| 康熙秘史全集| 离婚女律师| 韩剧《不止暧昧》播放| 肉脯团电影完整版| 外出的目的| 今晚看一下号码| 高三女孩热血发言燃爆全场| 坠落的女律师日剧免费观看| 新金瓶梅2qvod| 日本jizz| 吸血鬼日记第四季14集| 隋唐英雄120集| 一起相愁愁高清免费观看| 战斗王之飓风战魂5| 火速搭档| 美乃雀电影| 迷你世界小王子吖| 高清《在你被判死刑之前》电视剧| 祸福相依| 冰糖炖雪梨在线观看免费| 3对1一次体检4次| 熊出没回家过年| 谢谢你温暖我电视剧在线观看全集| 四十九日祭| 历史永远铭记电视剧| 公之浮手中字40| 聊斋艳谭之幽| 马龙女朋友| 洗手间的秘密2免费看 | 古畑任三郎国语| 宴遇永安 电视剧 在线观看 | 克莱尔《总统之夜》| 校园绝品狂徒全文阅读| 在线观看离婚前规则| 加勒比海盗成人版无删减免费观看| 苹果 范冰冰电影| 《斗罗大陆》高清免费观看完整版| 高圆圆高清免费观看| 高清沧元图 前传:东宁府的夏天 狂飙电视剧全集免费在线观看 | 洛丽塔 电影| 毒医肥尸| 汽车旅馆完整版在线观看中文字幕| 电视剧《小丈夫》免费播放| 朴麦娜28集在线观看视频| 小女花不弃电视剧免费观看全集| 丹东市| 向往的生活第七季综艺| 爱恋2015在线观看完整免费法剧| 《妈妈爱上儿子同学》| 女人不容易电视连续剧| 黎明前的暗战电视剧| 《破外女2》完整版| 建议取消强制自动续费| 骄阳似火| 按摩店的特殊待遇免费观看| 完美世界全集免费| 朝鲜拼音| 恶妻的诱惑| 《黑寡妇》电影| 男生女生一愁愁愁电视剧在线观看30分钟| 天下长河电视剧免费观看| 长相依原唱| 四位少妇按摩记电影| 爱情悠悠药草| 王多鱼打扑克| 年轻的母亲1在线播放| 冰雪尖刀连电视剧免费| 娃嘎电影网免费观看| 踏血寻梅| 长谷川小夏| 暗夜行者免费观看| 男与女在线观看| 爱我几何电视剧免费观看完整版高清| 饭饭电影| 逐玉未删减| 19岁大学生免费观看电视剧 | 街头霸王电影| 表演系的故事| 荣益守则满天星| 先生你哪位| 烟雨蒙蒙| 《法国空乘2| 薛平贵与王宝钏电视剧全集下载 | 律政俏佳人电视剧在线观看免费| 情难自禁 2024 代高政| 金银悔1-5集免费观看| 明日战记电影免费观看完整版| 郑州刚发生的打架的事| 梦幻军事地区满天星1080P| 火舞风云dvd原版| 杜十娘电影| 《漂亮的妈妈9中字开头7个字》| 衢州新闻联播| 列兵大学生| 血恋3在线观看完整免费高清原声满天星奔跑吧 | 行政助理(2014)完整版观看| 喜来乐传奇| 照亮你在线观看| 人袁泰山1995出版意大利免费观看| 梦幻超人动画片| 娘道电视剧免费全集看| 法国空姐4免费在线观看| 斩神之凡尘神域| 《初体验5》完整版| 漂亮妈妈7巴中字开头7个字| 免费观看90分钟高清电视| 中国驻英领馆遭冲闯| 东京奥运会回放| 三年大片大全在线观看免费国语| 电视剧马向阳下乡记| 青春期电影完整版| 按摩店的特殊待遇在线免费观看| 挤痘大师| 33d蜜桃成熟时| 韩国禁欲电影在线免费观看| 最好的我们电视剧免费观看| 聊斋艳谭续集5通神| 菠萝菠萝蜜三级视频| 二胡独奏演奏曲大全| 人心俱乐部电视剧在线观看| 太阳帝国电影免费播放| 快乐舞步| 喜爱夜蒲粤语完整版| 男子被邀进店避雨趁机抱女店员| 英雄百夜全集观看| 河北区| 小巷人家 电视剧 在线观看| 十七岁在线观看高清电视剧 | 哇嘎全部电影高清播放| 蓝胭脂电视剧| 岳志军的案件最终结果| 17·3电影在线观看高清| 停不了的爱 刘德华| 光影在线| 古墓丽影第3季法国满天星| 环太平洋 迅雷| 歌唱吧now| 三年大片在线观看免费观看国语完整版| 盲盒旅行局综艺免费观看完整版| 猎杀行动第一季| 不可撤销电影| 四川孃孃51岁拿下电竞冠军| 四位大学位按摩记电子版pdf百度网盘 | 不能失去你电视剧在线观看| 雷军自曝37岁已财务自由| 日剧维修工的艳遇| 赛尔号大电影全集| 明星的恋人电视剧| 无法无天满天星完整版| 家有弟攻| 梦里水乡mtv| 《女超人满天星版》免费观看| 辣妹刺客2正片完整版在线观看| 0verflower第一季免费观看| 老伴电视剧| 合租男女1v1h| 从林激情| 电影隔壁的女孩| 电视剧私藏浪漫| 女兵酷刑性暴行2| 韩国电影爱人下载| 血战金沙滩| 《奉陪到底》电视剧| 念亲恩电视剧全集| 枭雄电影| 真田女忍者忍法传| 洗衣机维修工的艳遇| 高清《纵情欲海》1无删减 | 后台露营免费高清| 上错花轿嫁对郎优酷| 蜜桃成熟时高清版| 周弘版村枝(原版)| 爱我的请过来| 电视剧邻居也疯狂| 奇怪的美容院,2| 魔力宝贝监狱 完整版在线观看| 我的幸福婚姻| 《医生特殊的治疗》5| 金陵秘事| 力王之王国语免费观看完整版| 丰满的继牳5伦A片在线| 北越暴行女民兵1-3集全 | 隋唐英雄4| 电影《值得爱》| 法国少女农埸电影在线观看| 巡回检察组43| 李庄律师| 维修人员的培训 中字视频| 最好的安排| 之后3在线观看完整版| 《V酒店第一季》大结局| 女子推理第二季在线观看免费| 人形少女 快播| 日本混血女大学生按摩| 一首歌让你带回去| 僵尸道长2全集| 新田县| 哪吒闹海2| 亡者之谜泰剧在线观看泰剧| 乌海 电影| 最高的爱人诏哪里能看| 电影青春期1高清完整在线观看| 富江动画12集| 电影爱我几何莫妮卡免费观看高清播放 | 韩国电影《美发店的秘密| 隔离区2| 娃娃脸4完整版在线观看免费 | 东京饭店| 坎贝奇无憾完整版无删减| 中国警花| 系统激活短剧全集| 特别酒店l984美国 | 武林学校韩剧| 182822282午夜寂寞影院| 李崇霄的经典作品回顾| 电视剧传说| 《两位少妇按摩》HD中字| 危险关系在线| 9518虚拟视频| 坎贝奇无憾完整版在线观看| 《蜜桃成熟时2在线观看| ova夕颜动漫在线观看| 三年大片在线观看免费国语版动电话| 电视剧中国家庭第一部| 盖世英雄方世玉电影| 济公游记| 战狼5欧美版免费观看完整版国语百度 | 酒醉的玫瑰| 《妹妹爱上我》动漫 | 铿锵锵锵免费观看在线观看| 新扎师兄| 几度夕阳红剧情| 美容店的特殊待遇| 暖暖在线观看免费全集高清完整版| 鬼哭狼嚎的意思| 相亲2下载| 特殊的游泳教| 柯南剧场版全集免费观看| 好团圆电视剧免费观看全集完整版| 疯狂试爱荷尔蒙6| 范冰冰 电影| 文豪野犬第三季| 马戏团高清完整版在线观看| 销售小姐的秘密免费观看| 1984年经典电影| 悦乐之园| 妻子8全集完整版在线播放| 鲲鹏兄弟| 泼天富贵短剧免费观看| 下一站婚姻全集免费观看| 特殊的保险销售员8 | 扫毒2豆瓣| 《爱我几何》莫妮卡贝鲁奇| 疯狂的石头在线观看| 快播韩国电影| 爱妹妹美女网| 图书馆的女朋友免费动漫高清电视剧动漫第五集无广告 | 深泽县| 满天星电影女超人在线观看完整免费| 影星杰·凯利未删减| 陈情令电视剧在线观看免费版全集| 赤子板栗电影在线观看| 警察锅哥第一季免费全集| 樊梨花电视剧| 公之浮之6| 公之孚| 末日之热浪来袭短剧| 周晓琳100集短剧免费播放| 想要爸爸播种子苹果视频在线观看| 快播lunli| 老九门西瓜| 昆仑神宫潘粤明什么时候上映| 高中(hsc1v1)校园宿舍| 本草药王国语| 3d肉蒲团迅雷下载| 水手服饰育完整版| 超能姐姐大作战| 秋蝉电视剧全集免费观看| 李卫当官第二部优酷| 法国空乘11未删减版在线观看| 马腾你别走未删减| 奔跑吧兄弟第四季免费观看完整版| 17·3电影在线观看高清免费 | 喜爱夜蒲2高清粤语| 酒店1-90集高清免费观看| 搜查瑠公圳未删减| 《夕颜》动漫全集在线观看完整版中| 《女超人:麦乐迪》在线播放| 《特殊健身课》法国| 刘老根第三部| 春江水暖| 《需要爸爸播种子》-免费在线观看高清完整版-片库网 | 玩偶姐姐| 仙武传在线观看全集免费播放| 《少女少女》电影| 想要爸爸的种| 日剧恋爱补给品| 祝你好运在线观看完整版电影| 永胜县| 最高爱人诏日剧免费观看| 聚会的目的地2完整有限中字| 正义联盟电影泷泽| 男人女人愁愁愁免费观看| 一路繁花综艺| 果果别动队| 嘻哈斗牛犬| 女子版捉鬼敢死队满天星| 红墨坊电视剧| 魔女游戏国语| 书生中学成绩查询| 97播放| 樱兰男公关部| 策驰影院电视剧策驰2023| 《姐妹牙医》完整| 牙医赤子板栗完整版在线观看| 但行好事短剧免费观看全集| 意志的胜利| 水手服饲养1小时42分原版视频| 电视剧大河儿女| 青柠免费观看在线高清电视剧| 再过把瘾电视剧| 公之浮手中字60| 熊熊帮帮团| 《轩辕剑之天之痕》| 出手短剧| 新有菜电影免费观看在线| 纵情欲海3迅雷下载| 梦中情人泰剧在线观看免费| 凤姐qq| 罗丽星克莱尔总统夫人| 金牌冰人国语版电视剧在线播放| 人造黄油是什么| 驯龙高手第一季| 牙医姐妹完整版电视剧在线观看| 秘笈追踪| 皇家反千组国语| 兴国县| 女律师的堕落伦理电影| 高清《一路向北》完整版| 老枪国语版在线观看免费| 义姐是不是良喂养1-2集动漫里| 只是离婚关系电视剧| 幸福的旅程| 周星驰电影粤语版| 战狼6电影免费播放西瓜视频| 猎狐电视剧免费观看完整版| 潮剧全剧下载| 爱我就别想太多全集| 《出差被前任多次侵犯| 韩国18禁电影风暴尺度大| 甩葱舞蹈视频原版| 苍梧县| 最高の爱人沼| 幽灵公主国语普通话| 最后的华雨滋动漫在线观看| 老九门番外之虎骨梅花| 墨西哥《瓜达卢佩的玫瑰》在线播放 | 斗罗大陆电视剧第二部| 法国护士长| 黑白配中文在线观看免费高清电影| 只有妈妈好| 肚子抽脂多少钱| 和大胸大乳继拇做爰2| 原千岁在线视频| 小s吴奇隆| 没离开过原唱| 桐城市| 想要爸爸播种完整版| 四大名捕重出江湖| 半妖倾城电视剧全集免费播放| 为了皇帝在在线观看| 《渔夫荒淫史》在线观看| 道士下山| 世界尽头的爱电影完整版免费观看| 我们彼此相爱泰剧在线观看免费 | 神雕侠侣古天乐版免费| 三D肉蒲团之莲花宝典| 《和部长一起去出差旅》韩剧丈夫不| 诡秘之主免费看| 短剧《出鞘》全集播放| 最后猎人| 赤子板栗美柿妹| 《欲海双艳》未删减| 快乐再出发第一季综艺免费观看| 《恩佐》| 美国粉红大白菜| 青柠在线观看高清电视剧荣耀配音| 百万新娘之爱无悔53| 花谢花飞花满天免费观看完整版| 与女部长一起去出差旅行的电影叫什么| 龙兴龘龘怎么读| 儿女英雄| 卢靖姗顺产36小时生下女儿| 亮剑优酷网| 妈妈爱上了儿子| 变形金刚4绝迹重生下载| 电视剧血脉| 特利迦奥特曼免费观看全集普通话| 朱莉安妮《售楼女王》在线观看| 老男孩猛龙过江电影| 电视剧《青盲》免费观看| 威尼斯之恋| 美国《粉红大白菜》剧情介绍 | 折腰全集电视剧| 电视剧危情杜鹃| 《法国空乘10》成人版| 女超人麦| 二胡独奏赛马| 玫瑰的故事更新时间| 女子特案组全集| 坎贝奇无憾免费| 判处勇者刑电视剧|