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

本文介绍了一种使用WIZnet W7100硬件TCPIP芯片,通过网口烧写STM32系列单片机程序的方法,包括工作流程、上传程序的通信协议以及演示步骤。实现平台包括iMCUW7100EVB硬件、KeilC编译平台和Uploader工具。

 

大家对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”做测试。

 

 

### 嵌入式 Linux 设备通过网口程序的方法 #### 使用 TFTP 进行网络 TFTP 是一种轻量级的文件传输协议,常用于嵌入式系统的固件更新。以下是其工作原理和配置方法: 1. **服务器端设置** 在 Ubuntu 上安装并启动 TFTP 服务: ```bash sudo apt-get update sudo apt-get install tftpd-hpa ``` 配置 TFTP 文件夹路径以及权限: ```bash sudo systemctl stop tftpd-hpa sudo nano /etc/default/tftpd-hpa ``` 修改 `TFTP_DIRECTORY` 和其他参数后重启服务: ```bash sudo systemctl start tftpd-hpa ``` 2. **客户端操作** 将目标二进制文件放置于 TFTP 的共享目录中(默认为 `/var/lib/tftpboot/`)。随后,在开发板上运行以下命令下载文件: ```bash tftp> get <filename> ``` 完成后可将其加载至内存或存储器。 3. **注意事项** - 开发板需支持 TFTP 协议,并已正确配置 IP 地址[^2]。 - 确保防火墙未阻止 TFTP 流量,默认端口号为 69。 --- #### 使用 SSH 进行网络 SSH 提供了一种更安全的方式来进行远程文件传输和命令执行。具体流程如下: 1. **启用 SSH 服务** 如果尚未安装 OpenSSH Server,则需要在主机上安装它: ```bash sudo apt-get install openssh-server ``` 2. **上传文件到目标设备** 利用 SCP 工具将编译好的镜像或其他文件传送到嵌入式设备: ```bash scp <source_file_path> user@<target_ip_address>:<destination_directory> ``` 替换 `<source_file_path>` 为目标文件路径,`user` 为用户名,`<target_ip_address>` 为目标设备地址。 3. **执行录脚本** 登录到目标设备并通过 SSH 执行必要的录指令。例如,假设要向 SD 卡录 `.bin` 文件,可以参照以下命令: ```bash ./imxdownload <path_to_bin_file> <sd_card_device> ``` 此处需要注意的是,SD 卡设备名称可能因系统不同而有所差异,如 `/dev/sdb` 或 `/dev/mmcblk0`[^3]。 4. **验证连接状态** 在实际录前应确认两台机器间能够正常通信,可通过简单的 ping 测试完成初步检测: ```bash ping <target_ip_address> ``` 若返回类似 “host 192.168.x.x is alive”,则表明网络连通性良好[^4]。 --- #### 对比分析 | 特性 | TFTP | SSH | |-----------------|-------------------------------------|--------------------------------------| | 数据安全性 | 明文传输 | 加密通道 | | 实现复杂度 | 较低 | 中等 | | 应用场景 | 快速原型设计 | 生产环境中的稳定部署 | 尽管两者各有优劣,但在现代开发实践中推荐优先考虑基于 SSH 的方案以保障数据完整性与隐私保护。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值