702 KB - Spansion

OS 無し LWIP イーサネットソフトウェア
32-BIT MICROCONTROLLER
FM3 Family, FM4 Family
APPLICATION NOTE
Publication Number MCU-AN-510047-J-11
CONFIDENTIAL
Revision 1.0
Issue Date September 11, 2015
A P P L I C A T I O N
N O T E
対象製品
本操作マニュアルに記載されている内容の対象製品は、下記のとおりです。
(FM3:TYPE2)
シリーズ名
品種型格(パッケージサフィックスは除く)
MB9BD10T
MB9BFD16S, MB9BFD16T, MB9BFD17S, MB9BFD17T, MB9BFD18S, MB9BFD18T
MB9B610T
MB9BF616S, MB9BF616T, MB9BF617S, MB9BF617T, MB9BF618S, MB9BF618T
MB9B210T
MB9BF216S, MB9BF216T, MB9BF217S, MB9BF217T, MB9BF218S, MB9BF218T
(FM4)
シリーズ名
S6E2CC
S6E2C2
2
CONFIDENTIAL
品種型格(パッケージサフィックスは除く)
S6E2CC8H, S6E2CC8J, S6E2CC8L, S6E2CC9H, S6E2CC9J, S6E2CC9L,
S6E2CCAH, S6E2CCAJ, S6E2CCAL,
S6E2C28H, S6E2C28J, S6E2C28L, S6E2C29H, S6E2C29J, S6E2C29L,
S6E2C2AH, S6E2C2AJ, S6E2C2AL,
S6E2GM
S6E2GM6H, S6E2GM6J, S6E2GM8H, S6E2GM8J
S6E2GK
S6E2GK6H, S6E2GK6J, S6E2GK8H, S6E2GK8J
S6E2G2
S6E2G26H, S6E2G26J, S6E2G28H, S6E2G28J
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
N O T E
Table of Contents
1.
2.
3.
4.
5.
6.
7.
8.
イントロダクション ....................................................................................................................... 6
1.1
目的
........................................................................................................................... 6
1.2
定義・略語 .......................................................................................................................... 6
1.3
参考ドキュメント................................................................................................................ 6
ハードウェア環境 ........................................................................................................................... 7
2.1
ハードウェアボード ............................................................................................................ 7
2.2
マイクロコントローラ ........................................................................................................ 8
開発環境 ......................................................................................................................................... 9
3.1
開発環境 ........................................................................................................................... 9
特徴 .............................................................................................................................................. 10
4.1
概要
......................................................................................................................... 10
4.2
lwIP - TCP/IP スタック ..................................................................................................... 11
4.2.1
LwIP イーサネット I/F(MB9BF618S/T への LwIP 移植) ............................... 11
4.3
イーサネットドライバ ...................................................................................................... 13
4.3.1
初期化関数--- eth_system_device_init() ........................................................... 14
4.3.2
送信関数---eth_emac_tx()................................................................................. 15
4.3.3
受信関数---eth_emac_rx() ................................................................................ 16
デモアプリケーション開発 .......................................................................................................... 17
5.1
プロジェクトファイル構造 ............................................................................................... 17
5.2
デモアプリケーションのメインループ ............................................................................. 18
5.3
UDP エコーサーバ ............................................................................................................ 19
5.4
S6E2GM への LwIP の移植 ............................................................................................... 20
関数 .............................................................................................................................................. 23
6.1
関数リスト ........................................................................................................................ 23
6.2
グローバルデータ.............................................................................................................. 26
6.3
グローバルタイマ.............................................................................................................. 27
6.4
マクロ定義 ........................................................................................................................ 28
追加情報 ....................................................................................................................................... 29
主な変更内容 ................................................................................................................................ 30
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
3
A P P L I C A T I O N
N O T E
Figures
Figure 2-1 FSSDC-9B618-EVB .................................................................................................................. 7
Figure 4-1 モジュールのブロックダイヤグラム ...................................................................................... 10
Figure 4-2 LwIP イーサネット I/F のブロックダイヤグラム .................................................................... 12
Figure 4-3 LwIP イーサネット MAC のブロックダイヤグラム................................................................. 13
Figure 4-4 イーサネット DMA ディスクリプタのチェーン ..................................................................... 14
Figure 4-5 イーサネットドライバの初期化関数のフローチャート ......................................................... 14
Figure 4-6 イーサネットドライバの送信関数のフローチャート ............................................................. 15
Figure 4-7 イーサネットドライバの受信関数のフローチャート ............................................................. 16
Figure 5-1 プロジェクト構造................................................................................................................... 17
Figure 5-2 ソフトウェアデータフロー .................................................................................................... 18
Figure 5-3 UDP エコーサーバフローチャート ......................................................................................... 18
4
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
N O T E
Tables
Table 4-1 アプリケーションのイネーブル定義........................................................................................ 10
Table 4-2 LwIP イーサネット I/F 関数一覧 ............................................................................................... 11
Table 6-1 LwIP イーサネットドライバ API リスト .................................................................................. 23
Table 6-2 LwIP アプリケーション API リスト .......................................................................................... 24
Table 6-3 RAW API 関数 ........................................................................................................................... 24
Table 6-4 グローバルデータリスト ......................................................................................................... 26
Table 6-5 グローバルタイマリスト ......................................................................................................... 27
Table 6-6 lwIP メモリオプション定義 ...................................................................................................... 28
Table 6-7 lwIP アプリケーション設定 ...................................................................................................... 28
Table 6-8 イーサネットドライバ設定 ...................................................................................................... 28
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
5
A P P L I C A T I O N
1.
N O T E
イントロダクション
1.1
目的
このアプリケーションノートは、
FM3 ファミリの MB9BF618T/S, および FM4 ファミリの S6E2CC シリーズ,
S6E2GM シリーズに搭載されているイーサネットの特徴について説明します(以降の章では、これら MCU
を EMAC 付き MCU と表示します)
。またフリーTCP/IP スタックの lwIP(Lightweight IP)をベースとした
デモンストレーションパッケージを提供します。
FM3/FM4 ファミリは、ハイパフォーマンスと低コストを求める組込み制御用途向けに設計された、高集積
32 ビットマイクロコントローラです。
EMAC 付き MCU は、外部 PHY に対して MII と RMII インタフェースをサポートする高品質な 10/100 Mbps
イーサネット回路を搭載しています。RMII モード使用時には 2 つのイーサネットポートを独立して使用で
きます。
イーサネットコントローラの先進的な機能のひとつは、ハードウェアで UP,UDP,TCP および ICMP チェック
サムを生成・挿入・検証する能力を持つことです。
このドキュメントの中のアプリケーションはこの特徴を利用しています。
FM3/FM4 の EMAC は類似品のため、MB9BF618S を例として EMAC と LWIP の特徴を説明します。
1.2
1.3
定義・略語
API
: Application Programming Interface
I/F
: Interface / インタフェース
EVB
: Evaluation board / 評価ボード
MII
: Media Independent Interface
RMII
: Reduced Medium Independent Interface
MAC
: Media Access Controller
PHY
: Physical Layer
lwIP
: Lightweight IP
参考ドキュメント
[1].FM3_MN706-00002-7v0-J
[2].MB9B610T-DS706-00014-J
[3].MB9BF210T_610T MN706-00015-2v0-J
[4].FM4 MN709-00017-1v0-J
[5].Design and Implementation of the LWIP TCP/IP Stack, Feb,2001, Adam Dunkels.
[6]. http://lwip.wikia.com/wiki/LwIP_Wiki
6
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
2.
N O T E
ハードウェア環境
2.1
ハードウェアボード
FM3/FM4 の EMAC は類似品のため、このセクションでは MB9BF618S を例として使用します。
 ハードウェアボード:FSSDC-9B618-EVB
Figure 2-1 FSSDC-9B618-EVB
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
7
A P P L I C A T I O N
2.2
N O T E
マイクロコントローラ
 マイクロコントローラ:MB9BF618S
−
CPU 周波数:144 MHz
−
RAM サイズ:128 K バイト
−
ROM サイズ:1 M バイト
8
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
3.
N O T E
開発環境
3.1
開発環境
名称
概要
型番
メーカ
注釈
IAR EWARM
ソフトウェア統合開発環境
V6.40
IAR
-
J-link
MCU エミュレータ
J-link
IAR
-
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
9
A P P L I C A T I O N
4.
N O T E
特徴
4.1
概要
MB9BF618S/T のイーサネットの特徴をデモするために、ファームウェアは以下のモジュールで構成されて
います(ファームウェアのモジュールは Figure 4-1 参照)
。





イーサネットドライバ
TCP/IP スタック(LwIP 1.4.0)
TCP/UDP エコーサーバおよび HTTP サーバ用デモ
DHCP クライアント用デモ
DNS クライアントおよび TCP クライアント用デモ
Figure 4-1 モジュールのブロックダイヤグラム
デモアプリケーション
DNS クライアント , DHCP クライアント ,
HTTP サーバ, TCPUDP エコーサーバ,
TCP クライアント
LwIP
ICMP, IP,TCP,UDP,DHCP,DNS
LwIP-Ethernet I/F: Ethernetif.c
MB9BF618S
emac_fm3.c, eth_fm3.c
デモアプリケーションは単一プロジェクトに構築されており、別々のアプリケーションをテストするために
は、対応するマクロ定義を有効にする必要があります。
ファイル"board.h(/example/iar/UDPTCP_Demo Project/source フォルダ内にあり)"で定義してあるマクロは、
Table 4-1 に記載してあります。
Table 4-1 アプリケーションのイネーブル定義
マクロ定義
10
CONFIDENTIAL
詳細
DHCP_DEMO
DHCP 用デモを有効
TCPUDP_ECHO_DEMO
TCP/UDP エコーサーバ用デモを有効
DNS_TCP_CLIENT_DEMO
TCP クライアン&DNS クライアント用デモを有効
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
4.2
N O T E
lwIP - TCP/IP スタック
lwIP は、
スウェーデンコンピュータ科学研究所(SICE)の Adam Dunkels によって記述された、
軽実装な TCP/IP
プロトコルのセットです。ライセンスは BSD ライセンスになっており、現在は Leon Woestenberg をリー
ダーとする世界中に散らばる開発チームによって開発されています。開発ホームページには最新のニュース
とリリース版が掲載されています。http://savannah.nongnu.org/projects/lwip/
lwIP は、Raw API/Netconn API/Socket API の 3 種類の API セットを持っています。最後の 2 つの API は RTOS
利用時のみ使用する事ができます。
Raw API は lwIP のネイティブ API です。Raw API はコールバックをベースとしたアプリケーションの開発
に使用されます。アプリケーションの初期化時に、ユーザは、TCP_Sent や TCP_error のような異なるイ
ベントをコールバック関数に登録する必要があります。この API は最良のパフォーマンスとコードサイズ
を提供します。しかし、アプリケーション開発にいくらかの複雑さが加わります。
Table 6-3 に RAW API 関数の要約が記載してあります。
LwIP イーサネット I/F(MB9BF618S/T への LwIP 移植)
4.2.1
lwIP の公式リリースは任意のマイクロコントローラーに任意のポートを実装していません。しかしながら
lwIP はと"ethernetif.c"と呼ばれるファイルを備えており、スタックとイーサネットコントローラのインター
フェースとして働きます。このファイルは特定のアーキテクチャをサポート可能となるように、骨格ファイ
ルとして提供されています。
MB9BF618S/T については、スタックとイーサネットコントローラのインターフェイスとして
"ethernetif.c","emac_fm3.c","eth_fm3.c"のファイルがローレベルレイヤを構成します。
ファイル"ethernetif.c"は、イーサネットドライバ(emac_fm3.c & eth_fm3.c)と lwIP スタックの間のフレーム転
送を保証する関数を含みます。ファイルの関数一覧を Table 4-2 に示します。メイン関数は ethernetif_input ()
です。この関数は、インタフェースから呼ばれてパケットを準備する時に呼ばれるべきです。
Figure 4-2 は LwIP とイーサネット I/F の関係を表しています。
Table 4-2 LwIP イーサネット I/F 関数一覧
Item 名称
No.
1
err_t ethernetif_init(struct netif *netif)
2
err_t ethernetif_input (struct netif *netif)
3
static void low_level_init(struct netif *netif)
4
struct pbuf * low_level_input(struct netif *netif)
5
static err_t low_level_output(struct netif *netif, struct pbuf *p)
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
詳細
イーサネットドライバのローレベル関数を初期化す
るために low_level_init をコール
low_level_input をコールし、入力プロセスで受信パケ
ットを Lwip へ通す
イーサネットペリフェラルを初期化するイーサネッ
トドライバ関数をコールする
イーサネットペリフェラルからのパケットを取得す
るために eth_emac_rx をコールする
イーサネットパケットを送信するためにイーサネッ
トドライバ関数 eth_emac_tx to をコールする
11
A P P L I C A T I O N
N O T E
Figure 4-2 LwIP イーサネット I/F のブロックダイヤグラム
Init_lwIP()
LwIP_Input_
Handle()
tcp_write(),
udp_send() ...
12
CONFIDENTIAL
ethernetif_init()
ethernetif_input()
low_level_init()
low_level_input()
eth_emac_rx()
low_level_output()
eth_emac_tx()
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
4.3
N O T E
イーサネットドライバ
このセクションでは MB9BF618S/T の MAC コントローラに注目します。Figure 4-3 はイーサネット MAC の
ブロックダイヤグラムです。
Figure 4-3 LwIP イーサネット MAC のブロックダイヤグラム
DMA は GMAC によって受信されたデータフレームをホストメモリの受信バッファへ転送し、ホストメモ
リの送信バッファからからのデータフレームを送信します。ホストメモリに置かれるディスクリプタはこれ
らバッファのポインタとして働きます。それぞれのディスクリプタは 2 つのバッファ、2 バイトカウント
バッファ、2 アドレスポインタを指し示すことができます。ディスクリプタアドレスは使用されるバス幅に
整列されるべきです。
DMA ディスクリプタは 2 つのフォーマットを使うことができます。
−
ディスクリプタは 1 つのデータバッファのみ指し示すことができる。次のディスクリプタ
フィールドはディスクリプタチェーンメカニズムに従って、次のディスクリプタを指し示す。
−
ディスクリプタはバッファ 1 とバッファ 2 の 2 つのデータバッファを指し示すことができる。
イーサネットドライバでは、送信と受信の両ディスクリプタは Figure 4-4 に示すように繋がっています。
またこの図はメモリ上のバッファとディスクリプタの配置モデルも表現しています。
<注意事項>
−
イーサネットパケットは1つまたは複数の DMA ディスクリプタにまたがることができます。
−
1つの DMA ディスクリプタは 1 つのイーサネットパケットにのみ使用できます。
−
チェーンの最後のディスクリプタはディスクリプタリングを形成する最初のディスクリプタを指
し示します。
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
13
A P P L I C A T I O N
N O T E
Figure 4-4 イーサネット DMA ディスクリプタのチェーン
4.3.1
初期化関数--- eth_system_device_init()
Figure 4-5 イーサネットドライバの初期化関数のフローチャート
Start
Configure Ethernet
Peripheral IO
Configure Ethernet
Clock
Configure MAC
Initialize DMA
interruption
Initialize transmit
descriptor &
receive descriptor
Reset PHY
Configure MAC
address
Select RMII mode
Register MAC
address and
transceiver function
Enable PHY
Auto negotiation
14
CONFIDENTIAL
Enable Ethernet
channel 0 interrupt
Enable MAC &
DMA transmission
and reception
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
4.3.2
N O T E
送信関数---eth_emac_tx()
Figure 4-6 イーサネットドライバの送信関数のフローチャート
Start
Copy the frame to be sent into host
memory (pointed by the current
ETHERNET DMA Tx descriptor)
Set the Frame Length & segment
information
Enable TX Completion Interrupt
Set Own bit of the Tx descriptor
Status to give buffer to DMA
Tx Buffer
available ?
No
Clear DMA flag and
resume DMA
transmission
Yes
Selects the next DMA Tx
descriptor list for next
buffer to send
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
15
A P P L I C A T I O N
4.3.3
N O T E
受信関数---eth_emac_rx()
Figure 4-7 イーサネットドライバの受信関数のフローチャート
Start
the descriptor is
owned by the DMA
?
Get the Frame Length of the
received packet
Allocate buffer and store the
received package
Set Own bit of the Rx descriptor
status to gives the buffer back to
DMA
Rx Buffer
available ?
No
Clear DMA flag and
resume reception
Yes
Update the DMA global
Rx descriptor with next Rx
descriptor
16
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
5.
N O T E
デモアプリケーション開発
5.1
プロジェクトファイル構造
デモアプリケーションのプロジェクト構造を Figure 5-1 に示します。
Figure 5-1 プロジェクト構造
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
17
A P P L I C A T I O N
5.2
N O T E
デモアプリケーションのメインループ
ファイル lwip.c の Init_lwIP()関数コールによる lwip とアプリケーションの初期化後、メインループは次の
2 つのアイテムをチェックします。
−
−
ネットワークインタフェース上に入ってくるデータ
処理のための周期的なタイムアウトは TCP と ARP のタイマに依存している。
Figure 5-2 はメインループのソフトウェアデータフローを示します。
Figure 5-2 ソフトウェアデータフロー
Initialize lwip
Polling package
and processing
Lwip periodic
handling of TCP
and ARP
Figure 5-3 UDP エコーサーバフローチャート
Start
Create
new UDP
connection
Bind the
Connection with
Port 7
Receive data
On the connection?
No
Yes
Send back
the data
18
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
5.3
N O T E
UDP エコーサーバ
本デモは基本的な UDP 通信をテストするために使用されます。EVB は UDP サーバ(udp_echo_server.c)とし
て動作します。UDP サーバはクライアントのリクエストを待ち、リクエストを受信するとエコーバックを
返します。Figure 5-3 はそのフローチャートです。
UDP エコーサーバを初期化するために Init_lwIP()内で udp_echo_init()がコールされます。この処理は次の動
作を含んでいます。
−
−
−
udp_new()関数をコールして、UDP コントロールブロックを作成する。
udp_bind()関数をコールして、UDP コントロールブロックを専用ポート 7 に結びつける。
UDP コントロールブロックによって受信されたパッケージを操作するコールバック関数を登
録する。
コールバック関数 echo_receive_callback()の中で、UDP コントロールブロックごとに受信したパッケージは、
UDP クライアントに直接送り返されます。
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
19
A P P L I C A T I O N
5.4
N O T E
S6E2GM への LwIP の移植
S6E2GM への LwIP の移植は、例として SK-FM4-144L-S6E2GM v110 ボードを使用します。
S6E2CC には既に LwIP プロジェクトが存在するため、S6E2GM はこのプロジェクトをスタートアップとし
て使用します。
S6E2CC project: s6e2cc_ethernet_lwip.zip (V0.9)
http://www.spansion.com/pages/emeaDisclaimer.aspx?forwardto=%2Fdownloads%2Fs6e2cc_ethernet_lwip.zip
S6E2GM template project: s6e2gm_template.zip
http://www.spansion.com (公開予定)
移植手順
1. "s6e2cc_ethernet_lwip-v09¥example¥source"を"s6e2gm_template-v01¥example¥source"に上書きコピーする。
2. S6E2GM template IAR プロジェクトを開く
3. インクルードファイルを追加する
プロジェクト->オプション->c/c++コンパイラ->プリプロセッサ->追加インクルードディレクトリ
$PROJ_DIR$¥..¥..¥example¥source¥emac
$PROJ_DIR$¥..¥..¥example¥source¥board_support
$PROJ_DIR$¥..¥..¥example¥source¥fm_adaption
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥apps
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥apps¥httpserver_raw
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥port
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥port¥arch
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥api
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥core
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥core¥ipv4
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥include
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥include¥ipv4
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥include¥ipv4¥lwip
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥include¥lwip
$PROJ_DIR$¥..¥..¥example¥source¥lwip-1.4.1¥src¥include¥netif
4. IAR のワークスペースにソースディレクトリの以下のファイルを追加する。
Ajax.c
Api_lib.c
Api_msg.c
Autoip.c
Board.c
Def.c
Dhcp.c
20
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
N O T E
Dns.c
Emac.c
Err.c
Etharp.c
Ethernetif.c(Fm_adaption folder)
Ethphy.c
Fs.c
Httpd.c
I2clcd.c
Icmp.c
Igmp.c
Inet.c
Inet_chksum.c
Init.c
Ip.c
Ip_addr.c
Ip_frag.c
Lwip.c
Mem.c
Memp.c
Multicon.c
Netbuf.c
Netdb.c
Netif.c
Netifapi.c
Pbuf.c
Pushbuttons.c
Raw.c
Sensoradc.c
Slipif.c
Sockets.c
Stacklessudp.c
Stats.c
Sys.c
Tcp.c
Tcp_in.c
Tcp_out.c
Tcpip.c
Timers.c
Uart.c
Udp.c
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
21
A P P L I C A T I O N
N O T E
Scheduler.c
Tasks.c
5. "example¥source¥emac¥emac.c"を開き、345 行に S6E2GM の定義を追加する。
#elif defined(_S6E2GM_H_)
NVIC_DisableIRQ(ETHER0_IRQn);
NVIC_ClearPendingIRQ(ETHER0_IRQn);
NVIC_ClearPendingIRQ(ETHER0_IRQn);
6. " example¥source¥mcu.h"を開き、S6E2CC 定義を S6E2GM 定義に置き換える。
変更前
変更後
#ifndef _S6E2CC_H_
#ifndef _S6E2GM_H_
#include "s6e2cc.h"
#include "s6e2gm.h"
#endif
#endif
#ifndef _SYSTEM_S6E2CC_H_
#ifndef _SYSTEM_S6E2GM_H_
#include "system_s6e2cc.h"
#include "system_s6e2gm.h"
#endif
#endif
更に追加の定義
#define __IO volatile
7. "s6e2gm_template-v01¥example¥source¥emac¥emac_user.h"を開き、PHY リセットピンを
"SK_FM4_144L-S6E2GM V110"ボードに追加する。
245 行に定義を追加。
#define EMAC0_PHY_RESET_PIN ((uint32_t*) &bFM4_GPIO_PDOR2_PA)
8. コンパイルとプロジェクトの実行
検証:
1.
2.
3.
4.
22
CONFIDENTIAL
プロジェクトを実行
CN4 をイーサネット線経由で PC に接続する。
PC 上のブラウザを開いて、"192.168.1.20"を入力する。
(PC の IP アドレスが同じ LAN の中にあることを確認してください)
FM4 が表示したページを確認してください。
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
6.
N O T E
関数
このドキュメントで提供されている API を以下の表に示します。
6.1
関数リスト
Table 6-1 LwIP イーサネットドライバ API リスト
名称
No
詳細
1
ETH_MAC0_IRQHandler()
イーサネットポート 0 MAC 割込みハンドラ
2
ETH_MAC1_IRQHandler()
イーサネットポート 1 MAC 割込みハンドラ
3
eth_system_device_init ()
MAC コントローラとクロックの初期化
4
eth_emac_rx
5
eth_emac_tx
6
EMAC_init()
イーサネットペリフェラルの初期化
7
EMAC_INT_config()
指定したイーサネット DMA 割込みの有効・無効を設定
8
EMAC_MAC_Addr_config()
選択した MAC アドレスを設定
9
EMAC_MACTransmissionCmd()
MAC 送信の有効・無効を設定
10
EMAC_FlushTransmitFIFO()
イーサネット送信 FIFO をクリア
11
EMAC_MACReceptionCmd()
MAC 受信の有効・無効を設定
12
EMAC_DMATransmissionCmd()
DMA 送信の有効・無効を設定
13
EMAC_DMAReceptionCmd()
DMA 受信の有効・無効を設定
14
EMAC_start()
イーサネット MAC と DMA 受信/送信を有効にする
15
EMAC_clear_pending()
イーサネット DMA 割込み保留ビットをクリア
16
EMAC_resume_reception()
MAC ドライバからパケットを入手し、スタックのアプリケー
ションレイヤにパケットを渡す
アプリケーションレイヤからパケットを入手し、MAC ドライ
バへ送る
DmaRxPollDemand レジスタへのライトによる DMA 送信再開
(ライトデータは何でもよい)。これにより DMA は受信を再開
する。
DmaTxPollDemand レジスタへのライトによる DMA 送信再開
17
EMAC_resume_transmission()
(ライトデータは何でもよい)。これにより DMA は送信を再開
する。
18
EMAC_PHY_read()
PHY レジスタをリード
19
EMAC_PHY_write()
PHY レジスタへライト
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
23
A P P L I C A T I O N
N O T E
Table 6-2 LwIP アプリケーション API リスト
No.
Item Name
Description
1
Init_lwIP()
LwIP を初期化
2
echo_init ()
TCP エコーサーバを初期化
3
udpecho_init()
UDP エコーサーバを初期化
4
httpd_init()
HTTP サーバを初期化
5
dns_client_init()
DNS クライアントを初期化
6
tcp_client_init()
TCP クライアントを初期化
7
netif_add()
lwIP netifs のリストにネットワークインタフェースを追加
8
netif_set_default()
9
dhcp_start()
ネットワークインタフェースの DHCP ネゴシエーションを開始
10
netif_set_up()
インタフェースを起動し、通信処理を可能する
ネットワークインタフェースをデフォルトネットワークインタ
フェースとして設定(指定したルートが見つからない場合にすべ
てのパケットを出力するために使用)
Table 6-3 RAW API 関数
API
struct tcp_pcb *tcp_new(void)
Description
新しいコネクション識別子を作成(PCB)。新しい PCB 作成時
にメモリが利用可能でない場合、NULL を返す。
err_t tcp_bind(struct tcp_pcb *pcb, ip_addr *ipaddr, u16_t port)
pcb をローカル IP アドレスとポート番号に結びつける。IP ア
ドレスは、すべてのローカル IP アドレスのコネクションと結
びつける場合に IP_ADDR_ANY を指定できる。
struct tcp_pcb *tcp_listen(struct tcp_pcb *pcb)
入力するコネクションに対するリスニングを始めるように
pcb コマンドを送る。.
struct tcp_pcb *tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t
tcp_listen と同じ。しかしリッスンキューで未解決のコネク
backlog)
ションの数を引数 backlog で指定された値に制限します。
void tcp_accepted(struct tcp_pcb *pcb)
入力コネクションが受け入れた lwIP を通知します。
void tcp_accept(struct tcp_pcb *pcb, err_t (* accept)(void *arg,
リスニングコネクションで、新しいコネクションが到着した
struct tcp_pcb *newpcb, err_t err))
時にコールされるコールバック関数を指定します。
err_t tcp_connect(struct tcp_pcb *pcb, struct ip_addr *ipaddr,
リモートホストへ接続するために pcb を設定し、コネク
u16_t port, err_t (* connected)(void *arg, struct tcp_pcb *tpcb,
ションが開いた初期 SYN セグメントを送ります。
err_t err));
err_t tcp_write(struct tcp_pcb *pcb, void *dataptr, u16_t len, u8_t
TCP データを送ります。リモートホストへデータ送信が成功
copy)
した時に、アプリケーションは指定されたコールバック関数
のコールが通知されます。
void tcp_sent(struct tcp_pcb *pcb, err_t (* sent)(void *arg, struct
リモートホストでデータ受信が成功した時(すなわち応答し
tcp_pcb *tpcb,
た時)にコールされるコールバック関数を設定します。
u16_t len))
void tcp_recv(struct tcp_pcb *pcb, err_t (* recv)(void *arg, struct
Sets the callback function that will be called when new data arrives.
tcp_pcb *tpcb, struct pbuf *p, err_t err))
新しいデータが到着した時にコールされるコールバック関数
を設定します。
void tcp_recved(struct tcp_pcb *pcb, u16_t len)
アプリケーションがデータを受信した時にコールされなけら
ばなりません。 引数 len は受信データ長を示します。
void tcp_poll(struct tcp_pcb *pcb, u8_t interval, err_t (* poll)(void
アプリケーションをポーリングするためにコールされるコー
*arg, struct tcp_pcb *tpcb))
ルバック関数とポーリング間隔を指定します。
err_t tcp_close(struct tcp_pcb *pcb)
コネクションを閉じます。コネクションを閉じるのに利用可
能なメモリがない場合は、関数は ERR_MEM を返します。
void tcp_abort(struct tcp_pcb *pcb)
RST (リセット)セグメントをリモートホストへ送信するコネ
クションを中止します。pcb は割当てを解除されます。この関
数はフェイルしません。
24
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
N O T E
API
Description
void tcp_err(struct tcp_pcb *pcb, void (* err)(void *arg, err_t err))
エラーコールバック関数は、パスした pcb をパラメータとし
て入手しません。pcb はすでに割り当てを解除されているかも
しれないからです。
struct udp_pcb *udp_new(void)
UDP 通信で使用される 新しい UDP pcb を作成します。
void udp_remove(struct udp_pcb *pcb)
pcb の割当てを解除して取り除きます。
err_t udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t
pcb をローカルアドレスに結びつけます。IP アドレス引数
port)
"ipaddr"は、任意のローカル IP アドレスにリッスンする場合、
"IP_ADDR_ANY"を使用できます。 関数は常に ERR_OK 返し
ます。
err_t udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr,
pcb のリモートエンドを設定します。この関数はネットワーク
u16_t port)
トラフィックを生成しません。しかし pcb のリモートアドレ
スのみ設定します。
err_t udp_disconnect(struct udp_pcb *pcb)
pcb のリモートエンドを削除します。この関数はネットワーク
トラフィックを生成しません。しかし pcb のリモートアドレ
スのみ削除します。
err_t udp_send(struct udp_pcb *pcb, struct pbuf *p)
pbuf p を送ります。pbuf は割当てを解除されません。
void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p,
UDP データグラムが受信された時にコールされるべきコール
struct ip_addr *addr,
バック関数を指定します。
u16_t port), void *recv_arg)
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
25
A P P L I C A T I O N
6.2
N O T E
グローバルデータ
Table 6-4 グローバルデータリスト
名称
No.
26
CONFIDENTIAL
詳細
イーサネットポート 0 用イーサネットド
アクセス方法(リードまたはライト)
リード/ライト
1
fm3_emac_device0
2
fm3_emac_device1
3
netif0
4
netif1
5
MACaddr0
イーサネットポート 0 の Mac アドレス
リード
6
MACaddr1
イーサネットポート 1 の Mac アドレス
リード
7
SystemCoreClock
ライバインタフェース
イーサネットポート 1 用イーサネットド
ライバインタフェース
イーサネットポート 0 用 lwIP ネットワー
クインタフェース
イーサネットポート 1 用 lwIP ネットワー
クインタフェース
システムクロック周波数
(コアクロック)
リード/ライト
リード/ライト
リード/ライト
リード
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
6.3
N O T E
グローバルタイマ
Table 6-5 グローバルタイマリスト
No.
1
Item Name
SysTick Timer
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
Description
オーバータイム計算用のシステムタイマ
27
A P P L I C A T I O N
6.4
N O T E
マクロ定義
Table 6-6 lwIP メモリオプション定義
定義
値
説明
lwIP ヒープメモリサイズ: lwIP のダイナ
ミックなメモリ割当てのために使用され
MEM_SIZE
16*1024
MEMP_NUM_PBUF
10
MEM_REF と
MEMP_NUM_UDP_PCB
6
UDP PCB 構造体の総数
MEMP_NUM_TCP_PCB
10
MEMP_NUM_TCP_PCB_LISTEN
6
ます。
MEMP_NUM_TCP_SEG
MEM_ROM pbufs の総数
TCP PCB 構造体の総数
リスニング TCP PCB の総数
同時にキューに入る TCP セグメントの最
12
大数
PBUF_POOL_SIZE
10
PBUF_POOL タイプの pbuf の総数
PBUF_POOL_BUFSIZE
1500
PBUF_POOL タイプの pbuf のサイズ
TCP_MSS
1460
TCP 最大セグメントサイズ
TCP_SND_BUF
8192
接続のための TCP 送信バッファ空間
TCP_SND_QUEUELEN
6* TCP_SND_BUF/TCP_MSS
TCP 送信キュー内の pbuf の最大数
TCP_WND
8192
広告された TCP 受信ウィンドウのサイズ
Table 6-7 lwIP アプリケーション設定
Definition
Value
Explanation
M9BF618X がハードウェアによって IP,
UDP, TCP および ICMP のチェックサムを
CHECKSUM_BY_HARDWARE
計算し、検証する事を可能にする。
1
この機能を使用するために、定義をコ
メントアウトしないでください。
NO_SYS
OS 無しで lwip を使用
1
Table 6-8 イーサネットドライバ設定
Definition
28
CONFIDENTIAL
Value
Explanation
入力するパッケージを保存する MCU の
EMAC_RXBUFNB
4
EMAC_TXBUFNB
2
EMAC_MAX_PACKET_SIZE
1520
最大パッケージ長
RMII_MODE
1
RMII モード有効
USING_MAC0
1
イーサネットチャネル 0 有効
USING_MAC1
1
イーサネットチャネル 1 有効
TICK_PER_SECOND
1000
システムタイマ割込み周波数
EXT_MAINCLOCK
( 4000000UL)
外部 4Mhz 発振子の周波数
バッファ数
出力するパッケージを保存する MCU の
バッファ数
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
7.
N O T E
追加情報
Cypress Semiconductor 製品の更なる情報については、以下の WEB サイトをご訪問ください。
http://www.cypress.com
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
29
A P P L I C A T I O N
8.
N O T E
主な変更内容
ページ
場所
変更箇所
Revision 1.0
-
30
CONFIDENTIAL
-
Initial release
MCU-AN-510047-J-11, September 11, 2015
A P P L I C A T I O N
N O T E
MCU-AN-510047-J-11
Cypress  Application Note
FM3 Family, FM4 Family
32-BIT MICROCONTROLLER
OS 無し LWIP イーサネットソフトウェア
アプリケーションノート
September 2015 Rev. 1.0
Published:
Edited:
Cypress Semiconductor Corp.
コーポレートコミュニケーション部
September 11, 2015, MCU-AN-510047-J-11
CONFIDENTIAL
31
A P P L I C A T I O N
N O T E
免責事項
本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ
りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が
確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における
核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ
ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を
いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また
は損害についても、Cypress は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス
はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ
せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願
いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい
る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。
商標および注記
このドキュメントは、断りなく変更される場合があります。本資料には Cypress が開発中の Cypress 製品に関する情報が記
載されている場合があります。Cypress は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする権
利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全性,
実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、また、
明示, 黙示または法定されているあらゆる保証をするものでもありません。Cypress は、このドキュメントに含まれる情報を
使用することにより発生したいかなる損害に対しても責任を一切負いません。
Copyright © 2015 Cypress Semiconductor Corp. All rights reserved.
商標:Cypress, Cypress ロゴ, Spansion®, Spansion ロゴ (図形マーク), MirrorBit®, MirrorBit® Eclipse™, ORNAND™, Easy
DesignSim™, Traveo™ 及びこれらの組合せは、米国・日本ほか諸外国における Cypress Semiconductor Corp.の商標です。第三
者の社名・製品名等の記載はここでは情報提供を目的として表記したものであり、各権利者の商標もしくは登録商標となっ
ている場合があります。
32
CONFIDENTIAL
MCU-AN-510047-J-11, September 11, 2015