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