本文轉(zhuǎn)自公眾號(hào),歡迎關(guān)注
基于DWC2的USB驅(qū)動(dòng)開(kāi)發(fā)-0x0D PHY寄存器讀寫(xiě)代碼編寫(xiě)與測(cè)試 (qq.com)
1.1 前言
前面我們?cè)敿?xì)講解了ULPI接口,一般情況不需要關(guān)注ULPI總線接口上的信號(hào)。但有時(shí)候我們需要進(jìn)行底層問(wèn)題的分析,此時(shí)就需要抓取ULPI總線上的數(shù)據(jù)來(lái)進(jìn)行分析,此時(shí)就需要使用邏輯分析進(jìn)行信號(hào)抓取,這個(gè)時(shí)候一個(gè)好用的邏輯分析儀就非常重要了。
我們使用Acute的TL4234B邏輯分析儀抓取ULPI總線數(shù)據(jù),該邏輯分析儀支持ULPI解碼非常方便。
該邏輯分析儀的使用參考https://mp.weixin.qq.com/s/bCdgCNsGPbYjSzjv8VJyRA。
測(cè)試代碼見(jiàn)https://mp.weixin.qq.com/s/r64ayPKzJtLxpUvsmZYvWg
設(shè)置好相應(yīng)的信號(hào)之后可以按照如下添加ULPI協(xié)議分析通道
1.2 讀寄存器
讀寄存器的標(biāo)準(zhǔn)時(shí)序如下
我們實(shí)際抓到的讀0寄存器,波形如下
可以看到分析儀自動(dòng)解析出了過(guò)程
對(duì)應(yīng)測(cè)試代碼
res = hw_dwc2_read_phyreg(0x00,®val,1000);
if(res != 0)
{
return res;
}
usb_hal_info("[VIDL]:0x%x\\r\\n",regval);
我們?cè)敿?xì)分析下如下過(guò)程
(1) 此時(shí)DIR為低,總線所有權(quán)歸LINK所有,但是LINK沒(méi)有數(shù)據(jù)要發(fā)送,所以驅(qū)動(dòng)數(shù)據(jù)線全0。
(2) 此時(shí)軟件進(jìn)行讀立即寄存器0的操作,對(duì)應(yīng)的命令字節(jié)為0xC0,發(fā)送到總線上,但是NXT被PHY拉為低,說(shuō)明PHY沒(méi)有接收,LINK只能繼續(xù)重發(fā)
(3) 重發(fā)0xC0,此時(shí)NXT被PHY拉高,說(shuō)明被PHY接收了。
注意DIR和NXT應(yīng)該在CLK的上升沿處跳變,但是由于信號(hào)一致性問(wèn)題CLK不是很完美,所以邏輯分析抓出來(lái)的CLK信號(hào)有一些偏移,占空比也不是50%.
(4) DIR低到高之后的CLK上升沿開(kāi)始是turnaround
(5) 該CLK上升沿,LINK鎖存PHY發(fā)出的數(shù)據(jù)0x24
(6) DIR由高到低之后的CLK上升沿開(kāi)始是turnaround
(7) 回到空閑狀態(tài),DIR為0,LINK驅(qū)動(dòng)總線為0
1.3 寫(xiě)寄存器
寫(xiě)寄存器理想的時(shí)序如下
寫(xiě)0x16寄存器為0x55
對(duì)應(yīng)代碼為
hw_dwc2_write_phyreg(0x16,0x55,1000);
if(res != 0)
{
return res;
}
我們實(shí)際抓到的波形如下
可以看到分析儀自動(dòng)解析出了過(guò)程
我們?cè)敿?xì)分析下如下過(guò)程
(1) 此時(shí)DIR為低,總線所有權(quán)歸LINK所有,但是LINK沒(méi)有數(shù)據(jù)要發(fā)送,所以驅(qū)動(dòng)數(shù)據(jù)線全0。
(2) 此時(shí)軟件進(jìn)行寫(xiě)立即寄存器0x16的操作,對(duì)應(yīng)的命令字節(jié)為0x96,發(fā)送到總線上,但是NXT被PHY拉為低,說(shuō)明PHY沒(méi)有接收,LINK只能繼續(xù)重發(fā)
(3) LINK重發(fā)0x96,此時(shí)NXT被PHY拉高,說(shuō)明被PHY接收了。
(4) LINK發(fā)送數(shù)據(jù)0x55,NXT為高說(shuō)明PHY接收了,于是下一個(gè)周期LINK 拉高STP結(jié)束。
同樣要注意DIR和NXT應(yīng)該在CLK的上升沿處跳變,但是由于信號(hào)一致性問(wèn)題CLK不是很完美,所以邏輯分析抓出來(lái)的CLK信號(hào)有一些偏移,占空比也不是50%.
1.4 數(shù)據(jù)收發(fā)
同樣可以抓到USB數(shù)據(jù)傳輸時(shí)的內(nèi)容進(jìn)行分析
如下,不再詳細(xì)分析
寄存器讀寫(xiě)和USB數(shù)據(jù)傳輸?shù)淖グ鼣?shù)據(jù)可以參考
鏈接:https://pan.baidu.com/s/1oOGlc8sbEywoEmRsgEGtvw?pwd=4j92
提取碼:4j92
1.5 總結(jié)
工欲善其事必先利其器,所以在USB開(kāi)發(fā)中工具很重要,示波器,邏輯分析儀,USB協(xié)議分析儀等都不可少。在底層問(wèn)題分析時(shí)缺少有力工具時(shí)很難進(jìn)一步分析,本文分享了ULPI抓包分析,實(shí)際抓包波形因?yàn)樾盘?hào)質(zhì)量問(wèn)題可能沒(méi)有那么理想,所以信號(hào)的冗余度也是很重要的,很多時(shí)候問(wèn)題可能就是時(shí)序問(wèn)題。
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8448瀏覽量
150724 -
usb
+關(guān)注
關(guān)注
60文章
7877瀏覽量
263722 -
邏輯分析儀
+關(guān)注
關(guān)注
3文章
214瀏覽量
23124 -
驅(qū)動(dòng)開(kāi)發(fā)
+關(guān)注
關(guān)注
0文章
130瀏覽量
12059 -
DWC2
+關(guān)注
關(guān)注
0文章
35瀏覽量
118
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論