OPEN Alliance 10BASE-T1x MAC-PHY 序列介面 (TC6) 框架支援¶
簡介¶
IEEE 802.3cg 專案定義了兩個在單對導體上執行的 10 Mbit/s PHY。10BASE-T1L(第 146 條款)是一種長距離 PHY,支援在 1 公里的單對平衡導體上的全雙工點對點操作。10BASE-T1S(第 147 條款)是一種短距離 PHY,支援在 15 米的單對平衡導體上的全/半雙工點對點操作,或在 25 米的單對平衡導體上的半雙工多點匯流排操作。
此外,IEEE 802.3cg 專案還定義了新的物理層衝突避免 (PLCA) 協調子層(第 148 條款),旨在提高 CSMA/CD 媒體訪問方法的確定性。PLCA 與在多點模式下執行的 10BASE-T1S PHY 協同工作。
上述 PHY 旨在覆蓋工業和汽車環境中的低速/低成本應用。IEEE 802.3 在第 22 條款中規定的 MII 介面所需的大量引腳(16 個)是需要解決以實現此目標的主要成本因素之一。
MAC-PHY 解決方案集成了 IEEE 第 4 條款 MAC 和 10BASE-T1x PHY,向主機微控制器公開了一個低引腳數序列外圍介面 (SPI)。這還可以將乙太網功能新增到未整合 MAC 控制器的現有低端微控制器。
概述¶
MAC-PHY 被指定透過單個全雙工序列外圍介面傳輸資料(乙太網幀)和控制(暫存器訪問)事務。
協議概述¶
協議中定義了兩種型別的事務:用於乙太網幀傳輸的資料事務和用於暫存器讀/寫傳輸的控制事務。塊是資料事務的基本元素,由 4 位元組的開銷加上每個塊 64 位元組的有效負載大小組成。乙太網幀透過一個或多個數據塊傳輸。控制事務由一個或多個暫存器讀/寫控制命令組成。
SPI 事務由 SPI 主機透過 CSn 低電平斷言到 MAC-PHY 發起,並以 CSn 高電平撤銷結束。在每個 SPI 事務之間,SPI 主機可能需要時間進行額外的處理和設定下一個 SPI 資料或控制事務。
SPI 資料事務由相等數量的傳送 (TX) 和接收 (RX) 塊組成。傳送和接收方向上的塊可能包含也可能不包含有效幀資料,彼此獨立,從而允許同時傳輸和接收不同長度的幀。
每個傳送資料塊都以 32 位資料標頭開頭,後跟 MOSI 上的資料塊有效負載。資料標頭指示是否存在傳送幀資料,並提供確定有效負載的哪些位元組包含有效幀資料的資訊。
同時,在 MISO 上接收接收資料塊。每個接收資料塊都由一個數據塊有效負載組成,以 32 位資料頁尾結尾。資料頁尾指示有效負載中是否存在接收幀資料,並提供確定有效負載的哪些位元組包含有效幀資料的資訊。
參考¶
10BASE-T1x MAC-PHY 序列介面規範,
連結:https://opensig.org/download/document/OPEN_Alliance_10BASET1x_MAC-PHY_Serial_Interface_V1.1.pdf
硬體架構¶
+----------+ +-------------------------------------+
| | | MAC-PHY |
| |<---->| +-----------+ +-------+ +-------+ |
| SPI Host | | | SPI Slave | | MAC | | PHY | |
| | | +-----------+ +-------+ +-------+ |
+----------+ +-------------------------------------+
軟體架構¶
+----------------------------------------------------------+
| Networking Subsystem |
+----------------------------------------------------------+
/ \ / \
| |
| |
\ / |
+----------------------+ +-----------------------------+
| MAC Driver |<--->| OPEN Alliance TC6 Framework |
+----------------------+ +-----------------------------+
/ \ / \
| |
| |
| \ /
+----------------------------------------------------------+
| SPI Subsystem |
+----------------------------------------------------------+
/ \
|
|
\ /
+----------------------------------------------------------+
| 10BASE-T1x MAC-PHY Device |
+----------------------------------------------------------+
實現¶
MAC 驅動程式¶
由 SPI 子系統探測。
為 MAC-PHY 初始化 OA TC6 框架。
註冊並配置網路裝置。
將來自 n/w 子系統的 tx 乙太網幀傳送到 OA TC6 框架。
OPEN Alliance TC6 框架¶
初始化 PHYLIB 介面。
註冊 mac-phy 中斷。
使用 OPEN Alliance 10BASE-T1x MAC-PHY 序列介面規範中指定的控制事務協議執行 mac-phy 暫存器讀/寫操作。
使用 OPEN Alliance 10BASE-T1x MAC-PHY 序列介面規範中指定的乙太網幀的資料事務協議執行乙太網幀事務。
將從 10Base-T1x MAC-PHY 接收到的乙太網幀轉發到 n/w 子系統。
資料事務¶
通常從 SPI 主機傳輸到 MAC-PHY 的乙太網幀將被轉換為多個傳送資料塊。每個傳送資料塊都將有一個 4 位元組的標頭,其中包含確定 64 位元組資料塊有效負載中傳送幀資料的有效性和位置所需的資訊。
+---------------------------------------------------+
| Tx Chunk |
| +---------------------------+ +----------------+ | MOSI
| | 64 bytes chunk payload | | 4 bytes header | |------------>
| +---------------------------+ +----------------+ |
+---------------------------------------------------+
4 位元組標頭包含以下欄位,
- DNC (Bit 31) - Data-Not-Control 標誌。此標誌指定 SPI 的型別
事務。對於 TX 資料塊,此位應為“1”。0 - 控制命令 1 - 資料塊
- SEQ (Bit 30) - 資料塊序列。此位用於指示
到 MAC-PHY 的偶數/奇數傳送資料塊序列。
- NORX (Bit 29) - No Receive 標誌。SPI 主機可以設定此位以防止
MAC-PHY 在 MISO 上為當前塊傳送 RX 資料(頁尾中的 DV = 0),表明主機不會處理它。通常,SPI 主機應設定 NORX = 0,表明它將接受並處理當前塊中的任何接收幀資料。
RSVD (Bit 28..24) - 保留:所有保留位應為“0”。
- VS (Bit 23..22) - 供應商特定。這些位是特定於實現的。
如果 MAC-PHY 未實現這些位,則主機應將它們設定為“0”。
- DV (Bit 21) - 資料有效標誌。SPI 主機使用此位來指示
當前塊是否包含有效的傳送幀資料 (DV = 1) 或不包含 (DV = 0)。當為“0”時,MAC-PHY 會忽略塊有效負載。請注意,接收路徑不受資料標頭中 DV 位設定的影響。
- SV (Bit 20) - Start Valid 標誌。當
乙太網幀的開頭出現在當前傳送資料塊有效負載中時,SPI 主機應設定此位。否則,此位應為零。此位不應與 IEEE 802.3 [2] 中描述的幀起始定界符 (SFD) 位元組混淆。
- SWO (Bit 19..16) - Start Word Offset。當 SV = 1 時,此欄位應
包含指向要傳輸的新乙太網幀起點的傳送資料塊有效負載中的 32 位字偏移量。當 SV = 0 時,主機應將此欄位寫入零。
RSVD (Bit 15) - 保留:所有保留位應為“0”。
- EV (Bit 14) - End Valid 標誌。當結束
乙太網幀出現在當前傳送資料塊有效負載中時,SPI 主機應設定此位。否則,此位應為零。
- EBO (Bit 13..8) - End Byte Offset。當 EV = 1 時,此欄位應包含
指向要傳輸的乙太網幀的最後一個位元組的傳送資料塊有效負載中的位元組偏移量。當 EV = 0 時,此欄位應為零。
- TSC (Bit 7..6) - 時間戳捕獲。請求在
將幀傳輸到網路上時捕獲時間戳。00 - 不捕獲時間戳 01 - 將時間戳捕獲到時間戳捕獲暫存器 A 10 - 將時間戳捕獲到時間戳捕獲暫存器 B 11 - 將時間戳捕獲到時間戳捕獲暫存器 C
RSVD (Bit 5..1) - 保留:所有保留位應為“0”。
- P (Bit 0) - 奇偶校驗。在傳送資料標頭上計算的奇偶校驗位。
使用的方法是奇校驗。
MAC-PHY 中可用於儲存傳入傳送資料塊有效負載的緩衝區數量表示為傳送信用。MAC-PHY 中的可用傳送信用可以從緩衝區狀態暫存器或頁尾讀取(有關頁尾資訊,請參閱下文)。SPI 主機不應寫入比可用傳送信用更多的資料塊,因為這會導致傳送緩衝區溢位錯誤。
如果先前的資料頁尾沒有可用的傳送信用,並且一旦傳送信用變得可用於傳輸傳送資料塊,則會斷言 MAC-PHY 中斷到 SPI 主機。在接收到第一個資料標頭時,此中斷將被撤銷,並且第一個資料塊的接收頁尾將具有可用的傳送信用資訊。
通常從 MAC-PHY 傳輸到 SPI 主機的乙太網幀將作為多個接收資料塊傳送。每個接收資料塊將有 64 位元組的資料塊有效負載,後跟 4 位元組頁尾,其中包含確定 64 位元組資料塊有效負載中接收幀資料的有效性和位置所需的資訊。
+---------------------------------------------------+
| Rx Chunk |
| +----------------+ +---------------------------+ | MISO
| | 4 bytes footer | | 64 bytes chunk payload | |------------>
| +----------------+ +---------------------------+ |
+---------------------------------------------------+
4 位元組頁尾包含以下欄位,
- EXST (Bit 31) - 擴充套件狀態。當任何位在
STATUS0 或 STATUS1 暫存器被設定且未被遮蔽時,將設定此位。
- HDRB (Bit 30) - 接收標頭錯誤。設定時,指示 MAC-PHY
接收到的控制或資料標頭具有奇偶校驗錯誤。
- SYNC (Bit 29) - 配置同步標誌。此位反映了
CONFIG0 配置暫存器中的 SYNC 位的狀態(參見表 12)。零表示 SPI 主機可能未按預期配置 MAC-PHY。配置後,SPI 主機設定配置暫存器中的相應位,該位反映在此欄位中。
- RCA (Bit 28..24) - 可用接收塊。RCA 欄位指示
SPI 主機,除了當前的接收資料塊之外,還有最少數量的幀資料的額外接收資料塊可用於讀取。當 MAC-PHY 的緩衝區中沒有掛起的接收幀資料可供讀取時,此欄位為零。
- VS (Bit 23..22) - 供應商特定。這些位是特定於實現的。
如果未實現,MAC-PHY 應將這些位設定為“0”。
- DV (Bit 21) - 資料有效標誌。MAC-PHY 使用此位來指示
當前接收資料塊是否包含有效的接收幀資料 (DV = 1) 或不包含 (DV = 0)。當為“0”時,SPI 主機應忽略塊有效負載。
- SV (Bit 20) - Start Valid 標誌。MAC-PHY 在當前
塊有效負載包含乙太網幀的開頭時設定此位。否則,此位為零。SV 位不應與 IEEE 802.3 [2] 中描述的幀起始定界符 (SFD) 位元組混淆。
- SWO (Bit 19..16) - Start Word Offset。當 SV = 1 時,此欄位包含
包含新接收到的乙太網幀的第一個位元組的接收資料塊有效負載中的 32 位字偏移量。當已將接收時間戳新增到接收到的乙太網幀的開頭 (RTSA = 1) 時,SWO 指向時間戳的最高有效位元組。當 SV = 0 時,此欄位將為零。
- FD (Bit 15) - 幀丟棄。設定時,此位指示 MAC 已
檢測到 SPI 主機應丟棄接收到的乙太網幀的條件。此位僅在接收到的乙太網幀的結尾 (EV = 1) 處有效,並且在所有其他時間應為零。
- EV (Bit 14) - End Valid 標誌。MAC-PHY 在結尾
接收到的乙太網幀出現在此接收資料塊有效負載中。
- EBO (Bit 13..8) - End Byte Offset:當 EV = 1 時,此欄位包含
接收資料塊有效負載中的位元組偏移量,該位元組偏移量定位接收到的乙太網幀的最後一個位元組。當 EV = 0 時,此欄位為零。
- RTSA (Bit 7) - 新增接收時間戳。當 32 位或
已將 64 位時間戳新增到接收到的乙太網幀的開頭。當 SV = 0 時,MAC-PHY 應將此位設定為零。
- RTSP (Bit 6) - 接收時間戳奇偶校驗。在
新增到接收到的乙太網幀開頭的 32 位/64 位時間戳。使用的方法是奇校驗。當 RTSA = 0 時,MAC-PHY 應將此位設定為零。
- TXC (Bit 5..1) - 傳送信用。此欄位包含最少數量
在不產生髮送緩衝區溢位錯誤的情況下,SPI 主機可以在單個事務中寫入的幀資料的傳送資料塊。
- P (Bit 0) - 奇偶校驗。在接收資料頁尾上計算的奇偶校驗位。
使用的方法是奇校驗。
SPI 主機將根據 MAC-PHY 中可用的接收塊(在接收塊頁尾 (RCA - 可用接收塊) 中提供)啟動資料接收事務。如果存在要傳輸到 MAC-PHY 的有效乙太網幀,SPI 主機將建立資料無效傳送資料塊(空塊)或資料有效傳送資料塊。MAC-PHY 中可用的接收塊可以從緩衝區狀態暫存器或頁尾讀取。
如果先前的資料頁尾沒有可用的接收資料塊,並且一旦再次有接收資料塊可供讀取,則會斷言 MAC-PHY 中斷到 SPI 主機。在接收到第一個資料標頭時,此中斷將被撤銷,並且第一個資料塊的接收頁尾將具有可用的接收塊資訊。
MAC-PHY 中斷¶
滿足以下條件時,會斷言 MAC-PHY 中斷。
可用接收塊 - 當先前的資料頁尾沒有可用的接收資料塊,並且一旦接收資料塊變得可用於讀取時,會斷言此中斷。在接收到第一個資料標頭時,此中斷將被撤銷。
可用傳送塊信用 - 當先前的資料頁尾指示沒有可用的傳送信用,並且一旦傳送信用變得可用於傳輸傳送資料塊時,會斷言此中斷。在接收到第一個資料標頭時,此中斷將被撤銷。
擴充套件狀態事件 - 當先前的資料頁尾指示沒有擴充套件狀態,並且一旦擴充套件事件變得可用時,會斷言此中斷。在這種情況下,主機應讀取狀態 #0 暫存器以瞭解相應的錯誤/事件。在接收到第一個資料標頭時,此中斷將被撤銷。
控制事務¶
4 位元組控制標頭包含以下欄位,
- DNC (Bit 31) - Data-Not-Control 標誌。此標誌指定 SPI 的型別
事務。對於控制命令,此位應為“0”。0 - 控制命令 1 - 資料塊
- HDRB (Bit 30) - 接收標頭錯誤。由 MAC-PHY 設定時,指示
接收到的標頭具有奇偶校驗錯誤。SPI 主機應始終清除此位。MAC-PHY 會忽略 SPI 主機在 MOSI 上傳送的 HDRB 值。
- WNR (Bit 29) - Write-Not-Read。此位指示是否要寫入資料
到暫存器(設定時)或從暫存器讀取資料(清除時)。
- AID (Bit 28) - 地址增量停用。清除時,地址將自動
在每次暫存器讀取或寫入後遞增 1。設定時,地址自動遞增被停用,允許在同一暫存器地址連續進行讀取和寫入。
- MMS (Bit 27..24) - 記憶體對映選擇器。此欄位選擇特定的
要訪問的暫存器記憶體對映。
- ADDR (Bit 23..8) - 地址。第一個暫存器的地址在
要訪問的選定記憶體對映。
- LEN (Bit 7..1) - 長度。指定要讀取/寫入的暫存器數量。
此欄位被解釋為暫存器數量減 1,允許從 ADDR 中指定的地址開始最多讀取或寫入 128 個連續暫存器。長度為零應讀取或寫入單個暫存器。
- P (Bit 0) - 奇偶校驗。在控制命令標頭上計算的奇偶校驗位。
使用的方法是奇校驗。
控制事務由一個或多個控制命令組成。控制命令供 SPI 主機用於讀取和寫入 MAC-PHY 中的暫存器。每個控制命令都由一個 4 位元組控制命令標頭組成,後跟控制寫入命令情況下的暫存器寫入資料。
MAC-PHY 會忽略來自 SPI 主機的控制寫入命令末尾的最後 4 個位元組的資料。控制寫入命令也會從 MAC-PHY 回顯到 SPI 主機,以識別匯流排錯誤情況下哪個暫存器寫入失敗。回顯的控制寫入命令將具有前 4 個位元組的未使用值,SPI 主機應忽略這些值,後跟 4 位元組回顯的控制標頭,後跟回顯的暫存器寫入資料。控制寫入命令可以寫入單個暫存器或多個連續暫存器。寫入多個連續暫存器時,MAC-PHY 會自動遞增地址。寫入任何未實現或未定義的暫存器應被忽略且不產生任何影響。
對於控制讀取命令的其餘部分,MAC-PHY 會忽略來自 SPI 主機的所有資料,這些資料位於控制標頭之後。控制讀取命令也會從 MAC-PHY 回顯到 SPI 主機,以識別匯流排錯誤情況下哪個暫存器讀取失敗。回顯的控制讀取命令將具有前 4 個位元組的未使用值,SPI 主機應忽略這些值,後跟 4 位元組回顯的控制標頭,後跟暫存器讀取資料。控制讀取命令可以讀取單個暫存器或多個連續暫存器。讀取多個連續暫存器時,MAC-PHY 會自動遞增地址。讀取任何未實現或未定義的暫存器應返回零。
裝置驅動程式 API¶
include/linux/oa_tc6.h 定義了以下函式
-
struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev)¶
初始化 OA TC6 庫。
-
void oa_tc6_exit(struct oa_tc6 *tc6)¶
釋放分配的 OA TC6 庫。
-
int oa_tc6_write_register(struct oa_tc6 *tc6, u32 address, u32 value)¶
在 MAC-PHY 中寫入單個暫存器。
-
int oa_tc6_write_registers(struct oa_tc6 *tc6, u32 address, u32 value[], u8 length)¶
從 MAC-PHY 中的 @address 開始寫入多個連續暫存器。最多可以從 @address 開始寫入 128 個連續暫存器。
-
int oa_tc6_read_register(struct oa_tc6 *tc6, u32 address, u32 *value)¶
在 MAC-PHY 中讀取單個暫存器。
-
int oa_tc6_read_registers(struct oa_tc6 *tc6, u32 address, u32 value[], u8 length)¶
從 MAC-PHY 中的 @address 開始讀取多個連續暫存器。最多可以從 @address 開始讀取 128 個連續暫存器。
skb 中的傳送乙太網幀正在或將要透過 MAC-PHY 傳輸。
-
int oa_tc6_zero_align_receive_frame_enable(struct oa_tc6 *tc6);¶
可以啟用零對齊接收幀功能,以將所有接收乙太網幀資料對齊,使其從任何接收資料塊有效負載的開頭開始,起始字偏移量 (SWO) 為零。