Ether 途中で通信できなくなる。

GR-SAKURA Ver2.24 Ether通信で、PCからコマンドをもらってOKを返すプログラムですが、

何回か通信しているとPCがOKを受信できてない。GR-SAKURAは送信したつもりのようで、そうなるとpingも通りません。

Clientは止まっても接続状態のままです。

止まったことを検出することもできません。

どこが悪いのか判断できない状態です。

間違い、方法があれば知りたいです。

プログラム

void Task_tcp(void) {

char land[40] ;
int wno;
int bno;

Ethernet.begin(mac, ip, gateway, subnet); // *** not Ethernet connect stop ***
server.begin();

Serial.print("Task tcp start IP ");
Serial.println(Ethernet.localIP());
TcpRcvCnt = 0;

while(1){

// 接続中のクライアントからデータを受信する
EthernetClient client = server.available(); // サーバーに接続されていて、データの読み取りが可能なクライアントを取得する
if (client) { // クライアントの接続状態
while(client.connected()){
if (client.available()) { // 受信データありチェック
rdat = client.read(); // 1バイトの読込み
if(rdat != CR){
land[TcpRcvCnt++] = rdat ;
}
if(rdat == LF){ // デリミタコードチェック
land[TcpRcvCnt] = NUL ;
TcpRcvCnt = 0; // 受信データ格納ポインタをリセット

Serial.println( land );

if(!strncmp(land,"*CLOSE",6)){ // <<< CLOSECommand >>>
delay(2000); // 何故か2秒位待つと長く生きる。
client.print("!OK\n");

bno = land[7] & 0x0f ; // 受信したコマンドで
board_no_set(bno); // I/O出力する。
wno = land[9] & 0x0f ;; // PORT4 と PORTDを使用
sig_rly_set(wno,CLOSE); //
}
} else {
delay(10) ; // 10mS待つ
}
}else{
delay(10) ; // 10mS待つ
}
}
Serial.println();
Serial.println("disconnecting.(2)");
if(!client.connected()){
client.stop(); // サーバーとの接続を終了
}
}
delay(10) ; // 10mS待つ
}
}

  • 自己解決

    board_no_set(bno); // I/O出力する。の先で12Vのリレーを動かしているのですが、6個同時にONしたとき、GNDが3.3Vと共通になっているため、GNDが振られLANドライバーICのLAN8720が飛んでいるようです。CPUは動いているので微妙な所で飛んでました。