MINIstm32 UIP协议的TFTP程序远程更新APP后出现白屏,服务器下载的FLASH程序不运行

2019-08-19 16:37发布

       我通过 UIP1.0的UDP客户端实现了一个TFTP客户端,可以连接到TFTP服务器,并成功下载RTC.bin文件(原子串口IAP的FLASH APP),但是在固件通过IAP程序写入到Flash之后,程序跳转后,LCD白屏,之前我怀疑是bin文件的问题,于是用自己写的SD升级程序测试过,完全没有问题。
     其后,我检查过传输的数据和TFTP服务器的数据是一致的,我不明白为什么会出现白屏,难道是因为IAP程序初始化了硬件外设,导致新的APP程序的外设程序不正常,又或者是两个程序的时钟不一致,总之,我没能想清楚,各位同行的高手们,有没有什么的好的思路可以提供参考,后期去掉公司业务相关的函数后(数据结构和一些TCP通信的具体协议),也会发出来共享的,大家共同学习,谢谢

以下程序将TFTP数据包做成1K的包然后写入flash
void Make_1K(u8 *pbuff,u16 len)
{
        static u8 cnt,isBuff_1K = 0;
        static u32 appaddr = FLASH_APP_ADDR;
        static u8 iap_tmp_buff[1024];
       
        if(isBuff_1K == 0 && len == 512)
        {
                memcpy((char *)iap_tmp_buff,(char *)pbuff,len);
                isBuff_1K = 1;
        }
        else if(isBuff_1K == 1 && len == 512)
        {
                cnt++;
                memcpy((char *)(&iap_tmp_buff[512]),(char *)pbuff,len);
                if(cnt == 1)
                        appaddr = iap_write_appbin(FLASH_APP_ADDR, iap_tmp_buff,1024 );
                else
                        appaddr = iap_write_appbin(appaddr, iap_tmp_buff,1024 );
               
                isBuff_1K = 0;
        }
        else if (len < 512 &&  isBuff_1K == 0)
        {
                memcpy((char *)iap_tmp_buff,(char *)pbuff,len);
                appaddr = iap_write_appbin(appaddr, iap_tmp_buff,len );
                cnt++;
                printf(" Bin to Flash Last 1 %d ",cnt);
        }
        else if(len < 512 &&  isBuff_1K == 1)
        {
                cnt++;
                memcpy((char *)(&iap_tmp_buff[512]),(char *)pbuff,len);
                printf(" Bin to Flash Last 2 %d len %d ",cnt,len);
                appaddr = iap_write_appbin(appaddr, iap_tmp_buff,512+len );       
        }
}


以下主函数的处理
                if(key==KEY0_PRES)
                {               
                        delay_ms(3000);
                        if(((*(vu32*)(FLASH_APP_ADDR+4))&0xFF000000)==0x08000000)
                        {
                                printf(" Iap addr success.... ");
                                iap_load_app(FLASH_APP_ADDR);
                        }
                        else
                        {
                                printf(" Iap addr fail.... ");
                        }
                       
                }
                if(key == KEY1_PRES)
                {
                        tftp_RRQ("RTC.bin");
                        tftp_data_flag = 1;                               
                }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
尘幕下笑依旧
1楼-- · 2019-08-19 18:47
补上视频链接http://v.youku.com/v_show/id_XMjc2MTY0MjE0MA==.html
原子,为啥不自家做个服务器,搞得本地视频不能上传,需要借助优酷的这样的第三方
尘幕下笑依旧
2楼-- · 2019-08-19 19:39
 精彩回答 2  元偷偷看……

一周热门 更多>