質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
RTOS

RTOS(リアルタイムOS)は、リアルタイムシステムのためのOSです。実時間システムや実時間OSとも呼ばれ、時間的な制限のある処理を行うための機能・特性を備えています。組み込みシステムの制御に多く用いられています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

組み込み開発

組み込み開発とは、スマートフォンや家電、自動車などに組み込まれているコンピューターシステムの開発のことです。特定の用途に特化しており、限られた機能のための開発を指します。組み込み開発で作られた機器を組み込み機器と呼び、近年ではPCのオペレーションシステム(OS)にも採用されています。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

0回答

610閲覧

Harmony v3のTCPIPスタックにて"Transfer Handle Expired"が表示され通信不能になる問題の原因

teratail2020

総合スコア9

RTOS

RTOS(リアルタイムOS)は、リアルタイムシステムのためのOSです。実時間システムや実時間OSとも呼ばれ、時間的な制限のある処理を行うための機能・特性を備えています。組み込みシステムの制御に多く用いられています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

組み込み開発

組み込み開発とは、スマートフォンや家電、自動車などに組み込まれているコンピューターシステムの開発のことです。特定の用途に特化しており、限られた機能のための開発を指します。組み込み開発で作られた機器を組み込み機器と呼び、近年ではPCのオペレーションシステム(OS)にも採用されています。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2022/05/01 11:22

前提・ 実現したいこと

MHC(MPLAB Harmony Core)のTCP/IPスタックを用いてPIC32MX170F256BとENC28J60の組み合わせでTCPサーバソケットの構築を目指しています。
PIC32MX170F256BとENC28J60はSPIモジュールによって動かしており、一応ARP、Ping(IPv4)サーバ/クライアント、TCPサーバソケットの構築はできましたが、接続中にTCP/IPスタックが異常停止する問題が発生してます。

発生している問題・エラーメッセージ

DEBUGモジュールが有効の時はコンソール出力は以下のようになりました。
1.通信がないときは何も表示されない(正常)※今回は後付けで@:check stack signalsが出力されるようにしている
2.通信があるときは"Transfer Handle Expired"が全文表示される(正常)
※以下の文面より動作としては正常ですがoffにする必要があるとのこと。
https://github.com/Microchip-MPLAB-Harmony/net/blob/master/release_notes.md
SYS_DEBUG module needs to be removed in demos with external Ethernet controllers ENCx24J600 and ENC28J60:
3.ある程度動かしていると、通信が停止し(wiresharkにてパケットの送受信ができてないこと確認、RJ45のステータスLEDが消灯状態となる)
その時のコンソール出力は下記のように通信が行われてないにもかかわらず"Transfer Handle Expired"が出力される。(異常)
また、"Transfer Handle Expired"が完全に表示されない("Transfer Handle E"等)箇所が多数出没する。

@:check stack signals //これは後付けしたSYS_CONSOLE_MESSAGE("@:check stack signals\r\n");関数であり、パケットの送受信がない限り通常はメッセージは出ない @:check stack signals @:check stack signals @:check stack signals Transfer Handle Expired //これはPCからボードに対してpingを打った時の受信と送信動作時のコンソール出力 Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired @:check stack signals @:check stack signals @:check stack signals @:check stack signals @:check stack signals ping 192.168.0.2 //これはボードからPCにpingを打つコマンド //以下はpingの送信から受信までの動作(最後にreply[1] from 192.168.0.2: time = 39msの応答あり)×4 >Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Ping: reply[1] from 192.168.0.2: time = 39ms Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Ping: reply[2] from 192.168.0.2: time = 39ms Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Ping: reply[3] from 192.168.0.2: time = 49ms Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Ping: reply[4] from 192.168.0.2: time = 39ms Ping: done. Sent 4 requests, received 4 replies. @:check stack signals @:check stack signals @:check stack signals @:check stack signals @:check stack signals Transfer Handle Expired //これはPCからボードに対してpingを打った時の受信と送信動作時のコンソール出力 Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired Transfer Handle Expired //ここまでは正常に動いている Transfer Handle E    //ここから"Transfer Handle Expired"が崩れるとともにPCからpingの送信を停止しても以下の出力が出続ける Transfer Handle Expired Transfer Handle E Transfer Handle Expired Transfer Handle Expired Tr Transfer Handle Expired Transfer Handle E Transfer Transfer Handle Expired Transfer Handle E Transfer Handle Expired Transfer Handle E Transfer Transfer Handle Expired

DEBUGモジュールが有効の場合は"Transfer Handle Expired"が際限なく出力され、他のステータスが確認できません。
そこでDEBUGモジュールを無効にして、以下の項目を確認しました。

1."netinfo":エラーの前後で特に変化なし。※エラー後もLINKはUPのまま
<出力>
---------- Interface <eth0/ENC28J60> ----------
Host Name: MCHPENC28_E - NBNS disabled
IPv4 Address: 192.168.0.13
Mask: 255.255.255.0
Gateway: 192.168.0.1
DNS1: 192.168.0.1
DNS2: 0.0.0.0
MAC Address: 00:04:a3:12:34:56
default IP address is ON
Link is UP
Status: Ready

2.”macinfo”:エラーが発生する前は特に問題ないが、エラー発生後には送信バッファ(nTxPendBuffers)に送信できなかったパケットが溜まっている。
<出力(正常時)>
nterface: ENC28J60 Driver Statistics

Receive Statistics
nRxOkPackets: 6
nRxPendBuffers: 0
nRxSchedBuffers: 1
nRxErrorPackets: -1
nRxFragmentErrors: -1
nRxBuffNotAvailable: -1

Transmit Statistics
nTxOkPackets: 6
nTxPendBuffers: 0
nTxErrorPackets: -1
nTxQueueFull: -1

Interface: ENC28J60 Hardware Register Status
not supported

<出力(異常時)>
Interface: ENC28J60 Driver Statistics

Receive Statistics
nRxOkPackets: 52
nRxPendBuffers: 1
nRxSchedBuffers: 0
nRxErrorPackets: -1
nRxFragmentErrors: -1
nRxBuffNotAvailable: -1

Transmit Statistics
nTxOkPackets: 52
nTxPendBuffers: 20
nTxErrorPackets: -1
nTxQueueFull: -1

Interface: ENC28J60 Hardware Register Status
not supported

3.”objinfo”:エラー前からDRV_ENCにて-1となっている、エラー後にも特に変化なし
<出力>
-- Object Status--
ERROR_EXTENDED:-10
ERROR :-1
UNINIT :0
BUSY :1
READY :2
READY_EXTENDED:10

OBJ DRV_SPI:2
OBJ DRV_ENC:-1
OBJ TCPIP:2

4."ps":エラー前後でスタックオーバーフローの発生はなし
<出力>
SYS_CMD_TASKS X 1 114 1
TCPIP_STACK_Tas R 1 536 2
IDLE R 0 88 5
APP0_Tasks B 2 883 3
APP1_Tasks B 4 77 4

コマンドの説明
1、2はTCPIP CMDモジュールに登録されているデフォルトのコマンドとなります。
3はDRV_ENC28J60_Status、DRV_SPI_Status、TCPIP_STACK_Statusの戻り値を出力する自作関数です。
4はvTaskListをコンソールに出力する自作関数です。

他に調査するべき箇所がありましたらご教授願います。

補足情報(FW/ツールのバージョンなど)

各モジュールのバージョンは以下となります。
mhc_version: v3.8.5
mplabx_version: v5.45 # if MPLAB X plugin only
plugin_version: v3.6.4 # if MPLAB X plugin only
compiler: XC32 (4.00)

modules:
- {name: "core", version: "v3.10.0"}
- {name: "csp", version: "v3.11.0"}
- {name: "dev_packs", version: "v3.11.2"}
- {name: "wolfssl", version: "v4.7.0"}
- {name: "net", version: "v3.7.4"}
- {name: "crypto", version: "v3.7.5"}
- {name: "CMSIS-FreeRTOS", version: "v10.3.1"}

また全体の構成は以下となります。
イメージ説明

各モジュールの設定は以下となります。
イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問