NCN26010 10Base-T1S器件符合IEEE 802.3cg規范以及OPEN聯盟技術委員會6(Open Alliance,TC6)的SPI(串行外設接口)協議,并具有各種可選附加功能。
為了正確可靠地運行,在配置NCN26010時有一些注意事項,特別是因為該器件在沒有正確配置的情況下無法參與多點數據段(multi?drop segment)通信。此外,如果配置不當,還有可能長期干擾整個數據段。本應用筆記旨在為用戶提供針對其特定應用的 NCN26010 配置指南。這里僅描述了所需的基本設置,并通過配置示例對這些設置進行了討論。本文為第一部分,將介紹工作模式、應用信息等。
工作模式
NCN26010 提供 IEEE 802.3cg 標準規定的強制和可選工作模式,并提供擴展功能:
?CSMA/CD 作為基本工作和后備協議
?物理層沖突避免機制 (PLCA)
突發模式
優先級模式
?增強噪聲抗擾度 (ENI)
作為一款MAC-PHY(物理層-數據鏈路層)器件,NCN26010在一個單一芯片中集成了10Base-T1S物理層器件(Physical Layer Device)和符合IEEE802.3第4款的媒體訪問控制器(Media Access Controller)。這種組合為低成本 MCU 提供了以太網通信功能,具備至少運行在15MHz且可軟件實現TCP/IP協議棧(例如,FreeRTOS+)的SPI接口。
我們將重點介紹OPEN聯盟 MACPHY SPI 協議的基本功能。有關詳細信息,建議用戶查閱的OPEN聯盟 TC6 文檔1.0 版。
為了說明該部分的基本用途,本應用筆記首先討論了如何讀寫配置寄存器,以及如何通過 SPI 接口發送實際以太網幀數據。
接下來將介紹一組基本配置以及 MAC 內部地址過濾器(Address Filter)和過濾器掩碼(Filter Mask)的使用。
圖 1. 簡化框圖
應用信息
SPI 接口
NCN26010 實現了 OPEN聯盟 TC6 SPI 協議的所有必備功能。該協議使用 SPI 接口接收和發送以太網幀,并通過所謂的控制命令事務交換配置數據。
通過查看32位長通信報頭(Header)的最高有效位(MSB),可以區分控制事務和數據事務。
控制命令報頭
當第31位(DNC = 數據 – 非命令)被置為0時,表示這是一個控制命令??刂泼畹母袷饺缦拢?/p>
圖 2. 控制命令格式
數據報頭
為了傳輸以太網數據(雙向),上位機需要發送有效的數據傳輸報頭,隨后緊跟實際的以太網數據。數據傳輸報頭的特征是第31位被置1。以下是與NCN26010器件使用相關的數據報頭字段。
圖 3. 數據報頭字段
需要注意的是,在NCN26010的應用中,只使用 NORX、DV、SV、SWO、EV、EBO 和強制(奇數)校驗 P 字段。所有其他位建議始終發送0。
讀寫配置和狀態寄存器
要寫入或讀取單個寄存器,總共需要向 NCN26010 10Base-T1S MACPHY 發送 12 個字節。
控制命令以命令控制報頭開頭,隨后是:
對于寄存器寫入控制事務(寄存器寫入),包含32位寄存器內容和32位占位數據(dummy data)
對于讀取控制事務(寄存器讀?。?,包含64位占位數據
SPI作為一種雙向全雙工通信方式,每傳輸/接收一位數據就需要一個SCK(串行時鐘)跳變。為了在寄存器讀寫事務中接收適當數量的字節,MCU上位機需要通過MOSI線路向NCN26010器件發送占位字節(dummy bytes)。
連接的MCU必須能夠在不斷開MACPHY的SPI芯片選擇的情況下完成整個事務。
為寄存器讀寫準備兩個 12 字節長的數組似乎最為簡單。在數組中填入正確的數據(報頭和寫入數據),然后通過 SPI 以 12 字節的批量傳輸方式發送,同時將結果接收到 12 字節的接收緩沖區中。
寄存器讀取示例:
應用程序希望讀取位于 MMS0 地址 0x0001 的 MACPHY 的 SPI 識別寄存器。
首先,我們需要生成一個適當的報頭:按照此主題確定報頭:
圖4
確定報頭后,在數組中填入零字節進行讀取操作。
這將提供一個通過 MOSI 發送、通過 MISO 接收的字節數組,其內容如下:
圖5
讀取該寄存器的程序例程必須查看數據流的最后兩個 32 位字。倒數第二個 32 位字(回顯報頭,字節 4 至 7)應等于通過 MOSI 線發送到 MACPHY 的命令報頭,而最后一個 32 位字則包含寄存器的實際數據。請注意,寄存器讀取總是返回32位字的寄存器內容,即使基礎寄存器僅包含16位可用內容。
當由于使用無效的奇偶校驗位計算方式導致報頭格式錯誤,或SPI傳輸錯誤造成報頭出現奇偶校驗錯誤時,回顯的控制報頭及所有后續的32位字都將變為0x40000000,這表明存在“報頭錯誤,HEADER BAD”狀況。因此,MACPHY將忽略該命令。連接的上位機可以利用該信息來檢測控制命令(Control Command)錯誤,并觸發重新傳輸正確的控制命令。
寄存器寫入示例:
假設您想要向NCN26010內部的MAC Control 0寄存器寫入數據,以便在集成的MAC與PHY之間啟用TX(發送)和RX(接收)傳輸,同時讓MACPHY計算以太網幀的幀校驗序列(FCS),以減輕 MCU 的計算負擔。
請查閱NCN26010的數據手冊以找到MAC CONTROL0寄存器。它位于 MMS 1(內存映射選擇組 1)中,地址為 0x0000。
要啟用TX和RX,并且讓MAC計算并自動附加FCS(幀校驗序列)到它將發送的每個以太網幀上,需要在寄存器中設置第 8 位(FCSA)、第 1 位(TXEN)和第 0 位(RXEN)。這將產生一個包含 0x00000103 值的待寫入的數據字。
與上述寄存器讀取示例類似,我們首先需要確定單個寄存器寫入的正確控制命令報頭。按照上述方案,我們可以得到:
圖6
確定報頭后,我們就可以在數組中填入要寫入寄存器的數據。這樣我們就得到了一個字節數組,通過MOSI發送,通過MISO接收,內容如下:
圖7
請注意,奇偶校驗的工作方式與寄存器讀取示例相同。如果報頭中的奇偶校驗位出現錯誤,則隨后的 32 位字將被設置為 0x40000000。在這種情況下,MACPHY 不會改變寄存器的內容。連接的 MCU 必須相應地處理這種情況,使用完整的報頭重新發送寄存器寫入事務。此外,重要的是要先發送 MSB 數據。
下面的代碼片段提供了一個生成命令事務報頭的函數實現示例:
圖8
上述示例說明了如何生成有效的控制事務,以支持單個寄存器的讀寫操作。
有關如何在一次 SPI 傳輸中讀取連續寄存器地址的詳細信息,建議本應用筆記的讀者查閱OPEN聯盟 TC6 文檔。
發送和接收以太網幀
OA-TC6 協議的設計不僅允許通過 SPI 接口實現器件配置,而且還能利用同一接口以半雙工或全雙工方式雙向傳輸以太網幀,具體取決于上位機系統上運行軟件的功能而定。但請注意,混合數據段上的實際以太網通信始終是半雙工的。以太網幀以分塊(Chuck)的形式進行雙向傳輸。
數據塊(Data Chunks)的概念
NCN26010 執行 OA SPI 協議,通過“數據塊”(data chunks)與連接的上位機設備或系統傳輸以太網數據。
數據塊是以太網幀的一部分,或者在較短的幀中,它可以是整個以太網幀。在發送數據時,數據塊包含一個數據報頭,其后是預定義數量的有效(pay load)數據。NCN26010可以配置每個數據塊的pay load數據為8、16、32或64字節,默認設置為64字節。當上位機從NCN26010 MACPHY接收數據時,首先發送pay load數據,之后跟隨一個32位的數據報尾,報尾向上位機指示:
發送的數據中是否包含有效的以太網幀數據。
在上一次傳輸中是否發現了錯誤。
NCN26010接收緩沖區中準備讀取的數據塊的可用數量。
當前可用于TX數據傳輸的空數據塊的數量。
如果整個以太網幀的長度超過了單個數據塊所能傳輸的數據量,則需要將其切割成適合數據塊的片段。只要 NCN26010 設備內部的 4 k byte 發送和接收緩沖區有足夠的空間,這一概念就支持在 NCN26010 和上位機設備之間中斷以太網幀交換而不丟失數據。
以太網幀數據可能包含也可能不包含 4 字節 FCS(幀校驗序列),具體取決于如何配置。當配置為計算并自動附加 FCS 時,由上位機設備向 NCN26010 發送數據時預計不會附加 FCS。同樣,當啟用NCN26010內部的FCS檢查時,輸入幀無需提供FCS,因為無效幀(FCS校驗錯誤的幀)將不會存儲在RX緩沖區(即被丟棄)。
NCN26010 可配置為存儲轉發(Store and Forward)模式或直通(Cut Though)工作模式。
在“存儲轉發”模式下,完整的數據幀會在被發送到單對絞線以太網數據段或從以太網媒介接收之前,全部存儲在器件的緩沖區內。
直通模式對上位機上運行的軟件的延遲和吞吐量性能有更嚴格的要求,因為上位機必須始終跟上以太網數據的輸入和輸出速度。在使用多任務操作系統時,長時間的中斷服務例程或不適宜的任務切換會導致通信速度減慢,從而因TX緩沖區欠載(underruns)或RX緩沖區超限(overruns)而導致數據丟失。
本應用筆記將不涉及使用NCN26010的“直通”模式進行數據交換的內容,而是主要聚焦于“存儲轉發”模式的操作。
在 "存儲轉發 "模式下運行時,上位機需要時刻關注緩沖區的填充水平,尤其是 RX 端或下行(downstream)數據流。對于 TX 上行(upstream)數據流,上位機上運行的軟件可以輕松地延緩數據發送,直到所需的足夠數據塊數量(即,與當前計劃傳輸的以太網幀大小相匹配的數量)由于上位機無法直接控制RX(downstream)數據流,若設備以半雙工方式交換數據,應優先處理RX數據流。
除其他配置選項外,數據塊大小(chunk size)的選擇會對將NCN26010連接到上位機MCU或系統的SPI接口施加最低速度要求。
在使用簡單配置時,只允許新的以太網幀從數據塊的開頭開始,所需的SPI速度取決于以太網幀的長度以及數據塊的大小:以下圖表說明了這種關系。
圖9
從這張圖表中,這種方法的局限性變得顯而易見。當應用主要使用短幀時,根據NCN26010的配置方式,較小的數據塊大小可能會帶來更高的吞吐量。在這種簡單的配置中,極端情況是使用長度為65字節的幀和64字節大小的數據塊。這將需要21 MHz的SPI速度。
NCN26010設計支持串行時鐘(SCLK)上的SPI速度高達25 MHz。因此即使在這種情況下,MACPHY 的速度也足以傳輸所需的數據;然而,應用程序或驅動程序必須同時處理 RX 和 TX。隨著以太網幀大小的增大,默認的 64 字節數據塊大小需要降低 SPI 接口的時鐘頻率,以保證數據傳輸。
在多點(multi?drop)傳輸環境中,我們可以假設大部分數據流都在 RX 方向。由于 10Base-T1S 的半雙工特性,即使以半雙工方式處理 SPITX 和 RX 數據流,25 MHz SCLK 也能在大多數情況下提供穩定的數據流而不會丟失數據。
當 NCN26010 需要在單對以太網數據段上傳輸數據時,上位機需要發送一系列包含完整以太網幀數據的有效數據塊。
新的以太網幀將從數據報頭的 SV 標志(起始有效)置 1 開始。在簡單情況下,幀只允許在CS(片選)信號被置位后的數據塊起始處開始,起始字偏移量(Start Word Offset)將始終為0。如果以太網幀能夠容納在一個單獨的數據塊內,那么有效數據(payload)最后一個字節的EV(End Valid,結束有效)標志也需要被設置。請注意,當要傳輸的以太網幀數據短于以太網幀長度(包括源地址/目的地址、長度、字段/其他類型和 FCS)的最小要求 64 字節時,則NCN26010內的MAC會自動添加填充字節,以將幀擴展到其最小所需長度。當NCN26010被配置為不自動添加FCS時,填充字節以及FCS才需要由上位機提供。
與控制事務報頭的計算類似,數據事務報頭也可按下面的示例代碼生成:
圖10
發送以太網幀
在這里,我們僅描述了被稱為 "TX 幀在數據塊邊界結束 "和 "每個 TX 幀都匹配數據塊 "的 TX 幀發送情況。詳見 [2]"圖 8:發送數據塊案例"。
我們需要區分以三種不同方式處理的幀數據情況:
1.幀完全匹配一個數據塊
2.以太網幀匹配兩個數據塊
3.以太網幀需要兩個以上的數據塊
在第一種情況下,用戶需要發送一個數據報頭,緊隨其后的是實際的幀數據。該數據報頭需要設置以下這些位:
. SV = 1
. DV = 1
. EV = 1
EBO(End Byte Offset,結束字節偏移)指向有效數據的最后一個字節。需要注意的是,即使以太網數據沒有占滿整個數據塊(例如,ARP廣播幀長度為46字節,所以默認的64字節數據塊并不會被完全利用),應用程序仍然需要始終發送全長數據塊。
在使用64字節數據塊且需要發送一個長度為46字節的ARP廣播幀的情況下,EBO將指向第45個字節,因為在數據塊中的第一個字節索引為0。
在第二種情況下,需要兩個數據塊來容納payload數據,那么第一個數據報頭需要設置:
. SV = 1
. DV = 1
. EV = 0
. EBO = 0
. SWO = 0
而幀中的第二個也是最后一個數據報頭需要設置:
. SV = 0
. DV = 1
. EV = 1
. EBO = position of last valid pay load byte (最后一個有效payload字節的位置 )
. SWO = 0
如果向 NCN26010 MACPHY 傳輸payload數據時需要兩個以上的數據塊,則第一個報頭與前一種情況相似:
. SV = 1
. DV = 1
. EV = 0
. EBO = 0
. SWO = 0
在第一個數據塊之后和最后一個數據塊之前的所有報頭都需要:
. SV = 0
. DV = 1
. EV = 0
. EBO = 0
. SWO = 0
Or 0xA0200000.
最后一個報頭需要設置:
. SV = 0
. DV = 1
. EV = 1
. EBO = position of last valid pay load byte (最后一個有效payload字節的位置 )
. SWO = 0
由于在數據傳輸前要先傳輸報頭,因此向 MACPHY 發送數據塊的應用程序總是要比數據塊的payload數據多發送 4 個字節。
由此,8 字節的數據塊需要 12 字節,16 字節的數據塊需要 20 字節,32 字節的數據塊需要 36 字節,64 字節的數據塊需要 68 字節。
請注意,即使數據塊未全部使用,這些長度也是固定的。在 EV=1 數據塊的 EBO 之后發送的數據為 "不關心 "數據,可以是任何隨機數據。為方便使用,建議在數據塊中填入全為 0 的字節。
與發送控制事務一樣,數據事務也是雙向同時進行的。通過 SPI 接口向 NCN26010 發送數據時,上位機將通過 NCN26010 的 MISO(主入從出,Master In Slave Out)引腳接收 MACPHY 返回的相同字節數。通常情況下,數據從一個足夠大的緩沖區發送和接收,該緩沖區可容納發送幀數據所需的所有數據塊。輸入的數據將進入第二個(即接收)緩沖區。
接收以太網數據
發送到 MACPHY 的數據在每個數據塊之前帶有 32 位報頭信息,MACPHY 發送出的數據塊在實際數據之后有一個 32 位報尾信息。
報尾包含了上位機用來引導進一步通信的信息,無論其是發送還是接收更多數據。報尾的各字段在文獻[2]的第7.3.7節中有詳細解釋。NCN26010器件不提供OPEN聯盟定義的可選時間戳功能,因此RTSA(位7)和RTSP(位6)字段將不使用,始終為0。
NCN26010 器件的數據報尾結構如下:
圖11
這些字段可概括為以下功能:
以太網數據交換最簡單但也最慢的方式是半雙工方式。在發送幀時,如果在數據報頭中設置了 NORX 標志,NCN26010 就會被指示在接收上位機發送的 TX 幀數據時,不向上位機發送以太網數據。
同樣,當數據報頭的 DV 標志設置為零時,上位機可在不提供 TX 數據的情況下接收幀數據。
在這種工作模式下,連接的上位機應該優先讀取幀而非發送幀,或者以“公平共享”的方式交替進行發送和接收。建議是盡量快速地清空接收緩沖區。
未完待續,請持續關注我們。
-
以太網
+關注
關注
40文章
5385瀏覽量
171160 -
接口
+關注
關注
33文章
8526瀏覽量
150861 -
SPI
+關注
關注
17文章
1701瀏覽量
91345 -
Mac
+關注
關注
0文章
1099瀏覽量
51377 -
物理層
+關注
關注
1文章
148瀏覽量
34294
原文標題:NCN26010 10Base-T1S器件的基本使用和配置,保姆級攻略來了
文章出處:【微信號:onsemi-china,微信公眾號:安森美】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論