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

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

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

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

C

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

組み込み開発

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

マイコン

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

受付中

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

teratail2020
teratail2020

総合スコア9

RTOS

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

C

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

組み込み開発

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

マイコン

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

0回答

0リアクション

0クリップ

327閲覧

投稿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"}

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

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

RTOS

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

C

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

組み込み開発

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

マイコン

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