STM32F4 IAP求教

2019-07-21 02:24发布

    使用ST官方提供的F4的基于以太网的IAP例程中的http方式将上传的BIN文件下载到FLASH中后从FLASH中读出发现开头竟然是文件的路径信息(如图);而我直接使用JFlash下载BIN文件到FLASH中则是正常的(不会有路径信息)。

    请问诸位大侠,有人用过这个例程吗?这是什么原因?莫非是官方的httpserver有问题?





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Kael_Zhou
1楼-- · 2019-07-22 03:44
回复【7楼】正点原子:
---------------------------------
问题终于找到了,感谢原子哥的提示。前后摸索了一个星期左右。。。我一直以为是我操作有问题。。最终问题还是出现在官方的源文件中。。看来不能迷信官方资料。。


最终还是官方例程中的HttpServer有问题,估计是HTTP协议更新了但ST官方人员移植没有更新相关处理的原因,又或者是BIN文件在HTTP协议中不是以octet-stream形式(无文件格式,二进制流)而是以text/plain形式传输的原因,总之从我开始发的图片可以看到,FLASH中多写入了很多额外的信息,此外在0x080100E0那一行可以找到BIN文件的开头B0 84 00 20,因此很显然是数据指针指错。然后对照图片右侧的ASCII码可以发现上面一行指定了Content-Type 为 text-plain。直接百度:http content-type,找到一个对照表 http://www.ostools.net/commons ,之后的问题就迎刃而解了。主要是在httpserver.c两处类型处理的地方修改以下代码就OK了。

 /* parse packet for the octet-stream field */
             for (i=0;i<len;i++)
             {
               if ((strncmp ((char*)(data+i), octet_stream, 13)==0))
               {
                 DataOffset = i+16;
                 break;
               }
//增加对plain类型的处理  
 if( (strncmp ((char*)(data+i), plain, 6)==0))
{
 DataOffset = i+9;
 break;
}
             }
----------------------------------------------------------------------------------------------------------
FLASH中的内容终于正常了。但是一跳转就进HardFault,而且官方的tftpserver方式的IAP貌似也有问题,等调试完了自己写一个算了。>
Kael_Zhou
2楼-- · 2019-07-22 06:22
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-22 10:56
恭喜
firstzys
4楼-- · 2019-07-22 13:01
 精彩回答 2  元偷偷看……
firstzys
5楼-- · 2019-07-22 14:03
 精彩回答 2  元偷偷看……

一周热门 更多>