一文讀懂如何使用FPGA驅動PHY晶元

2021-10-13 01:49:59 字數 2387 閱讀 1034

如何驅動phy晶元?

筆者因為工作的原因接觸到使用fpga驅動phy晶元進行通訊,期間接觸到了德州儀器的dp83849,博通公司的b50610,裕太車通等晶元。下面以博通公司的b506102為例來講解如何使用和驅動phy晶元。

對於嵌入式軟體開發來說,不講硬體就講軟體構架的行為都是耍流氓。

首先讀者要明確一點,phy晶元的實體地址是什麼?這個東西有什麼意義?假如在你使用的電路板子上存在多個phy晶元,為了區分每個不同的phy晶元,給定phy晶元乙個獨有的位址,從而確定我傳送的的控制訊號是給哪個phy晶元的,而這個位址就是phy晶元的實體地址。根據mdio的協議,phy的實體地址是5bit資料,則理論上來說一根匯流排最多可以驅動2的5次方,即32個phy晶元。但是實際上一般不會這麼使用,首先在一般的工程中用不到這麼多晶元,其次就是fpga的引腳往往有很多,也不會如此的節省引腳。

那麼如何給定phy晶元的實體地址呢?一般來說,phy晶元的實體地址都是通過phy晶元管腳連線的電阻的上拉下拉決定的。即當你板子焊接好後,phy的實體地址就確定了,除了改變硬體連線之外,沒有其它辦法改變phy晶元的實體地址。

以博通晶元為例,此晶元支援兩種介面:mii和rgmii。在上文提到的pos過程中,根據控制引腳的電阻上拉下拉決定。

以mii為例

讀者可以把phy晶元的介面簡單的理解為兩部分,其一為控制介面,包括mdc, mdio兩個管腳;其二為通訊管腳,包括txclk, txd, txen, rxclk, rxd, rxdv等訊號。

控制管腳用於了解和控制phy晶元的工作狀態,通過讀取和寫入暫存器資料的方式了解當前phy晶元的工作狀態。mdio是一種序列通訊方式,每次讀取或者寫入16位資料,至於每一位資料代表什麼,就請各位讀者去看對應晶元的器件手冊了。其中mdc起到的是同步時鐘的作用,其每個週期應該傳送和接收mdio乙個bit資料。以筆者使用的,裕太車通的yt8512的mii規定為例:根據工作模式的不同,如果工作在100m工作模式下,mdc應該為25mhz的時鐘,如果工作在10m工作模式下,mdc應該是2。5mhz的時鐘。

通訊管腳就更好理解了,就是傳送和接收資料的管腳。當傳送訊號的時候txen作為傳送訊號的使能位,將其置為高電平後只需按照txclk時鐘把要傳送的資料賦給txd埠就行了;同理,當接收訊號的時候當rxdv置為高電平意味著傳送的資訊已經開始到達phy晶元,只需按照rxclk時鐘把rxd訊號儲存起來就好。

所謂mdio匯流排通訊即fpga和phy晶元之間控制介面的通訊方式,根據fpga讀和寫操作的不同,又分為兩種不同幀格式,這個幀都是fpga傳送給phy晶元的,分為以下幾個部分:

前導碼(pre):

器件手冊上為preameble,一般是32個或者32個以上bit的高電平,用來提醒phy晶元資料將要來臨。

起始碼(st):

器件手冊上為start of frame。以0,1作為傳送幀的起始位。即先傳送乙個低電平,和前面32個高電平分隔開,再傳送乙個高電平。

操作碼(op):

opration code。用來使phy晶元區分這幀資料是讀操作還是寫操作。如果是讀指令,傳送1,0;如果是寫指令,傳送0,1;

phy的實體地址(phyad):

phy address。phy晶元的實體地址,用於區分特定的phy晶元,在原則上講,一條mdio匯流排可以驅動32個phy晶元,但是實際上往往不會這麼做。如果讀者朋友們使用的是fpga開發板的話,往往只有幾個phy晶元,因為fpga的並行操作特點,還有很可能是每個phy晶元單獨有一根mdio匯流排連線,但是值得說明的是,這個5bit資料是不可或缺的。請讀者朋友們仔細讀器件手冊,弄清楚相應的phy晶元對應的實體地址。

暫存器位址(regad):

register address。 phy晶元往往有很多暫存器用於配置相應的工作模式,或者監視晶元的工作狀態,期存器中的資料便是下文中的data資料,往往是16bit的。

轉換碼(ta):

turn around。根據讀寫操作的不同,ta也會有不同的輸入,這很好理解,在寫操作狀態下,fpga只需不停地輸入便可;但是在讀操作狀態下,phy會向fpga返回資料,所以需要兩個時鐘的時間作為緩衝。讀操作下ta為z,0;寫操作下為1,0。

資料(data):

讀出或者寫入的資料,至於這16bit資料每一位代表什麼意思,就需要各位讀者去看相應器件的器件手冊了。

圖為博通晶元的mii介面

//todo

一文讀懂Nginx

問 nginx的負載均衡演算法有什麼?預設是什麼演算法?答 1 輪詢 按請求的時間輪詢查空閒的後端伺服器 2 指定輪詢機率 機率的原因是後端伺服器的效能不均勻,好的多分點,差的少分點 3 固定ip繫結固定伺服器 預設是加權輪詢,就是優先訪問權重高的伺服器 問 nginx是單執行緒的嗎?答 是單執行緒...

一文讀懂SpringMVC

主要講的是dispatcherservlet這個類 ioc其實是乙個map,工程啟動後掃瞄路徑,根據類的全限定名建立bean 問 怎麼根據路徑找到方法?map還存key為 aaa value為該controller例項 問 autowired原理?自定義註解,在載入的時候,掃瞄controller層...

堆疊 一文讀懂

堆疊 stack 是一種先進後出的 操作受限的線性表,也可以直接稱為棧。可以把棧想象成乙個桶一樣,往這個桶裡面一層一層的放東西,先放進去的在裡面,後放進去的東西依次在外面。但取東西的時候就是先取靠近外面的,再依次一層層取裡面的。這就是 後進先出 last in first out 的原則。因此 棧 ...