新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > NCN26010 10Base-T1S器件的基本使用和配置,保姆級攻略來了

NCN26010 10Base-T1S器件的基本使用和配置,保姆級攻略來了

作者: 時間:2024-09-11 來源:安森美 收藏

10Base-T1S器件符合IEEE 802.3cg規(guī)范以及OPEN聯(lián)盟技術委員會6(Open  Alliance,TC6)的SPI(串行外設接口)協(xié)議,并具有各種可選附加功能。

本文引用地址:http://www.butianyuan.cn/article/202409/462859.htm

為了正確可靠地運行,在配置時有一些注意事項,特別是因為該器件在沒有正確配置的情況下無法參與多點數(shù)據(jù)段(multi?drop segment)通信。此外,如果配置不當,還有可能長期干擾整個數(shù)據(jù)段。本應用筆記旨在為用戶提供針對其特定應用的 配置指南。這里僅描述了所需的基本設置,并通過配置示例對這些設置進行了討論。 本文為第一部分,將介紹工作模式、應用信息等。

工作模式

NCN26010 提供 IEEE 802.3cg 標準規(guī)定的強制和可選工作模式,并提供擴展功能:

?CSMA/CD 作為基本工作和后備協(xié)議

?物理層沖突避免機制 (PLCA)

  • 突發(fā)模式

  • 優(yōu)先級模式

?增強噪聲抗擾度 (ENI)


作為一款MAC-PHY(物理層-數(shù)據(jù)鏈路層)器件,NCN26010在一個單一芯片中集成了10Base-T1S物理層器件(Physical Layer Device)和符合IEEE802.3第4款的媒體訪問控制器(Media Access Controller)。這種組合為低成本 MCU 提供了以太網通信功能,具備至少運行在15MHz且可軟件實現(xiàn)TCP/IP協(xié)議棧(例如,F(xiàn)reeRTOS+)的SPI接口。


我們將重點介紹OPEN聯(lián)盟 MACPHY SPI 協(xié)議的基本功能。有關詳細信息,建議用戶查閱的OPEN聯(lián)盟 TC6 文檔1.0 版。


為了說明該部分的基本用途,本應用筆記首先討論了如何讀寫配置寄存器,以及如何通過 SPI 接口發(fā)送實際以太網幀數(shù)據(jù)。


接下來將介紹一組基本配置以及 MAC 內部地址過濾器(Address Filter)和過濾器掩碼(Filter Mask)的使用。


圖 1. 簡化框圖


應用信息

SPI 接口

NCN26010 實現(xiàn)了 OPEN聯(lián)盟 TC6 SPI 協(xié)議的所有必備功能。 該協(xié)議使用 SPI 接口接收和發(fā)送以太網幀,并通過所謂的控制命令事務交換配置數(shù)據(jù)。

通過查看32位長通信報頭(Header)的最高有效位(MSB),可以區(qū)分控制事務和數(shù)據(jù)事務。


控制命令報頭

當?shù)?1位(DNC = 數(shù)據(jù) – 非命令)被置為0時,表示這是一個控制命令??刂泼畹母袷饺缦拢?/span>

圖 2. 控制命令格式


數(shù)據(jù)報頭

為了傳輸以太網數(shù)據(jù)(雙向),上位機需要發(fā)送有效的數(shù)據(jù)傳輸報頭,隨后緊跟實際的以太網數(shù)據(jù)。數(shù)據(jù)傳輸報頭的特征是第31位被置1。以下是與NCN26010器件使用相關的數(shù)據(jù)報頭字段。

圖 3. 數(shù)據(jù)報頭字段


需要注意的是,在NCN26010的應用中,只使用 NORX、DV、SV、SWO、EV、EBO 和強制(奇數(shù))校驗 P 字段。所有其他位建議始終發(fā)送0。


讀寫配置和狀態(tài)寄存器

要寫入或讀取單個寄存器,總共需要向 NCN26010 10Base-T1S MACPHY 發(fā)送 12 個字節(jié)。


控制命令以命令控制報頭開頭,隨后是:

  • 對于寄存器寫入控制事務(寄存器寫入),包含32位寄存器內容和32位占位數(shù)據(jù)(dummy data)

  • 對于讀取控制事務(寄存器讀?。?,包含64位占位數(shù)據(jù)


SPI作為一種雙向全雙工通信方式,每傳輸/接收一位數(shù)據(jù)就需要一個SCK(串行時鐘)跳變。為了在寄存器讀寫事務中接收適當數(shù)量的字節(jié),MCU上位機需要通過MOSI線路向NCN26010器件發(fā)送占位字節(jié)(dummy bytes)。


連接的MCU必須能夠在不斷開MACPHY的SPI芯片選擇的情況下完成整個事務。


為寄存器讀寫準備兩個 12 字節(jié)長的數(shù)組似乎最為簡單。在數(shù)組中填入正確的數(shù)據(jù)(報頭和寫入數(shù)據(jù)),然后通過 SPI 以 12 字節(jié)的批量傳輸方式發(fā)送,同時將結果接收到 12 字節(jié)的接收緩沖區(qū)中。


寄存器讀取示例:

應用程序希望讀取位于 MMS0 地址 0x0001 的 MACPHY 的 SPI 識別寄存器。


首先,我們需要生成一個適當?shù)膱箢^:按照此主題確定報頭:


圖4


確定報頭后,在數(shù)組中填入零字節(jié)進行讀取操作。

這將提供一個通過 MOSI 發(fā)送、通過 MISO 接收的字節(jié)數(shù)組,其內容如下:

圖5


讀取該寄存器的程序例程必須查看數(shù)據(jù)流的最后兩個 32 位字。 倒數(shù)第二個 32 位字(回顯報頭,字節(jié) 4 至 7)應等于通過 MOSI 線發(fā)送到 MACPHY 的命令報頭,而最后一個 32 位字則包含寄存器的實際數(shù)據(jù)。請注意,寄存器讀取總是返回32位字的寄存器內容,即使基礎寄存器僅包含16位可用內容。


當由于使用無效的奇偶校驗位計算方式導致報頭格式錯誤,或SPI傳輸錯誤造成報頭出現(xiàn)奇偶校驗錯誤時,回顯的控制報頭及所有后續(xù)的32位字都將變?yōu)?x40000000,這表明存在“報頭錯誤,HEADER BAD”狀況。因此,MACPHY將忽略該命令。連接的上位機可以利用該信息來檢測控制命令(Control Command)錯誤,并觸發(fā)重新傳輸正確的控制命令。


寄存器寫入示例:

假設您想要向NCN26010內部的MAC Control 0寄存器寫入數(shù)據(jù),以便在集成的MAC與PHY之間啟用TX(發(fā)送)和RX(接收)傳輸,同時讓MACPHY計算以太網幀的幀校驗序列(FCS),以減輕 MCU 的計算負擔。

請查閱NCN26010的數(shù)據(jù)手冊以找到MAC CONTROL0寄存器。它位于 MMS 1(內存映射選擇組 1)中,地址為 0x0000。


要啟用TX和RX,并且讓MAC計算并自動附加FCS(幀校驗序列)到它將發(fā)送的每個以太網幀上,需要在寄存器中設置第 8 位(FCSA)、第 1 位(TXEN)和第 0 位(RXEN)。這將產生一個包含 0x00000103 值的待寫入的數(shù)據(jù)字。


與上述寄存器讀取示例類似,我們首先需要確定單個寄存器寫入的正確控制命令報頭。按照上述方案,我們可以得到:

圖6


確定報頭后,我們就可以在數(shù)組中填入要寫入寄存器的數(shù)據(jù)。 這樣我們就得到了一個字節(jié)數(shù)組,通過 MOSI 發(fā)送,通過 MISO 接收,內容如下:

圖7


請注意,奇偶校驗的工作方式與寄存器讀取示例相同。如果報頭中的奇偶校驗位出現(xiàn)錯誤,則隨后的 32 位字將被設置為 0x40000000。在這種情況下,MACPHY 不會改變寄存器的內容。連接的 MCU 必須相應地處理這種情況,使用完整的報頭重新發(fā)送寄存器寫入事務。此外,重要的是要先發(fā)送 MSB 數(shù)據(jù)。


下面的代碼片段提供了一個生成命令事務報頭的函數(shù)實現(xiàn)示例:

圖8


上述示例說明了如何生成有效的控制事務,以支持單個寄存器的讀寫操作。

有關如何在一次 SPI 傳輸中讀取連續(xù)寄存器地址的詳細信息,建議本應用筆記的讀者查閱OPEN聯(lián)盟 TC6 文檔。


發(fā)送和接收以太網幀

OA-TC6 協(xié)議的設計不僅允許通過 SPI 接口實現(xiàn)器件配置,而且還能利用同一接口以半雙工或全雙工方式雙向傳輸以太網幀,具體取決于上位機系統(tǒng)上運行軟件的功能而定。但請注意,混合數(shù)據(jù)段上的實際以太網通信始終是半雙工的。 以太網幀以分塊(Chuck)的形式進行雙向傳輸。


數(shù)據(jù)塊(Data Chunks)的概念

NCN26010 執(zhí)行 OA SPI 協(xié)議,通過“數(shù)據(jù)塊”(data chunks)與連接的上位機設備或系統(tǒng)傳輸以太網數(shù)據(jù)。


數(shù)據(jù)塊是以太網幀的一部分,或者在較短的幀中,它可以是整個以太網幀。在發(fā)送數(shù)據(jù)時,數(shù)據(jù)塊包含一個數(shù)據(jù)報頭,其后是預定義數(shù)量的有效(pay load)數(shù)據(jù)。NCN26010可以配置每個數(shù)據(jù)塊的pay load數(shù)據(jù)為8、16、32或64字節(jié),默認設置為64字節(jié)。當上位機從NCN26010 MACPHY接收數(shù)據(jù)時,首先發(fā)送pay load數(shù)據(jù),之后跟隨一個32位的數(shù)據(jù)報尾,報尾向上位機指示:

  • 發(fā)送的數(shù)據(jù)中是否包含有效的以太網幀數(shù)據(jù)。

  • 在上一次傳輸中是否發(fā)現(xiàn)了錯誤。

  • NCN26010 接收緩沖區(qū)中準備讀取的數(shù)據(jù)塊的可用數(shù)量。

  • 當前可用于 TX 數(shù)據(jù)傳輸?shù)目諗?shù)據(jù)塊的數(shù)量。


如果整個以太網幀的長度超過了單個數(shù)據(jù)塊所能傳輸?shù)臄?shù)據(jù)量,則需要將其切割成適合數(shù)據(jù)塊的片段。只要 NCN26010 設備內部的 4 k byte 發(fā)送和接收緩沖區(qū)有足夠的空間,這一概念就支持在 NCN26010 和上位機設備之間中斷以太網幀交換而不丟失數(shù)據(jù)。


以太網幀數(shù)據(jù)可能包含也可能不包含 4 字節(jié) FCS(幀校驗序列),具體取決于如何配置。當配置為計算并自動附加 FCS 時,由上位機設備向 NCN26010 發(fā)送數(shù)據(jù)時預計不會附加 FCS。同樣,當啟用NCN26010內部的FCS檢查時,輸入幀無需提供FCS,因為無效幀(FCS校驗錯誤的幀)將不會存儲在RX緩沖區(qū)(即被丟棄)。


NCN26010 可配置為存儲轉發(fā)(Store and Forward)模式或直通(Cut Though)工作模式。


在“存儲轉發(fā)”模式下,完整的數(shù)據(jù)幀會在被發(fā)送到單對絞線以太網數(shù)據(jù)段或從以太網媒介接收之前,全部存儲在器件的緩沖區(qū)內。


直通模式對上位機上運行的軟件的延遲和吞吐量性能有更嚴格的要求,因為上位機必須始終跟上以太網數(shù)據(jù)的輸入和輸出速度。在使用多任務操作系統(tǒng)時,長時間的中斷服務例程或不適宜的任務切換會導致通信速度減慢,從而因TX緩沖區(qū)欠載(underruns)或RX緩沖區(qū)超限(overruns)而導致數(shù)據(jù)丟失。


本應用筆記將不涉及使用NCN26010的“直通”模式進行數(shù)據(jù)交換的內容,而是主要聚焦于“存儲轉發(fā)”模式的操作。


在 "存儲轉發(fā) "模式下運行時,上位機需要時刻關注緩沖區(qū)的填充水平,尤其是 RX 端或下行(downstream)數(shù)據(jù)流。對于 TX 上行(upstream)數(shù)據(jù)流,上位機上運行的軟件可以輕松地延緩數(shù)據(jù)發(fā)送,直到所需的足夠數(shù)據(jù)塊數(shù)量(即,與當前計劃傳輸?shù)囊蕴W幀大小相匹配的數(shù)量) 由于 上位機 無法直接控制 RX ( downstream )數(shù)據(jù)流,若設備以半雙工方式交換數(shù)據(jù),應優(yōu)先處理 RX 數(shù)據(jù)流 。


除其他配置選項外,數(shù)據(jù)塊大?。╟hunk size)的選擇會對將NCN26010連接到上位機MCU或系統(tǒng)的SPI接口施加最低速度要求。


在使用簡單配置時,只允許新的以太網幀從數(shù)據(jù)塊的開頭開始,所需的SPI速度取決于以太網幀的長度以及數(shù)據(jù)塊的大?。阂韵聢D表說明了這種關系。


圖9


從這張圖表中,這種方法的局限性變得顯而易見。當應用主要使用短幀時,根據(jù)NCN26010的配置方式,較小的數(shù)據(jù)塊大小可能會帶來更高的吞吐量。在這種簡單的配置中,極端情況是使用長度為65字節(jié)的幀和64字節(jié)大小的數(shù)據(jù)塊。這將需要21 MHz的SPI速度。


NCN26010設計支持串行時鐘(SCLK)上的SPI速度高達25 MHz。因此即使在這種情況下,MACPHY 的速度也足以傳輸所需的數(shù)據(jù);然而,應用程序或驅動程序必須同時處理 RX 和 TX。隨著以太網幀大小的增大,默認的 64 字節(jié)數(shù)據(jù)塊大小需要降低 SPI 接口的時鐘頻率,以保證數(shù)據(jù)傳輸。


在多點(multi?drop)傳輸環(huán)境中,我們可以假設大部分數(shù)據(jù)流都在 RX 方向。由于 10Base-T1S 的半雙工特性,即使以半雙工方式處理 SPITX 和 RX 數(shù)據(jù)流,25 MHz SCLK 也能在大多數(shù)情況下提供穩(wěn)定的數(shù)據(jù)流而不會丟失數(shù)據(jù)。


當 NCN26010 需要在單對以太網數(shù)據(jù)段上傳輸數(shù)據(jù)時,上位機需要發(fā)送一系列包含完整以太網幀數(shù)據(jù)的有效數(shù)據(jù)塊。


新的以太網幀將從數(shù)據(jù)報頭的 SV 標志(起始有效)置 1 開始。在簡單情況下,幀只允許在CS(片選)信號被置位后的數(shù)據(jù)塊起始處開始,起始字偏移量(Start Word Offset)將始終為0。如果以太網幀能夠容納在一個單獨的數(shù)據(jù)塊內,那么有效數(shù)據(jù)(payload)最后一個字節(jié)的EV(End Valid,結束有效)標志也需要被設置。請注意,當要傳輸?shù)囊蕴W幀數(shù)據(jù)短于以太網幀長度(包括源地址/目的地址、長度、字段/其他類型和 FCS)的最小要求 64 字節(jié)時,則NCN26010內的MAC會自動添加填充字節(jié),以將幀擴展到其最小所需長度。當NCN26010被配置為不自動添加FCS時,填充字節(jié)以及FCS才需要由上位機提供。


與控制事務報頭的計算類似,數(shù)據(jù)事務報頭也可按下面的示例代碼生成:

圖10


發(fā)送以太網幀

在這里,我們僅描述了被稱為 "TX 幀在數(shù)據(jù)塊邊界結束 "和 "每個 TX 幀都匹配數(shù)據(jù)塊 "的 TX 幀發(fā)送情況。詳見 [2]"圖 8:發(fā)送數(shù)據(jù)塊案例"。

我們需要區(qū)分以三種不同方式處理的幀數(shù)據(jù)情況:

1.幀完全匹配一個數(shù)據(jù)塊

2.以太網幀匹配兩個數(shù)據(jù)塊

3.以太網幀需要兩個以上的數(shù)據(jù)塊


在第一種情況下,用戶需要發(fā)送一個數(shù)據(jù)報頭,緊隨其后的是實際的幀數(shù)據(jù)。該數(shù)據(jù)報頭需要設置以下這些位:

. SV = 1

. DV = 1

. EV = 1


EBO(End Byte Offset,結束字節(jié)偏移)指向有效數(shù)據(jù)的最后一個字節(jié)。需要注意的是,即使以太網數(shù)據(jù)沒有占滿整個數(shù)據(jù)塊(例如,ARP廣播幀長度為46字節(jié),所以默認的64字節(jié)數(shù)據(jù)塊并不會被完全利用),應用程序仍然需要始終發(fā)送全長數(shù)據(jù)塊。


在使用64字節(jié)數(shù)據(jù)塊且需要發(fā)送一個長度為46字節(jié)的ARP廣播幀的情況下,EBO將指向第45個字節(jié),因為在數(shù)據(jù)塊中的第一個字節(jié)索引為0。


在第二種情況下,需要兩個數(shù)據(jù)塊來容納payload數(shù)據(jù),那么第一個數(shù)據(jù)報頭需要設置:

. SV = 1

. DV = 1

. EV = 0

. EBO = 0

. SWO = 0


而幀中的第二個也是最后一個數(shù)據(jù)報頭需要設置:

. SV = 0

. DV = 1

. EV = 1

. EBO = position of last valid pay load byte (最后一個有效payload字節(jié)的位置 )

. SWO = 0


如果向 NCN26010 MACPHY 傳輸payload數(shù)據(jù)時需要兩個以上的數(shù)據(jù)塊,則第一個報頭與前一種情況相似:

. SV = 1

. DV = 1

. EV = 0

. EBO = 0

. SWO = 0


在第一個數(shù)據(jù)塊之后和最后一個數(shù)據(jù)塊之前的所有報頭都需要:

. 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字節(jié)的位置 )

. SWO = 0


由于在數(shù)據(jù)傳輸前要先傳輸報頭,因此向 MACPHY 發(fā)送數(shù)據(jù)塊的應用程序總是要比數(shù)據(jù)塊的payload數(shù)據(jù)多發(fā)送 4 個字節(jié)。


由此,8 字節(jié)的數(shù)據(jù)塊需要 12 字節(jié),16 字節(jié)的數(shù)據(jù)塊需要 20 字節(jié),32 字節(jié)的數(shù)據(jù)塊需要 36 字節(jié),64 字節(jié)的數(shù)據(jù)塊需要 68 字節(jié)。


請注意,即使數(shù)據(jù)塊未全部使用,這些長度也是固定的。在 EV=1 數(shù)據(jù)塊的 EBO 之后發(fā)送的數(shù)據(jù)為 "不關心 "數(shù)據(jù),可以是任何隨機數(shù)據(jù)。為方便使用,建議在數(shù)據(jù)塊中填入全為 0 的字節(jié)。


與發(fā)送控制事務一樣,數(shù)據(jù)事務也是雙向同時進行的。 通過 SPI 接口向 NCN26010 發(fā)送數(shù)據(jù)時,上位機將通過 NCN26010 的 MISO(主入從出,Master In Slave Out)引腳接收 MACPHY 返回的相同字節(jié)數(shù)。通常情況下,數(shù)據(jù)從一個足夠大的緩沖區(qū)發(fā)送和接收,該緩沖區(qū)可容納發(fā)送幀數(shù)據(jù)所需的所有數(shù)據(jù)塊。輸入的數(shù)據(jù)將進入第二個(即接收)緩沖區(qū)。



接收以太網數(shù)據(jù)

發(fā)送到 MACPHY 的數(shù)據(jù)在每個數(shù)據(jù)塊之前帶有 32 位報頭信息,MACPHY 發(fā)送出的數(shù)據(jù)塊在實際數(shù)據(jù)之后有一個 32 位報尾信息。


報尾包含了上位機用來引導進一步通信的信息,無論其是發(fā)送還是接收更多數(shù)據(jù)。報尾的各字段在文獻[2]的第7.3.7節(jié)中有詳細解釋。NCN26010器件不提供OPEN聯(lián)盟定義的可選時間戳功能,因此RTSA(位7)和RTSP(位6)字段將不使用,始終為0。


NCN26010 器件的數(shù)據(jù)報尾結構如下:

圖11


這些字段可概括為以下功能:


以太網數(shù)據(jù)交換最簡單但也最慢的方式是半雙工方式。在發(fā)送幀時,如果在數(shù)據(jù)報頭中設置了 NORX 標志,NCN26010 就會被指示在接收上位機發(fā)送的 TX 幀數(shù)據(jù)時,不向上位機發(fā)送以太網數(shù)據(jù)。


同樣,當數(shù)據(jù)報頭的 DV 標志設置為零時,上位機可在不提供 TX 數(shù)據(jù)的情況下接收幀數(shù)據(jù)。


在這種工作模式下,連接的上位機應該優(yōu)先讀取幀而非發(fā)送幀,或者以“公平共享”的方式交替進行發(fā)送和接收。建議是盡量快速地清空接收緩沖區(qū)。



關鍵詞: 安森美 NCN26010

評論


相關推薦

技術專區(qū)

關閉