0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PY32E407V1xT_START_ETH ボードのペリフェラル Ethernet

0
Last updated at Posted at 2026-08-16

<<執筆中>>

 せっかく,ボード上にRJ45コネクタが載っているので,イーサネットを使ってみます.10M/100Mで通信できます.

実機で試す

公式サンプル1: UDP

 PY32Studio(ローカルアプリ)からサンプルアプリケーション(Udp_Echo_RMII)を取得します.
 PY32Studioで開いて,EIDE用のプロジェクトを Generate します.
 上記プロジェクトをVS Codeで開きます.

 Ethernet PHYのリセット周りなどがバグっているので直します.

デバッグ用のUART設定

 このプロジェクトには,UART出力が組み込まれているので,解析用として使えるようにすると便利です.
 ボードのPC10とPC11をPYLINKのTXとRXに接続します.
 PY-LINKのUSB Type-Cコネクタから接続したPC上で,Tera Termを使って仮想COMポートを開きます.サンプルのReadmeには9600と書いてありますが,正しくは115200です.

動作確認&デバッグ

 実機に書き込んで動かします.書き込んだら,一度電源を抜いてリセットし,電源投入後にボード上のNRSTスイッチを押す,そして,USERスイッチを押すと動作します.
(エージェントによる修正と同時進行で進めたので,詳しくは見ていないが,筆者が試した時は上記の動作になっていた).

公式サンプル2: TCP

 PY32Studio (ローカルアプリ)からサンプルアプリケーション(Tcp_Echo_RMII)を取得します.
 PY32Studioで開いて,EIDE用のプロジェクトを Generate します.
 上記プロジェクトをVS Codeで開きます.

 Ethernet PHYのリセット周りなどがバグっているので直します.

UART設定

 このプロジェクトには,UART出力が組み込まれているので,解析用として使えるようにすると便利です.
 ボードのPC10とPC11をPYLINKのTXとRXに接続します.
 PY-LINKのUSB Type-Cコネクタから接続したPC上で,Tera Termを使って仮想COMポートを開きます.サンプルのReadmeには9600と書いてありますが,正しくは115200です.

 UDPの動作確認にはUDPテスト用のアプリを使うと楽です.

 バグの修正はコーディング・エージェントを使うよいでしょう(筆者はCopilotでやった).IP通信についても,Wiresharkでの解析を指示されるので,エージェントの言う通りに操作すれば解決します.

あると便利なツール

・UDPのテストツール(Windowsアプリ)

・Wireshark

データシートから情報を抜粋

イーサネット

 PY32E407Vマイコンは,Media Independent Interface(MII)とReduced Media Independent Interface(RMII)をサポートします.

  • IEEE 802.3-2002規格準拠のイーサネットMAC
  • IEEE 1588-2002規格に基づく高精度なネットワーククロック同期
  • AHBマスタ/スレーブポート向けAMBA 2.0

イーサネット機能

 PY32E407Vマイコン(PUYA)が持つ,イーサネット・ペリフェラルの特徴を次に挙げます.

  • IEEE 802.3互換のMIIが全二重イーサネットPHYインターフェース
  • 半二重PHYインターフェース
  • 10/100Mbit/sのデータ転送率
  • CSMA/CDプロトコルの半二重動作に対応
  • IEEE 802.3xプロトコルの全二重動作に対応
  • 全二重動作モードでは,受信したPAUSE制御フレームをユーザアプリケーションプログラムに選択的に送信可能
  • バックプレッシャフロー制御に対応した半二重動作
  • 全二重モードで入力フロー制御信号が失敗した場合,PAUSEフレームが自動的に送信される
  • 送信パケットにはプリアンブルおよびスタートフレームデータ(SFD)が挿入され,受信パケットではこれらのフィールドが削除されます
  • フレーム単位でCRCを自動的に計算し,制御可能なパディングビットを生成
  • フレーム受信時のパディングビット/CRCの自動削除はオプション
  • フレーム長をプログラム可能で,最大16Kバイトの標準フレームに対応
  • フレームギャップは設定可能(40~96ビット,8ビット単位で変更可能)
  • 複数の柔軟なアドレスフィルタリングモードに対応
  • 最大4つの48ビット(DA)アドレスフィルタ(各バイトごとにマスクを設定可能)
  • 3つ以上の48ビットSAアドレス比較検出が可能(各バイトにマスクを設定可能)
  • マルチキャストおよびユニキャスト(DA)アドレス用の64ビットハッシュフィルタ
  • オプションで,全てのマルチキャストアドレスフレームを通過させることも可能
  • プロミスキュアスモード:ネットワーク監視中にフィルタリングを行わず,全てのフレームを直接通過させる
  • 送受信パケットに関する独立した32ビットのステータス情報を提供
  • 受信フレームの検出をサポートするIEEE 802.1Q VLANタグ
  • アプリケーションプログラム用の独立した送信,受信,制御インターフェース
  • RMON/MIB カウンタ(RFC2819/RFC2665)を使用した必須のネットワーク統計をサポート
  • MDIOインターフェースを使用してPHYを設定・管理
  • LANのウェイクアップフレームおよびAMD社製Magic PacketTMフレームの検出
  • 受信機能:イーサネットフレームフレームワークにおけるIPv4およびTCPの受信パケットのチェックサムとロードシェディング(負荷軽減)
  • 高度な受信機能:IPv4およびIPv6データグラムにおける、IPv4ヘッダチェックサムならびにTCP,UDP,ICMPのチェックサム検証
  • IEEE 1588-2002で規定されているイーサネットフレームのタイムスタンプをサポート.各フレームの送信または受信のステートに対して64ビットのタイムスタンプを使用
  • 2つのFIFO:プログラム可能な深さを持つ2KBの送信FIFOと,プログラム可能な深さを持つ2KBの受信FIFO
  • EOF(ファイル終端)送信後の受信状態が,受信時に受信FIFOへ挿入される.これにより,これらフレームの受信状態を格納するための別のFIFOを必要とせず,受信FIFO内でマルチフレームストレージが有効になる
  • オプションとして,ストア&フォワードモードでの受信時にエラーフレームをフィルタリングし,アプリケーションへ転送しないようにすることが可能
  • サイズが不足しているオプションのフォワード有効フレーム(Optional forward valid frames with insufficient size)
  • 受信FIFO内で損失および破損した(オーバーフローによる)フレーム数をカウントするためのパルス生成をサポート
  • 送信時のストア・アンド・フォワード方式をサポート
  • FIFOの充填レベルに応じて,MACコントローラへのポーズフレーム制御やバックプレッシャ信号を自動生成(しきい値設定可能)
  • 送信時に競合フレームの自動再送を処理
  • 遅延衝突,過衝突,過遅延,過少負荷の条件でフレームを破棄
  • ソフトウェアで空の送信FIFOを制御
  • IPv4ヘッダのチェックサムやTCP,UDP,ICMPのチェックサムを計算して,ストアアンドフォワードモードでトランスポートフレームに挿入する
  • デバッグ用に内部ループバックMIIインターフェースをサポート

Ethernet

 MACは,次のシステムにおけるLANのCSMA/CDサブレイヤを実装しています.

  • 10Mビット/sおよび100Mビット/sのベースバンド伝送システム
  • 全二重(Full-Duplex)および半二重(Half-Duplex)動作モード
  • 衝突検出(Collision Detection)(半二重モードのみ)
  • MAC制御フレーム(MAC Control Frame)サブレイヤのサポート

MACサブレイヤは,データリンク制御手順に関連する次の機能を実装しています.

データのカプセル化(送信および受信)

  • フレーム生成(フレーム境界の設定,フレーム同期)
  • アドレス生成(送信元アドレスと宛先アドレスの処理)
  • エラー検出

メディアアクセス管理

  • メディア割り当て(衝突回避)
  • 衝突解決(衝突発生時の処理)

 MACサブレイヤには,2つの動作モードが用意されています.

半二重モード(Half-duplex mode)

 各ノード(通信局)は,CSMA/CDアルゴリズムによって通信路の使用権を調停します.

全二重モード(Full-duplex mode)

 データ送信時に競合解決を行う必要がなく,送信と受信を同時に実行できます.
 全二重モードは,次の条件を満たす必要があります.
 ・送信と受信を同時にサポートできる物理媒体(Physical Media)
 ・LANに接続される端末(ノード)が2台のみ
 ・両方の端末が全二重モードに設定されている

 IEEE 802.3で規定されるLANの国際標準では,アクセス方式としてCSMA/CDが採用されています.
 Ethernetペリフェラルは,次の3つの主要な構成要素から成ります.

  • MAC 802.3コントローラ
  • Media Independent Interface
  • DMAコントローラ

MACとPHYを接続する信号規格

 マイコンに内蔵されるMACと,外部に置くPHYの接続用として,MII(メディア・インディペンデント・インターフェース)および,RMII(Reduced Media Independent Interface)がサポートされており,どちらを使うかは1ビットの制御ビットで指定します.
 DMAコントローラはAHBマスタ・スレーブインターフェースを介してMACコントローラおよびメモリにアクセスします.
 AHBマスタインターフェースはデータの転送を制御します.
 AHBスレーブインターフェースはアクセス制御およびステータスレジスタ(CSR;Control and Status Register)領域に使用されます.
 データは,MACコントローラによる送信前に,DMAを介して送信FIFO(TX FIFO)にキャッシュされます.
 ラインから受信したイーサネットフレームは,DMAを介してシステムメモリに転送されるまで,受信FIFO(RX FIFO)格納されます.

イーサネット機能の説明:SMI

 Ethernetペリフェラルには,外部のPHYチップと通信するためのSMIインターフェースも搭載されています.ユーザは一連のレジスタ設定を通じて,MACおよびDMAコントローラを設定し,希望する動作モードや特性を選択できます.
注:Ethernetを使用する場合,AHBクロック周波数は25MHz以上である必要があります.

状態管理インターフェース(SMI;State Management Interface)

 SMIは,2本の信号線(クロック線とデータ線)を使用してPHYのレジスタにアクセスするインターフェースです.最大32個のPHYへのアクセスをサポートします.32個のPHYの中から任意の1つを選択し,さらにそのPHY内の32個のレジスタから任意の1つを選択して,制御データの送信や状態信号の読み出しを行うことができます.一度にアドレス指定できるレジスタは,1つのPHY内の1レジスタのみです.
 MDC(Management Data Clock)信号とMDIO(Management Data Input/Output)信号は,マイコンのピンに割り当てられており,各ピンにおいてGPIO機能と排他的に利用できます.
 MACはMDCを生成し,そのクロックに同期してMDIO経由でPHYレジスタの読み書きを行います.これによりリンク状態,通信速度(10/100 Mbps),全二重/半二重設定などを制御・監視できます.

用語補足

SMI (State Management Interface)
Ethernet MACとPHYの間で設定や状態監視を行うための管理インターフェースです.MDCとMDIOの2本の信号線を用いてMACとPHY間で管理用の通信を行います.

MDC (Management Data Clock)
 SMI用の通信クロックです.
 周波数は最高2.5MHzです.“H”レベル期間および“L”レベル期間はいずれも最小160ns,周期は最小400nsです.
 アイドル状態では,SMI管理インターフェースはMDCクロックを“L”レベルに維持します.
MDC: MAC → PHYへ供給される管理用クロック

MDIO (Management Data Input/Output)
 MACとPHYの間で管理データを送受信するための双方向データ信号です.
 MDCクロック信号に同期して,PHYへ状態情報や制御情報を書き込んだり,PHYから状態情報を読み出したりします.
MDIO: MAC ⇔ PHY間の双方向データ線

PHY
 Ethernetの物理層デバイスです.リンク状態の監視や送受信信号の物理的な変換を担当するICです.

SMIフレームフォーマット

 管理フレーム(Management Frame)は,以下の8つの部分で構成されます.

1:Preamble(プリアンブル)

 各送信(読み出しまたは書き込み)は、必ずプリアンブルから開始されます.プリアンブルは,MDIOライン上の32回連続した論理「1」信号と、それに対応するMDCライン上の32クロック信号で構成されます.
 この信号部分は,PHYデバイスとの同期を確立するために使用されます.

2:Starter(スタートコード)

 フレームのスタートコードは“01”と定義されています.MDIO信号が論理“1”から“0”に遷移し,その後再び“1”に戻ることで通信の開始を示します.

3:Operator(オペコード)

 操作の種類を定義します.操作には読み出し(Read) と書き込み(Write)があります.

4:PADDR(PHYアドレス)

 PHYのアドレスです.5ビットで構成され,最大32個のPHYを識別できます.
 データの送受信は上位ビット(MSB)から先に行われます.

5:RADDR(レジスタアドレス)

 レジスタのアドレスです.5ビットで構成され,32個の独立したレジスタを指定できます.
 上位ビット(MSB)から先に送受信されます.

用語補足

SMI(MDIO/MDC)によるPHY管理フレームは,概ね次のような構成になっています.

+----------+-------+----------+--------+--------+-----+----------+------+
| Preamble | Start | Op Code | PADDR | RADDR | TA | Data | Idle |
+----------+-------+----------+--------+--------+-----+----------+------+
32bit 2bit 2bit 5bit 5bit 2bit 16bit

  • Preamble:PHYとの同期確立
  • Start:フレーム開始の通知
  • Op Code:Read/Write指定
  • PADDR:PHYアドレス
  • RADDR:PHY内レジスタアドレス
  • TA (Turn Around):バスの方向切り替え
  • Data:読み書きする16ビットデータ
6:TA(Turn Around)

 TAはRADDRとDATAの間に挿入される2ビットのターンアラウンド(方向切替)フィールドです.読み出し動作時の信号衝突を防ぐために使用されます.

読み出し操作時(Read)
 TAの2ビット期間中,MACコントローラはMDIOラインをハイインピーダンス(Hi-Z)状態に保持します.
 PHYデバイスは最初の1ビット期間をハイインピーダンス状態に保持し,2ビット目で論理“0”を出力します.

書き込み操作時(Write)
 TAの2ビット期間中,MACコントローラはMDIO信号に“10”を出力します.
 PHY側はハイインピーダンス状態を維持します.

7:DATA(データ)

16ビットのデータフィールドです。送受信は上位ビットから行われ,最初に送受信されるのは ETH_MIID レジスタの15ビット目(MSB)です.

8:Idle Bit(アイドル状態)

 MDIOラインはハイインピーダンス状態を維持します.全ての3ステートドライバ(三態出力)は無効化され,PHYのプルアップ抵抗によってMDIO信号は論理“1”に保持されます.

管理フレーム全体の構成
 これまでの内容をまとめるとSMI(MDIO/MDC)による管理フレームは次のような構成になります.

+-----------+-------+--------+-------+--------+------+----------+
| Preamble | Start | OpCode |PADDR | RADDR | TA | DATA |
+-----------+-------+--------+-------+--------+------+----------+
| 32 bits | 2bit | 2bit | 5bit | 5bit | 2bit | 16bit |
+-----------+-------+--------+-------+--------+------+----------+

各フィールドの役割

  • Preamble:PHYとの同期確立(32ビットの1)
  • Start:フレーム開始(01)
  • OpCode:読み出し/書き込み指定
  • PADDR:PHYアドレス(0~31)
  • RADDR:レジスタアドレス(0~31)
  • TA:MDIOの送信方向切り替え
  • DATA:読み書きする16ビットデータ

 TAフィールドは,読み出し時にMACからPHYへデータバスの制御権を安全に受け渡す仕組みです.これにより,MACとPHYが同時にMDIO信号を駆動してしまうバス競合(Bus Contention)を防ぎます.

SMI書き込み動作(SMI Write Operation)

 アプリケーションプログラムが, ETH_MACMIIAR レジスタの MW ビットおよび MB ビットをセットすると,SMIは指定されたPHYアドレスを使用して, ETH_MACMIIDR レジスタ に格納されているデータを,PHYレジスタに書き込みます.
 動作中は,MIIアドレスレジスタおよびデータレジスタの内容を変更できません.
 仮にこれらのレジスタを書き換えたとしても,その変更は無視されます( MB ビットは常にセット状態のまま維持されます).送信完了後もエラーは報告されません.
 書き込み動作が完了すると,SMIインターフェースは MB ビットをクリアし,処理終了を通知します.

補足

各ビットの役割は次の通りです.
MB(MII Busy)

  • 1:SMI通信中(ビジー状態)
  • 0:SMI通信完了(アイドル状態)

MW(MII Write)

  • 1:書き込み操作
  • 0:読み出し操作
書き込みシーケンスのイメージ
  1. PHYアドレス設定
  2. レジスタアドレス設定
  3. 書込データをETH_MACMIIDRに設定
  4. MW=1, MB=1 をセット
    ↓
  5. SMIがPHYへ書込み実行
    ↓
  6. MB=1 (Busy)
    ↓
  7. 書込み完了
    ↓
  8. ハードウェアがMBを0にクリア

 通常,ソフトウェアは MB ビットが0になるまで待機(ポーリング) することで,PHYレジスタへの書き込み完了を確認します.

SMI読み出し動作

 ETH_MACMIIAR レジスタの MW ビットを“0”に設定した状態で,ユーザが MB ビットをセットすると,SMIはPHYレジスタに対する読み出し動作を実行します.
 動作中は,MIIアドレスレジスタおよびデータレジスタの内容を変更することはできません.仮に変更したとしても,その変更は無視されます(MB ビットは常にセット状態のままとなります).通信完了後にエラーは報告されません.
 読み出し動作が完了すると, MB ビットはクリア(0)され,PHYから読み出したデータがMIIデータレジスタに格納されます.

補足

各ビットの意味は以下の通りです.
MW(MII Write)

  • 0:読み出し(Read)
  • 1:書き込み(Write)

MB(MII Busy)

  • 1:SMI通信中
  • 0:SMI通信完了
読み出しシーケンス
  1. PHYアドレスを設定
  2. レジスタアドレスを設定
  3. MW=0 (Read) を設定
  4. MB=1 をセット
    ↓
  5. SMIがPHYへ読出し要求
    ↓
  6. MB=1 (Busy状態)
    ↓
  7. PHYから16ビットデータ受信
    ↓
  8. データをETH_MACMIIDRへ格納
    ↓
  9. ハードウェアがMBを0にクリア

通常のソフトウェア処理では,

  • MB=1 をセットして読出し開始
  • MB が0になるまで待機
  • ETH_MACMIIDR を読み出す
    という流れでPHYレジスタの内容を取得します.例えば,PHYのリンク状態や通信速度,全二重/半二重設定などの確認に利用されます.

SMIクロックの選択

 SMIインターフェースのクロックは,アプリケーションクロック(AHBクロック)を分周して生成されます.
 分周係数の選択は,AHBクロック周波数の範囲に応じて決定されます.
 具体的な分周係数の設定については, ETH_MACMIIAR レジスタのビット[5:2] を参照してください.

技術的な補足

 SMI(MDC)のクロック周波数には上限があり,前述のように最高2.5MHzです.そのため,MCU内部のAHBクロックが例えば72MHz,120MHz,168MHzなど高速で動作している場合,そのままMDCとして出力できません.そこで, ETH_MACMIIAR レジスタの CR(Clock Range)フィールド[5:2] に分周値を設定し,次のように調整します.例えば,

AHB Clock
↓
Clock Divider (CR[5:2])
↓
MDC Clock (≤ 2.5 MHz)

AHB = 72 MHz → MDC ≒ 72/42 = 1.71 MHz
AHB = 120 MHz → MDC ≒ 120/62 = 1.94 MHz

のように,MDCが2.5MHz以下になる分周比を選択します.
 SMI通信用クロック(MDC)はAHBクロックから生成されるので,AHB周波数に応じて ETH_MACMIIAR の CR ビットを適切に設定します.

RMII

 PY32E407マイコンはRMIにも対応していますが,MACとの接続本数の少ないRMIIが便利です.
 RMII(Reduced Media Independent Interface)は,Ethernet通信に必要となる信号ピン数を削減するためのインターフェース規格です.
 IEEE 802.3規格では,MIIインターフェースはデータおよび制御信号用に16本の信号線を使う一方,RMII規格ではこれを7本まで削減しています.
 RMIIの主な特徴は以下の通りです.

項目 MII RMII
データ幅 4ビット 2ビット
クロック TX/RX別々 共通50 MHz
必要信号数 約16本 約8~10本
対応速度 10/100 Mbps 10/100 Mbps
MCUピン数 多い 少ない

RMIIの主な信号

REF_CLK

 50MHzの基準クロックです.MACとPHYが共有して使用します.

TXD[1:0]

 MACからPHYへの送信データです.

TX_EN

 送信データ有効信号です.

RXD[1:0]

 PHYからMACへの受信データです.

CRS_DV

 キャリア検出(CRS)と受信データ有効(RX_DV)を兼ねた信号です.

MDC / MDIO

 PHY管理用のSMIインターフェース信号です.

RMII信号 PY32E407 ピン
TXD0 (ETH_RMII_TXD0) PB12
TXD1 (ETH_RMII_TXD1) PB13
TX_EN (ETH_RMII_TX_EN) PB11
RXD0 (ETH_RMII_RXD0) PC4, PD9
RXD1 (ETH_RMII_RXD1) PC5, PD10
CRS_DV (ETH_RMII_CRS_DV) PA7, PD8
MDC (ETH_MDC) PC1
MDIO (ETH_MDIO) PA2
REF_CLK (ETH_RMII_REF_CLK) PA1

RMII clock scheme

 MACとEthernet PHYの REF_CLK ピンに同じクロック源を接続することで,2つのデバイスが同期されます.
 このクロックは,以下のいずれかの方法で供給できます.

外部から供給される50MHzクロック信号

マイコンのMCO(Microcontroller Clock Output)ピン

MCOピンからクロックを供給する

 MCOピンから出力されるクロックが50MHzになるよう,PLL(Phase-Locked Loop)を適切に設定します.

MACフレーム送信(MAC Frame Transmission)

 DMAは送信経路における全ての転送処理を制御します.DMAはシステムメモリ内のEthernetフレームを取り出し,FIFOに格納します.
 その後,これらのフレームはMACコントローラへ送られ,送信処理が行われます.
 送信フレームの終端を示すEOF(End Of Frame)が送信されると,MACコントローラから送信ステータスが取得され,その情報がDMAへ返されます.
 送信FIFO(TX FIFO)の深さ(容量)は2Kバイトです.
 FIFOの充填レベル(格納データ量)はDMAに通知されます.DMAはその情報に基づいてAHBインターフェースを使用し,システムメモリから必要なバーストデータを読み出します.

MACフレーム送信

 SOF(Start Of Frame;フレーム開始)が検出されると,MACはデータを受信し,それをMIIインターフェースへ送信します.
 アプリケーション層がMIIインターフェースへのフレームデータ送信を開始するタイミングは一定ではなく,以下の要因によって変動します.

  • IFG(Inter Frame Gap)による遅延
     プリアンブルおよびスタートフレームデリミタ(境界コード)の送信時間
     半二重モードにおけるバックオフ(衝突後の強制再送待ち時間)による遅延
  • EOF(End Of Frame;フレーム終了)がMACコントローラへ送られると,コントローラは通常の送信処理を完了し,その後,送信ステータスをDMAへ通知します.

 送信中に通常の衝突(半二重モード時)が発生した場合,MACコントローラは送信状態を有効として記録し,その後,次のSOFを受信するまで受信した余分なデータを破棄します.
 MACから再送要求が発行された場合は,同じフレームをSOFから再送信する必要があります.
 送信中にデータが連続して供給されなかった場合,MACはアンダーフロー(Underflow)状態を発行します.
 通常のフレーム送信中に,前のフレームのEOFを受信する前にMACが新たなSOFを受信した場合,そのSOFは無視されます.このとき,新しいフレームは前のフレームの続きであると見なされます.

 MACコントローラへデータを送信する方式には,以下の2つの動作モードがあります.

Threshold Mode(しきい値モード)

 FIFO内のデータ量が設定されたしきい値を超えたとき(または,しきい値に達する前にEOFが書き込まれたとき),そのデータはMACコントローラへ転送可能な状態になります.
 しきい値は, ETH_DMABMR レジスタの TTC ビットによって設定できます.

Store-and-Forward Mode(ストア・アンド・フォワードモード)

 FIFO内に1フレーム全体が格納された後で初めて,そのフレームはMACコントローラへ転送されます.
 ただし,送信フレームの長さがTX FIFOの容量を超える場合は,TX FIFOがほぼ満杯になった時点でフレームデータのMACコントローラへの転送が開始されます.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?