From 88fbc89f183db1da1313b27c21c34bf8ca71f592 Mon Sep 17 00:00:00 2001 From: darya Date: Fri, 5 Jun 2026 09:38:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=2005.06.2026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/CanSerialPortFrameTP.h | 5 +++-- Src/CanSerialPortFrameTP.c | 12 +++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Inc/CanSerialPortFrameTP.h b/Inc/CanSerialPortFrameTP.h index 6529fa4..b7585e0 100644 --- a/Inc/CanSerialPortFrameTP.h +++ b/Inc/CanSerialPortFrameTP.h @@ -22,7 +22,7 @@ #define LEN_DEBUG_TP_BUFF 128 -#define timeout_StMin 20 // Сепаратор между многокадровыми сообщениями +#define timeout_StMin 25 // Сепаратор между многокадровыми сообщениями #define timeout_Br 10 // Перед отправкой FlowControl (для получения остальных данных) typedef enum { @@ -45,7 +45,8 @@ typedef enum { TP_ERROR_CF_ERROR_SIZE = 9, TP_ERROR_CF_ERROR_SN = 10, TP_ERROR_WRONG_ADDRESS= 11, - TP_STANDBY = 12 + TP_STANDBY = 12, + TP_ERROR_SF_ERROR = 13 } eTpResult; diff --git a/Src/CanSerialPortFrameTP.c b/Src/CanSerialPortFrameTP.c index 610530e..90960c2 100644 --- a/Src/CanSerialPortFrameTP.c +++ b/Src/CanSerialPortFrameTP.c @@ -105,7 +105,7 @@ uint16_t sendFlowFrame(tCanSerialPortFrameTp *env, uint32_t id, uint32_t timeout frame->blockSize = 0; frame->timeST = 0; - SystemDelayMs(timeout_Br); +// SystemDelayMs(timeout_Br); uint16_t sent = env->ioCanFrame->transmit(env->ioCanFrame->env, (uint8_t *) frame, 8, id, PROTOCOL_CAN_TYPE_UDS, timeout); @@ -209,6 +209,11 @@ eTpResult vCanSerialPortFrameTpReceive(tCanSerialPortFrameTp *env, uint32_t time // Single Frame SF – Однократный фрейм if ((canFrame.data[0] >> 4) == TP_TYPE_FRAME_SF) { + + if (env->dataReceivedConsecutiveFrameLen) { + return TP_ERROR_SF_ERROR; + } + eTpFrameSF *frame = (eTpFrameSF *) canFrame.data; if (frame->dl < env->dataBufMaxSize) { @@ -457,6 +462,11 @@ _Noreturn void CanTpProcessing_ListenerTask(tCanSerialPortFrameTp *env) { if (result == TP_ERROR_FF_ERROR_TIMEOUT) { LoggerErrorStatic(LOGGER, LOG_SIGN, "Error: The Consecutive Frame timed out"); } + + if (result == TP_ERROR_SF_ERROR) { + // LoggerErrorStatic(LOGGER, LOG_SIGN, "Error: Single Frame SF received, but Consecutive Frame reception is not yet complete"); + } + } }