迪士尼是什么意思| 洋葱与什么食物相克| 雨像什么| 什么的桃花| 脚气脱皮用什么药最好| 脓毒血症是什么原因引起的| 上尉军衔是什么级别| 武则天是什么生肖| 1975年属兔五行属什么| 社会很单纯复杂的是人是什么歌| 索条影是什么意思| 脾虚胃热吃什么中成药| 什么是冠心病| 新生儿黄疸高有什么危害| ysy是什么意思| 处男是什么意思| 呛是什么意思| 骶髂关节炎吃什么药| mw是什么单位| 7月出生是什么星座| 正月开什么花| 类风湿性关节炎用什么药| 吃中药不能吃什么东西| 世界大战是什么意思| 众望所归是什么意思| 公司监事是干什么的| 火镰是什么意思| 结婚10周年是什么婚| 早期唐筛是检查什么| 全青皮是什么皮| 过敏不能吃什么东西| 蛇的贵人是什么生肖| 元肉是什么| 隆字五行属什么| 芙蓉花又叫什么花| 扁桃体发炎引起的发烧吃什么药| 大连机场叫什么| 成吉思汗叫什么名字| 身份证上的数字是什么字体| 过敏擦什么药膏好得快| 什么品牌的空气炸锅好| 菊花用什么繁殖| 消炎痛又叫什么| 椰子煲汤放什么材料| 佛山有什么特产| s和m什么意思| 豆是什么结构| 女人身体发热预示什么| touch是什么意思| 福建有什么特产| 脚肿什么原因| 92年1月属什么生肖| 朱字五行属什么| 小孩黄疸是什么原因引起的| 牙齿松动吃什么药最好| 措施是什么意思| 2月25日什么星座| 副高是什么职称| 梦见被蛇咬是什么意思| 足下生辉是什么意思| 什么叫换手率| 咕咚是什么| 心心相惜是什么意思| 生肖龙和什么生肖相冲| 吃什么东西增强免疫力| 氟康唑治什么妇科炎症| 夏天适合穿什么衣服| 梦中的梦中是什么歌| 什么解酒最快| 四个木字念什么| 腋下大量出汗是什么原因| 寄生虫长什么样子| 头孢和阿莫西林有什么区别| 下关沱茶属于什么茶| 左腿酸痛是什么原因| 孕妇血糖高吃什么| 体细胞是什么| 左边是心脏右边是什么| mcn是什么意思| 仓鼠能吃什么| bone什么意思| 吃中药不能吃什么水果| 阴虱是什么原因引起的| 腮腺炎吃什么| 棘突是什么意思| 湿疹用什么药膏| afp是什么传染病| 兔子的眼睛为什么是红色的| 魅可口红属于什么档次| 荆芥的别名叫什么| 果酱样大便见于什么病| 迎合是什么意思| 胆囊炎吃什么好| 肾上腺增生是什么意思| 副处是什么级别| 月经期间洗澡会有什么影响吗| 苏轼号什么| 开团什么意思| 病毒疣是什么| 皮肤过敏吃什么药| 吃什么有奶水| 为什么喝中药越来越胖| 湿疹有什么特效药| 大姨妈量少是什么原因| 陌路人是什么意思| 通房是什么意思| 暗示是什么意思| 数据是什么意思| 女人脾肾两虚吃什么好| 喝豆腐脑有什么好处和坏处| 乳腺导管扩张是什么意思| 牙齿发黑是什么原因| 威五行属什么| 孤独症有什么表现| 起夜是什么意思| 吃完杏不能吃什么| 正月二十一是什么星座| 完全性右束支传导阻滞是什么意思| 什么鱼吃鱼粪便| 尿胆红素2十是什么意思| 水痘挂什么科| 左侧卵巢囊性结构什么意思| 牛肉烧什么好吃| 复方氨酚烷胺胶囊是什么药| 什么非常什么写句子| 人属于什么界门纲目科属种| 老鸨什么意思| 面粉可以做什么好吃的| 它是什么用英语怎么说| 脚底红润是什么原因| 怀孕第一个月有什么症状| 5月3日什么星座| naco是什么牌子| shia是什么意思| 七月初七是什么节日| 什么食物含硒量最高| 怀孕有什么反应| bart是什么意思| 雾化对小孩有什么影响或者副作用| 感冒咳嗽吃什么水果好| 胃食管反流用什么药| 阿尼是什么意思| 衣冠禽兽是什么意思| 玙字五行属什么| 吃什么能解决便秘| 黑洞到底是什么| 回煞是什么意思| 关节炎吃什么药最好| 膝盖咔咔响是什么原因| 虫草花有什么功效和作用| 老鼠疮是什么病| 白绫是什么意思| 龙代表什么象征意义| 回忆杀是什么意思| 颔是什么意思| 全国劳动模范有什么待遇| 大校军衔相当于什么官| 相处是什么意思| 尿隐血阴性是什么意思| 鸭嘴鱼吃什么食物| 天蝎女和什么座最配| 气虚吃什么| 戊肝抗体igg阳性是什么意思| 人体最大的排毒器官是什么| 12.21是什么星座| 乳酪是什么东西| 梅毒病有什么症状| 有什么不能说| 脉搏90左右意味着什么| 晚上睡觉手麻是什么原因| 什么是有氧运动| 老年人口苦是什么原因| 小辣椒是什么意思| 脑电图异常是什么病| 铜绿假单胞菌用什么抗生素| 血糖高能喝什么饮料| 金球奖什么时候颁发| 茶鱼是什么鱼| 中元节不能穿什么衣服| 桦树茸有什么功效| 乌黑对什么| 自食其力是什么意思| 肾尿盐结晶是什么意思| 右胳膊上长痣代表什么| 7月16日是什么星座| hbeag是什么意思| 辛酉日五行属什么| 大腿根疼挂什么科| 苜蓿是什么| 入幕之宾是什么意思| 尿液中有泡沫是什么原因| 静的部首是什么| 减肥吃什么食物瘦得快| 阁字五行属什么| 女性头部出汗吃什么药| 牙膏洗脸有什么好处| 黄钻有什么用| john是什么意思| 陷阱是什么意思| 2007年是什么命| 有什么好听的网名| 牛肉排酸是什么意思| mmi是什么药| 什么海里没有鱼| 什么专业就业前景好| 间皮瘤是什么病| 瑶五行属性是什么| 着凉吃什么药| 手胀是什么原因| 骨髓穿刺能查出什么病| 小舅子是什么意思| 咖啡与什么食物相克| 为什么会出汗| 国字五行属什么| 巴厘岛机场叫什么| 怀孕拉肚子吃什么药| 房产证和土地证有什么区别| 日抛什么意思| 身份证最后一位x是什么意思| 什么是六道轮回| 姓傅的男孩取什么名字| 电轴左偏什么意思| 胸部ct平扫能检查出什么| 女性尿酸高有什么症状表现| 舌头中间疼是什么原因| 涵字取名的寓意是什么| tps是什么意思| 三个又是什么字| 胆囊炎吃什么水果好| cnn是什么意思| 苏打和小苏打有什么区别| 罗刹女是什么意思| 霸王龙吃什么| 潜行是什么意思| 孕早期胎停有什么症状或征兆吗| 淋巴结炎挂什么科| 千钧一发是什么生肖| 为什么白带是黄色的| 急性肠胃炎吃什么药效果好| 梦见被蛇追着咬是什么意思| 派出所什么时候上班| 劳您费心了什么意思| 乳腺增生不能吃什么| 战略纵深是什么意思| 外阴痒用什么药膏| 什么软件可以开空调| 冰箱什么牌子好又省电质量又好| 脸一边大一边小是什么原因| 桃皮绒是什么面料| 联系是什么意思| 抽水是什么意思| 平均血小板体积偏高是什么原因| 茶叶里面含有什么成分| 多吃鱼有什么好处| 左下眼皮跳是什么原因| 人生若只如初见是什么意思| 仪轨是什么意思| 儿白是什么意思| 乇是什么意思| 六月份什么星座| 忤逆是什么意思| 殿试是什么意思| 什么是强势的女人| 什么样的孕妇容易翻盘| 百度

GD32F30x_读写外部FLASH(GD25Q256DF)驱动程序

一、工具

百度 EcoBoost245四驱豪翼型VSEcoBoost245四驱运动型到这个阶段,每个车型之间的配置差异基本都是舒适性的配置了,像BOSE音响,方向盘换挡、自动泊车等功能平时用的不多,不过一万元的差价还算值得,从性价比的角度来说,依然是EcoBoost245四驱豪翼型更值一些。

  1、硬件:GD32F30x系列单片机

  2、编译环境:KEIL

  3、Flash芯片:GD25Q256DF

二、芯片介绍

  GD25Q256DF是一款256M-bit(32Mbyte)的串行Flash,使用的是SPI通讯。该芯片的页大小、扇区大小及其详细信息如下表所示:

 

 

   其它详细信息请阅读数据手册,这里不再赘述。

 

三、SPI驱动程序

  SPI驱动程序使用的是硬件SPI方式实现的。

  1、SPI引脚配置

#define SPI_CS_HIGH          {GPIO_BOP(GPIOB) = (uint32_t)GPIO_PIN_12;}
#define SPI_CS_LOW           {GPIO_BC(GPIOB) = (uint32_t)GPIO_PIN_12;}
/* 
 *@brief spi引脚配置
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static void bsp_spi1_gpio_cfg(void)
{
    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_AF);
    
    /* PB12 as NSS */
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);    
    
    /* SPI1 GPIO config: SCK/PB13, MISO/PB14, MOSI/PB15 */
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13 | GPIO_PIN_15);
    gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
    
    SPI_CS_HIGH;
}

   2、SPI配置

/* 
 *@brief spi配置
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static void bsp_spi1_cfg(void)
{
    spi_parameter_struct spi_init_struct;
    
    rcu_periph_clock_enable(RCU_SPI1);
    
    /* SPI1 parameter config */
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
    spi_init_struct.device_mode          = SPI_MASTER;
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
    spi_init_struct.nss                  = SPI_NSS_SOFT;
    spi_init_struct.prescale             = SPI_PSC_32;
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPI1, &spi_init_struct);
    
    spi_enable(SPI1);
    SPI_CS_LOW;
}

  3、SPI初始化

/* 
 *@brief spi初始化
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
void bsp_spi1_init(void)
{
    bsp_spi1_gpio_cfg();
    bsp_spi1_cfg();
}

  4、SPI读写

/* 
 *@brief spi读写
 *@param data 要发送的数据
 *@param timeout 超时时长
 *@retval 接收到的数据或者超时值0xFF
 *@author Mr.W
 *@date 2020-8-4
 */
uint8_t bsp_spi1_transmit_receive_data(uint8_t data, uint32_t timeout)
{
    while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_TBE))
    {
        if(timeout-- == 0)
            return 0xFF;        
    }
    spi_i2s_data_transmit(SPI1, data);
    while(RESET == spi_i2s_flag_get(SPI1, SPI_FLAG_RBNE))
    {
        if(timeout-- == 0)
            return 0xFF;        
    }
    return spi_i2s_data_receive(SPI1);
}

四、GD25Q256DF驱动程序

   1、分别封装读写函数

/* 
 *@brief 读一个字节数据
 *@retval 读到的数据
 *@author Mr.W
 *@date 2020-8-4
 */
static uint8_t gd25q256df_read_byte(void)
{
    return bsp_spi1_transmit_receive_data(0xA5, 0xFFFFFFFF);
}

/* 
 *@brief 写一个字节数据
 *@param 要写的数据
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static void gd25q256df_write_byte(uint8_t data)
{
    bsp_spi1_transmit_receive_data(data, 0xFFFFFFFF);
}

   2、写使能和写禁止

/* 
 *@brief Write Enable
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static void gd25q256df_write_enable(void)
{
    SPI_CS_LOW;
    /* 发送写使能命令 */
    gd25q256df_write_byte(0x06);
    SPI_CS_HIGH;
}

/* 
 *@brief Write Disable
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
void gd25q256df_write_disable(void)
{
    SPI_CS_LOW;
    /* 发送写失能命令 */
    gd25q256df_write_byte(0x04);
    SPI_CS_HIGH;
}

  3、读单个寄存器

/* 
 *@brief 读单个状态寄存器
 *@param 指定寄存器命令
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static uint8_t gd25q256df_read_single_status_register(uint8_t command)
{
    uint8_t status = 0;
    
    SPI_CS_LOW;
    gd25q256df_write_byte(command&0xFF);
    status = gd25q256df_read_byte();
    SPI_CS_HIGH;
    
    return status;
}

  4、等待写结束

/* 
 *@brief 等写结束;编程、擦除和写状态寄存器后均可使用该函数
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static uint8_t gd25q256df_wait_write_end(void)
{
    uint8_t status = 0;
    uint32_t timeout = 0;
    
    SPI_CS_LOW;
    /* 发送读状态寄存器命令 */
    gd25q256df_write_byte(0x05);
    do
    {
        status = gd25q256df_read_byte();
        timeout++;
        if(timeout > GD25Q256DF_WAIT_MAX_TIME)
            return 0;    
    }while(status & 0x01);
    SPI_CS_HIGH;
    
    return 1;
}

  5、写状态寄存器

/* 
 *@brief 写状态寄存器
 *@param command 指定寄存器命令
 *@paran status 写入寄存器的状态值
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
void gd25q256df_write_status_register(uint8_t command, uint8_t status)
{
    SPI_CS_LOW;
    gd25q256df_write_byte(command&0xFF);
    gd25q256df_write_byte(status&0xFF);
    SPI_CS_HIGH;
}

  6、复位

/* 
 *@brief 复位gd25q256
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static uint8_t gd25q256df_reset(void)
{
    uint8_t status = 0;
    uint32_t timeout = 0;
        
    SPI_CS_LOW;
    /* Enable Reset (66H) */
    gd25q256df_write_byte(0x66);
    SPI_CS_HIGH;
    
    SPI_CS_LOW;
    /* Reset (99H) */
    gd25q256df_write_byte(0x99);
    SPI_CS_HIGH;
    
    do{
        /* Read Status Register-1 (05H) */
        status = gd25q256df_read_single_status_register(0x05);
        timeout++;
        if(timeout > GD25Q256DF_WAIT_MAX_TIME)
            return 0;
    }while(status == 0x01);
    
    return 1;
}

  7、写页,每一页256字节

/* 
 *@brief 写页
 *@param pdata 数据起始地址
 *@param addr 写到存储空间的起始地址
 *@param size 写入数据大小
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
static uint8_t gd25q256df_write_page(const uint8_t* pdata, uint32_t addr, uint16_t size)
{
    uint8_t ret = 0;
        
    /* 使能写 */
    gd25q256df_write_enable();
    
    SPI_CS_LOW;
    
    /* 发送写命令 */
    gd25q256df_write_byte(0x02);
    /* 发送32位地址 */
    gd25q256df_write_byte((addr & 0xFF000000) >> 24);
    gd25q256df_write_byte((addr & 0xFF0000) >> 16);
    gd25q256df_write_byte((addr & 0xFF00) >> 8);
    gd25q256df_write_byte(addr & 0xFF);
    
    while(size--)
    {
        gd25q256df_write_byte(*pdata);
        pdata++;
    }
    
    SPI_CS_HIGH;
    /* 等待写完成 */
    ret = gd25q256df_wait_write_end();    
    
    return ret;
}

  8、写扇区,每一个扇区4096字节

/* 
 *@brief 写扇区
 *@param pdata 数据起始地址
 *@param addr 写到存储空间的起始地址
 *@param size 写入数据大小
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
uint8_t gd25q256df_write_sector(const uint8_t* pdata, uint32_t addr, uint16_t size)
{
    uint8_t ret = 0;
    uint16_t page_offset = 0;
    uint16_t page_remain = 0;

    /* 计算页内偏移地址 */
    page_offset = addr%256;
    /* 计算页内剩余空间 */
    page_remain = 256 - page_offset;
    
    if(size <= page_remain){
        page_remain = size;
    }
    
    while(1)
    {
        ret = gd25q256df_write_page(pdata, addr, page_remain);
        if(page_remain != size){
            addr += page_remain;
            pdata += page_remain;
            size -= page_remain;
            if(size > 256){
                page_remain = 256;
            }
            else{
                page_remain = size;
            }
        }else{
            break;
        }
    }
    return ret;
}

  9、初始化,这里要注意因为使用的芯片存储空间较大,需设置为4字节地址模式

/* 
 *@brief gd25q256初始化
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
uint8_t gd25q256df_init(void)
{
    uint8_t ret = 0;
    uint8_t reg_status = 0;
    
    ret = gd25q256df_reset();
    /* 读状态寄存器2 */
    reg_status = gd25q256df_read_single_status_register(0x35);
    if((reg_status&0x01) == 0)
    {
        SPI_CS_LOW;
        /* Enter 4-Byte Address Mode (B7H) */
        gd25q256df_write_byte(0xB7);
        SPI_CS_HIGH;
    }
    
    return ret;
}

  10、读ID,可以验证SPI操作正常与否

/* 
 *@brief 读ID
 *@retval ID号(0xC84019)
 *@author Mr.W
 *@date 2020-8-4
 */
uint32_t gd25q256df_read_id(void)
{
    uint8_t id1, id2, id3;
    uint32_t uiID;
    
    SPI_CS_LOW;
    
    /* 发送读ID命令 */
    gd25q256df_write_byte(0x9F);
    
    id1 = gd25q256df_read_byte();
    id2 = gd25q256df_read_byte();
    id3 = gd25q256df_read_byte();
    
    SPI_CS_HIGH;
    
    uiID = (id1 << 16) | (id2 << 8) | id3;
    
    return uiID;
}

  11、读数据

/* 
 *@brief 从存储器中读数据
 *@param pdata 读到的数据起始地址
 *@param address 要读数据存放的起始地址
 *@param size 读取的数据大小
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
void gd25q256df_read_data(uint8_t* pdata, uint32_t address, uint16_t size)
{
    uint32_t i;
    
    SPI_CS_LOW;
    
    /* 发送读命令 */
    gd25q256df_write_byte(0x03);
    /* 发送32位地址 */
    gd25q256df_write_byte(address >> 24);
    gd25q256df_write_byte(address >> 16);
    gd25q256df_write_byte(address >> 8);
    gd25q256df_write_byte(address);
    /* 开始接收数据 */
    for(i = 0; i < size; i++)
    {
        pdata[i] = gd25q256df_read_byte();
    }

    SPI_CS_HIGH;
}

  12、写数据

/* 扇区缓冲区 */
uint8_t gd25q256_buffer[4096];
/* 
 *@brief 向存储器中写数据
 *@param pdata 要写数据的起始地址
 *@param address 要写数据存放的起始地址
 *@param size 要写数据大小
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
uint8_t gd25q256df_write_data(const uint8_t* pdata, uint32_t address, uint16_t size)
{
    uint8_t ret = 0;    
    uint32_t sector_pos = 0;
    uint16_t sector_offset = 0;            
    uint16_t sector_remain = 0;
    uint32_t i;
    
    /* 扇区地址 */
    sector_pos = address/4096;
    /* 计算扇区内地址偏移 */
    sector_offset = address%4096;
    /* 计算扇区内剩余空间 */
    sector_remain = 4096 - sector_offset;
    
    if(size <= sector_remain){
        sector_remain = size;
    }
    while(1)
    {
        /* 读当前扇区的所有数据 */
        gd25q256df_read_data(gd25q256_buffer, sector_pos*4096, 4096);
        for(i = 0; i < sector_remain; i++){
            if(gd25q256_buffer[sector_offset + i] != 0xFF)
                break;
        }
        if(i < sector_remain){
            /* 擦除当前扇区 */
            gd25q256df_sector_erase(sector_pos*4096);
            for(i = 0; i < sector_remain; i++){
                gd25q256_buffer[sector_offset + i] = pdata[i];
            }
            ret = gd25q256df_write_sector(gd25q256_buffer, sector_pos*4096, 4096);
        }else{
            ret = gd25q256df_write_sector(pdata, address, sector_remain);
        }
        
        if(size == sector_remain){
            break;
        }else{
            sector_pos++;
            sector_offset = 0;
            
            pdata += sector_remain;
            address += sector_remain;
            size -= sector_remain;
            if(size > 4096){
                sector_remain = 4096;
            }else{
                sector_remain = size;
            }
        }
    }
    
    return ret;
}

  13、扇区擦除

/* 
 *@brief 扇区擦除
    Any address inside the sector is a valid address for the 4k Sector Erase (SE) command.
 *@param sector_addr 扇区地址
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
uint8_t gd25q256df_sector_erase(uint32_t sector_addr)
{
    uint8_t ret = 0;
        
    /* 写使能 */
    gd25q256df_write_enable();
    
    ret = gd25q256df_wait_write_end();
    if(ret == 0)
        return ret;
    
    SPI_CS_LOW;
    
    /* 发送读命令 */
    gd25q256df_write_byte(0x20);
    /* 发送32位地址 */
    gd25q256df_write_byte((sector_addr & 0xFF000000) >> 24);
    gd25q256df_write_byte((sector_addr & 0xFF0000) >> 16);
    gd25q256df_write_byte((sector_addr & 0xFF00) >> 8);
    gd25q256df_write_byte(sector_addr & 0xFF);
    
    SPI_CS_HIGH;
    
    /* 等待擦除完成 */
    ret = gd25q256df_wait_write_end();
    
    return ret;
}

  14、整片擦除

/* 
 *@brief 整片擦除
 *@retval none
 *@author Mr.W
 *@date 2020-8-4
 */
uint8_t gd25q256df_chip_erase(void)
{
    uint8_t ret = 0;
    
    /* 写使能 */
    gd25q256df_write_enable();

    SPI_CS_LOW;
    /* 发送擦除命令 */
    gd25q256df_write_byte(0xC7);

    SPI_CS_HIGH;    
    
    /* 等待擦除完成 */
    ret = gd25q256df_wait_write_end();
    
    return ret;
}

 

 

#endif

  

posted @ 2025-08-08 13:23  不要让自己太懒  阅读(9210)  评论(0)    收藏  举报
st是什么单位 什么是繁体字 输卵管堵塞什么症状 张姓五行属什么 本命年红内衣什么时候穿
天荒地老什么意思 五行缺木是什么命 什么是纳囊 1977年出生是什么命 来褐色分泌物是什么原因
芈月和秦始皇是什么关系 贫血喝什么茶 懒是什么生肖 2001属什么 孤男寡女什么意思
血崩是什么意思 腹部b超能检查出什么 什么有所什么 3岁小孩不会说话是什么原因 甲醇对人体有什么伤害
土方是什么hcv9jop5ns6r.cn 米索前列醇片是什么药hcv7jop7ns4r.cn pvt是什么意思hcv9jop0ns9r.cn 胃炎能吃什么hcv9jop3ns8r.cn 丹宁蓝是什么颜色bysq.com
按摩有什么好处0735v.com 隽字五行属什么hcv9jop6ns1r.cn 舌苔厚腻吃什么中成药hcv9jop6ns5r.cn 乳腺增生吃什么好hcv9jop7ns2r.cn 体细胞是什么hcv8jop1ns9r.cn
乌龟不能吃什么hcv9jop8ns2r.cn 鱼完念什么hcv9jop7ns1r.cn 鱼翅配什么煲汤最好hcv8jop1ns0r.cn 地藏王菩萨为什么不能拜fenrenren.com 儿童低烧吃什么药hcv8jop9ns0r.cn
两个人在一起的意义是什么hcv9jop1ns4r.cn 任意门是什么意思hcv8jop2ns3r.cn 胸口不舒服挂什么科hcv9jop7ns4r.cn 欧芹是什么hcv9jop1ns6r.cn 嘚儿是什么意思hcv8jop1ns3r.cn
百度