Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
haoJin750TFT
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
时昊
haoJin750TFT
Commits
149144a7
Commit
149144a7
authored
Aug 16, 2024
by
李延凯
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 修改检测Flash中的MCU程序时, Flash偏移量不正确的问题
周期检测已关闭, 如果开启, 将不能使用CAN升级!
parent
f958e54b
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
197 deletions
+31
-197
AMT630H.c
Firmware/Source/Component/AMT630H/AMT630H.c
+5
-0
GraphicsFunc.c
Firmware/Source/Component/AMT630H/GraphicsFunc.c
+25
-196
Sys_Task_List.c
Firmware/Source/System/Sys_Task_List.c
+1
-1
No files found.
Firmware/Source/Component/AMT630H/AMT630H.c
View file @
149144a7
...
@@ -37,6 +37,9 @@ s_AMT630H_FlashCheck_t AMT630H_FlashCheck;
...
@@ -37,6 +37,9 @@ s_AMT630H_FlashCheck_t AMT630H_FlashCheck;
unsigned
long
Delay_Time
=
0
;
unsigned
long
Delay_Time
=
0
;
unsigned
long
Delay_Time_Set
=
0
;
unsigned
long
Delay_Time_Set
=
0
;
extern
uint32_t
Check_Upgrade
;
extern
uint32_t
Check_Upgrade_Cnt
;
/* Refresh Time */
/* Refresh Time */
unsigned
long
AMT630H_RefreshTime
=
0
;
unsigned
long
AMT630H_RefreshTime
=
0
;
static
uint8_t
AMT630H_Animation_Start
=
0
;
static
uint8_t
AMT630H_Animation_Start
=
0
;
...
@@ -306,6 +309,8 @@ void Amt630hInit(void)
...
@@ -306,6 +309,8 @@ void Amt630hInit(void)
AMT630H_FlashCheck
.
InquireTime
=
0
;
AMT630H_FlashCheck
.
InquireTime
=
0
;
AMT630H_FlashCheck
.
CheckStateTime
=
0
;
AMT630H_FlashCheck
.
CheckStateTime
=
0
;
AMT630H_FlashCheck
.
Result
=
0
;
AMT630H_FlashCheck
.
Result
=
0
;
Check_Upgrade
=
0
;
Check_Upgrade_Cnt
=
0
;
}
}
void
AMT630H_Sleep
(
void
)
void
AMT630H_Sleep
(
void
)
{
{
...
...
Firmware/Source/Component/AMT630H/GraphicsFunc.c
View file @
149144a7
#include <string.h>
#include "UartProtocol.h"
#include "UartProtocol.h"
#include "PicBin.h"
#include "PicBin.h"
#include <stdint.h>
#include <stdint.h>
#include "UDS_ISO14229_Services.h"
#include "UDS_ISO14229_Services.h"
#include "flash.h"
#define NULL 0
#define NULL 0
#define READ_MCU_DATA_MAX 0x400
extern
uint8_t
UartRevBuff
[
0x1000
];
extern
uint8_t
UartRevBuff
[
0x1000
];
extern
uint32_t
UartRevCnts
;
extern
uint32_t
UartRevCnts
;
uint8_t
ReadDataBuf
[
READ_MCU_DATA_MAX
];
/* 读取缓存 */
uint32_t
NeedWriteSize
;
/* 需要写入文件的长度 */
uint32_t
FactOffset
;
/* 绝对地址 */
uint32_t
ReadOffset
;
/* 630中读取偏移量 */
uint32_t
AppOffset
;
uint32_t
Check_Upgrade_Cnt
;
uint8_t
*
GetUartRecvData
(
uint32_t
*
UartRecvBufLen
,
uint32_t
*
UartRecvPos
)
uint8_t
*
GetUartRecvData
(
uint32_t
*
UartRecvBufLen
,
uint32_t
*
UartRecvPos
)
{
{
...
@@ -82,7 +77,7 @@ void DisplayNum(uint8_t page, DISPLAY_NUM_ST *pNumData, int32_t NumVal)
...
@@ -82,7 +77,7 @@ void DisplayNum(uint8_t page, DISPLAY_NUM_ST *pNumData, int32_t NumVal)
}
}
/***************** Read 630 ************************/
/***************** Read 630 ************************/
#define READ_MCU_DATA_MAX 0x
80
0
#define READ_MCU_DATA_MAX 0x
4
0
enum
{
enum
{
READ630_IDLE
,
READ630_IDLE
,
READ630_WAITING_RESP
,
READ630_WAITING_RESP
,
...
@@ -92,6 +87,13 @@ enum {
...
@@ -92,6 +87,13 @@ enum {
READ630_RECV_BACKUP_DATA_CRC
,
READ630_RECV_BACKUP_DATA_CRC
,
};
};
uint8_t
ReadDataBuf
[
READ_MCU_DATA_MAX
];
/* 读取缓存 */
uint32_t
NeedWriteSize
;
/* 需要写入文件的长度 */
uint32_t
FactOffset
;
/* 绝对地址 */
uint32_t
AppOffset
;
uint32_t
Check_Upgrade
;
uint32_t
Check_Upgrade_Cnt
;
static
uint8_t
Read630State
=
READ630_IDLE
;
static
uint8_t
Read630State
=
READ630_IDLE
;
static
uint32_t
ReqDataBufAddr
=
0
;
static
uint32_t
ReqDataBufAddr
=
0
;
static
uint32_t
ReqDataLen
=
0
;
static
uint32_t
ReqDataLen
=
0
;
...
@@ -181,181 +183,6 @@ void SetRecvDataSt(RECV_MCU_DATA_TYPE type, uint32_t addr, uint32_t len, uint32_
...
@@ -181,181 +183,6 @@ void SetRecvDataSt(RECV_MCU_DATA_TYPE type, uint32_t addr, uint32_t len, uint32_
}
}
/***************** Read 630 end ************************/
/***************** Read 630 end ************************/
/* Test */
static
uint8_t
TestReadBuf
[
READ_MCU_DATA_MAX
];
static
uint32_t
TestDataLen
=
0
;
static
uint32_t
TestDataCrC
=
0
;
static
uint32_t
ReadOffset
=
0
;
static
uint32_t
CalcCrcVal
=
0xffffffff
;
static
uint32_t
TestCycleNum
=
0
;
static
uint32_t
CalcCrc32
(
uint8_t
*
buf
,
int
Len
,
uint32_t
InitVal
)
{
int
i
;
int
n
=
0
;
uint32_t
crc
=
InitVal
;
// Initial value
for
(
n
=
0
;
n
<
Len
;
n
++
)
{
crc
^=
(
uint32_t
)
buf
[
n
]
<<
24
;
// crc ^= *data; data++;
for
(
i
=
0
;
i
<
8
;
++
i
)
{
if
(
crc
&
0x80000000
)
{
crc
=
(
crc
<<
1
)
^
0x04C11DB7
;
// 0xEDB88320= reverse 0x04C11DB7
}
else
{
crc
=
(
crc
<<
1
);
}
}
}
return
crc
;
}
void
TestRead630Update
(
void
)
{
uint32_t
tmpLen
;
static
uint8_t
readSt
=
0
;
static
uint16_t
getStRetryCnts
=
0
;
if
(
TestDataLen
==
0
)
{
if
(
readSt
==
0
)
{
readSt
=
1
;
ProcMcuOrBackupData
(
GET_APP_DATA_OFFSET
,
0
,
0
,
0
);
getStRetryCnts
=
500
;
}
else
{
TestDataLen
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
0
);
if
((
TestDataLen
!=
0
)
||
(
--
getStRetryCnts
==
0
))
{
if
(
TestDataLen
!=
0
)
{
TestDataLen
=
RespDataLen
;
TestDataCrC
=
RespDataCrc
;
ReadOffset
=
0
;
CalcCrcVal
=
0xffffffff
;
}
readSt
=
0
;
}
}
}
else
{
if
(
readSt
==
0
)
{
readSt
=
1
;
ProcMcuOrBackupData
(
REQ_DATA
,
ReadOffset
,
READ_MCU_DATA_MAX
,
TestReadBuf
);
getStRetryCnts
=
500
;
ReadOffset
+=
READ_MCU_DATA_MAX
;
}
else
{
tmpLen
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
0
);
if
(
ReadOffset
==
tmpLen
)
{
if
(
ReadOffset
<
TestDataLen
)
{
CalcCrcVal
=
CalcCrc32
(
TestReadBuf
,
READ_MCU_DATA_MAX
,
CalcCrcVal
);
readSt
=
0
;
}
else
{
CalcCrcVal
=
CalcCrc32
(
TestReadBuf
,
TestDataLen
-
(
ReadOffset
-
READ_MCU_DATA_MAX
),
CalcCrcVal
);
if
(
CalcCrcVal
!=
TestDataCrC
)
{
while
(
1
)
{
RTE_WDT_Clear
();
}
}
else
{
TestCycleNum
++
;
}
getStRetryCnts
=
500
;
TestDataLen
=
0
;
TestDataCrC
=
0
;
readSt
=
0
;
}
}
if
(
--
getStRetryCnts
==
0
)
{
ReadOffset
-=
READ_MCU_DATA_MAX
;
readSt
=
0
;
}
}
}
}
/* Test end */
/* Test */
static
uint32_t
TestBackupDataLen
=
0
;
static
uint32_t
TestBackupDataOffset
=
0
;
static
uint32_t
TestBackupDataOffsetEnd
=
0
;
static
uint32_t
TestBackupDataCrc
=
0
;
static
uint8_t
*
pData
=
(
uint8_t
*
)
0x40400
;
void
TestWrite630Backup
(
void
)
{
static
int
readstep
=
0
;
uint32_t
tmpRet
;
static
uint8_t
readSt
=
0
;
static
uint16_t
getStRetryCnts
=
0
;
TestBackupDataLen
=
0x100000
;
if
(
TestBackupDataOffset
==
0
)
{
if
(
readSt
==
0
)
{
readSt
=
1
;
ProcMcuOrBackupData
(
GET_BACKUP_DATA_OFFSET
,
0
,
0
,
NULL
);
getStRetryCnts
=
500
;
}
else
{
tmpRet
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
NULL
);
if
((
tmpRet
!=
2
)
||
(
--
getStRetryCnts
==
0
))
{
if
(
tmpRet
!=
2
)
{
TestBackupDataOffset
=
tmpRet
;
TestBackupDataOffsetEnd
=
TestBackupDataOffset
+
TestBackupDataLen
;
}
readSt
=
0
;
}
}
}
else
if
(
TestBackupDataCrc
==
0
)
{
if
(
readSt
==
0
)
{
readSt
=
1
;
ProcMcuOrBackupData
(
GET_BACKUP_DATA_CRC
,
TestBackupDataOffset
,
TestBackupDataLen
,
NULL
);
getStRetryCnts
=
500
;
}
else
{
tmpRet
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
NULL
);
if
((
tmpRet
!=
2
)
||
(
--
getStRetryCnts
==
0
))
{
if
(
tmpRet
!=
2
)
{
TestBackupDataCrc
=
tmpRet
;
}
readSt
=
0
;
}
}
}
else
{
#if 1
if
(
readSt
==
0
)
{
readSt
=
1
;
ProcMcuOrBackupData
(
REQ_DATA
,
TestBackupDataOffset
,
READ_MCU_DATA_MAX
,
TestReadBuf
);
getStRetryCnts
=
500
;
TestBackupDataOffset
+=
READ_MCU_DATA_MAX
;
}
else
{
tmpRet
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
0
);
if
(
TestBackupDataOffset
==
tmpRet
)
{
if
(
TestBackupDataOffset
<
TestBackupDataOffsetEnd
)
{
readSt
=
0
;
}
else
{
readSt
=
0
;
}
}
if
(
--
getStRetryCnts
==
0
)
{
TestBackupDataOffset
-=
READ_MCU_DATA_MAX
;
readSt
=
0
;
}
}
#else
if
(
readSt
==
0
)
{
readSt
=
1
;
ProcMcuOrBackupData
(
WRITE_BACKUP_DATA
,
TestBackupDataOffset
,
READ_MCU_DATA_MAX
,
pData
);
getStRetryCnts
=
1500
;
TestBackupDataOffset
+=
READ_MCU_DATA_MAX
;
pData
+=
READ_MCU_DATA_MAX
;
}
else
{
tmpRet
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
0
);
if
(
TestBackupDataOffset
==
tmpRet
)
{
if
(
TestBackupDataOffset
<
TestBackupDataOffsetEnd
)
{
readSt
=
0
;
}
else
{
readSt
=
0
;
}
}
if
(
--
getStRetryCnts
==
0
)
{
TestBackupDataOffset
-=
READ_MCU_DATA_MAX
;
pData
-=
READ_MCU_DATA_MAX
;
readSt
=
0
;
}
}
#endif
}
}
/* Test end */
void
GetReadInfo
(
READ_ARK630_CMD
type
)
void
GetReadInfo
(
READ_ARK630_CMD
type
)
{
{
static
uint8_t
readSt
=
0
;
static
uint8_t
readSt
=
0
;
...
@@ -382,10 +209,6 @@ void GetReadInfo(READ_ARK630_CMD type)
...
@@ -382,10 +209,6 @@ void GetReadInfo(READ_ARK630_CMD type)
{
{
FactOffset
=
0
;
/* USB按相对地址获取数据 */
FactOffset
=
0
;
/* USB按相对地址获取数据 */
}
}
else
{
FactOffset
=
tmpRet
;
/* 备份程序按绝对地址获取数据 */
}
AppOffset
=
0x00
;
AppOffset
=
0x00
;
}
}
readSt
=
0
;
readSt
=
0
;
...
@@ -403,7 +226,6 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
...
@@ -403,7 +226,6 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
static
uint16_t
getStRetryCnts
=
0
;
static
uint16_t
getStRetryCnts
=
0
;
uint32_t
tmpLen
;
uint32_t
tmpLen
;
uint32_t
writeLen
;
uint8_t
saveVersion
[
16
];
uint8_t
saveVersion
[
16
];
uint8_t
readVersion
[
16
];
uint8_t
readVersion
[
16
];
...
@@ -413,14 +235,13 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
...
@@ -413,14 +235,13 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
{
{
readSt
=
1
;
readSt
=
1
;
(
void
)
memset
(
ReadDataBuf
,
0xFFU
,
sizeof
(
ReadDataBuf
));
/* 初始化buffer */
(
void
)
memset
(
ReadDataBuf
,
0xFFU
,
sizeof
(
ReadDataBuf
));
/* 初始化buffer */
ProcMcuOrBackupData
(
REQ_DATA
,
FactOffset
+
ReadOffset
,
READ_MCU_DATA_MAX
,
ReadDataBuf
);
// 按地址获取程序数据
ProcMcuOrBackupData
(
REQ_DATA
,
FactOffset
,
READ_MCU_DATA_MAX
,
ReadDataBuf
);
// 按地址获取程序数据
getStRetryCnts
=
500
;
getStRetryCnts
=
500
;
ReadOffset
+=
READ_MCU_DATA_MAX
;
}
}
else
else
{
{
tmpLen
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
0
);
/* 获取读取状态 */
tmpLen
=
ProcMcuOrBackupData
(
GET_STATUS
,
0
,
0
,
0
);
/* 获取读取状态 */
if
(
FactOffset
+
R
eadOffset
==
tmpLen
)
/* 当返回值为目标位置时为数据获取成功 */
if
(
FactOffset
+
R
EAD_MCU_DATA_MAX
==
tmpLen
)
/* 当返回值为目标位置时为数据获取成功 */
{
{
if
(
AppOffset
==
0
)
/* 首个数据块内解析文件信息 */
if
(
AppOffset
==
0
)
/* 首个数据块内解析文件信息 */
{
{
...
@@ -429,7 +250,7 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
...
@@ -429,7 +250,7 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
flash_read
(
FLASH_630H_UPDATE_INFO
,
sizeof
(
saveVersion
),
saveVersion
);
/* 读取630H升级记录 */
flash_read
(
FLASH_630H_UPDATE_INFO
,
sizeof
(
saveVersion
),
saveVersion
);
/* 读取630H升级记录 */
memcpy
(
readVersion
,
&
ReadDataBuf
[
16
],
16
);
/* 630中读出的版本信息 */
memcpy
(
readVersion
,
&
ReadDataBuf
[
16
],
16
);
/* 630中读出的版本信息 */
if
(
memcmp
(
&
ReadDataBuf
[
16
]
,
saveVersion
,
16
)
!=
0
)
/* 对比版本不同才更新 */
if
(
memcmp
(
readVersion
,
saveVersion
,
16
)
!=
0
)
/* 对比版本不同才更新 */
{
{
Get_Into_630H_Update_MCU_Mode
();
Get_Into_630H_Update_MCU_Mode
();
}
}
...
@@ -437,6 +258,7 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
...
@@ -437,6 +258,7 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
{
{
/* 信息相同, 重置状态 */
/* 信息相同, 重置状态 */
NeedWriteSize
=
0
;
NeedWriteSize
=
0
;
Check_Upgrade
=
0
;
readSt
=
0
;
readSt
=
0
;
}
}
}
}
...
@@ -445,7 +267,6 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
...
@@ -445,7 +267,6 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
if
(
--
getStRetryCnts
==
0
)
if
(
--
getStRetryCnts
==
0
)
{
{
/* 读信息超时, 重置状态 */
/* 读信息超时, 重置状态 */
ReadOffset
-=
READ_MCU_DATA_MAX
;
readSt
=
0
;
readSt
=
0
;
}
}
}
}
...
@@ -454,11 +275,19 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
...
@@ -454,11 +275,19 @@ void Check_MCU_in_Flash(READ_ARK630_CMD type)
void
Check_MCU_Info_in_630H
(
void
)
void
Check_MCU_Info_in_630H
(
void
)
{
{
Check_Upgrade_Cnt
+=
100U
;
if
(
Check_Upgrade
_Cnt
>=
5000U
)
/* 每5秒检查一次Flash中的MCU程序信息 */
if
(
Check_Upgrade
==
1U
)
{
{
Check_Upgrade_Cnt
=
0U
;
GetReadInfo
(
GET_APP_DATA_OFFSET
);
GetReadInfo
(
GET_APP_DATA_OFFSET
);
Check_MCU_in_Flash
(
GET_APP_DATA_OFFSET
);
Check_MCU_in_Flash
(
GET_APP_DATA_OFFSET
);
}
}
else
{
Check_Upgrade_Cnt
++
;
if
(
Check_Upgrade_Cnt
>=
2500U
)
/* 放在2ms任务中, 2500 = 5000ms */
{
Check_Upgrade_Cnt
=
0
;
Check_Upgrade
=
1U
;
}
}
}
}
Firmware/Source/System/Sys_Task_List.c
View file @
149144a7
...
@@ -20,6 +20,7 @@ void Sys_2ms_Tasks(void)
...
@@ -20,6 +20,7 @@ void Sys_2ms_Tasks(void)
Sys_Status_Update_Service
();
Sys_Status_Update_Service
();
Analog_Signal_Conv_Service
();
Analog_Signal_Conv_Service
();
AMT630H_Main
();
AMT630H_Main
();
/* Check_MCU_Info_in_630H(); */
DoCAN_Timer_Update
(
2000u
);
DoCAN_Timer_Update
(
2000u
);
//Can_Write_Fun(&CAN_CH0_CanMsgTxOp, 2000u);无外发
//Can_Write_Fun(&CAN_CH0_CanMsgTxOp, 2000u);无外发
CanMSg_XMS_Analysis
(
&
CAN_CH0_CanMsgOp
,
2u
);
CanMSg_XMS_Analysis
(
&
CAN_CH0_CanMsgOp
,
2u
);
...
@@ -77,7 +78,6 @@ void Sys_100ms_Tasks(void)
...
@@ -77,7 +78,6 @@ void Sys_100ms_Tasks(void)
ODOtest
=
Data_ODO_Read
();
ODOtest
=
Data_ODO_Read
();
Triptest
=
Data_Read_Trip
(
0
);
Triptest
=
Data_Read_Trip
(
0
);
S3_ServerCNTT
();
S3_ServerCNTT
();
Check_MCU_Info_in_630H
();
Get_DisTime_Service
();
Get_DisTime_Service
();
Fuel_Cal_Sevice
(
100u
);
Fuel_Cal_Sevice
(
100u
);
Coolant_Cal_Sevice
(
100u
);
Coolant_Cal_Sevice
(
100u
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment