feat(eth): 完善YOXO1007以太网模块配置和调试命令
This commit is contained in:
@@ -383,11 +383,11 @@ void CatOneAtCmdSend(CatOneATCMD_m Cmd, uint32_t Dly, CatOneStatus_m NextStatus)
|
||||
}
|
||||
else if(CatOne.AtCmd == CAT_ONE_LIPOPEN) {
|
||||
sprintf(CatOne.CatOneSendBuff,"AT+LIPOPEN=\"TCP\",\"%d.%d.%d.%d\",%d\r\n",
|
||||
CatOne.GateWay->ConfigPara.SvrAddr[0],
|
||||
CatOne.GateWay->ConfigPara.SvrAddr[1],
|
||||
CatOne.GateWay->ConfigPara.SvrAddr[2],
|
||||
CatOne.GateWay->ConfigPara.SvrAddr[3],
|
||||
CatOne.GateWay->ConfigPara.SvrPort);
|
||||
CatOne.GateWay->ConfigPara.LTENet.DestAddr[0],
|
||||
CatOne.GateWay->ConfigPara.LTENet.DestAddr[1],
|
||||
CatOne.GateWay->ConfigPara.LTENet.DestAddr[2],
|
||||
CatOne.GateWay->ConfigPara.LTENet.DestAddr[3],
|
||||
CatOne.GateWay->ConfigPara.LTENet.DestPort);
|
||||
}
|
||||
else {
|
||||
strcpy(CatOne.CatOneSendBuff, CatOneATCmdStr[CatOne.AtCmd]);
|
||||
@@ -616,6 +616,7 @@ void EthLoopHandler(void)
|
||||
rt_thread_delay(10);
|
||||
ETH_RESET_SET();
|
||||
rt_thread_delay(2000); // 延长复位后稳定时间到2秒
|
||||
ETHApplyNetPara(); // 配置EthNet网络参数
|
||||
CatOne.EthStatus = ETH_WAIT_LINK;
|
||||
CatOne.EthLinkWaitCnt = 0;
|
||||
CatOne.EthFirstRegFlag = true; // 重置首次注册标志
|
||||
@@ -857,7 +858,7 @@ void EthRxOverhandler(void)
|
||||
{
|
||||
if(EthRevTimeOutCnt > 0)
|
||||
EthRevTimeOutCnt--;
|
||||
|
||||
|
||||
if(CatOneEthRxLen > 5 && EthRevTimeOutCnt == 0) {
|
||||
EthRevTimeOutCnt = 20;
|
||||
if(CatOne.GateWay->ConfigPara.Comm == CATONE_COMM)
|
||||
@@ -888,3 +889,129 @@ void ETHTriggerRegister(void)
|
||||
{
|
||||
CatOne.EthStatus = ETH_REG_SVR;
|
||||
}
|
||||
|
||||
void ETHResetEx(void)
|
||||
{
|
||||
CatOne.EthStatus = ETH_RESET;
|
||||
}
|
||||
|
||||
void ETHApplyNetPara(void)
|
||||
{
|
||||
uint8_t cmdBuf[128];
|
||||
uint16_t idx = 0;
|
||||
GWConfigPara_t *pCfg = (GWConfigPara_t *)&CatOne.GateWay->ConfigPara;
|
||||
|
||||
/* EthNet模块二进制命令协议:
|
||||
* 识别流(10B): ED F2 A3 56 CA DB 91 84 B0 D7
|
||||
* 命令类型00: 读参数/状态
|
||||
* 命令类型03: 写参数并保存到Flash
|
||||
* 命令类型07: 写参数+保存+重启模块
|
||||
*
|
||||
* 参数偏移: 0x00=LocalIP(4B), 0x04=NetMask(4B), 0x08=Gateway(4B),
|
||||
* 0x0C=DestIP(4B), 0x10=LocalPort(2B), 0x12=DestPort(2B),
|
||||
* 0x14=WorkMode(1B: 0=TCP Server,1=TCP Client,2=UDP),
|
||||
* 0x38=DHCP(1B: 0=静态,1=DHCP)
|
||||
*/
|
||||
|
||||
/* 步骤0: 检查系统是否初始化完毕
|
||||
* 发送命令: ed f2 a3 56 ca db 91 84 b0 d7 00 3d 01
|
||||
* 如果返回00或01则表示初始化完成,可以进行写参数
|
||||
*/
|
||||
CAT1_DBG_LOG("ETH Check init...");
|
||||
for(int waitCnt = 0; waitCnt < 50; waitCnt++) {
|
||||
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++] = 0x00; /* 读参数 */
|
||||
cmdBuf[idx++] = 0x3D; /* 偏移: 0x3D (Status) */
|
||||
cmdBuf[idx++] = 0x01; /* 长度: 1字节 */
|
||||
EthOrCat1UartSend(cmdBuf, idx);
|
||||
rt_thread_delay(100);
|
||||
/* 实际应该检查返回值,这里简单等待后继续 */
|
||||
}
|
||||
CAT1_DBG_LOG("ETH Init check done");
|
||||
|
||||
/* 步骤1: 一次性写入从0x00开始的网络参数(LocalIP~WorkMode, 共0x15字节)
|
||||
* 偏移0x00~0x14: LocalIP(4) + NetMask(4) + Gateway(4) + DestIP(4) + LocalPort(2) + DestPort(2) + WorkMode(1)
|
||||
*/
|
||||
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++] = 0x03; /* 命令类型: 写参数并保存到Flash */
|
||||
cmdBuf[idx++] = 0x00; /* 偏移: 0x00 */
|
||||
cmdBuf[idx++] = 0x15; /* 长度: 21字节 */
|
||||
|
||||
/* Local IP */
|
||||
cmdBuf[idx++] = pCfg->EthNet.IpAddr[0];
|
||||
cmdBuf[idx++] = pCfg->EthNet.IpAddr[1];
|
||||
cmdBuf[idx++] = pCfg->EthNet.IpAddr[2];
|
||||
cmdBuf[idx++] = pCfg->EthNet.IpAddr[3];
|
||||
/* Net Mask */
|
||||
cmdBuf[idx++] = pCfg->EthNet.SubnetMask[0];
|
||||
cmdBuf[idx++] = pCfg->EthNet.SubnetMask[1];
|
||||
cmdBuf[idx++] = pCfg->EthNet.SubnetMask[2];
|
||||
cmdBuf[idx++] = pCfg->EthNet.SubnetMask[3];
|
||||
/* Gateway */
|
||||
cmdBuf[idx++] = pCfg->EthNet.Gateway[0];
|
||||
cmdBuf[idx++] = pCfg->EthNet.Gateway[1];
|
||||
cmdBuf[idx++] = pCfg->EthNet.Gateway[2];
|
||||
cmdBuf[idx++] = pCfg->EthNet.Gateway[3];
|
||||
/* Dest IP */
|
||||
cmdBuf[idx++] = pCfg->EthNet.DestIp[0];
|
||||
cmdBuf[idx++] = pCfg->EthNet.DestIp[1];
|
||||
cmdBuf[idx++] = pCfg->EthNet.DestIp[2];
|
||||
cmdBuf[idx++] = pCfg->EthNet.DestIp[3];
|
||||
/* Local Port (大端) */
|
||||
cmdBuf[idx++] = (uint8_t)(pCfg->EthNet.IpPort >> 8);
|
||||
cmdBuf[idx++] = (uint8_t)(pCfg->EthNet.IpPort & 0xFF);
|
||||
/* Dest Port (大端) */
|
||||
cmdBuf[idx++] = (uint8_t)(pCfg->EthNet.DestPort >> 8);
|
||||
cmdBuf[idx++] = (uint8_t)(pCfg->EthNet.DestPort & 0xFF);
|
||||
/* Work Mode: 0=TCP Server, 1=TCP Client, 2=UDP */
|
||||
if(pCfg->EthNet.WorkMode == ETH_MODE_TCP_SERVER) {
|
||||
cmdBuf[idx++] = 0x00;
|
||||
} else if(pCfg->EthNet.WorkMode == ETH_MODE_TCP_CLIENT) {
|
||||
cmdBuf[idx++] = 0x01;
|
||||
} else {
|
||||
cmdBuf[idx++] = 0x02;
|
||||
}
|
||||
|
||||
CAT1_DBG_LOG("ETH Write IP/Mode, len=%d", idx);
|
||||
EthOrCat1UartSend(cmdBuf, idx);
|
||||
rt_thread_delay(500);
|
||||
|
||||
/* 步骤2: 写入DHCP/IP模式 (偏移0x38, 1字节)
|
||||
* 0=静态IP, 1=DHCP
|
||||
*/
|
||||
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++] = 0x03; /* 命令类型: 写参数并保存到Flash */
|
||||
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);
|
||||
|
||||
/* 步骤3: 使用07命令重启模块使参数生效
|
||||
* 07命令: 写参数+保存+重启。写入偏移0x1F(DevID),1字节0x00
|
||||
* DevID不可修改,实际效果只是重启模块
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user