相关推荐:【F769IDISCOVERY评测】LwIP Echo 及数据传输测试 下周ST会有个在线的以太网进阶培训直播,因为时间冲突没法凑热闹跟着学习,所以趁着周末自己先提前准备下。这次培训的实验部分有个以太网更新固件,下面的测试就是简单实现下局域网内以太网更新固件的功能。 1、硬件部分及LwIP移植。 本次测试使用的开发板是STM32F769-DISCO,板载的的以太网PHY是LAN8742A,很多的ST的板子都是使用的这个芯片,移植起来可以参考的例子很多。 从上面可以看到使用接口模式是RMII,这在初始化外设的时候需要注意别选择错误了。测试移植的是LwIP,,如果系统系统中没有使用RTOS,PHY的RX模式要设置为轮询模式,如果是RTOS,可以选择使用中断模式。 注意了上面容易忽略的地方后,LwIP 部分的初始化如下:我们本次开发板作为客户端使用,Netif_Config() 函数会初始化PHY外设,注册接收函数,根据具体的设置设置服务器的IP和端口已经客户端的静态IP,当然也可以使用动态IP模式。
客户端程序中会周期的去连接服务器,一旦连接上了就会请求固件文件。 2 IAP 部分 IAP的功能应该很多的同学的都比较熟悉,该功能用一个bootloader 更新BIN文件,本次演示更新的bin文件是之前的测试的一个“弹幕”的简化版。(【F769IDISCOVERY评测】”弹幕“来了) .IAP功能中需要对FLASH进行擦除写操作,这些使用方法可参考参考手册的操作步骤来或者直接参考帖子中附件的代码。等对FLASH操作完成后还需要一个操作是判断BIN文件的有效的堆栈地址,然后取出复位地址的直接复位设备进入BIN中执行代码。
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文件到开发板: 根据长度判断发送完成: 开发板接收部分,本来是一个完整的视频,为了方便加载我转化为了2个GIF文件: 1)连接服务器接收BIN文件 2) 下面的图片中读取bin文件后要擦除扇区需要一些时间 有的时候网络不好的时候可能连接服务器或者传输文件有些延迟和卡顿,上面的局域网的更新固件的方法可以延伸到远程更新,只要有个云服务器把服务器程序和固件BIN文件放到服务器就可以先远程固件了。因为只是测试验证所以代码和操作流程难免有不合理的地方,实际项目使用要仔细规划测试。 测试代码如下,注意带BIN的源代码工程的中断向量偏移的偏移设置,如果直接使用要设置为相应的值。 |
我简单测试了下,在ping和发送TCP数据的过程中拔掉网线然后再插入可以继续ping通,数据还会继续发送过来。
左侧串口是读取的PHY的状态寄存器 :PHY_LINKED OK 表示LINK UP ; PHY_LINKED KO 表示 LINK DOWN.
中间是开发板作为client发送数据到PC,右侧是ping的开发板。
不知道是不是测试方法不对还是什么情况,没法重现你说的问题。(单击查看大图)
如果转换keil5 工程的话吧keil5的.uvprojx后缀文件修改为keil4的.uvproj 然后运行那个转换小软件,转换完成后再修改回来即可。
主要的那个软件识别不了keil5 工程文件格式,我没有源码也没法修改,只能暂时这样用了。
请问您有遇到这样的情况吗?是否有解决办法?谢谢
没测试过,如果有能检测到拔掉网线的中断,等插上的时候再初始化一次以太网部分,应可以吧。
有时间的话我可以帮队长测试下。
谢谢橙子大神,再初始化一次啊?这个一般是配置以太网参数时才用的,比如改IP,MAC,重插网线不至于吧
队长客气了!
对这方面我应该还没有队长了解的多,无论如何能搞定问题就行。
橙子大神好谦虚,我也搞不定这问题的,后来用其他大神的协议栈了,听他说是栈堆死了