我通过 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;
}
原子,为啥不自家做个服务器,搞得本地视频不能上传,需要借助优酷的这样的第三方
一周热门 更多>