提交 b5ec882a 作者: wysheng

TCU升级

上级 e01d7680
#include "TCU_Update.h" #include "TCU_Update.h"
u8 TcuUpDateBuffer[1024]; //TCU升级数据缓存
void TCUUpDateHeartHandle(StructTCUSend * pPgnRecv) void TCUUpDateHeartHandle(StructTCUSend * pPgnRecv)
{ {
...@@ -28,10 +28,12 @@ void TCUUpDateHeartHandle(StructTCUSend * pPgnRecv) ...@@ -28,10 +28,12 @@ void TCUUpDateHeartHandle(StructTCUSend * pPgnRecv)
typedef struct typedef struct
{ {
u8 type; //设备类型 u8 type;//设备类型
u8 addr; //设备通信地址 u8 addr;//设备通信地址
u8 sno; //程序内部编号 u8 sno;//程序内部编号
u16 ver; //升级目标版本 u16 ver;//升级目标版本
u8 result; //00H:允许下载 01H:禁止下载其它:无效
u8 reason; //00H:无 01H:本身不支持此功能 02H:数据合法性校验失败
} StructStartDownload; } StructStartDownload;
...@@ -62,6 +64,25 @@ void TCUStartDownloadHandle(StructTCUSend * pPgnRecv) ...@@ -62,6 +64,25 @@ void TCUStartDownloadHandle(StructTCUSend * pPgnRecv)
tmp = tmp << 8; tmp = tmp << 8;
tmp |= pPgnRecv->Data[5]; tmp |= pPgnRecv->Data[5];
StartDownload.ver = tmp; StartDownload.ver = tmp;
if(StartDownload.type == 0x01) //0x01 --- 直流充电控制器
{
/*if(StartDownload.ver != TCUControlInfo.HardwareVersion) //V5版本
{
StartDownload.result = 0x01;//01H:禁止下载
StartDownload.reason = 0x02;//02H:数据合法性校验失败
}
else*/
{
StartDownload.result = 0x00;//00H:允许下载
StartDownload.reason = 0x00;//
}
}
else
{
StartDownload.result = 0x01;//01H:禁止下载
StartDownload.reason = 0x01;//01H:本身不支持此功能
}
} }
else if (pPgnRecv->DA == ChargerCont1939Addr_B) else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{ {
...@@ -74,6 +95,9 @@ void TCUStartDownloadHandle(StructTCUSend * pPgnRecv) ...@@ -74,6 +95,9 @@ void TCUStartDownloadHandle(StructTCUSend * pPgnRecv)
tmp = tmp << 8; tmp = tmp << 8;
tmp |= pPgnRecv->Data[5]; tmp |= pPgnRecv->Data[5];
StartDownload_B.ver = tmp; StartDownload_B.ver = tmp;
StartDownload_B.result = 0x01;
StartDownload_B.reason = 0x01;
} }
} }
...@@ -90,88 +114,106 @@ void StartDownloadAck(u8 ChgNum) ...@@ -90,88 +114,106 @@ void StartDownloadAck(u8 ChgNum)
{ {
Data[1] = StartDownload.type; Data[1] = StartDownload.type;
Data[2] = StartDownload.addr; Data[2] = StartDownload.addr;
if(StartDownload.type == 0x01) //0x01 --- 直流充电控制器 Data[3] = StartDownload.result;
{
/*if(StartDownload.ver != 0x0500) //V5版本
{
Data[3] = 0x01;//01H:禁止下载
Data[6] = 0x02;//02H:数据合法性校验失败
}
else*/
{
Data[3] = 0x00;//00H:允许下载
Data[6] = 0x00;//
}
}
else
{
Data[3] = 0x01;//01H:禁止下载
Data[6] = 0x01;//01H:本身不支持此功能
}
Data[4] = 0x03;//0x03:BIN格式 Data[4] = 0x03;//0x03:BIN格式
Data[5] = 0x01;//0x01:校验码方案A Data[5] = 0x01;//0x01:校验码方案A
Data[6] = StartDownload.reason;
TCUSinglePackSendMsg(Data, 8, eCmd_startDownloadAck, 4, ChargerCont1939Addr); TCUSinglePackSendMsg(Data, 8, eCmd_startDownloadAck, 4, ChargerCont1939Addr);
} }
else if (ChgNum == 2) else if (ChgNum == 2)
{ {
Data[1] = StartDownload_B.type; Data[1] = StartDownload_B.type;
Data[2] = StartDownload_B.addr; Data[2] = StartDownload_B.addr;
Data[3] = 0x01;//01H:禁止下载 Data[3] = StartDownload_B.result;//01H:禁止下载
Data[4] = 0x03;//0x03:BIN格式 Data[4] = 0x03;//0x03:BIN格式
Data[5] = 0x01;//0x01:校验码方案A Data[5] = 0x01;//0x01:校验码方案A
Data[6] = 0x01;//01H:本身不支持此功能 Data[6] = StartDownload_B.reason;//01H:本身不支持此功能
TCUSinglePackSendMsg(Data, 8, eCmd_startDownloadAck, 4, ChargerCont1939Addr_B); TCUSinglePackSendMsg(Data, 8, eCmd_startDownloadAck, 4, ChargerCont1939Addr_B);
} }
} }
typedef struct
{
u8 type;//设备类型
u8 addr;//设备通信地址
u32 ProgramSize;//BIN格式:程序文件总字节数
} StructRequestInterval;
StructRequestInterval RequestIntervalData =
{
0
};
void TCURequestIntervalHandle(StructTCUSend * pPgnRecv) void TCURequestIntervalHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0;
u32 ProgramSize = 0;
u8 Date[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr) if (pPgnRecv->DA == ChargerCont1939Addr)
{ {
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器 if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{ {
addr = pPgnRecv->Data[2]; RequestIntervalData.type = pPgnRecv->Data[1];
memcpy(&ProgramSize,&pPgnRecv->Data[3],4); RequestIntervalData.addr = pPgnRecv->Data[2];
memcpy(&(RequestIntervalData.ProgramSize),&(pPgnRecv->Data[3]),4);
//ack1
Date[1] = 0x01; TCUCommuStatus.CommStage = RequestIntervalStage;
Date[2] = addr;
Date[3] = 0x01;
TCUSinglePackSendMsg(Date, 8, eCmd_RequestIntervalAck1, 4, ChargerCont1939Addr);
//ack2
Date[3] = 0x02;
u32 tmp = 480 * 1024;
memcpy(&Date[4],&tmp,4);
TCUSinglePackSendMsg(Date, 8, eCmd_RequestIntervalAck2, 4, ChargerCont1939Addr);
} }
} }
} }
u8 TcuUpDateBuffer[1024]; void TCURequestIntervalAck(void)
u32 PackageAddr = 0; {
u8 Date[8] = {0};
//ack1
Date[1] = RequestIntervalData.type;
Date[2] = RequestIntervalData.addr;
Date[3] = 0x01;
TCUSinglePackSendMsg(Date, 8, eCmd_RequestIntervalAck1, 4, ChargerCont1939Addr);
//ack2
Date[3] = 0x02;
u32 tmp = 480 * 1024;
memcpy(&Date[4],&tmp,4);
TCUSinglePackSendMsg(Date, 8, eCmd_RequestIntervalAck2, 4, ChargerCont1939Addr);
}
typedef struct
{
u8 type;//设备类型
u8 addr;//设备通信地址
u32 PackageAddr;//分组的首地址
} StructStartPackage;
StructStartPackage StartPackageData =
{
0
};
void TCUStartPackageHandle(StructTCUSend * pPgnRecv) void TCUStartPackageHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0;
u8 Date[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr) if (pPgnRecv->DA == ChargerCont1939Addr)
{ {
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器 if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{ {
addr = pPgnRecv->Data[2]; StartPackageData.type = pPgnRecv->Data[1];
memcpy(&PackageAddr,&pPgnRecv->Data[3],4); StartPackageData.addr = pPgnRecv->Data[2];
memcpy(&StartPackageData.PackageAddr,&pPgnRecv->Data[3],4);
Date[1] = 0x01; TCUCommuStatus.CommStage = StartPackageStage;
Date[2] = addr;
memcpy(&Date[3],&PackageAddr,4);
TCUSinglePackSendMsg(Date, 8, eCmd_StartPackageAck, 4, ChargerCont1939Addr);
} }
} }
} }
void TCUStartPackageAck(void)
{
u8 Date[8] = {0};
Date[1] = StartPackageData.type;
Date[2] = StartPackageData.addr;
memcpy(&Date[3],&(StartPackageData.PackageAddr),4);
TCUSinglePackSendMsg(Date, 8, eCmd_StartPackageAck, 4, ChargerCont1939Addr);
}
void TCUSendDateHandle(StructTCUSend * pPgnRecv) void TCUSendDateHandle(StructTCUSend * pPgnRecv)
{ {
...@@ -188,6 +230,8 @@ void TCUSendDateHandle(StructTCUSend * pPgnRecv) ...@@ -188,6 +230,8 @@ void TCUSendDateHandle(StructTCUSend * pPgnRecv)
} }
index = 4*pPgnRecv->Data[3]; index = 4*pPgnRecv->Data[3];
memcpy(&TcuUpDateBuffer[index],&(pPgnRecv->Data[4]),4); memcpy(&TcuUpDateBuffer[index],&(pPgnRecv->Data[4]),4);
TCUCommuStatus.CommStage = SendDateStage;
} }
} }
} }
...@@ -197,102 +241,357 @@ u32 TCUGetPackageChecksum(void) ...@@ -197,102 +241,357 @@ u32 TCUGetPackageChecksum(void)
u32 TCUGetProgramChecksum(void) u32 TCUGetProgramChecksum(void)
{} {}
typedef struct
{
u8 type;//设备类型
u8 addr;//设备通信地址
u8 result;//0x55:校验失败;0xAA:校验成功;0xFF:擦除失败。
u32 checksum;//整包校验码
} StructCompletePackage;
StructCompletePackage CompletePackageData =
{
0
};
void TCUCompletePackageHandle(StructTCUSend * pPgnRecv) void TCUCompletePackageHandle(StructTCUSend * pPgnRecv)
{ {
u8 addr = 0;
u32 checksum = 0; if (pPgnRecv->DA == ChargerCont1939Addr)
int ret = 0; {
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{
CompletePackageData.type = pPgnRecv->Data[1];
CompletePackageData.addr = pPgnRecv->Data[2];
memcpy(&(CompletePackageData.checksum),&(pPgnRecv->Data[3]),4);
TCUCommuStatus.CommStage = CompletePackageStage;
}
}
}
void TCUCompletePackageAck(void)
{
u8 Date[8] = {0}; u8 Date[8] = {0};
Date[1] = CompletePackageData.type;
Date[2] = CompletePackageData.addr;
if(CompletePackageData.result == 0x55)
{
Date[3] = 0x55;//0x55:校验失败
memcpy(&Date[4],&(StartPackageData.PackageAddr),4);
}
else if(CompletePackageData.result == 0xAA)
{
Date[3] = 0xaa;//0xAA:校验成功
memcpy(&Date[4],&(StartPackageData.PackageAddr),4);
}
else if(CompletePackageData.result == 0xFF)
{
Date[3] = 0xff;//0xFF:擦除失败
}
TCUSinglePackSendMsg(Date, 8, eCmd_CompletePackageAck, 4, ChargerCont1939Addr);
}
typedef struct
{
u8 type;//设备类型
u8 addr;//设备通信地址
u8 result;//00H:成功 01H:失败 其它:无效
u32 checksum;//需要更新整个程序的校验码
} StructProgramVerification;
StructProgramVerification ProgramVerificationData =
{
0
};
void TCUProgramVerificationHandle(StructTCUSend * pPgnRecv)
{
if (pPgnRecv->DA == ChargerCont1939Addr) if (pPgnRecv->DA == ChargerCont1939Addr)
{ {
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器 if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{ {
addr = pPgnRecv->Data[2]; ProgramVerificationData.type = pPgnRecv->Data[1];
memcpy(&checksum,&(pPgnRecv->Data[3]),4); ProgramVerificationData.addr = pPgnRecv->Data[2];
memcpy(&(ProgramVerificationData.checksum),&(pPgnRecv->Data[3]),4);
Date[1] = 0x01; TCUCommuStatus.CommStage = ProgramVerificationStage;
Date[2] = addr; }
if(checksum == TCUGetPackageChecksum()) }
}
void TCUProgramVerificationAck(void)
{
u8 Date[8] = {0};
Date[1] = ProgramVerificationData.type;
Date[2] = ProgramVerificationData.addr;
Date[3] = ProgramVerificationData.result;
TCUSinglePackSendMsg(Date, 8, eCmd_ProgramVerificationAck, 4, ChargerCont1939Addr);
}
typedef struct
{
u8 type;//设备类型
u8 addr;//设备通信地址
u8 result;//00H:成功 01H:失败 其它:无效
u8 cmd;//AAH:代表立即重启 其他:无效。
} StructReset;
StructReset TCURest = {0};
void TCUResetHandle(StructTCUSend * pPgnRecv)
{
if (pPgnRecv->DA == ChargerCont1939Addr)
{
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器
{
TCURest.type = pPgnRecv->Data[1];
TCURest.addr = pPgnRecv->Data[2];
if(pPgnRecv->Data[2] == 0xAA)//AAH:代表立即重启
{ {
Date[3] = 0xaa;//0xAA:校验成功 TCURest.cmd = 0xAA;
TCUCommuStatus.CommStage = ResetStage;
}
}
}
}
void TCUResetAck(void)
{
u8 Date[8] = {0};
Date[1] = TCURest.type;
Date[2] = TCURest.addr;
Date[2] = TCURest.cmd;//
TCUSinglePackSendMsg(Date, 8, eCmd_resetAck, 4, ChargerCont1939Addr);
}
void TCUUpdateHandle(void)
{
static EnumTCUCommStage oldStage;
static u32 sendTick = 0;
static u8 sendTimes = 0;
u32 SystemTick = GetSystemTick();
if(oldStage != TCUCommuStatus.CommStage)
{
sendTick = 0;
sendTimes = 0;
oldStage = TCUCommuStatus.CommStage;
}
if ((TCUCommuStatus.CommStage == StartDownloadStage))
{
if(SystemTick - sendTick >= 500)
{
sendTimes++;
sendTick = SystemTick;
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
TCUCommuStatus.ErrData.Value.DataRequestSend = 1;
}
else
{
StartDownloadAck(1);
}
}
}
if ((TCUCommuStatus.CommStage == RequestIntervalStage))
{
if(SystemTick - sendTick >= 500)
{
sendTimes++;
sendTick = SystemTick;
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
//TCUCommuStatus.ErrData.Value.DataRequestSend = 1;
}
else
{
TCURequestIntervalAck();
}
}
}
if ((TCUCommuStatus.CommStage == StartPackageStage))
{
if(SystemTick - sendTick >= 500)
{
sendTimes++;
sendTick = SystemTick;
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
//TCUCommuStatus.ErrData.Value.DataRequestSend = 1;
}
else
{
TCUStartPackageAck();
}
}
}
if ((TCUCommuStatus.CommStage == SendDateStage))
{
TCUCommuStatus.CommStage = SendDateWaitStage;
}
else if(TCUCommuStatus.CommStage == SendDateWaitStage)
{
if(SystemTick - sendTick >= 100)
{
sendTimes++;
sendTick = SystemTick;
if(sendTimes > 1000/100)
{
TCUCommuStatus.CommStage = HeartStage;
TCUCommuStatus.ErrData.Value.DataSend = 1;
}
}
}
if ((TCUCommuStatus.CommStage == CompletePackageStage))
{
if(sendTick == 0)
{
if(CompletePackageData.checksum == TCUGetPackageChecksum())
{
CompletePackageData.result = 0xaa;//0xAA:校验成功
//write to flash //write to flash
ret = CopyCode(BakStartAddr+PackageAddr,(u32)TcuUpDateBuffer, 1024); int ret = 0;
ret = CopyCode(BakStartAddr+StartPackageData.PackageAddr,(u32)TcuUpDateBuffer, 1024);
if(ret == 0) if(ret != 0)
{
memcpy(&Date[4],&(PackageAddr),4);
}
else
{ {
Date[3] = 0xff;//0xFF:擦除失败 CompletePackageData.result = 0xff;//0xFF:擦除失败
} }
}
else
{
CompletePackageData.result = 0x55;//0x55:校验失败
}
}
if(SystemTick - sendTick >= 500)
{
sendTimes++;
sendTick = SystemTick;
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
//TCUCommuStatus.ErrData.Value.DataRequestSend = 1;
} }
else else
{ {
Date[3] = 0x55;//0x55:校验失败 TCUCompletePackageAck();
memcpy(&Date[4],&(PackageAddr),4);
} }
TCUSinglePackSendMsg(Date, 8, eCmd_CompletePackageAck, 4, ChargerCont1939Addr);
} }
} }
} if ((TCUCommuStatus.CommStage == ProgramVerificationStage))
void TCUProgramVerificationHandle(StructTCUSend * pPgnRecv)
{
u8 addr = 0;
u32 ProgramChecksum = 0;
u8 Date[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr)
{ {
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器 if(sendTick == 0)
{ {
addr = pPgnRecv->Data[2]; if(ProgramVerificationData.checksum == TCUGetProgramChecksum())
{
ProgramVerificationData.result = 0x00;
}
else
{
ProgramVerificationData.result = 0x01;//01H:失败
}
}
if(SystemTick - sendTick >= 500)
{
sendTimes++;
sendTick = SystemTick;
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
memcpy(&ProgramChecksum,&(pPgnRecv->Data[3]),4); TCUCommuStatus.ErrData.Value.ProgramVerification = 1;
}
else
{
TCUProgramVerificationAck();
}
}
}
Date[1] = 0x01; if ((TCUCommuStatus.CommStage == ResetStage))
Date[2] = addr; {
if(SystemTick - sendTick >= 500)
if(ProgramChecksum == TCUGetProgramChecksum()) {
sendTimes++;
sendTick = SystemTick;
if(sendTimes > 2000/500)
{ {
TCUCommuStatus.CommStage = HeartStage;
//升级成功
UpdateFlagSet(0x414E4747);
osDelay(500);
NVIC_SystemReset();
while(1);
} }
else else
{ {
Date[3] = 0x01;//01H:失败 TCUResetAck();
} }
TCUSinglePackSendMsg(Date, 8, eCmd_ProgramVerificationAck, 4, ChargerCont1939Addr);
} }
} }
} }
void TCUResetHandle(StructTCUSend * pPgnRecv) void TCUUpdateHandle_B(void)
{ {
u8 addr = 0; static EnumTCUCommStage oldStage;
u8 Date[8] = {0}; static u32 sendTick = 0;
if (pPgnRecv->DA == ChargerCont1939Addr) static u8 sendTimes = 0;
if(oldStage != TCUCommuStatus_B.CommStage)
{ {
if(pPgnRecv->Data[1] == 0x01 )//0x01 --- 直流充电控制器 sendTick = 0;
sendTimes = 0;
oldStage = TCUCommuStatus_B.CommStage;
}
if ((TCUCommuStatus_B.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick >= 500)
{ {
addr = pPgnRecv->Data[2]; sendTimes++;
sendTick = GetSystemTick();
Date[1] = 0x01; if(sendTimes > 2000/500)
Date[2] = addr;
if(pPgnRecv->Data[2] == 0xAA)//AAH:代表立即重启
{ {
Date[2] = 0xAA;// TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
StartDownloadAck(2);
} }
TCUSinglePackSendMsg(Date, 8, eCmd_resetAck, 4, ChargerCont1939Addr);
} }
}
}
} }
...@@ -15,5 +15,7 @@ void TCUCompletePackageHandle(StructTCUSend * pPgnRecv); ...@@ -15,5 +15,7 @@ void TCUCompletePackageHandle(StructTCUSend * pPgnRecv);
void TCUProgramVerificationHandle(StructTCUSend * pPgnRecv); void TCUProgramVerificationHandle(StructTCUSend * pPgnRecv);
void TCUResetHandle(StructTCUSend * pPgnRecv); void TCUResetHandle(StructTCUSend * pPgnRecv);
void TCUUpdateHandle(void);
void TCUUpdateHandle_B(void);
#endif /*__TCU_UPDATE_H__*/ #endif /*__TCU_UPDATE_H__*/
...@@ -254,7 +254,7 @@ void ConEMSend(void) ...@@ -254,7 +254,7 @@ void ConEMSend(void)
static u32 ConEMSendTick_B = 0; static u32 ConEMSendTick_B = 0;
static u32 ConEMSendEcount_B = 0; static u32 ConEMSendEcount_B = 0;
if (TCUCommuStatus.ConEMSendFlag == 1) if (TCUCommuStatus.ErrData.Mult)
{ {
if (GetSystemTick() -ConEMSendTick >= 250) if (GetSystemTick() -ConEMSendTick >= 250)
{ {
...@@ -268,7 +268,16 @@ void ConEMSend(void) ...@@ -268,7 +268,16 @@ void ConEMSend(void)
{ {
ConEMSendTick = 0; ConEMSendTick = 0;
ConEMSendEcount = 0; ConEMSendEcount = 0;
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化 if(TCUCommuStatus.ErrData.Value.DCTCUInfor
|| TCUCommuStatus.ErrData.Value.DCTCUMeasu)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
}
else
{
TCUCommuStatus.ErrData.Mult = 0;
}
} }
} }
} }
...@@ -278,7 +287,7 @@ void ConEMSend(void) ...@@ -278,7 +287,7 @@ void ConEMSend(void)
ConEMSendEcount = 0; ConEMSendEcount = 0;
} }
if (TCUCommuStatus_B.ConEMSendFlag == 1) if (TCUCommuStatus_B.ErrData.Mult)
{ {
if (GetSystemTick() -ConEMSendTick_B >= 250) if (GetSystemTick() -ConEMSendTick_B >= 250)
{ {
...@@ -292,7 +301,16 @@ void ConEMSend(void) ...@@ -292,7 +301,16 @@ void ConEMSend(void)
{ {
ConEMSendTick_B = 0; ConEMSendTick_B = 0;
ConEMSendEcount_B = 0; ConEMSendEcount_B = 0;
memset(&TCUCommuStatus_B, 0x00, sizeof(TCUCommuStatus)); //通讯初始化 if(TCUCommuStatus_B.ErrData.Value.DCTCUInfor
|| TCUCommuStatus_B.ErrData.Value.DCTCUMeasu)
{
memset(&TCUCommuStatus_B, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
}
else
{
TCUCommuStatus_B.ErrData.Mult = 0;
}
} }
} }
} }
...@@ -587,22 +605,6 @@ void CommutionRunStage(void) ...@@ -587,22 +605,6 @@ void CommutionRunStage(void)
} }
if ((TCUCommuStatus.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick >= 500)
{
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
}
else
{
StartDownloadAck(1);
}
}
}
oldStage = TCUCommuStatus.CommStage; oldStage = TCUCommuStatus.CommStage;
} }
...@@ -710,24 +712,6 @@ void CommutionRunStage_B(void) ...@@ -710,24 +712,6 @@ void CommutionRunStage_B(void)
} }
if ((TCUCommuStatus_B.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
StartDownloadAck(2);
}
}
}
oldStage_B = TCUCommuStatus_B.CommStage; oldStage_B = TCUCommuStatus_B.CommStage;
} }
...@@ -1218,13 +1202,15 @@ void TCUComm(void const * argument) ...@@ -1218,13 +1202,15 @@ void TCUComm(void const * argument)
DCMeasuring();//遥测 DCMeasuring();//遥测
TCUCurChgRecordInterface_A();//启停逻辑处理 TCUCurChgRecordInterface_A();//启停逻辑处理
VehicleVerificationHandle(); VehicleVerificationHandle();
TCUUpdateHandle();
} }
if(TCUCommuStatus_B.CommStage < HeartStage) if(TCUCommuStatus_B.CommStage < HeartStage)
{ {
if(TCUCommuStatus_B.ConnectFlag != CONNECT_TIMEOUT) if(TCUCommuStatus_B.ConnectFlag != CONNECT_TIMEOUT)
{ {
CommutionConfigurationStage_B(); //配置阶段 CommutionConfigurationStage_B();//配置阶段
} }
} }
...@@ -1236,6 +1222,8 @@ void TCUComm(void const * argument) ...@@ -1236,6 +1222,8 @@ void TCUComm(void const * argument)
DCMeasuring_B(); //遥测 DCMeasuring_B(); //遥测
TCUCurChgRecordInterface_B();//启停逻辑处理 TCUCurChgRecordInterface_B();//启停逻辑处理
VehicleVerificationHandle_B(); VehicleVerificationHandle_B();
TCUUpdateHandle_B();
} }
......
...@@ -19,7 +19,16 @@ typedef enum { ...@@ -19,7 +19,16 @@ typedef enum {
ElectLockStage = 6, ElectLockStage = 6,
PowerControlStage = 7, PowerControlStage = 7,
ChgInfornQueryStage = 8, ChgInfornQueryStage = 8,
StartDownloadStage = 9,
StartDownloadStage,
RequestIntervalStage,
StartPackageStage,
SendDateStage,
SendDateWaitStage,
CompletePackageStage,
ProgramVerificationStage,
ResetStage,
} EnumTCUCommStage; } EnumTCUCommStage;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论