使用网口嵌入lwip给stm32升级遇到的问题

简单描述一下问题,就是使用lwip的udp传输协议通过电脑PC给stm32设备进行升级,以便后期维护。

可是我发现升级过程中,是存在两个状态的就是应用状态和bootloader状态,当应用程序时上位机发来升级的命令,stm32会自己重启,重启过程中进入bootloader,判断EEPROM的标志位是否确认升级,然后对flash进行解锁,等待网口发来大数据,接着往flash里写便可以了。

遇到的问题是,在应用机上可以PING通,然后发来升级命令后,我也确认了stm32的确重启,也进入了bootloader,实际上里边有一个while死循环,但是这个时候发现ping不同了,我对网络并不是十分了解,那个脑袋大,不断检查代码,就是发现不了问题,但现象很奇怪,约有2-3分钟后,又能ping通了,然后继续下载成功了,可是这肯定哪有问题。


mac地址应用层.jpgmac地址boot层.jpg


后来请大拿查看一二后,他查看了一下两个状态的mac,因为我告诉他ip额网管都是一样的,当然他首先使用arp -d 清除路由表命令发现马上ping通,然后才查看的两个状态的mac才发现竟然不一样,终于知道原因了。

于是,返回代码在两个程序中找到mac地址的设置,lwip的mac设置在ethernet.c里边,修改一致后问题解决。

sitemap