網絡控制芯片AX88796B系列使用簡介

AX88796B是一款針對嵌入式及工業以太網應用的低引腳數(LQFP-64) Non-PCI以太網控制芯片。AX88796B採用符合業界標準的8/16位SRAM-like主機接口,可與一般8/16/32位微控制器直接連接,無須任何外部邏輯線路。該組件內建符合IEEE 802.3/ IEEE 802.3u協議的10/100Mbps以太網物理層(PHY)及媒體存取控制器(MAC),整合8K*16位SRAM網絡封包緩存器,以高效率的方式進行封包的儲存、檢索與修改。AX88796廣泛支持各項規格包括雙絞線正反接線自動校正(HP Auto-MDIX)、網絡喚醒、低功耗管理及IEEE 802.3x/ backpressure流量控制。

項目需要用以太網進行數據傳輸,所以用到FPGA對AX88796B進行驅動。

1. 特性

  • Non-PCI
  • 8/16位SRAM-like主機接口,完全兼容NE2000
  • MAC+PHY
  • IEEE 802.3/ IEEE 802.3u,10/100Mbps
  • 8k x 16位 SRAM

值得注意的是該芯片“完全兼容NE2000”,NE2000是什麼呢,簡單的說就是網卡標準。我們電腦網卡里面大多用的是Realtek(瑞昱)公司的芯片,所以在在學習過程中可以參考瑞昱的網絡控制器芯片資料,如RTL8019.

2. 結構框圖

從框圖中可以看到芯片集成了MAC和PHY,其工作方式可以簡單的理解爲用戶通過Non-PCI local bus對芯片進行寄存器配置(主要是NE2000 Register),使芯片按照用戶定義的方式進行工作。內部Packet Buffer Management對收發的數據包進行控制和管理(仲裁)。8k x 16bitsSRAM用戶數據緩存。

關於芯片的基本配置,這裏不再贅述,處理參考芯片的Datasheet外,還可以參考《AX88x96B_Software_Programming_Guide_v251》。下面着重說一下,關於芯片收發過程中對環形緩存的理解。

3. 接收

3.1 緩存空間

網卡含有16K字節的RAM,地址爲0x4000-0x7fff,芯片將這些空間按256字節分成一個個buffer(或稱一頁),所以共有64 頁。頁的地址就是地址的高8位,頁地址爲0x40-0x7f。這16K的RAM一部分用來存放接收的數據包,一部分用來存儲待發送的數據包。這麼分的原因是以太網包大小是64 bytes ~1522 bytes之間,這樣可以充分利用空間。

在網絡傳輸中,對以太網包的接收緩存的協調是靠一個叫Buffer Management Logic內部模塊控制,主要功能是:

  • 按包拼接長的數據;
  • 如果一包數據不完整或出問題,AX88x96B將拒絕接收,從而釋放相關包占用的空間;
  • 不斷的計算包空間大小和控制指針,即多少包進來,多少包讀走。

其中第三點應該是關注的重點。

3.2 Receiver Buffer Ring

Receiver Buffer Ring是對緩存機制理解的重點部分。16k RAM空間會有一部分用做接收緩存。接收空間大小用寄存器the Page Start Address Register (PSTART) 和 the Page Stop Address Register (PSTOP) 來定義,二者的值是空間也地址,即0x40-0x7f。緩存的時候,當DMA地址等於PSTOP所存的地址時,DMA又會從PSTART開始,如圖所示就形成了一種環形結構。

同時,要在緩存中完成正確的包的接收並且被主機讀取,還需要兩個動態指針,即The Current Page Register和The Boundary Register。簡單理解,The Current Page Register是寫指針(指包被寫入進Receiver Buffer Ring),而 The Boundary Register是讀指針。初始化狀態下,Page Start Register、The Current Page Register和The Boundary Register均指向同一個地址的buffer。

3.3 接收機制

芯片在接收過程中,收到一包數據,通過DMA轉給環形存儲器,The Current Page Register存的地址就遞增1(完整數據可能是多包)。The Boundary Register存的地址是還未被讀走數據的地址,主機從環形存儲器中讀走一包,則The Boundary Register存的地址遞增1.

在接收過程中,the Buffer Management Logic會進行兩次比較。第一次比較存有DMA地址的下一個buffer的地址和the Page Stop Register中的值,如果兩者相等,說明環形存儲器存了”一圈“了,the buffer management logic會將DMA的地址存入Page Start Address Register指向的buffer中。第二次比較存有DMA地址的下一個buffer的地址和the Boundary Pointer Register指向buffer的地址,如果兩者相等,則忽略下一包,因爲表明之前的包還沒讀走,防止覆蓋數據。

開始接收時,先獲取包頭4個字節的信息主要是NextPage地址和數據長度,分低、高兩個字節。

4. 發送

發送過程相對要簡單一些。16k 的RAM空間,前一部分用於發送緩存。其空間大小其實是由接收緩存的啓示地址決定的,接收地址定了,剩餘的部分就用作發送。


在發送過程中,主要控制的有三個寄存器:a Transmit Page Start Address Register (TPSR) and the Transmit Byte Count Registers (TBCR0, 1),即發送起始地址寄存器以及發送字節計數寄存器(包含兩個寄存器來確定字節數的高低8位)。

在發送組幀過程中需要遵守相應的規定,可以參考手冊。

5. 編程過程簡要說明

5.1 初始化配置

芯片工作前,有上電覆位,讀取寄存器的軟件復位,都操作一遍,注意時序要求。之後對工作類寄存器進行工作模式配置,然後有對上述決定收發緩存大小相關的寄存器進行配置。最後啓動芯片開始工作。這部分可以在編程指南中找到。

如果配置正確,芯片就可以建立物理連接了。

5.2 接收

當芯片開始工作之後,根據需要就去讀取The Current Page Register和The Boundary Register的值,從而判斷有無數據接收。判斷依據可以參考下圖以及編程手冊中的文字說明。


5.3 發送

發送數據前,需要根據發送數據量來判斷所需緩存空間。然後需要檢查一些狀態寄存器,如緩存空間大小、遠端發送緩存空間或者發送命令隊列是否full。之後才能將數據搬進緩存中。最後配置剛纔提到的字節數等寄存器,並啓動發送(發送前還有數據的搬移操作,即從緩存RAM中搬移至遠端DMA)。

參考文獻:

  1. 《AX88796BLF datasheet》;
  2. 《AX88x96B_Software_Programming_Guide_v251》;
  3. 《AX88796總結》(網絡文檔)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章