在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于DWC2的USB驅(qū)動(dòng)開(kāi)發(fā)-0x0D PHY寄存器讀寫代碼編寫與測(cè)試

嵌入式USB開(kāi)發(fā) ? 來(lái)源:嵌入式USB開(kāi)發(fā) ? 作者:嵌入式USB開(kāi)發(fā) ? 2023-06-06 13:03 ? 次閱讀

本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注

基于DWC2的USB驅(qū)動(dòng)開(kāi)發(fā)-0x0D PHY寄存器讀寫代碼編寫與測(cè)試 (qq.com)

PHY寄存器讀寫

1.1前言

我們前面重點(diǎn)介紹了ULPI接口和PHY的寄存器,這一篇來(lái)進(jìn)行PHY寄存器讀寫的代碼編寫與測(cè)試。從這一篇開(kāi)始就正真進(jìn)入了驅(qū)動(dòng)編寫的過(guò)程了。

1.2 GPVNDCTL寄存器介紹

DWC2提供了讀寫PHY寄存器的機(jī)制,對(duì)于應(yīng)用來(lái)說(shuō)就是操作一個(gè)寄存器GPVNDCTL:PHY供應(yīng)商控制寄存器。能夠讀寫PHY寄存器這在有些底層問(wèn)題分析時(shí)很重要。

《DesignWare Cores USB 2.0 Hi-Speed On-TheGo (OTG) Databook》的P391 5.4.14 GPVNDCTL 有該寄存器的介紹。

IP必須配置OTG_VENDOR_CTL_INTERFACE = 1 才支持該功能。

GHWCFG3寄存器的b9查看該配置值。

圖片

圖片

對(duì)于UTMI+PHY,DWC_otg核心使用UTMI+供應(yīng)商控制接口進(jìn)行PHY寄存器訪問(wèn)。對(duì)于ULPI PHY,核心使用ULPI接口進(jìn)行PHY寄存器訪問(wèn)。應(yīng)用程序設(shè)置GPVNDCTL來(lái)訪問(wèn)PHY寄存器,并對(duì)PHY寄存器的訪問(wèn)進(jìn)行計(jì)時(shí),應(yīng)用程序輪詢此寄存器中的VStatus Done位來(lái)確認(rèn)是否完成PHY寄存器的訪問(wèn)。

該寄存器的描述如下

偏移0x34 訪問(wèn)大小32位

image.png

image.png

image.png

圖片

我們重點(diǎn)關(guān)注和PHY讀寫有關(guān)的位域,其他的位暫時(shí)用不到,先不管。

NewRegReq: 軟件寫1觸發(fā)一次操作。

VStsDone: 當(dāng)應(yīng)用程序設(shè)置NewRegReq為1時(shí),硬件清除該位,操作完成后硬件再置位該位。軟件查詢?cè)撐灰耘袛嗍欠裢瓿桑⒁獯a中需要考慮查詢超時(shí)機(jī)制。

VStsBsy: 忙標(biāo)志,正在進(jìn)行操作時(shí)硬件置位該位,操作完成時(shí)硬件清零,可以認(rèn)為是和VStsDone相反的標(biāo)志。

RegWr: 0表示讀PHY寄存器,1表示寫PHY寄存器

RegAddr: PHY寄存器地址,PHY立即寄存器的6位地址。設(shè)置為6'h2F用于擴(kuò)展PHY寄存器集訪問(wèn)。

VCtrl:UTMI+供應(yīng)商控制寄存器地址(VCtrl)供應(yīng)商定義的4位并行輸出總線的4位寄存器地址。該字段的位11:8被置于utmi_vontrol[3:0]上。ULPI擴(kuò)展寄存器地址(ExtRegAddr)PHY擴(kuò)展寄存器地址。

RegData: 寫寄存器時(shí)寫入寄存器的數(shù)據(jù)。讀寄存器時(shí)讀到的寄存器內(nèi)容,設(shè)置VStatus Done時(shí)有效。

DisUlpiDrvr:讀寫PHY寄存器無(wú)關(guān),

應(yīng)用程序在完成ULPI Carkit中斷(GINTSTS.ULPICKINT)處理后設(shè)置此位。設(shè)置后,控制器將禁用輸出信號(hào)驅(qū)動(dòng)器,并屏蔽ULPI接口的輸入信號(hào)。控制器在啟用ULPI接口之前清除該位。

1.3 代碼編寫

讀PHY寄存器

  1. RegWr設(shè)置為0
  2. RegAddr設(shè)置為立即寄存器的6位地址,如果是擴(kuò)展寄存器則設(shè)置為0x2F且設(shè)置VCtrl為擴(kuò)展寄存器的值。
  3. NewRegReq置1啟動(dòng)操作
  4. 等待VStsDone變?yōu)?
  5. 讀出RegData

寫PHY寄存器

  1. RegWr設(shè)置為1
  2. RegAddr設(shè)置為立即寄存器的6位地址,如果是擴(kuò)展寄存器則設(shè)置為0x2F且設(shè)置VCtrl為擴(kuò)展寄存器的值。
  3. RegData設(shè)置為待寫入寄存器的值
  4. NewRegReq置1啟動(dòng)操作
  5. 等待VStsDone變?yōu)?

代碼如下

/**
 * \\fn static uint8_t hw_dwc2_is_vndctlsupt(void)
 * 判斷是否支持供應(yīng)商控制接口(VndctlSupt)
 * \\retval 0 不支持 供應(yīng)商控制接口(VndctlSupt)
 * \\retval 1 支持
*/
static uint8_t hw_dwc2_is_vndctlsupt(void)
{
    return ((USB_OTG_READ_REG(CFG_GHWCFG3_ADDR) & VNDCTLSUPT_MASK) > > VNDCTLSUPT_OFFSET) & 0x01;
    //return (uint8_t)(s_dwc2_reg_t- >ghwcfg3._b.vndctlsupt);
}


/**
 * \\fn  int hw_dwc2_read_phyreg(uint8_t regaddr, uint8_t* regval, uint32_t timeout)
 * \\param[in] regaddr PHY寄存器,立即寄存器和擴(kuò)展寄存器統(tǒng)一編碼,高2位為0表示立即寄存器,
 * 高兩位不為0表示擴(kuò)展寄存器。
 * \\param[out] regval 存儲(chǔ)讀出的寄存器值
 * \\param[in] timeout 查詢是否完成的次數(shù)
 * \\retval -1 不支持供應(yīng)商控制接口(VndctlSupt)
 * \\retval -2 讀超時(shí)
 * \\retval 0  讀成功
*/
int hw_dwc2_read_phyreg(uint8_t regaddr, uint8_t* regval, uint32_t timeout)
{
    /* 判斷是否支持供應(yīng)商控制接口(VndctlSupt) */
    if(hw_dwc2_is_vndctlsupt() == 0)
    {
        return -1;
    }
#if 0
    s_dwc2_reg_t- >gpvndctl._b.regwr = 0; /* 讀模式 */
    if((regaddr & 0xC0) != 0)
    {
        /* 擴(kuò)展寄存器 */
        s_dwc2_reg_t- >gpvndctl._b.regaddr = 0x2F;
        s_dwc2_reg_t- >gpvndctl._b.vctrl = regaddr;
    }
    else
    {
        /* 立即寄存器 */
        s_dwc2_reg_t- >gpvndctl._b.regaddr = regaddr;
        s_dwc2_reg_t- >gpvndctl._b.vctrl = 0;    
    }
    s_dwc2_reg_t- >gpvndctl._b.newregreq = 1;  /* 啟動(dòng)操作 */
    while ((s_dwc2_reg_t- >gpvndctl._b.vstsdone == 0) && (timeout-- > 0));  /* 等待完成 */

    /* 根據(jù)標(biāo)志返回值或者錯(cuò)誤 */
    if(s_dwc2_reg_t- >gpvndctl._b.vstsdone != 0)
    {
        *regval = s_dwc2_reg_t- >gpvndctl._b.regdata;
        //s_dwc2_reg_t- >gpvndctl._b.vstsdone = 1;  /* newregreq =1時(shí)硬件清0,沒(méi)必要手動(dòng)清零 */
        return 0;
    }
    else
    {
        return -2;
    }
#else
    uint32_t tmp = 0;
    tmp &= ~REGWR_MASK; /* 讀模式 */
    if((regaddr & 0xC0) != 0)
    {
        /* 擴(kuò)展寄存器 */
        tmp |= ((uint32_t)0x2F < < REGADDR_OFFSET);
        tmp |= ((uint32_t)regaddr < < VCTRL_OFFSET);
    }
    else
    {
        /* 立即寄存器 */
        tmp |= ((uint32_t)regaddr < < REGADDR_OFFSET);
        tmp |= ((uint32_t)0 < < VCTRL_OFFSET);  
    }   
    tmp |= NEWREGREQ_MASK;                       /* 啟動(dòng)操作 */
    USB_OTG_WRITE_REG(CFG_GPVNDCTL_ADDR,tmp);


    while(((USB_OTG_READ_REG(CFG_GPVNDCTL_ADDR)&VSTSDONE_MASK) == 0) && (timeout-- > 0));  /* 等待完成 */
    if(((USB_OTG_READ_REG(CFG_GPVNDCTL_ADDR)&VSTSDONE_MASK) != 0))
    {
        *regval = (USB_OTG_READ_REG(CFG_GPVNDCTL_ADDR) > > REGDATA_OFFSET) & 0xFF; /* 讀出寄存器的值 */
        USB_OTG_WRITE_REG(CFG_GPVNDCTL_ADDR,USB_OTG_READ_REG(CFG_GPVNDCTL_ADDR) | VSTSDONE_MASK);
        /* newregreq =1時(shí)硬件清0,沒(méi)必要手動(dòng)清零 */
        return 0;
    }
    else
    {
        return -2;
    }
#endif
}


/**
 * \\fn  int hw_dwc2_write_phyreg(uint8_t regaddr, uint8_t regval, uint32_t timeout)
 * \\param[in] regaddr PHY寄存器,立即寄存器和擴(kuò)展寄存器統(tǒng)一編碼,高2位為0表示立即寄存器,
 * 高兩位不為0表示擴(kuò)展寄存器。
 * \\param[out] regval 寫入寄存器的值
 * \\param[in] timeout 查詢是否完成的次數(shù)
 * \\retval -1 不支持供應(yīng)商控制接口(VndctlSupt)
 * \\retval -2 讀超時(shí)
 * \\retval 0  讀成功
*/
int hw_dwc2_write_phyreg(uint8_t regaddr, uint8_t regval, uint32_t timeout)
{
    /* 判斷是否支持供應(yīng)商控制接口(VndctlSupt) */
    if(hw_dwc2_is_vndctlsupt() == 0)
    {
        return -1;
    }


#if 0
    /* 不能使用結(jié)構(gòu)體單位域操作,因?yàn)閞egdata需要vstsdone=1才能訪問(wèn)
     * 且vstsdone是W1C,所以單位域讀-修改-寫時(shí)vstsdone寫入1導(dǎo)致清0,導(dǎo)致后面regdata不能寫入
    */
    s_dwc2_reg_t- >gpvndctl._b.regwr = 1; /* 寫模式 */
    if((regaddr & 0xC0) != 0)
    {
        /* 擴(kuò)展寄存器 */
        s_dwc2_reg_t- >gpvndctl._b.regaddr = 0x2F;
        s_dwc2_reg_t- >gpvndctl._b.vctrl = regaddr;
    }
    else
    {
        /* 立即寄存器 */
        s_dwc2_reg_t- >gpvndctl._b.regaddr = regaddr;
        s_dwc2_reg_t- >gpvndctl._b.vctrl = 0;    
    }
    s_dwc2_reg_t- >gpvndctl._b.regdata = regval; /* 寫入寄存器的值 */
    s_dwc2_reg_t- >gpvndctl._b.newregreq = 1;    /* 啟動(dòng)操作 此時(shí)regdata回讀未0,導(dǎo)致回寫為0 不對(duì)*/
    while ((s_dwc2_reg_t- >gpvndctl._b.vstsdone == 0) && (timeout-- > 0));  /* 等待完成 */

    /* 根據(jù)標(biāo)志返回值或者錯(cuò)誤 */
    if(s_dwc2_reg_t- >gpvndctl._b.vstsdone != 0)
    {
        // s_dwc2_reg_t- >gpvndctl._b.vstsdone = 1;  /* newregreq =1時(shí)硬件清0,沒(méi)必要手動(dòng)清零 */
        return 0;
    }
    else
    {
        return -2;
    }
#else
    uint32_t tmp = 0;
    tmp |= REGWR_MASK; /* 寫模式 */
    if((regaddr & 0xC0) != 0)
    {
        /* 擴(kuò)展寄存器 */
        tmp |= ((uint32_t)0x2F < < REGADDR_OFFSET);
        tmp |= ((uint32_t)regaddr < < VCTRL_OFFSET);
    }
    else
    {
        /* 立即寄存器 */
        tmp |= ((uint32_t)regaddr < < REGADDR_OFFSET);
        tmp |= ((uint32_t)0 < < VCTRL_OFFSET);  
    }   
    tmp |= ((uint32_t)regval < < REGDATA_OFFSET); /* 寫入寄存器的值 */
    tmp |= NEWREGREQ_MASK;                       /* 啟動(dòng)操作 */
    USB_OTG_WRITE_REG(CFG_GPVNDCTL_ADDR,tmp);


    while(((USB_OTG_READ_REG(CFG_GPVNDCTL_ADDR)&VSTSDONE_MASK) == 0) && (timeout-- > 0));  /* 等待完成 */
    if(((USB_OTG_READ_REG(CFG_GPVNDCTL_ADDR)&VSTSDONE_MASK) != 0))
    {
        USB_OTG_WRITE_REG(CFG_GPVNDCTL_ADDR,USB_OTG_READ_REG(CFG_GPVNDCTL_ADDR) | VSTSDONE_MASK);
        /* newregreq =1時(shí)硬件清0,沒(méi)必要手動(dòng)清零 */
        return 0;
    }
    else
    {
        return -2;
    }
#endif
}

1.4 測(cè)試

1.4.1 立即寄存器讀VID PID

這里使用的PHY型號(hào)是USB3343

VID PID寄存器值如下

圖片

測(cè)試代碼如下

uint8_t regval;
    int res = 0;


    /* 讀VID PID */
    res = hw_dwc2_read_phyreg(0x00,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    usb_hal_info("[VIDL]:0x%x\\r\\n",regval);
    res = hw_dwc2_read_phyreg(0x01,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    usb_hal_info("[VIDH]:0x%x\\r\\n",regval);
    res = hw_dwc2_read_phyreg(0x02,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    usb_hal_info("[PIDL]:0x%x\\r\\n",regval);
    res = hw_dwc2_read_phyreg(0x03,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    usb_hal_info("[PIDH]:0x%x\\r\\n",regval);

打印如下,可以看到讀出的值是正確的

image.png

也可以直接使用仿真器修改寄存器操作

(gdb) set (unsigned int )0x03000034=0x02000000 // 讀0寄存器

(gdb) x /1xw 0x03000034

0x3000034: 0x08000024

(gdb) set (unsigned int )0x03000034=0x02010000 // 讀1寄存器

(gdb) x /1xw 0x03000034

0x3000034: 0x08010004

(gdb) set (unsigned int )0x03000034=0x02020000 // 讀2寄存器

(gdb) x /1xw 0x03000034

0x3000034: 0x08020009

(gdb) set (unsigned int )0x03000034=0x02030000 // 讀3寄存器

(gdb) x /1xw 0x03000034

0x3000034: 0x08030000

1.4.2 立即寄存器讀寫寄存器

圖片

0x16處的Scratch寄存器是用戶可以自由使用的寄存器,可以使用該寄存器測(cè)試

0x16對(duì)應(yīng)讀寫

0x17對(duì)應(yīng)Set

0x18對(duì)應(yīng)Clr

測(cè)試代碼如下

/* 讀Scratch Register初始值 */
    res = hw_dwc2_read_phyreg(0x16,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    usb_hal_info("[Scratch Register]:0x%x\\r\\n",regval);


    /* 寫入0x55回讀是否正確 */
    hw_dwc2_write_phyreg(0x16,0x55,1000);
    if(res != 0)
    {
        return res;
    }
    res = hw_dwc2_read_phyreg(0x16,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    if(regval != 0x55)
    {
        usb_hal_info("[Scratch Register Write Err]:0x%x\\r\\n",regval);
    }
    else
    {
        usb_hal_info("[Scratch Register Write OK]:0x%x\\r\\n",regval);
    }


    /* 0x55置位0xAA變?yōu)?xFF */
    hw_dwc2_write_phyreg(0x17,0xAA,1000);
    if(res != 0)
    {
        return res;
    }
    res = hw_dwc2_read_phyreg(0x16,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    if(regval != 0xFF)
    {
        usb_hal_info("[Scratch Register Set Err]:0x%x\\r\\n",regval);
    }
    else
    {
        usb_hal_info("[Scratch Register Set OK]:0x%x\\r\\n",regval);
    }


    /* 0xFF清除0x55變?yōu)?xAA */
    hw_dwc2_write_phyreg(0x18,0x55,1000);
    if(res != 0)
    {
        return res;
    }
    res = hw_dwc2_read_phyreg(0x16,&regval,1000);
    if(res != 0)
    {
        return res;
    }
    if(regval != 0xAA)
    {
        usb_hal_info("[Scratch Register Clr Err]:0x%x\\r\\n",regval);
    }
    else
    {
        usb_hal_info("[Scratch Register Clr OK]:0x%x\\r\\n",regval);
    }

打印如下

圖片

直接使用仿真器操作

(gdb) set (unsigned int )0x03000034=0x02560055 //寫0x16寄存器為0x55

(gdb) set (unsigned int )0x03000034=0x02160000 //讀0x16寄存器

(gdb) x /1xw 0x03000034 //查看讀回來(lái)的值為0x55 正確

0x3000034: 0x08160055

(gdb) set (unsigned int )0x03000034=0x025700AA //設(shè)置0x16寄存器,即操作0x17置位0xAA位

(gdb) set (unsigned int )0x03000034=0x02160000 //讀0x16寄存器

(gdb) x /1xw 0x03000034

0x3000034: 0x081600ff //查看讀回來(lái)的值為0xFF 正確

(gdb)

1.4.3 問(wèn)題

位域操作和宏操作

  1. 寫regwr時(shí) done標(biāo)志被清零了,因?yàn)槭亲x-修改-寫的方式,VstsDone讀出來(lái)為1再修改其他位回寫時(shí)VstsDone寫入1,但是該位為W1C,寫1清0,所以回寫時(shí)會(huì)清除標(biāo)志。雖然這里不會(huì)有什么問(wèn)題,但是這里有編程者未意料到的副作用,在其他地方可能會(huì)導(dǎo)致問(wèn)題,所以不建議使用位域一步步的操作。
  2. 位域的操作可能被優(yōu)化,比如這里位于regdata等因?yàn)槭亲止?jié)對(duì)齊的,所以使用了字節(jié)操作指令,但是按照DWC2手冊(cè)應(yīng)該要求都是按照32位訪問(wèn)的,所以這里帶來(lái)了未預(yù)料的問(wèn)題。
  3. 寫入regdata后,實(shí)際上回讀的值是0,所以最后s_dwc2_reg_t->gpvndctl._b.newregreq = 1;讀-寫0修改后讀出regdata是0,再寫入就是0了,而不是上一步寫入的s_dwc2_reg_t->gpvndctl._b.regdata = regval;了,所以不能使用這種位域一步步設(shè)置的方式。

以下驗(yàn)證regdata寫入是不能回讀的,寫入0x55回讀是0

圖片

所以regdata在手冊(cè)中描述的rw不完全是可讀可寫,而是寫時(shí)只寫不可讀,讀時(shí)只有Vstsdone才能讀。

  1. 位域操作有太多的副作用,比如上面的W1C,寫入不能回讀,位域訪問(wèn)寬度被優(yōu)化修改,等等都可能導(dǎo)致問(wèn)題,而且位域一步步操作都需要讀-修改-寫,所以效率也低,最好使用直接的寄存器宏一次讀出,臨時(shí)變量存儲(chǔ)修改,最后一次寫入的方式。

圖片

所以不能使用結(jié)構(gòu)體一步一步修改的方式,而是使用宏,一次性修改整個(gè)寄存器。

圖片

圖片

1.5總結(jié)

以上測(cè)試了PHY立即寄存器的讀寫,由于使用的PHY USB3343沒(méi)有擴(kuò)展寄存器,所以擴(kuò)展寄存器讀寫沒(méi)有測(cè)試。注意上面也介紹了盡量使用宏的方式進(jìn)行寄存器操作,而不要使用位域的方式,位域的方式存在諸多副作用。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5423

    瀏覽量

    123436
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8147

    瀏覽量

    270992
  • PHY
    PHY
    +關(guān)注

    關(guān)注

    2

    文章

    315

    瀏覽量

    52514
  • 驅(qū)動(dòng)開(kāi)發(fā)

    關(guān)注

    0

    文章

    133

    瀏覽量

    12257
  • DWC2
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    235
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-0x06 DWC2 USB2.0 IP 頭文件與寄存器讀寫操作

    上一篇我們介紹了控制寄存器,而驅(qū)動(dòng)編寫底層無(wú)非就是配置各種寄存器,所以第一步先要準(zhǔn)備寄存器
    的頭像 發(fā)表于 05-16 14:04 ?2925次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>0x</b>06 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP 頭文件與<b class='flag-5'>寄存器</b>的<b class='flag-5'>讀寫</b>操作

    STM32串口接收不定長(zhǎng)數(shù)據(jù):采用標(biāo)志位(比如0X0D,0X0A)結(jié)束法

    缺點(diǎn):有些情況下會(huì)導(dǎo)致數(shù)據(jù)丟失(可能返回?cái)?shù)據(jù)中0x0d0a本身為有效數(shù)據(jù))
    的頭像 發(fā)表于 09-23 14:06 ?7118次閱讀

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-0x01開(kāi)篇介紹與新思DWC2 USB2.0控制簡(jiǎn)介

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-0x01開(kāi)篇介紹與新思DWC2
    的頭像 發(fā)表于 05-08 18:10 ?5476次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>0x</b>01開(kāi)篇介紹與新思<b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0控制<b class='flag-5'>器</b>簡(jiǎn)介

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-0x02 DWC2 USB2.0 IP功能特征介紹

    DWC2即新思(Synopsys )的DesignWare? Cores USB 2.0 HiSpeed On-The-Go (OTG)控制IP,被大量使用。從linux的內(nèi)核源碼驅(qū)動(dòng)
    的頭像 發(fā)表于 05-09 10:09 ?1.2w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>0x</b>02 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP功能特征介紹

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-0x05 DWC2 USB2.0 IP 寄存器介紹

    本文對(duì)控制寄存器有了一個(gè)整體上的概覽,先了解個(gè)大概,了解寄存器的組織結(jié)構(gòu),大致了解一下常用的寄存器。后面編程時(shí)再一個(gè)個(gè)對(duì)照每一個(gè)寄存器
    的頭像 發(fā)表于 05-16 12:50 ?4211次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>0x</b>05 <b class='flag-5'>DWC2</b> <b class='flag-5'>USB</b>2.0 IP <b class='flag-5'>寄存器</b>介紹

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-0x0B ULPI接口寄存器介紹

    以上詳細(xì)介紹了PHY相關(guān)的寄存器內(nèi)容,標(biāo)準(zhǔn)部分是所有PHY都需要按照該規(guī)范實(shí)現(xiàn)的,還有廠商自定義部分可以自定義。正是因?yàn)橐?guī)范對(duì)寄存器功能進(jìn)行了規(guī)范所以LINK部分的IP才能做到兼容通用
    的頭像 發(fā)表于 06-05 15:36 ?5279次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>0x0</b>B ULPI接口<b class='flag-5'>寄存器</b>介紹

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB復(fù)位詳解

    本文轉(zhuǎn)自公眾號(hào)歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB復(fù)位詳解 (qq.com) 一.前言 ? ? ? ? ?上一篇我們?cè)敿?xì)介紹了
    的頭像 發(fā)表于 07-07 11:18 ?10.6w次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>USB</b>復(fù)位詳解

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB連接詳解

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-USB連接詳解 (qq.com) 一.前言 ? 之前一直在閱讀手冊(cè),規(guī)格書(shū),練習(xí)招式
    的頭像 發(fā)表于 07-07 08:46 ?4386次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-<b class='flag-5'>USB</b>連接詳解

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-設(shè)備類驅(qū)動(dòng)框架

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-設(shè)備類驅(qū)動(dòng)框架 (qq.com) 一.前言 從軟件頂層,從數(shù)據(jù)流的角度來(lái)看
    的頭像 發(fā)表于 07-16 15:56 ?1705次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-設(shè)備類<b class='flag-5'>驅(qū)動(dòng)</b>框架

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解

    本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-發(fā)送相關(guān)的寄存器DMA寄存器詳解 (qq
    的頭像 發(fā)表于 07-16 16:42 ?2140次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-發(fā)送相關(guān)的<b class='flag-5'>寄存器</b>DMA<b class='flag-5'>寄存器</b>詳解

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-控制傳輸中斷相關(guān)寄存器

    本篇講解Scatter/Gather DMA模式下控制傳輸相關(guān)的寄存器。控制傳輸是USB驅(qū)動(dòng)的核心部分,控制傳輸調(diào)通了驅(qū)動(dòng)就完成了一大半,而驅(qū)動(dòng)
    的頭像 發(fā)表于 07-24 00:07 ?3549次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-控制傳輸中斷相關(guān)<b class='flag-5'>寄存器</b>

    基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-數(shù)據(jù)不能發(fā)送問(wèn)題分析案例

    本文轉(zhuǎn)自公眾號(hào)歡迎關(guān)注 基于DWC2USB驅(qū)動(dòng)開(kāi)發(fā)-數(shù)據(jù)不能發(fā)送問(wèn)題分析案例 (qq.com) ? 一.前言 ? ? ? ?對(duì)于驅(qū)動(dòng)
    的頭像 發(fā)表于 08-08 09:43 ?3125次閱讀
    基于<b class='flag-5'>DWC2</b>的<b class='flag-5'>USB</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-數(shù)據(jù)不能發(fā)送問(wèn)題分析案例

    基于DWC_ether_qos的以太網(wǎng)驅(qū)動(dòng)開(kāi)發(fā)-MDIO驅(qū)動(dòng)編寫測(cè)試

    本文轉(zhuǎn)自公眾號(hào)歡迎關(guān)注 基于DWC_ether_qos的以太網(wǎng)驅(qū)動(dòng)開(kāi)發(fā)-MDIO驅(qū)動(dòng)編寫測(cè)試
    的頭像 發(fā)表于 08-30 09:37 ?4724次閱讀
    基于<b class='flag-5'>DWC</b>_ether_qos的以太網(wǎng)<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>-MDIO<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>編寫</b>與<b class='flag-5'>測(cè)試</b>

    新思 DWC2 的參考手冊(cè)從哪里可以下載

    最近在學(xué)習(xí)STM32F4 USB驅(qū)動(dòng),有看到 dwc2驅(qū)動(dòng)代碼,但是沒(méi)有手冊(cè)用來(lái)參考,ST手冊(cè)上寄存
    發(fā)表于 01-22 11:32

    RK3399平臺(tái)上USB控制PHY的連接方式和配置說(shuō)明

    判斷切換為何種模式,ID腳的電平變化觸發(fā)控制ID腳中斷,然后由軟件切換到對(duì)應(yīng)模式。目前使用兩種驅(qū)動(dòng)版本,一個(gè)是upstream 版,驅(qū)動(dòng)dwc2目錄下,主要從upstream開(kāi)源項(xiàng)
    發(fā)表于 05-12 17:46
    主站蜘蛛池模板: 久久精品女人天堂 | 色综合天天综合网国产人 | 四虎影院免费观看视频 | 国产高清免费 | 天天爽夜夜爽8888视频精品 | 五月天婷婷视频在线观看 | 在线高清视频大全 | 激情性爽三级成人 | 色五月视频 | 欧美日韩国产另类一区二区三区 | 国产精品好好热在线观看 | 四只虎免费永久观看 | 欧美xxxxxxxxx| 欧美综合精品一区二区三区 | 男人天堂伊人 | 国产三级在线观看播放 | 欧美日韩在线成人免费 | 日韩综合nv一区二区在线观看 | 天堂成人在线观看 | 午夜精品视频在线观看美女 | 在线播放色 | 午夜激情啪啪 | 六月婷婷七月丁香 | h免费视频 | 国产美女特级嫩嫩嫩bbb | 在线天堂中文在线资源网 | 影音先锋在线亚洲精品推荐 | 欧美一级免费观看 | 亚洲骚片 | 婷婷开心激情网 | 日韩一级影院 | 成年人在线网站 | 亚洲综合激情六月婷婷在线观看 | 又黑又长黑人欧美三级 | 插插插叉叉叉 | 色网站在线看 | 国产免费色视频 | se94se最新网站 | 午夜视频在线观看一区 | 色偷偷成人网免费视频男人的天堂 | 丁香六月色婷婷 |