no message

master
zcy 2023-12-20 18:22:52 +08:00
parent 6cd86e2efe
commit ff62412e5c
9 changed files with 84 additions and 90 deletions

View File

@ -245,7 +245,7 @@ RunResult Write_Flash(uint32_t writeAddr, uint8_t *writeBuf, uint16_t writeLen)
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清标志位 FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清标志位
for( timeOut=0; (SET == FLASH_GetFlagStatus(FLASH_FLAG_BSY)); timeOut++) for( timeOut=0; (SET == FLASH_GetFlagStatus(FLASH_FLAG_BSY)); timeOut++)
{ {
Wait_For_Nms(10) ; Wait_For_Nms(50) ;
if( timeOut>10 ) if( timeOut>10 )
{ {
SysErr("") ; //写Flash出错 SysErr("") ; //写Flash出错

View File

@ -123,8 +123,8 @@ void _ttywrch(int ch)
int fputc(int ch, FILE *f)//重定义fputc函数 int fputc(int ch, FILE *f)//重定义fputc函数
{ {
UARTx_COM[UART_DEBUG]->DR = (u8) ch; // UARTx_COM[UART_DEBUG]->DR = (u8) ch;
while(( UARTx_COM[UART_DEBUG]->SR & 0X40 ) == 0) ;//循环发送,直到发送完毕 TC // while(( UARTx_COM[UART_DEBUG]->SR & 0X40 ) == 0) ;//循环发送,直到发送完毕 TC
return ch; return ch;
} }
#endif #endif

View File

@ -20,7 +20,7 @@
****************************************************************************/ ****************************************************************************/
#define UART_DEBUG COM5 //log输出重定向 #define UART_DEBUG COM5 //log输出重定向
#define UARTx_DMATX_EN 1 //uart1`uart4可以选择是否通过串口DMA发送数据 #define UARTx_DMATX_EN 1 //uart1`uart4可以选择是否通过串口DMA发送数据
#define UART1_DMA_RX_MAXLEN 256 //串口1 DMA接收一帧数据的最大长度 #define UART1_DMA_RX_MAXLEN 2560 //串口1 DMA接收一帧数据的最大长度
#define UART2_DMA_RX_MAXLEN 256 //串口2 DMA接收一帧数据的最大长度 #define UART2_DMA_RX_MAXLEN 256 //串口2 DMA接收一帧数据的最大长度
#define UART3_DMA_RX_MAXLEN (1024*3) //串口3 DMA接收一帧数据的最大长度 #define UART3_DMA_RX_MAXLEN (1024*3) //串口3 DMA接收一帧数据的最大长度
#define UART4_DMA_RX_MAXLEN 256 //串口4 DMA接收一帧数据的最大长度 #define UART4_DMA_RX_MAXLEN 256 //串口4 DMA接收一帧数据的最大长度

View File

@ -50,7 +50,7 @@ RUNAPP1: if((addr == (APP1_AREA_ADDR & 0xFFFF0000))
} }
case 0x00000032: case APP2_AREA_ADDR: case 0x00000032: case APP2_AREA_ADDR:
{ {
if( ((*(vu32*)(APP2_AREA_ADDR+4))&0xFFFF0000) == (APP2_AREA_ADDR & 0xFFFF0000)) //校验存储在FLASH中的固件合法 if( ((*(vu32*)(APP2_AREA_ADDR+4))&0xFFFF0000) >= (APP2_AREA_ADDR & 0xFFFF0000)) //校验存储在FLASH中的固件合法
{ {
TcpUpdata( BOOTTOTCPFRAME, "开始执行APP2用户代码!") ; TcpUpdata( BOOTTOTCPFRAME, "开始执行APP2用户代码!") ;
appAddr = APP2_AREA_ADDR ; appAddr = APP2_AREA_ADDR ;

View File

@ -186,9 +186,7 @@ RunResult DownOtherSubpack(DownFileP_s *psFileParm)
int headPos ; int headPos ;
for( psFileParm->subPackNum = 2; psFileParm->subPackNum <= psFileParm->subPackSum; psFileParm->subPackNum++ ) //从第2个包开始采用循环下载 for( psFileParm->subPackNum = 2; psFileParm->subPackNum <= psFileParm->subPackSum; psFileParm->subPackNum++ ) //从第2个包开始采用循环下载
{ {
OledPrintf(LINE_LEFT, HIGH_16, LINE4, false, "下载子包:%d", psFileParm->subPackNum ) ; Wait_For_Nms(50) ;
Data_Led_Reverse() ;
Wait_For_Nms(5) ;
uint16_t downLen = ONCE_DOWN_LEN ; //本次下载数据的长度 uint16_t downLen = ONCE_DOWN_LEN ; //本次下载数据的长度
if( psFileParm->subPackNum == psFileParm->subPackSum ) /*下载最后一个包,下载数据长度需要重新计算*/ if( psFileParm->subPackNum == psFileParm->subPackSum ) /*下载最后一个包,下载数据长度需要重新计算*/
{ {

View File

@ -43,21 +43,18 @@ int main(void)
Board_Init() ; //硬件驱动初始化和功能块初始化 Board_Init() ; //硬件驱动初始化和功能块初始化
Watchdog_Feed() ; //看门狗喂狗 Watchdog_Feed() ; //看门狗喂狗
/*强制升级检测、开始变砖检测修复 ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼*/
/* if( (uIapFlash.sIapFlash.JumpResult == 0x30) ) // 跳转失败或者按键操作进入恢复模式,则运行应急程序
/*强制升级检测、开始变砖检测修复 ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
if( (uIapFlash.sIapFlash.JumpResult == 0x30) ) /*跳转失败或者按键操作进入恢复模式,则运行应急程序
{ {
DisplayInfo("执行应急程序") ; DisplayInfo("执行应急程序") ;
Wait_For_Nms(20) ; //延时2S用于显示屏显示实际项目可以屏蔽延时
goto SAVEAPPOUT ; //跳转到应急程序运行 goto SAVEAPPOUT ; //跳转到应急程序运行
} }
else /*跳转APP未出现失败设置标志位jumpResult为暂未跳转成功状 else //跳转APP未出现失败设置标志位jumpResult为暂未跳转成功状
{ {
uIapFlash.sIapFlash.JumpResult = 0x30 ; //复位JumpResult标志位 uIapFlash.sIapFlash.JumpResult = 0x30 ; //复位JumpResult标志位
Set_uIapFlash(&uIapFlash) ; //保存JumpResult Set_uIapFlash(&uIapFlash) ; //保存JumpResult
} }
*/
/*结束变砖检测修复、强制升级检测*/ /*结束变砖检测修复、强制升级检测*/
/*开始检测是否需要升级APP(即判断IapFlag标志位)▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼*/ /*开始检测是否需要升级APP(即判断IapFlag标志位)▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼*/
@ -65,7 +62,8 @@ int main(void)
{ {
if(uIapFlash.sIapFlash.IapFlag == 0x30 ) /*升级标志位为0, 说明不需要升级,直接跳转即可*/ if(uIapFlash.sIapFlash.IapFlag == 0x30 ) /*升级标志位为0, 说明不需要升级,直接跳转即可*/
{ {
// AppLogPrintf("无需升级,即将执行APP%c .", uIapFlash.sIapFlash.RunAppNum) ; AppLogPrintf("无需升级,即将执行APP%c .", uIapFlash.sIapFlash.RunAppNum) ;
goto APPNUMOUT ; //跳转到RunAppNum执行原先的程序 goto APPNUMOUT ; //跳转到RunAppNum执行原先的程序
} }
} }
@ -141,9 +139,7 @@ int main(void)
} }
/*∧∧新固件合法性校验结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/ /*∧∧新固件合法性校验结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
/*下载新固件并写FLASH 开始∨∨∨∨∨∨∨∧∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨*/
// OledPrintf(LINE_LEFT, HIGH_16, LINE3, false, "总子包数:%d", sDownApp.subPackSum) ;
// OledPrintf(LINE_LEFT, HIGH_16, LINE4, false, "下载子包:1" ) ;
Erase_App_Area(sDownApp.appFlashAddr) ; //擦除相应代码段准备将新的代码写入FLASH此时该APP段已经不可用了如果后续出现下载/写入FLASH错误需要跳转到应急程序 Erase_App_Area(sDownApp.appFlashAddr) ; //擦除相应代码段准备将新的代码写入FLASH此时该APP段已经不可用了如果后续出现下载/写入FLASH错误需要跳转到应急程序
TcpUpdata( BOOTTOTCPFRAME, "子包1 。下载成功!") ; TcpUpdata( BOOTTOTCPFRAME, "子包1 。下载成功!") ;
if( RUNOK == Write_Flash(sDownApp.appFlashAddr, (uint8_t*)(ec20FtpBuf+headPos), ONCE_DOWN_LEN)) /*写FLASH成功*///将上一步下载的subpack1写入falsh中 if( RUNOK == Write_Flash(sDownApp.appFlashAddr, (uint8_t*)(ec20FtpBuf+headPos), ONCE_DOWN_LEN)) /*写FLASH成功*///将上一步下载的subpack1写入falsh中
@ -179,14 +175,14 @@ int main(void)
/*∧∧下载新固件并写FLASH 结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/ /*∧∧下载新固件并写FLASH 结束∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧*/
APPNUMOUT: APPNUMOUT:
appAddr = QueryNewAppArea(0x32); //校验固件合法性、获取跳转的FLASH存放区域首地址
appAddr = QueryNewAppArea((u32)uIapFlash.sIapFlash.RunAppNum); //校验固件合法性、获取跳转的FLASH存放区域首地址 // appAddr = QueryNewAppArea((u32)uIapFlash.sIapFlash.RunAppNum); //校验固件合法性、获取跳转的FLASH存放区域首地址
NetDisconnetc() ; //断开网络连接注销FTP登陆 NetDisconnetc() ; //断开网络连接注销FTP登陆
Iap_Load_App(appAddr) ; //执行APP不会再往下执行了 Iap_Load_App(appAddr) ; //执行APP不会再往下执行了
NEWAPPOUT: NEWAPPOUT:
uIapFlash.sIapFlash.IapFlag = 0x30 ; //清除升级标志位 uIapFlash.sIapFlash.IapFlag = 0x32 ; //清除升级标志位
Set_uIapFlash(&uIapFlash) ; Set_uIapFlash(&uIapFlash) ;
appAddr = QueryNewAppArea(sDownApp.appFlashAddr); //校验固件合法性、获取跳转的FLASH存放区域首地址 appAddr = QueryNewAppArea(sDownApp.appFlashAddr); //校验固件合法性、获取跳转的FLASH存放区域首地址
NetDisconnetc() ; //断开网络连接注销FTP登陆 NetDisconnetc() ; //断开网络连接注销FTP登陆