From 1f255cb3efc4b68f2ced717682c0f8c1ebb4c4bf Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Wed, 17 Jun 2026 17:46:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(eth):=20=E4=BF=AE=E5=A4=8DEthNet=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=8F=82=E6=95=B0=E9=85=8D=E7=BD=AE=E5=92=8C=E8=B0=83?= =?UTF-8?q?=E8=AF=95=E5=91=BD=E4=BB=A4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/GateWay/source/User/Inc/CatOneTask.h | 1 - Project/GateWay/source/User/Inc/bsp.h | 2 +- Project/GateWay/source/User/Src/CatOneTask.c | 34 +++++++------------- Project/GateWay/source/User/Src/RS485Task.c | 4 +-- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/Project/GateWay/source/User/Inc/CatOneTask.h b/Project/GateWay/source/User/Inc/CatOneTask.h index 2db63b7..b0e4edf 100644 --- a/Project/GateWay/source/User/Inc/CatOneTask.h +++ b/Project/GateWay/source/User/Inc/CatOneTask.h @@ -133,7 +133,6 @@ bool CatOneGetStatus(void); bool CatOneEthSendQueue(uint8_t *sData, uint16_t sLen); void CatOneTriggerRegister(void); void ETHTriggerRegister(void); -void ETHResetEx(void); void ETHApplyNetPara(void); void CatOne_Eth_Thread_Entry(void *parameter); void EthRxOverhandler(void); diff --git a/Project/GateWay/source/User/Inc/bsp.h b/Project/GateWay/source/User/Inc/bsp.h index ac43aa7..b44ea73 100644 --- a/Project/GateWay/source/User/Inc/bsp.h +++ b/Project/GateWay/source/User/Inc/bsp.h @@ -10,7 +10,7 @@ #include "rtthread.h" #include "ff.h" -#define SOFTWARE_VERSION 12 +#define SOFTWARE_VERSION 10 #define HARDWARE_VERSION 12 //#define USE_BOOTLOADER diff --git a/Project/GateWay/source/User/Src/CatOneTask.c b/Project/GateWay/source/User/Src/CatOneTask.c index 4f8e2f1..c413156 100644 --- a/Project/GateWay/source/User/Src/CatOneTask.c +++ b/Project/GateWay/source/User/Src/CatOneTask.c @@ -623,6 +623,11 @@ void EthLoopHandler(void) break; case ETH_WAIT_LINK: + if(CatOne.EthLinkWaitCnt == 0) { + /* 首次进入等待链路状态,等待模块完全启动 */ + CAT1_DBG_LOG("ETH Waiting for module ready...\r\n"); + rt_thread_delay(2000); + } if(ETH_LINK_GET() == Reset) { CAT1_DBG_LOG("ETH Link OK!\r\n"); if(CatOne.GateWay->SvrRegFlag == false) { @@ -890,11 +895,6 @@ void ETHTriggerRegister(void) CatOne.EthStatus = ETH_REG_SVR; } -void ETHResetEx(void) -{ - CatOne.EthStatus = ETH_RESET; -} - void ETHApplyNetPara(void) { uint8_t cmdBuf[128]; @@ -939,7 +939,7 @@ void ETHApplyNetPara(void) cmdBuf[idx++] = 0xED; cmdBuf[idx++] = 0xF2; cmdBuf[idx++] = 0xA3; cmdBuf[idx++] = 0x56; cmdBuf[idx++] = 0xCA; cmdBuf[idx++] = 0xDB; cmdBuf[idx++] = 0x91; cmdBuf[idx++] = 0x84; cmdBuf[idx++] = 0xB0; cmdBuf[idx++] = 0xD7; - cmdBuf[idx++] = 0x03; /* 命令类型: 写参数并保存到Flash */ + cmdBuf[idx++] = 0x01; /* 命令类型: 写参数,部分参数修改后会自动重启 */ cmdBuf[idx++] = 0x00; /* 偏移: 0x00 */ cmdBuf[idx++] = 0x15; /* 长度: 21字节 */ @@ -989,29 +989,17 @@ void ETHApplyNetPara(void) cmdBuf[idx++] = 0xED; cmdBuf[idx++] = 0xF2; cmdBuf[idx++] = 0xA3; cmdBuf[idx++] = 0x56; cmdBuf[idx++] = 0xCA; cmdBuf[idx++] = 0xDB; cmdBuf[idx++] = 0x91; cmdBuf[idx++] = 0x84; cmdBuf[idx++] = 0xB0; cmdBuf[idx++] = 0xD7; - cmdBuf[idx++] = 0x03; /* 命令类型: 写参数并保存到Flash */ + cmdBuf[idx++] = 0x01; /* 命令类型: 写参数,DHCP修改后会自动重启 */ cmdBuf[idx++] = 0x38; /* 偏移: 0x38 (DHCP en) */ cmdBuf[idx++] = 0x01; /* 长度: 1字节 */ cmdBuf[idx++] = (pCfg->EthNet.IpMode == ETH_IP_DHCP) ? 0x01 : 0x00; CAT1_DBG_LOG("ETH Write DHCP=%d", cmdBuf[idx - 1]); EthOrCat1UartSend(cmdBuf, idx); - rt_thread_delay(500); + rt_thread_delay(3000); /* 等待模块重启 */ - /* 步骤3: 使用07命令重启模块使参数生效 - * 07命令: 写参数+保存+重启。写入偏移0x1F(DevID),1字节0x00 - * DevID不可修改,实际效果只是重启模块 + /* 注意:不要向DevID(偏移0x1F)区域写入任意数据,否则根据手册说明, + * 如果写入的ID不正确,设备会丢弃所有其他写入的参数 + * 模块会在下次上电时自动使用Flash中保存的参数工作 */ - idx = 0; - cmdBuf[idx++] = 0xED; cmdBuf[idx++] = 0xF2; cmdBuf[idx++] = 0xA3; cmdBuf[idx++] = 0x56; - cmdBuf[idx++] = 0xCA; cmdBuf[idx++] = 0xDB; cmdBuf[idx++] = 0x91; cmdBuf[idx++] = 0x84; - cmdBuf[idx++] = 0xB0; cmdBuf[idx++] = 0xD7; - cmdBuf[idx++] = 0x07; /* 命令类型: 写参数+保存+重启 */ - cmdBuf[idx++] = 0x1F; /* 偏移: 0x1F (DevID区域,不可修改) */ - cmdBuf[idx++] = 0x01; /* 长度: 1字节 */ - cmdBuf[idx++] = 0x00; /* 写入无效数据,仅触发重启 */ - - CAT1_DBG_LOG("ETH Restart module"); - EthOrCat1UartSend(cmdBuf, idx); - rt_thread_delay(2000); } diff --git a/Project/GateWay/source/User/Src/RS485Task.c b/Project/GateWay/source/User/Src/RS485Task.c index 06331a7..8107b30 100644 --- a/Project/GateWay/source/User/Src/RS485Task.c +++ b/Project/GateWay/source/User/Src/RS485Task.c @@ -565,7 +565,7 @@ void RS485RxOverhandler(void) if(SComm1Para.RS485TimeOutCnt > 0) SComm1Para.RS485TimeOutCnt--; - if(SComm1Para.RS485RxLen > 5 && SComm1Para.RS485TimeOutCnt == 0) { + if(SComm1Para.RS485RxLen >= 1 && SComm1Para.RS485TimeOutCnt == 0) { if(SComm1Para.InitOverFlag == true) { rt_sem_release(SComm1Para.RS485Rev_Sem); SComm1Para.RS485TimeOutCnt = 20; @@ -579,7 +579,7 @@ void RS485RxOverhandler(void) if(SComm2Para.RS485TimeOutCnt > 0) SComm2Para.RS485TimeOutCnt--; - if(SComm2Para.RS485RxLen > 5 && SComm2Para.RS485TimeOutCnt == 0) { + if(SComm2Para.RS485RxLen >= 1 && SComm2Para.RS485TimeOutCnt == 0) { if(SComm2Para.InitOverFlag == true) { SComm2Para.RS485TimeOutCnt = 20; rt_sem_release(SComm2Para.RS485Rev_Sem);