规避uart recv阻塞问题,将1165 bl fw加载流程走通

This commit is contained in:
huangruiqiao 2025-04-16 11:51:09 +08:00
parent c010d52b9b
commit bc88b4c1d0
15 changed files with 241 additions and 12781 deletions

View File

@ -673,6 +673,8 @@ if "%BUILD_OPTION%"=="merge" (
.\tools\fcelf.exe -M -input .\gccout\%OUTPUT_NAME%\ap\bootloader\ap_bootloader.bin -addrname BL_PKGIMG_LNA -flashsize BOOTLOADER_PKGIMG_LIMIT_SIZE ^ .\tools\fcelf.exe -M -input .\gccout\%OUTPUT_NAME%\ap\bootloader\ap_bootloader.bin -addrname BL_PKGIMG_LNA -flashsize BOOTLOADER_PKGIMG_LIMIT_SIZE ^
-input .\gccout\%OUTPUT_NAME%\ap\%PROJECT_NAME%\ap_%PROJECT_NAME%.bin -addrname AP_PKGIMG_LNA -flashsize AP_PKGIMG_LIMIT_SIZE ^ -input .\gccout\%OUTPUT_NAME%\ap\%PROJECT_NAME%\ap_%PROJECT_NAME%.bin -addrname AP_PKGIMG_LNA -flashsize AP_PKGIMG_LIMIT_SIZE ^
-input .\prebuild\FW\lib\gcc\%CHIP_TYPE%\%CPBIN_SUBPATH%\cp-demo-flash.bin -addrname CP_PKGIMG_LNA -flashsize CP_PKGIMG_LIMIT_SIZE ^ -input .\prebuild\FW\lib\gcc\%CHIP_TYPE%\%CPBIN_SUBPATH%\cp-demo-flash.bin -addrname CP_PKGIMG_LNA -flashsize CP_PKGIMG_LIMIT_SIZE ^
-input .\GNSS\CC1165W_Firmware_N1000R3.35.1.1165Build12546_Release.pkg -addrname PKGFLXAPP_FW_ADDR -flashsize PKGFLXAPP_FW_SIZE ^
-input .\GNSS\CC11_Bootloader_R2.0.0.0Build10295_APFLASH_AUTO.pkg -addrname PKGFLXAPP_BL_ADDR -flashsize PKGFLXAPP_BL_SIZE ^
-pkgmode 1 ^ -pkgmode 1 ^
-banoldtool 1 ^ -banoldtool 1 ^
-productname %PKG_PRODUCT% ^ -productname %PKG_PRODUCT% ^

View File

@ -81,8 +81,8 @@ flash xip address(from both ap/cp view): 0x00800000---0x01000000
#else #else
#define AP_FLASH_LOAD_ADDR (0x00891000) #define AP_FLASH_LOAD_ADDR (0x00891000)
#define AP_FLASH_LOAD_SIZE (0x67B000)//6636KB #define AP_FLASH_LOAD_SIZE (0x644000)// (0x67B000 - 0x37000)//6636KB - gnss_fw - gnss_bl
#define AP_FLASH_LOAD_UNZIP_SIZE (0x6D6000)//7000KB ,for ld #define AP_FLASH_LOAD_UNZIP_SIZE (0x966000)//(0x6D6000)//7000KB ,for ld
#endif #endif
//hib bakcup addr and size //hib bakcup addr and size

View File

@ -22,7 +22,7 @@
#define AP_PKGIMG_LNA (0x00891000) #define AP_PKGIMG_LNA (0x00891000)
#define AP_PKGIMG_LIMIT_SIZE (0x67B000)//6636KB #define AP_PKGIMG_LIMIT_SIZE (0x644000) // (0x67B000)//6636KB
#define CP_PKGIMG_LIMIT_SIZE (0x64000) #define CP_PKGIMG_LIMIT_SIZE (0x64000)
@ -35,5 +35,13 @@
#define XPKGDCMN_VIRTIMG_MERGE_LNA (0x0) #define XPKGDCMN_VIRTIMG_MERGE_LNA (0x0)
#define XPKG_VIRTIMG_LOAD_SIZE (0x100000) #define XPKG_VIRTIMG_LOAD_SIZE (0x100000)
// GNSS bootloader
#define PKGFLXAPP_BL_ADDR (0xED5000)
#define PKGFLXAPP_BL_SIZE (0x4000)
// GNSS firmware
#define PKGFLXAPP_FW_ADDR (0xED9000)
#define PKGFLXAPP_FW_SIZE (0x33000)
#endif #endif

View File

@ -1,8 +1,8 @@
#if !defined _DB_VERSION_H #if !defined _DB_VERSION_H
#define _DB_VERSION_H #define _DB_VERSION_H
//The file was automatically generated by the PrePass Application Ver 2.2.81.216, Sat Apr 12 09:57:39 2025 //The file was automatically generated by the PrePass Application Ver 2.2.81.216, Wed Apr 16 11:47:27 2025
#define DB_VERSION_UNIQ_ID "0x6f8b5996" #define DB_VERSION_UNIQ_ID "0x79ca5bfe"
#endif //_DB_VERSION_H #endif //_DB_VERSION_H

File diff suppressed because it is too large Load Diff

View File

@ -231,7 +231,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit
#else #else
#if defined CORE_IS_CP || defined FEATURE_BOOTLOADER_PROJECT_ENABLE // #if defined CORE_IS_CP || defined FEATURE_BOOTLOADER_PROJECT_ENABLE
PLAT_BL_UNCOMP_FLASH_TEXT int __attribute__((noinline)) LzmaDec_DecodeReal_3(CLzmaDec *p, SizeT limit, const Byte *bufLimit) PLAT_BL_UNCOMP_FLASH_TEXT int __attribute__((noinline)) LzmaDec_DecodeReal_3(CLzmaDec *p, SizeT limit, const Byte *bufLimit)
{ {
@ -611,11 +611,11 @@ PLAT_BL_UNCOMP_FLASH_TEXT int __attribute__((noinline)) LzmaDec_DecodeReal_3(CLz
return SZ_ERROR_DATA; return SZ_ERROR_DATA;
return SZ_OK; return SZ_OK;
} }
#endif // #endif
#endif #endif
#if defined CORE_IS_CP || defined FEATURE_BOOTLOADER_PROJECT_ENABLE // #if defined CORE_IS_CP || defined FEATURE_BOOTLOADER_PROJECT_ENABLE
PLAT_BL_UNCOMP_FLASH_TEXT void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) PLAT_BL_UNCOMP_FLASH_TEXT void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit)
{ {
unsigned len = (unsigned)p->remainLen; unsigned len = (unsigned)p->remainLen;
@ -905,7 +905,7 @@ PLAT_BL_UNCOMP_FLASH_TEXT static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p,
*bufOut = buf; *bufOut = buf;
return res; return res;
} }
#endif // #endif
void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState); void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState);
PLAT_BL_UNCOMP_FLASH_TEXT void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState) PLAT_BL_UNCOMP_FLASH_TEXT void LzmaDec_InitDicAndState(CLzmaDec *p, BoolInt initDic, BoolInt initState)
{ {
@ -951,7 +951,7 @@ When the decoder lookahead, and the lookahead symbol is not end_marker, we have
return SZ_ERROR_DATA; // for strict mode return SZ_ERROR_DATA; // for strict mode
// return SZ_OK; // for relaxed mode // return SZ_OK; // for relaxed mode
#if defined CORE_IS_CP || defined FEATURE_BOOTLOADER_PROJECT_ENABLE // #if defined CORE_IS_CP || defined FEATURE_BOOTLOADER_PROJECT_ENABLE
PLAT_BL_UNCOMP_FLASH_TEXT SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, PLAT_BL_UNCOMP_FLASH_TEXT SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen,
ELzmaFinishMode finishMode, ELzmaStatus *status) ELzmaFinishMode finishMode, ELzmaStatus *status)
@ -1248,7 +1248,7 @@ PLAT_BL_UNCOMP_FLASH_TEXT SRes __attribute__((noinline)) LzmaDec_DecodeToBuf(CLz
return SZ_OK; return SZ_OK;
} }
} }
#endif // #endif
PLAT_BL_UNCOMP_FLASH_TEXT void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc) PLAT_BL_UNCOMP_FLASH_TEXT void LzmaDec_FreeProbs(CLzmaDec *p, ISzAllocPtr alloc)
{ {

View File

@ -297,7 +297,7 @@ static configuration for USB/UART relatded feature
/* device */ /* device */
#define RTE_SPI_EN 1 #define RTE_SPI_EN 1
#define RTE_USB_EN 1 #define RTE_USB_EN 1
#define RTE_ONE_UART_AT 1 #define RTE_ONE_UART_AT 0 // 完全关闭AT
#define RTE_TWO_UART_AT 0 #define RTE_TWO_UART_AT 0
/* feature */ /* feature */

View File

@ -1,12 +1,14 @@
#ifndef __GPS_UART_READ_H__ #ifndef __GPS_UART_READ_H__
#define __GPS_UART_READ_H__ #define __GPS_UART_READ_H__
#define FW_DOWNLOAD_FM_BAUDRATE (921600)
#define FW_DOWNLOAD_BL_BAUDRATE (115200)
void gps_uart_set_baudrate(unsigned int rate); void gps_uart_set_baudrate(unsigned int rate);
char gps_uart_read_char(unsigned int ms); char gps_uart_read_char(unsigned int ms);
char *gps_uart_read_string(); char *gps_uart_read_string(int cnt);
int gps_uart_send_byte(char byte); int gps_uart_send_byte(char byte);
int gps_uart_send_buf(char *pBuf,int len); int gps_uart_send_buf(char *pBuf,int len);
@ -14,6 +16,8 @@ void gps_report_satellites_num(u16 type,u16 num);
void SK_SendMsg_ToGpsUart(Enum_SK_Msg msg_id,void *param,int len); void SK_SendMsg_ToGpsUart(Enum_SK_Msg msg_id,void *param,int len);
void gps_power_on(void);
void gps_power_off(void);
#endif #endif

View File

@ -100,6 +100,7 @@ typedef enum
E_SK_Msg_Location_offline_update, E_SK_Msg_Location_offline_update,
E_SK_Msg_Location_Gps_test, E_SK_Msg_Location_Gps_test,
E_SK_Msg_Gps_start,
E_SK_Msg_Gps_firmware_dl, E_SK_Msg_Gps_firmware_dl,
E_SK_Msg_Gps_OfflineEph_dl, E_SK_Msg_Gps_OfflineEph_dl,
E_SK_Msg_Gps_Eph_Inject, E_SK_Msg_Gps_Eph_Inject,
@ -151,7 +152,7 @@ void yak_strlog(char *logstr);
extern char yak_logbuf[]; extern char yak_logbuf[];
#define yak_log(fmt, ...) do{\ #define yak_log(fmt, ...) do{\
snprintf(yak_logbuf,YAK_LOGBUF_maxLen,fmt,##__VA_ARGS__);\ snprintf(yak_logbuf,YAK_LOGBUF_maxLen, fmt, ##__VA_ARGS__);\
yak_strlog(yak_logbuf);\ yak_strlog(yak_logbuf);\
}while(0) }while(0)

View File

@ -97,10 +97,12 @@ void icoe_adap_delay_ms(unsigned int ms)
void icoe_adap_set_reset_or_power_low(void) void icoe_adap_set_reset_or_power_low(void)
{ {
gps_power_off();
} }
void icoe_adap_set_reset_or_power_high(void) void icoe_adap_set_reset_or_power_high(void)
{ {
gps_power_on();
} }
int icoe_adap_uart_clear_data(void) int icoe_adap_uart_clear_data(void)
@ -155,9 +157,8 @@ int icoe_adap_uart_get_bytes(unsigned char *str, unsigned int len)
char icoe_adap_uart_get_char(unsigned int ms) char icoe_adap_uart_get_char(unsigned int ms)
{ {
unsigned char data = 0;
#ifdef WIN32 #ifdef WIN32
unsigned int count = 0; unsigned int count = 0;
do do
{ {
@ -168,9 +169,12 @@ char icoe_adap_uart_get_char(unsigned int ms)
count++; count++;
icoe_adap_delay_ms(1); icoe_adap_delay_ms(1);
} while (count < ms); } while (count < ms);
#endif
return data; #else
return gps_uart_read_char(ms);
#endif
} }
char *icoe_adap_mem_malloc(unsigned int size) char *icoe_adap_mem_malloc(unsigned int size)

View File

@ -2,6 +2,9 @@
#include "icoe_gps.h" #include "icoe_gps.h"
#include "icoe_xmodem.h" #include "icoe_xmodem.h"
#include "pkg_718um_mapdef.h"
#include "gps_uart_read.h"
char* gps_dl_send_buf; char* gps_dl_send_buf;
int gps_file_exist; int gps_file_exist;
@ -16,7 +19,7 @@ int icoe_entry_load_mode_by_hw(void)
char cmd[] = {"M!TM!TM!T"}; char cmd[] = {"M!TM!TM!T"};
icoe_adap_uart_set_baudrate(FW_DOWNLOAD_BAUDRATE); //TODO icoe_adap_uart_set_baudrate(FW_DOWNLOAD_BL_BAUDRATE); //TODO
while (1) while (1)
{ {
@ -35,7 +38,8 @@ int icoe_entry_load_mode_by_hw(void)
//icoe_adap_uart_send_muti(cmd,strlen(cmd)+1); //TODO //icoe_adap_uart_send_muti(cmd,strlen(cmd)+1); //TODO
icoe_adap_uart_send_bytes(cmd,strlen(cmd)+1); icoe_adap_uart_send_bytes(cmd,strlen(cmd)+1);
#if 1
c = icoe_adap_uart_get_char(5); //TODO timeout is 5ms c = icoe_adap_uart_get_char(5); //TODO timeout is 5ms
if (c == 'Y') if (c == 'Y')
@ -44,7 +48,13 @@ int icoe_entry_load_mode_by_hw(void)
c = icoe_adap_uart_get_char(5);//把c读出来 c = icoe_adap_uart_get_char(5);//把c读出来
return 0; return 0;
} }
#else
char *p = gps_uart_read_string(2);
if (strchr(p, 'Y') && strchr(p, 'C'))
{
return 0;
}
#endif
if (cnt > 20) if (cnt > 20)
{ {
ICOE_DEBUG_LOG("------ Gps bootloader waiting for YC Error..\r\n"); ICOE_DEBUG_LOG("------ Gps bootloader waiting for YC Error..\r\n");
@ -63,16 +73,16 @@ int icoe_entry_load_mode_by_hw(void)
int icoe_load_fw(char *bl_filename,char *fw_filename) int icoe_load_fw(char *bl_filename,char *fw_filename)
{ {
int ret = 0; // int ret = 0;
FILE* pBL_File = NULL; // FILE* pBL_File = NULL;
FILE* pFW_File = NULL; // FILE* pFW_File = NULL;
//unsigned char baudrate_cmd[] = {"$CFGPRT,,h0,921600,1,35\r\n"}; //unsigned char baudrate_cmd[] = {"$CFGPRT,,h0,921600,1,35\r\n"};
char cmd[] = {"2\n"}; // char cmd[] = {"2\n"};
uint32_t boot_size = 0; uint32_t boot_size = 0;
uint32_t fw_size = 0; uint32_t fw_size = 0;
u32 read_size = 0; // u32 read_size = 0;
uint32_t send_size = 0; uint32_t send_size = 0;
int send_cnt = 0; int send_cnt = 0;
int ack_id = 0; int ack_id = 0;
@ -92,7 +102,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
//=========================== //===========================
// tick = xTaskGetTickCount(); // tick = xTaskGetTickCount();
#if 0
if ((NULL == bl_filename)||(NULL == fw_filename)) if ((NULL == bl_filename)||(NULL == fw_filename))
{ {
return -1; return -1;
@ -132,20 +142,25 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
gps_file_exist = 1; gps_file_exist = 1;
yak_log("------------ read gps firmware (%s) fopen ok! size = %d\n",fw_filename,fw_size); yak_log("------------ read gps firmware (%s) fopen ok! size = %d\n",fw_filename,fw_size);
} }
#endif
fw_size = 204868; // PKGFLXAPP_FW_SIZE
boot_size = 16068; // PKGFLXAPP_BL_SIZE
gps_file_exist = 1;
if(icoe_entry_load_mode_by_hw() < 0) if(icoe_entry_load_mode_by_hw() < 0)
{ {
gps_file_exist = 0; gps_file_exist = 0;
fclose(pBL_File); // fclose(pBL_File);
fclose(pFW_File); // fclose(pFW_File);
return -1; return -1;
} }
//=================================== //===================================
ICOE_DEBUG_LOG("------------- Gps get YC, ready to download bootloader...\r\n"); ICOE_DEBUG_LOG("------------- Gps get YC, ready to download bootloader...\r\n");
fseek(pBL_File,0,SEEK_SET); // fseek(pBL_File,0,SEEK_SET);
fseek(pFW_File,0,SEEK_SET); // fseek(pFW_File,0,SEEK_SET);
send_size = 0; send_size = 0;
send_cnt = 0; send_cnt = 0;
@ -161,6 +176,8 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
if(ack_id == XMODEM_ACK) if(ack_id == XMODEM_ACK)
{ {
memset(gps_dl_send_buf,0,WRITE_BUF_SIZE+1); memset(gps_dl_send_buf,0,WRITE_BUF_SIZE+1);
memcpy(gps_dl_send_buf, (void *)PKGFLXAPP_BL_ADDR + send_size, WRITE_BUF_SIZE);
#if 0
read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pBL_File); read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pBL_File);
if (0 == read_size) if (0 == read_size)
{ {
@ -172,12 +189,13 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
return -1; return -1;
} }
//ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]); //ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]);
#endif
} }
send_cnt++; send_cnt++;
icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,WRITE_BUF_SIZE); icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,WRITE_BUF_SIZE);
ack_id = icoe_adap_uart_get_char(10); ack_id = icoe_adap_uart_get_char(10);
ICOE_DEBUG_LOG("------------- boot loader recv:=%x\r\n",ack_id); // ICOE_DEBUG_LOG("------------- boot loader recv:=%x\r\n",ack_id);
if (ack_id == XMODEM_ACK) if (ack_id == XMODEM_ACK)
{ {
send_size += WRITE_BUF_SIZE; send_size += WRITE_BUF_SIZE;
@ -191,12 +209,20 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
succ_flag=0; succ_flag=0;
return -1; return -1;
} }
else if ('C' == ack_id && send_cnt == 1) // 强行把C读出来
{
// yak_log("------------- boot loader recv:=%x, send cnd = 1\r\n", ack_id);
ack_id = XMODEM_ACK;
send_size += WRITE_BUF_SIZE;
}
} }
else else
{ {
if(ack_id == XMODEM_ACK) if(ack_id == XMODEM_ACK)
{ {
memset(gps_dl_send_buf,0,WRITE_BUF_SIZE + 1); memset(gps_dl_send_buf,0,WRITE_BUF_SIZE + 1);
memcpy(gps_dl_send_buf, (void *)PKGFLXAPP_BL_ADDR + send_size, boot_size - send_size);
#if 0
read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pBL_File); read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pBL_File);
if (0 == read_size) if (0 == read_size)
{ {
@ -208,6 +234,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
return -1; return -1;
} }
//ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]); //ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]);
#endif
} }
send_cnt++; send_cnt++;
icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,boot_size-send_size); icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,boot_size-send_size);
@ -221,8 +248,8 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
if(retry_num++ > 3) if(retry_num++ > 3)
{ {
ICOE_DEBUG_LOG("------------- boot loader fail:=3=\r\n"); ICOE_DEBUG_LOG("------------- boot loader fail:=3=\r\n");
fclose(pBL_File); // fclose(pBL_File);
fclose(pFW_File); // fclose(pFW_File);
succ_flag = 0; succ_flag = 0;
gps_file_exist = 0; gps_file_exist = 0;
return -1; return -1;
@ -243,8 +270,8 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
else if (ack_id == XMODEM_CAN) else if (ack_id == XMODEM_CAN)
{ {
ICOE_DEBUG_LOG("------------- boot loader fail:=4=\r\n"); ICOE_DEBUG_LOG("------------- boot loader fail:=4=\r\n");
fclose(pBL_File); // fclose(pBL_File);
fclose(pFW_File); // fclose(pFW_File);
succ_flag = 0; succ_flag = 0;
gps_file_exist = 0; gps_file_exist = 0;
return -1; return -1;
@ -254,7 +281,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
fclose(pBL_File); // fclose(pBL_File);
if(succ_flag) if(succ_flag)
{ {
@ -263,12 +290,12 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
else else
{ {
ICOE_DEBUG_LOG("------------- boot loader fail:=6=\r\n"); ICOE_DEBUG_LOG("------------- boot loader fail:=6=\r\n");
fclose(pFW_File); // fclose(pFW_File);
succ_flag = 0; succ_flag = 0;
gps_file_exist = 0; gps_file_exist = 0;
return -1; return -1;
} }
ret = 0; // ret = 0;
ICOE_DEBUG_LOG("------------- wait for gps chip to run bootloader\r\n"); ICOE_DEBUG_LOG("------------- wait for gps chip to run bootloader\r\n");
succ_flag = 0; succ_flag = 0;
@ -295,7 +322,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
ret ++; ret ++;
} }
while(ret < 1000); while(ret < 1000);
#else #elif 0
do do
{ {
char c = icoe_adap_uart_get_char(5); char c = icoe_adap_uart_get_char(5);
@ -304,7 +331,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
if ('C' == c) if ('C' == c)
{ {
ICOE_DEBUG_LOG("------------- recv=%c\r\n",c); ICOE_DEBUG_LOG("------------- recv=%c, ret = %d\r\n",c,ret);
succ_flag = 1; succ_flag = 1;
//gps_dl_recv_buf[0] = 0; //gps_dl_recv_buf[0] = 0;
break; break;
@ -316,25 +343,25 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
while(ret < 1000); while(ret < 1000);
#endif #endif
if(succ_flag) // if(succ_flag)
{ // {
ICOE_DEBUG_LOG("------------- bootloader run ok.\r\n"); // ICOE_DEBUG_LOG("------------- bootloader run ok.\r\n");
} // }
else // else
{ // {
ICOE_DEBUG_LOG("------------- bootloader run fail.\r\n"); // ICOE_DEBUG_LOG("------------- bootloader run fail.\r\n");
fclose(pFW_File); // // fclose(pFW_File);
succ_flag = 0; // succ_flag = 0;
gps_file_exist = 0; // gps_file_exist = 0;
return -1; // return -1;
} // }
ICOE_DEBUG_LOG("------------- Download firmware...\r\n"); ICOE_DEBUG_LOG("------------- Download firmware...\r\n");
//icoe_adap_delay_ms(5); //icoe_adap_delay_ms(5);
//memcpy(cmd,"2\n",3); // memcpy(cmd,"2\n",3);
icoe_adap_uart_send_bytes(cmd,2); // icoe_adap_uart_send_bytes(cmd,2);
succ_flag = 0; succ_flag = 0;
#if 0 #if 0
@ -375,7 +402,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
icoe_adap_delay_ms(25); icoe_adap_delay_ms(25);
#endif #endif
icoe_adap_delay_ms(5); icoe_adap_delay_ms(25);
//icoe_adap_uart_send_bytes(baudrate_cmd,2); //icoe_adap_uart_send_bytes(baudrate_cmd,2);
//icoe_adap_delay_ms(5); //icoe_adap_delay_ms(5);
@ -397,6 +424,8 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
if(ack_id == XMODEM_ACK) if(ack_id == XMODEM_ACK)
{ {
memset(gps_dl_send_buf,0,WRITE_BUF_SIZE+1); memset(gps_dl_send_buf,0,WRITE_BUF_SIZE+1);
memcpy(gps_dl_send_buf, (void *)PKGFLXAPP_FW_ADDR + send_size, WRITE_BUF_SIZE);
#if 0
read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pFW_File); read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pFW_File);
if (0 == read_size) if (0 == read_size)
{ {
@ -407,11 +436,13 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
return -1; return -1;
} }
//ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]); //ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]);
#endif
} }
send_cnt++; send_cnt++;
icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,WRITE_BUF_SIZE); icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,WRITE_BUF_SIZE);
ack_id = icoe_adap_uart_get_char(10); ack_id = XMODEM_ACK;// icoe_adap_uart_get_char(10);
icoe_adap_delay_ms(5); // overleap read ack
if (ack_id == XMODEM_ACK) if (ack_id == XMODEM_ACK)
{ {
send_size += WRITE_BUF_SIZE; send_size += WRITE_BUF_SIZE;
@ -425,12 +456,26 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
succ_flag=0; succ_flag=0;
return -1; return -1;
} }
else if (('C' == ack_id) && (1 == send_cnt))
{
yak_log("read C -------------------");
ack_id = XMODEM_ACK;
send_size += WRITE_BUF_SIZE;
}
else if (1 == send_cnt)
{
yak_log("read ack timeout");
ack_id = XMODEM_ACK;
send_size += WRITE_BUF_SIZE;
}
} }
else else
{ {
if(ack_id == XMODEM_ACK) if(ack_id == XMODEM_ACK)
{ {
memset(gps_dl_send_buf,0,WRITE_BUF_SIZE + 1); memset(gps_dl_send_buf,0,WRITE_BUF_SIZE + 1);
memcpy(gps_dl_send_buf, (void *)PKGFLXAPP_FW_ADDR + send_size, fw_size-send_size);
#if 0
read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pFW_File); read_size = fread(gps_dl_send_buf,1,WRITE_BUF_SIZE,pFW_File);
if (0 == read_size) if (0 == read_size)
{ {
@ -442,6 +487,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
return -1; return -1;
} }
//ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]); //ICOE_DEBUG_LOG("temp_buf[0]:%x %x %x %x %x\r\n",temp_buf[0],temp_buf[1],temp_buf[2],temp_buf[3],temp_buf[4]);
#endif
} }
send_cnt++; send_cnt++;
icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,fw_size-send_size); icoe_xmodem_send_frame(gps_dl_send_buf,send_cnt,fw_size-send_size);
@ -449,15 +495,16 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
if (ack_id == XMODEM_ACK) if (ack_id == XMODEM_ACK)
{ {
send_size += boot_size-send_size; send_size += fw_size-send_size;
yak_log("------------- gps firmware final send size:%u\r\n", send_size);
ack_id = XMODEM_EOT; ack_id = XMODEM_EOT;
while (ack_id != XMODEM_ACK) while (ack_id != XMODEM_ACK)
{ {
if(retry_num++ > 3) if(retry_num++ > 3)
{ {
ICOE_DEBUG_LOG("------------- gps firmware fail:=3=\r\n"); ICOE_DEBUG_LOG("------------- gps firmware fail:=3=\r\n");
fclose(pBL_File); // fclose(pBL_File);
fclose(pFW_File); // fclose(pFW_File);
succ_flag = 0; succ_flag = 0;
gps_file_exist = 0; gps_file_exist = 0;
return -1; return -1;
@ -480,7 +527,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
{ {
ICOE_DEBUG_LOG("------------- gps firmware fail:=4=\r\n"); ICOE_DEBUG_LOG("------------- gps firmware fail:=4=\r\n");
fclose(pFW_File); // fclose(pFW_File);
succ_flag = 0; succ_flag = 0;
gps_file_exist = 0; gps_file_exist = 0;
return -1; return -1;
@ -488,7 +535,7 @@ int icoe_load_fw(char *bl_filename,char *fw_filename)
} }
} }
fclose(pFW_File); // fclose(pFW_File);
if(succ_flag) if(succ_flag)
{ {

View File

@ -13,7 +13,7 @@
#include "HTTPClient.h" #include "HTTPClient.h"
#include "icoe_offline_eph.h" #include "icoe_offline_eph.h"
#include "pkg_718um_mapdef.h"
@ -142,12 +142,12 @@ void gps_uart_set_baudrate(unsigned int rate)
ARM_USART_FLOW_CONTROL_NONE, rate); ARM_USART_FLOW_CONTROL_NONE, rate);
} }
void gps_power_on() void gps_power_on(void)
{ {
GPIO_OUTPUT_SET_High(GPS_EN_GPIO_INSTANCE,GPS_EN_GPIO_PIN); GPIO_OUTPUT_SET_High(GPS_EN_GPIO_INSTANCE,GPS_EN_GPIO_PIN);
} }
void gps_power_off() void gps_power_off(void)
{ {
GPIO_OUTPUT_SET_Low(GPS_EN_GPIO_INSTANCE,GPS_EN_GPIO_PIN); GPIO_OUTPUT_SET_Low(GPS_EN_GPIO_INSTANCE,GPS_EN_GPIO_PIN);
} }
@ -196,63 +196,103 @@ void gps_report_satellites_num(u16 type,u16 num)
} }
} }
char gps_uart_read_char(unsigned int ms) char gps_uart_read_char(unsigned int ms)
{ {
char ret_char = 0; int cnt = 0;
#if 0 gps_uart_drv->Receive(read_buf, 1);
u8 ret_num = 0;
unsigned int t = ms/2;
aos_sleep(t);
if (NULL == gps_uart_handle) return ret_char;
ret_num = uart_read_dir(gps_uart_handle,&ret_char,1);
if (ret_num >0) return ret_char;
aos_sleep(ms-t);
ret_num = uart_read_dir(gps_uart_handle,&ret_char,1);
#endif
return ret_char;
while((isRecvTimeout == false) && (isRecvComplete == false))
{
osDelay(1);
if(cnt++ > ms)
{
// yak_log("-------gps uart read char timeout");
return -1;
}
}
if(isRecvTimeout == true)
{
isRecvTimeout = false;
}
else
{
isRecvComplete = false;
}
// yak_log("-------gps uart read char, read_buf[0] = 0x%x", read_buf[0]);
return read_buf[0];
} }
char *gps_uart_read_string() char *gps_uart_read_string(int cnt)
{ {
gps_uart_drv->Receive(read_buf, cnt);
while((isRecvTimeout == false) && (isRecvComplete == false))
{
osDelay(1);
}
if(isRecvTimeout == true)
{
isRecvTimeout = false;
}
else
{
isRecvComplete = false;
}
return read_buf; return read_buf;
} }
int gps_uart_send_byte(char byte) int gps_uart_send_byte(char byte)
{ {
return gps_uart_drv->Send((const void *)&byte,1); gps_uart_drv->Send((const void *)&byte,1);
while((isSendComplete == false))
{
osDelay(10);
}
isSendComplete = false;
return 1;
} }
int gps_uart_send_buf(char *pBuf,int len) int gps_uart_send_buf(char *pBuf,int len)
{ {
return gps_uart_drv->Send((const void *)&pBuf,len); gps_uart_drv->Send((const void *)pBuf,len);
while((isSendComplete == false))
{
osDelay(10);
}
isSendComplete = false;
return len;
} }
void gps_uart_cb(uint32_t event) void gps_uart_cb(uint32_t event)
{ {
if(event & ARM_USART_EVENT_RX_TIMEOUT) // yak_log("--------gps uart cb, event = 0x%x", event);
if(event & ARM_USART_EVENT_RX_TIMEOUT) // 0x40
{ {
// yak_log("-------gps uart recv cb, 0x%x 0x%x", read_buf[0], read_buf[1]);
isRecvTimeout = true; isRecvTimeout = true;
// SK_SendMsg_ToGpsUart(E_SK_Msg_Gps_Uart_recv,NULL,0);
} }
if(event & ARM_USART_EVENT_RECEIVE_COMPLETE)
if(event & ARM_USART_EVENT_RECEIVE_COMPLETE) // 0x02
{ {
// yak_log("-------gps uart recv cb, 0x%x 0x%x", read_buf[0], read_buf[1]);
isRecvComplete = true; isRecvComplete = true;
// SK_SendMsg_ToGpsUart(E_SK_Msg_Gps_Uart_recv,NULL,0);
} }
if(event & ARM_USART_EVENT_SEND_COMPLETE) if(event & ARM_USART_EVENT_SEND_COMPLETE)
{ {
isSendComplete = true; isSendComplete = true;
} }
if(event & (ARM_USART_EVENT_RX_BREAK | ARM_USART_EVENT_RX_FRAMING_ERROR | ARM_USART_EVENT_RX_PARITY_ERROR)) if(event & (ARM_USART_EVENT_RX_BREAK | ARM_USART_EVENT_RX_FRAMING_ERROR | ARM_USART_EVENT_RX_PARITY_ERROR))
{ {
gps_uart_drv->Control(ARM_USART_CONTROL_PURGE_COMM, 0); gps_uart_drv->Control(ARM_USART_CONTROL_PURGE_COMM, 0);
} }
//SK_SendMsg_ToGpsUart(E_SK_Msg_Gps_Uart_recv,NULL,);
} }
static void gps_uart_init(void) static void gps_uart_init(void)
@ -290,17 +330,12 @@ bool gps_firmware_version_check()
void gnss_location_cb(GpsLocation* location) void gnss_location_cb(GpsLocation* location)
{//定位回调函数 {//定位回调函数
yak_log("gps_location_cb:lat=%f,lon=%f,alt=%f,speed=%f,bearing=%f,time=%d",location->latitude,location->longitude,location->altitude,location->speed,location->bearing,location->timestamp);
} }
int gps_icoe_firmware_download() int gps_icoe_firmware_download()
{ {
int ret = 0; return icoe_load_fw(GPS_BOOTLOAD_PKG_NAME,GPS_FIRMWARE_PKG_NAME);
icoe_load_fw(GPS_BOOTLOAD_PKG_NAME,GPS_FIRMWARE_PKG_NAME);
return ret;
} }
static char *httpget_url_gen() static char *httpget_url_gen()
@ -400,25 +435,26 @@ static INT32 httpGetDataEx(CHAR *getUrl, CHAR *buf, UINT32 len)
} }
static void gps_uart_task_entry(void *thread_input) static void gps_uart_task_entry(void *thread_input)
{ {
//int ret;
nmea_reader_init(); nmea_reader_init();
nmea_gnss_set_callback(gnss_location_cb,NULL,NULL); nmea_gnss_set_callback(gnss_location_cb,NULL,NULL);
gps_uart_init(); gps_uart_init();
gps_power_gpio_init(); gps_power_gpio_init();
// gps_power_on();
#if 0
while(1)
{
yak_strlog("gps read...");
gps_uart_drv->Receive(read_buf,10);
read_buf[10] = 0;
yak_strlog(read_buf);
}
#endif
gps_state = E_GPS_State_init; gps_state = E_GPS_State_init;
// gps_uart_drv->Receive(read_buf, GPS_UART_READ_Buf_MaxLen); // ?? uart start recv
gGpsUartTaskQueque = osMessageQueueNew(GPS_UART_TASK_QUEUE_SIZE, sizeof(SK_Msg_S), NULL);
if (NULL == gGpsUartTaskQueque)
{
yak_log("gps uart task queue create fail\r\n");
return;
}
SK_SendMsg_ToGpsUart(E_SK_Msg_Gps_firmware_dl, NULL, 0); // test
while(1) while(1)
{ {
SK_Msg_S msg = {0}; SK_Msg_S msg = {0};
@ -426,29 +462,41 @@ static void gps_uart_task_entry(void *thread_input)
if (osMessageQueueGet(gGpsUartTaskQueque, &msg, 0, osWaitForever) == osOK) if (osMessageQueueGet(gGpsUartTaskQueque, &msg, 0, osWaitForever) == osOK)
{ {
yak_log("gps uart queue recv msgid = %d\r\n", msg.msg_id);
//消息处理 //消息处理
switch (msg.msg_id) switch (msg.msg_id)
{ {
case E_SK_Msg_Gps_start:
{}
break;
case E_SK_Msg_Gps_Uart_recv: case E_SK_Msg_Gps_Uart_recv:
{ {
//uint32_t r_len = 0;
uint32_t len = gps_uart_drv->GetRxCount(); uint32_t len = gps_uart_drv->GetRxCount();
yak_log("uart recv len=%d\r\n", len);
while(len) while(len)
{ {
if (GPS_UART_READ_Buf_MaxLen<len) if (GPS_UART_READ_Buf_MaxLen<len)
{ {
gps_uart_drv->Receive(read_buf, GPS_UART_READ_Buf_MaxLen);
len -= GPS_UART_READ_Buf_MaxLen; len -= GPS_UART_READ_Buf_MaxLen;
} }
else else
{ {
gps_uart_drv->Receive(read_buf, len);
read_buf[len] = 0; read_buf[len] = 0;
len = 0; len = 0;
//icoe_gps_nmea_parse();
} }
yak_strlog(read_buf);
} }
yak_strlog("uart recv data start\r\n");
yak_strlog(read_buf);
yak_strlog("uart recv data end\r\n");
icoe_gps_nmea_parse((unsigned char *)read_buf, len);
gps_uart_drv->Receive(read_buf, GPS_UART_READ_Buf_MaxLen);
} }
break; break;
@ -460,7 +508,8 @@ static void gps_uart_task_entry(void *thread_input)
if ((E_GPS_State_init == gps_state)||(E_GPS_State_stop == gps_state)) if ((E_GPS_State_init == gps_state)||(E_GPS_State_stop == gps_state))
{ {
gps_state = E_GPS_State_downloading; gps_state = E_GPS_State_downloading;
yak_log("gps firmware download start");
gps_icoe_firmware_download(); gps_icoe_firmware_download();
if (E_GPS_State_stop != gps_state) if (E_GPS_State_stop != gps_state)
@ -578,14 +627,11 @@ int SK_GPS_UART_Task_Init(void)
gGpsUartTaskId = osThreadNew(gps_uart_task_entry, NULL, &threadAttr); gGpsUartTaskId = osThreadNew(gps_uart_task_entry, NULL, &threadAttr);
if (NULL == osThreadNew(gps_uart_task_entry, NULL, &threadAttr)) if (NULL == gGpsUartTaskId)
{ {
yak_strlog("############## Failed to create gps uart thread\n"); yak_strlog("############## Failed to create gps uart thread\n");
} }
else
{
gGpsUartTaskQueque = osMessageQueueNew(GPS_UART_TASK_QUEUE_SIZE, sizeof(SK_Msg_S), NULL);
}
return 0; return 0;
} }

View File

@ -380,12 +380,14 @@ void SK_MainTask_Entry(void *appInfo)
//Led_Show_Update(); //Led_Show_Update();
osDelay(3000); osDelay(3000);
slpManAONIOPowerOn(); // AGPIO
SK_SocketTask_Init(); SK_SocketTask_Init();
//Sk_FotaApp_Init(); //Sk_FotaApp_Init();
SK_PPG_Task_Init(); SK_PPG_Task_Init();
//SK_LocationTask_Init(); //SK_LocationTask_Init();
//SK_GPS_UART_Task_Init(); SK_GPS_UART_Task_Init();
yak_log("----- long size=%d,double size=%d", sizeof(longsize), sizeof(doublesize)); yak_log("----- long size=%d,double size=%d", sizeof(longsize), sizeof(doublesize));