网口也可以烧写程序?W7100!

Home / 博客 / 网口也可以烧写程序?W7100!

大家对STM32系列单片机可通过串口(Ymodem)烧写应用程序这事儿肯定不陌生。其官网的AN2557例程已经把它描述得很详细很详细了。串口烧程序这事儿不赖,挺方便,咱再也不用专门的烧写器以及烧写软件去上传程序了,不过缺陷就是距离。模块在北京,人在上海,这咋控制?这时候如果能通过网口烧写程序,那就太爽啦。今天,咱就用WIZnet的W7100试上一把。反正,w7100是硬件的TCPIP芯片,用不着咱在协议栈上想太多,咔咔,调用驱动里的API函数就妥了,方便至极!

—实现平台与工具

硬件平台

编译平台

软件平台

iMCUW7100 EVB

KeilC (Ver3)

Uploader (vb.net)

—例程介绍

对于一个内嵌有FLASH的系统来说,其最最重要的一个功能就是得让用户轻松地更新应用程序。这功能的官话是in-application programming(IAP).大家可以注意到,我一直在强调更新的是“应用程序”而不是“程序”,之所以这样说,是想让大家建立一个Boot+App的概念。您更新程序的时候,是谁在帮您接受外部传送来的代码啊,又是谁在帮您擦除FLASH啊,又是谁在帮您写FLASH啊,这都是Boot帮您干的。本例程就是帮您实现了一个基于网口烧写程序的Boot+App。我习惯把这样的Boot叫做Network_Boot.

1> 工作流程

请看下图。详细过程请参考文章结尾附加的代码。

  

①  -> Uploader把要更新的程序上传至W7100的接收缓存(Rx buffer)

②  -> 利用W7100驱动中的API函数,将缓存中的程序拷贝至W7100的sRAM。

③  -> 最后再利用W7100的FLASH写函数,将sRAM中的程序移至到code FLASH中,从而完成更新。

相关API函数:

Name

Position (in w7100 driver)

Function

—-

H/W TCPIP core

     ①

recv()

socket.c

ISP_sector_prog()

isp.h

提示: 过程① 和 ② 是由App代码完成的,过程③ 是由Network_Boot完成的.

2> 上传程序时,上传助手与W7100之间的简单通信协议

  

1)Searching module request:

Search request command format (“WIZNETFIND”)

2) Response for searching:

 Search response format

提示: Header 的内容和前面的searching request command是一摸一样的。

3)  FW upgrading request:

 

FW upgrading request command format (“WIZNETFWUP”+fw_size)

提示fw_size = fwsize_h*256 + fwsize_l

4)  Response for upgrading 

 

FW upgrading response format (“WIZNETFWUPSYNACK”)

5) FW upgrading:

上传助手每次上传1K字节的代码至W7100,当剩余代码量小于1K时,上传助手上传其实际长度。

6) ACK for upgrading:

每当W7100接收到代码后,它都向上传助手回馈其接收到的总代码量。当sRAM中的代码量与上传助手在FW upgrading request时传递的fw_size参数一致时,更新结束。

3> 演示:

拓扑结构:

上电:

通过上传助手查找W7100:

更新程序:

 

提示: WIZ_BJ_0001.bin是要更新的程序。上传助手上传的就是它!

 

提示:WIZ_BJ_0001.bin + WIZ_BJ_BOOT.bin = WIZ_BJ_0001p.bin

这个带“p”的bin文件是network_boot+app的文件,两者合二为一了。当您要往w7100烧写network_boot的时候就用着这个合二为一的文件了。当然,烧写的时候得用WIZISP。因为这时候W7100里还没有咱的network_boot.

应用测试:

用户打开这个名为SOCKTEST.exe的测试软件。把软件作为TCP Client去连接W7100(Server)。连接成功后发送数据,W7100接收到后会把接收到的数据再回传给这个SOCKET.exe 下图中,我随便输入了“1234”做测试。