请选择 进入手机版 | 继续访问电脑版
搜索
查看: 709|回复: 24

[STM32F769-DISC] 【F769IDISCOVERY评测】LwIP之以太网固件升级

[复制链接]

54

主题

1700

帖子

13

好友

Rank: 7Rank: 7Rank: 7

版主

注册时间
2010-5-10
发表于 2017-7-16 18:46:13 | 显示全部楼层 |阅读模式


相关推荐【F769IDISCOVERY评测】LwIP Echo 及数据传输测试



    下周ST会有个在线的以太网进阶培训直播,因为时间冲突没法凑热闹跟着学习,所以趁着周末自己先提前准备下。这次培训的实验部分有个以太网更新固件,下面的测试就是简单实现下局域网内以太网更新固件的功能。



1、硬件部分及LwIP移植。


本次测试使用的开发板是STM32F769-DISCO,板载的的以太网PHY是LAN8742A,很多的ST的板子都是使用的这个芯片,移植起来可以参考的例子很多。


TIM截图20170716174356.png


从上面可以看到使用接口模式是RMII,这在初始化外设的时候需要注意别选择错误了。测试移植的是LwIP,,如果系统系统中没有使用RTOS,PHY的RX模式要设置为轮询模式,如果是RTOS,可以选择使用中断模式。


TIM截图20170716175052.png


注意了上面容易忽略的地方后,LwIP 部分的初始化如下:我们本次开发板作为客户端使用,Netif_Config() 函数会初始化PHY外设,注册接收函数,根据具体的设置设置服务器的IP和端口已经客户端的静态IP,当然也可以使用动态IP模式。
  1. <font face="微软雅黑" size="3">lwip_init();
  2.     Netif_Config();
  3.     tcp_echoclient_connect();
  4.     User_notification(&gnetif);</font>
复制代码
然后周期调用查询接收处理即可:
  1. <font face="微软雅黑" size="3"> ethernetif_input(&gnetif);

  2.           sys_check_timeouts();</font>
复制代码


客户端程序中会周期的去连接服务器,一旦连接上了就会请求固件文件。


TIM截图20170716175849.png


2 IAP 部分


  IAP的功能应该很多的同学的都比较熟悉,该功能用一个bootloader 更新BIN文件,本次演示更新的bin文件是之前的测试的一个“弹幕”的简化版。(【F769IDISCOVERY评测】”弹幕“来了) .IAP功能中需要对FLASH进行擦除写操作,这些使用方法可参考参考手册的操作步骤来或者直接参考帖子中附件的代码。等对FLASH操作完成后还需要一个操作是判断BIN文件的有效的堆栈地址,然后取出复位地址的直接复位设备进入BIN中执行代码。
  1. <font face="微软雅黑" size="3">void j2a(void)
  2. {
  3.    /* Check if valid stack address (RAM address) then jump to user application */
  4.   if (((*(__IO uint32_t*)USER_FLASH_FIRST_PAGE_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
  5.   {
  6.     /* Jump to user application */
  7.     JumpAddress = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4);
  8.     Jump_To_Application = (pFunction) JumpAddress;
  9.    
  10.     /* Initialize user application's Stack Pointer */
  11.     __set_MSP(*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS);
  12.     Jump_To_Application();
  13.   }
  14. }</font>
复制代码


3 固件的更新


  本次测试总体的步骤是:
1)开发板STM32F769-DISCO 作为客户端连接局域网的服务器,连接上之后请求发送BIN文件。
2)局域网内的PC运行服务器上位机,在接收到客户端的连接和请求BIN文件后,分包发送BIN文件。
3)服务器发送的数据包使用的协议比较简单:包序号+数据长度+校验+数据部分组成。(为了简化操作没有使用校验部分)。
4)STM32F769-DISCO 接收到分包的数据后使用FATFS创建文件并保存BIN文件到SD卡,等到BIN文件接收完成后便软复位进入IAP模式。
5)IAP中判断BIN文件是否存在,如果存在开始更新BIN,包括上面说到的擦除扇区写扇区,更新完成后进入BIN代码部分运行。
6)IAP如果检测不到需要更新的BIN文件会自动运行之前的BIN代码部分,为了演示方便,IAP并没有进行版本以及BIN文件的校验。




上位机我是用C#写的一个简陋的小软件,因为对C#不太熟悉这部分代码写的差劲,高手如果路过请无视。


上位机发送BIN文件到开发板:


txbin.gif


根据长度判断发送完成:


TIM截图20170716161735.png




开发板接收部分,本来是一个完整的视频,为了方便加载我转化为了2个GIF文件:


1)连接服务器接收BIN文件


IMG_0070.GIF


2) 下面的图片中读取bin文件后要擦除扇区需要一些时间


IMG_0069.GIF




  有的时候网络不好的时候可能连接服务器或者传输文件有些延迟和卡顿,上面的局域网的更新固件的方法可以延伸到远程更新,只要有个云服务器把服务器程序和固件BIN文件放到服务器就可以先远程固件了。因为只是测试验证所以代码和操作流程难免有不合理的地方,实际项目使用要仔细规划测试。


测试代码如下,注意带BIN的源代码工程的中断向量偏移的偏移设置,如果直接使用要设置为相应的值。


IAP.rar (4.02 MB, 下载次数: 58)
回复

使用道具 举报

54

主题

1700

帖子

13

好友

Rank: 7Rank: 7Rank: 7

版主

注册时间
2010-5-10
 楼主| 发表于 2017-7-20 21:20:01 | 显示全部楼层
15616384352 发表于 2017-7-20 19:55
你好大神,在您发的工程代码中有个keil2vs.exe应用程序,作用是把KEIL MDK工程文件结构转移到VS中,我也很 ...

如果转换keil5 工程的话吧keil5的.uvprojx后缀文件修改为keil4的.uvproj 然后运行那个转换小软件,转换完成后再修改回来即可。

主要的那个软件识别不了keil5 工程文件格式,我没有源码也没法修改,只能暂时这样用了。
回复 支持 反对

使用道具 举报

3

主题

91

帖子

3

好友

Rank: 4

高级会员

注册时间
2014-11-12
发表于 2017-7-20 19:55:52 | 显示全部楼层
你好大神,在您发的工程代码中有个keil2vs.exe应用程序,作用是把KEIL MDK工程文件结构转移到VS中,我也很喜欢能使用这个功能。安装这个程序的说明,测试发现,以前用标准库写的代码可以正常转移,但是用STM32CubeMX生成的工程,转接总是失败,出现如下错误提示 QQ截图20170720195142.png
请问您有遇到这样的情况吗?是否有解决办法?谢谢
回复 支持 反对

使用道具 举报

18

主题

824

帖子

0

好友

Rank: 6Rank: 6

金牌会员

注册时间
2016-9-2
发表于 2017-7-17 09:57:07 | 显示全部楼层
creep 发表于 2017-7-17 09:32
没测试过,如果有能检测到拔掉网线的中断,等插上的时候再初始化一次以太网部分,应可以吧。
有时间的话 ...

谢谢橙子大神,再初始化一次啊?这个一般是配置以太网参数时才用的,比如改IP,MAC,重插网线不至于吧
回复 支持 反对

使用道具 举报

44

主题

2150

帖子

3

好友

Rank: 7Rank: 7Rank: 7

版主

注册时间
2015-2-12
发表于 2017-7-16 20:53:55 | 显示全部楼层
赞X3
回复

使用道具 举报

51

主题

631

帖子

6

好友

Rank: 7Rank: 7Rank: 7

实习版主

注册时间
2015-1-23
发表于 2017-7-16 21:56:37 | 显示全部楼层
回复

使用道具 举报

51

主题

631

帖子

6

好友

Rank: 7Rank: 7Rank: 7

实习版主

注册时间
2015-1-23
发表于 2017-7-16 21:56:58 | 显示全部楼层
回复

使用道具 举报

19

主题

204

帖子

2

好友

Rank: 7Rank: 7Rank: 7

版主

注册时间
2014-11-6
发表于 2017-7-16 23:34:05 | 显示全部楼层
屏幕啊屏幕啊
回复 支持 反对

使用道具 举报

1

主题

322

帖子

0

好友

Rank: 4

高级会员

注册时间
2016-9-3
发表于 2017-7-17 05:07:30 | 显示全部楼层
谢谢楼主的分享!!
回复 支持 反对

使用道具 举报

18

主题

824

帖子

0

好友

Rank: 6Rank: 6

金牌会员

注册时间
2016-9-2
发表于 2017-7-17 08:56:44 | 显示全部楼层
大神,请教一下,移植LWIP后,ping时拔掉网线,再插上还没ping的通吗
回复 支持 反对

使用道具 举报

696

主题

2611

帖子

90

好友

Rank: 9Rank: 9Rank: 9

管理员

注册时间
2016-6-1
发表于 2017-7-17 09:09:15 | 显示全部楼层
谢谢橙子大大分享
回复 支持 反对

使用道具 举报

54

主题

1700

帖子

13

好友

Rank: 7Rank: 7Rank: 7

版主

注册时间
2010-5-10
 楼主| 发表于 2017-7-17 09:32:27 | 显示全部楼层
队长shiwo 发表于 2017-7-17 08:56
大神,请教一下,移植LWIP后,ping时拔掉网线,再插上还没ping的通吗

没测试过,如果有能检测到拔掉网线的中断,等插上的时候再初始化一次以太网部分,应可以吧。
有时间的话我可以帮队长测试下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|意法半导体STM32/STM8技术社区    

GMT+8, 2017-9-20 12:01 , Processed in 0.293648 second(s), 16 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表