S03_CH12_基于UDP的QSPI Flash bin文件网络烧写

12.1概述

为了满足不同的需求,本例程在“基于TCP的QSPI Flash bin文件网络烧写”上进行修改,将bin文件的传输协议替换为UDP。与采用TCP协议的例程相比,本例程无需使用ZYNQ内部的定时器,无定时器中断,LWIP中UDP部分的API函数结果也更为简洁,易于使用,简化了ARM中的C程序设计,但使用UDP协议后文件传输的可靠性无法保证,因此需要更具实际应用进行权衡。

本例程基于Vivado 2015.4版本开发。

12.2基本原理

与“基于TCP的QSPI Flash bin文件网络烧写”例程相同,并将TCP协议替换为UDP协议。

12.2.1 Bin文件

见“基于TCP的QSPI Flash bin文件网络烧写”例程。

12.2.2 QSPI Flash

见“基于TCP的QSPI Flash bin文件网络烧写”例程。

12.3驱动程序

所有的驱动程序文件均包含在c_driver文件夹中的udp文件夹。

12.3.1 main函数

main函数的完成的功能如下:

l 关闭Data Cache,避免bin文件在DDR拷贝过程中维护Cache一致性造成的麻烦

l 配置QSPI接口及QSPI Flash

l 初始化中断控制器及系统中断

l 初始化LWIP协议栈

l 建立UDP连接

l 持续从LWIP协议栈接收数据

12.3.2建立UDP连接

基于LWIP库在ARM中建立一个UDP连接,ZYNQ的IP地址为192.168.1.10,端口号为5010,远程IP地址为192.168.1.100,端口号为8080。

12.3.3 lwip库设置

本例程使用RAW API,即函数调用不依赖操作系统。传输效率也比SOCKET API高,(具体可参考xapp1026)。将use_axieth_on_zynq和use_emaclite_on_zynq设为0。如下图所示。

修改lwip_memory_options设置,将mem_size,memp_n_pbuf这2个参数值设大,这样会提高UDP传输效率。如下图所示。

修改pbuf_options设置,将pbuf_pool_size设大,增加可用的pbuf数量,这样同样会提高UDP传输效率。如下图所示。

由于无需使用TCP协议,修改tcp_options设置,将lwip_tcp设置为false,tcp_queue_ooseq设为0,关闭tcp功能,如下图所示。

修改temac_adapter_options设置,将n_rx_descriptors和n_tx_descriptors参数设大。这样可以提高zynq内部emac dma的数据搬移效率,同样能提高UDP传输效率。如下图所示。

其余选项的参数默认即可,不用修改。

12.3.4 程序解析

UDP连接建立由udp_transmission.c文件中的udp_recv_init函数完成。

udp_recv_init函数:

调用udp_new函数建立1个建立UDP连接所需的结构体。

调用udp_bind函数绑定本地IP地址和UDP端口号。

调用udp_connect函建立UDP连接,并绑定远程IP地址和UDP端口号。

调用udp_recv函数指定用于接收UDP数据包的回调函数为udp_recv_callback。

12.3.5接收保存BOOT.bin文件

接收BOOT.bin文件通过udp_transmission.c中的udp_recv_callback函数完成,该函数为UDP接收数据包的回调函数,每当接收到UDP的数据包时该函数都会被调用。

保存位置与“基于TCP的QSPI Flash bin文件网络烧写”例程相同。

12.3.6烧写QSPI Flash

见“基于TCP的QSPI Flash bin文件网络烧写”例程。

12.3.7 UDP调试信息输出

例程中设计了一个udp_printf函数,用于向网络调试助手输出字符串调试信息。该函数暂时只支持字符串以“\n”结尾。

该函数实现思路与“基于TCP的QSPI Flash bin文件网络烧写”例程中tcp_printf函数基本相同。不同的是,任何时刻通过udp_printf发送的数据都会及时通过网络发出,并被网络调试助手接收,而不像tcp_printf函数的发送会在flash烧写过程中被阻塞。

这是由于UDP为不可靠传输,不像TCP在传输过程中需进行持续握手。因此,UDP接收和发送过程相互独立,具体在LWIP协议栈中反应为udp_send函数不依赖xemacif_input函数。

12.4网络调试助手操作方法

12.4.1发送bin文件

在SDK中下载程序至ZYNQ中。打开网络调试助手,选择UDP方式,输入电脑的IP地址和UDP端口号,然后点击打开按键,在远程主机中填入ZYNQ的IP地址和UDP端口号。在网络调试助手发送区设置里选择“启用文件数据源”,选择需要发送的BOOT.bin文件,然后点击发送。如下图所示。


12.4.2发送启动Flash烧写命令

然后输入烧写启动命令“start update”,不要选择“按十六进制发送”,本例程中需要以ASCII码形式发送,含空格一共12个字符(不要在末尾加回车),千万不要输错,否则需要全部重新再来一遍。如下图所示。

启动烧写后,SDK串口终端打印信息如下图所示。当提示“verify done!”表示整个烧写过程成功完成。

网络调试助手接收udp_printf函数实时输出的信息如下图所示。


12.5 Bin文件更新验证

见“基于TCP的QSPI Flash bin文件网络烧写”例程。

12.6待改进之处

l UDP为不可靠传输,为了提高使用UDP协议传输bin文件的可靠性,可在其之上设计额外的传输协议,并加上类似传输握手的功能。

其余见“基于TCP的QSPI Flash bin文件网络烧写”例程。

S03_CH12_基于UDP的QSPI Flash bin文件网络烧写的更多相关文章

  1. S03_CH11_基于TCP的QSPI Flash bin文件网络烧写

    S03_CH11_基于TCP的QSPI Flash bin文件网络烧写 11.1概述 针对ZYNQ中使用QSPI BOOT的应用,将BOOT.bin文件烧写至QSPI Flash基本都是通过USB C ...

  2. BIN文件合并烧写

    可以实现将Bootloader和Application合并烧写 使用UBIN.exe工具或者J-Flash工具 UBIN工具 选择Bootloader源文件 添加Bootloader源文件 选择App ...

  3. xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证

    xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...

  4. HEX和BIN文件的区别

    以下的内容是从网上转载来的,原文地址:http://blog.csdn.net/zhangliang_571/article/details/8519469  在这里感谢原作者. 1,是在keil中编 ...

  5. 【接口时序】5、QSPI Flash的原理与QSPI时序的Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 4.Matlab版本:Matlab2014b/ ...

  6. IAR MSP430如何生成烧写文件

    IAR生成430烧写方法有2种, 第一种是:将工程的debug模式切换成release模式,看图片操作.    那个.d43文件就是仿真调试模式的文件. 这里的test.txt文件就是烧写文件了,不要 ...

  7. nand烧写分析/内核在启动过程中式如何将这个文件映射成/目录及各子目录的?

    我用的是ramdisk.image.gz,烧写在flash的0x10140000处 我不太明白内核在启动过程中式如何将这个文件映射成/目录及各子目录的? 如果ramdisk.image.gz在flas ...

  8. AVR单片机教程——烧写hex文件

    每一次build项目,编译器都会生成多个文件,其中有一个就是hex文件.之前在IDE中配置的external tools,就是把这个hex文件烧写到单片机中去的. 然而,有些时候你想运行别人的程序,但 ...

  9. 芯灵思SInA33开发板怎样烧写镜像文件

    上一节已经制作好了linux镜像文件,现在将它烧入开发板中需要的工具有 * SINLINX-A33_qt-4.8.7_lcd1024x600_v3.1 #镜像文件 * PhoenixSuit #烧写工 ...

随机推荐

  1. [APIO2015]八邻旁之桥——非旋转treap

    题目链接: [APIO2015]八邻旁之桥 对于$k=1$的情况: 对于起点和终点在同侧的直接计入答案:对于不在同侧的,可以发现答案就是所有点坐标与桥坐标的差之和+起点与终点不在同一侧的人数. 将所有 ...

  2. class的三元表达式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Go by Example-流控制语句之if/else

    Go by Example-流控制语句之if/else Go中的if/else的用法和其他语言没什么区别,在格式要求上保留了类似Python中的一些特性. 基本概念 在条件判断语法 if/else 中 ...

  4. C#依赖注入实例

    http://qing.weibo.com/tj/400082fa33001h7x.html 1.5 实现依赖注入1.5.1 背景介绍 设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系, ...

  5. 013-多线程-基础-Fork/Join框架、parallelStream讲解

    一.概述 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 它同ThreadPoolExecut ...

  6. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_02-Eureka注册中心-搭建Eureka单机环境

    我们先搭建单机环境 govern是治理的意思, 这样就把工程创建好了 创建包 创建SpringBoot的启动类. 在父工程里面已经确定了Spring Cloud的版本了.相当于锁定了版本 接下里只需要 ...

  7. Tips for vcpkg

    概述 vcpkg是微软开发的在Windows, Linux和MacOS平台管理C/C++库的开源工具. 快速开始 要求 使用vcpkg需满足如下条件: Windows 10, 8.1, 7, Linu ...

  8. linux 安装网易云音乐

    1.首先去官网下载最新的网易云 网易云音乐曾经推出官方Linux版本,提供的下载安装包有:deepin15(32位):http://s1.music.126.net/download/pc/net . ...

  9. centos7.5安装图形界面

    1.centos7.4安装图形界面 yum check-update && yum install epel-release && yum groupinstall & ...

  10. 一种可以避免数据迁移的分库分表scale-out扩容模式

    转自: http://jm.taobao.org/ 一种可以避免数据迁移的分库分表scale-out扩容方式 目前绝大多数应用采取的两种分库分表规则 mod方式 dayofweek系列日期方式(所有星 ...