2024年1月11日发(作者:二手10年世嘉值得购买吗)
使用STM32F2x7系列单片机的以太网接口实施IAP介绍此应用笔记上的目的在于方便使用STM32F2x7系列微控制器的工程师。它提供了用STM32F2x7微控制器的网络通信接口来实现在应用编程(IAP)的方案。在LwipTCP/IP协议栈项层有两种协议可以用于实现IAP功能:1.使用TFTP(简单文件传输协议)完成IAP功能。2.使用HTTP(超文本传输协议)完成IAP功能。1IAP概览1.1工作原理IAP是一种利用MCU的如串口、USB、CAN、以太网等的通信接口来更新单片机内部指定地址范围空间内容(固件程序)的方法。在引导MCU执行工作时,可以通过某些设置将单片机置于IAP模式以便执行IAP部分的代码或者置为普通模式以便开始执行应用代码。无论是IAP模式的代码还是普通模式的代码都存放在MCU内嵌的Flash存储空间。IAP部分的代码通常情况下是放在Flash的从第一页开始的连续区域内,剩余的空间用于存放应用程序的代码。图1IAP操作流程1.2使用MCU的以太网接口实现IAP功能在一个嵌入式应用中,当以太网通信功能可用时,一般情况下以太网接口是用以实现IAP功能的最佳选择,因为该接口具有以下优势:
A.它是一个高速的通信接口(10/100Mbit/s)B.通过网络可以远程更新固件C.在Lwip协议栈的顶层有标准化的协议(如FTP、TFTP、HTTP等)用于实施IAP1.3在STM32F2x7上通过以太网实现IAP功能该应用笔记描述了2种使用STM32F2x7网络通信外设实现IAP的解决办法:A.使用TFTP(简单文件传输协议)B.使用HTTP(超文本传输协议)1.3.1通过TFTP完成IAP在需要固件更新通力的嵌入式应用中,通过TFTP来实现IAR的方法被广泛使用(比如:嵌入式LinuxBootloaders)。TFTP是简单文件传输协议。它工作在UDP传输协议的传输层的上层。使用TFTP协议实现IAP功能一般在局域网(LAN)环境下使用。它基于client/server结构,即需要一个客户端向文件服务器请求一个文件传输(读或者写操作)。因此在这种情况下服务器只处理从一个PCTFTP客户端发来的写请求,所以一个简单的TFTP服务器是在Lwip协议栈项层实现的。1.3.2通过HTTP协议完成IAP相对于使用TFTP来完成固件更新,使用HTTP的就要少一些,但是在需要通过Internet进行远程固件更新时,它是很有用的。在这种情况下,TCP传输协议可以确保完成最佳的操作。HTTP工作在TCP的项层。它提供了一种使用HTML格式网页从网络客户端发送二进制文件的方法(使用火狐或IE浏览器测试过)。称为HTTP文件上传(RFC1867)。以下的部分会提供两种方法的详细使用说明,并讲述好何使用相关软件。2使用TFTP完成IAP功能2.1TFTP概览TFTP是一个工作在UDP顶层的简单文件传输协议。一个TFTP客户端向TFTP服务器发起一个写或者读的文件传输请求,当服务器响应该请求时,文件传输开始。数据以一个固定的尺寸大小块进行传输(比如每个块大小为512KB)。在下一个数据块传输前,接收方必须对刚刚接收到的数据块进行回应。回应机制是基于每个数据块的编号。如果接收到的数据块尺寸大小小于指定的数据块大小,则将会指示传输结束。下图描述了各种TFTP包的格式:
下表是TFTP的操作码:2.2STM32F2x7使用TFTP实现IAP功能该IAP功能的实现实质上是一个工作在LwipTCP/IP协议栈顶层的TFTP服务器。这个服务器响应从PCTFTP客户端发送的文件写请求,忽略TFTP读请求。与普通TFTP的文件写操作不同的是,接收到的文件不会写入文件系统,而是写入MCUFlash(即存放在用户的应用代码区)。注意:这种实施方案中,数据块的尺寸是512KByte。使用TFTP实现IAP功能的流程图
2.3软件的使用为了测试使用TFTP完成的IAP,请看以下操作步骤:1.根据表2说明,确保跳线连接正确。2.在main.h中,去掉\"USE_IAP_TFTP\"宏定义的注释。同时根据你的需要,你可以选择去掉或者保留宏定义\"USE_DHCP\"以及\"USE_LCD\"的注释。3.重新编译软件。使用生成的map文件,确保在IAP代码(从地址0x00开始)与应用代码(从USER_FLASH_FIRST_PAGE_ADDRESS开始,该宏定义在main.h中)之间,空间上没有重复区域。4.将生成的代码烧写到STM32Flash中并且运行。5.要进入IAP模式,保持KeyButton按下的情况下复位单片机。6.如果main.h文件中\"USE_LCD\"宏定义的注释去掉的话,则液晶屏幕上会显示已进入IAP模式的信息。当然,如果\"USE_DHCP\"宏定义的注释去掉的话,屏幕上还会指示DHCP分配IP地址成功或失败。7.一旦IP地址分配成功,用户就可以进行IAP操作了。8.在PC端打开TFTP客户端(以TFTPD32为例),配置TFTP服务器地址(TFTPD32中的主机地址)。9.找到二进制映像并加载到STM32Flash(例子工程中提供了两个二进制文件,路径为:/project/binary)10.点击TFTPD32界面中的\"Put\"按钮,开始一个文件写请求。11.如查\"USE_LCD\"使能,则IAP的进程会在LCD上进行显示。操作结束后你可以复位单片机,并运行刚刚写入的应用程序。注意:如果\"USE_LCD\"使能,则当连接上有问题时,LCD上会显示一条连接失败的信息。图4TFTPD32对话框3使用HTTP协议完成IAP功能3.1HTTP上传概览使用HTTP进行文件上传的具体定义在RFC1867。这种文件上传的方法基于HTML格
式。为了发送原始的二进制数据,这里使用HTMLPOST方法而不是HTMLGET方法。下面是一个HTML代码的例子,它可以实现基于表单的文件上传:图5文件上传的浏览器界面:打到并选择一个二进制文件并上传,然后按下\"Upload\"按钮进行发送。根据文件尺寸大小,文件将被分成连续的TCP段发送到服务器端。注意:在发送文件数据前,网络客户端会发送一些包含如文件名称,内容长度等服务器解析需要的信息的HTTP头数据。网络服务器的HTTP头格式并不是任何情况下都相同的。图6描述了IE浏览器HTTPPOST请求的头格式。图7描述了火狐浏览器的HTTP头格式。HTTP服务器必须能够处理这两种不同的格式。图6IE8HTTPheaderformat
图7火狐浏览器HTTPheaderformat3.2STM32F2x7使用HTTP协议完成IAP功能该IAP方法实质上是一个工作在Lwip协议栈顶层的HTTP网络服务器。当在浏览器地址栏中输入STM32设备的IP地址后,会进入一个如图8所示的登陆页面。这个页面可以对上传固件的用户进行约束。图8登陆页页输入下确的用户ID及密码(在main.h中有定义)然后点击\"Login按钮\"就会进入下一个文件上传页面。注意:1默认用户ID是\"user\",密码是\"stm32\"2如果用户名或密码不正确,登陆页面会重新加载。成功登陆后,选择一个二进制文件写入STM32的用户Flash代码区。注意:要确保二进制文件的尺寸大小不会超过用户代码区的容量限制。当点击\"Upload\"按钮(如图5所示),一个POST请求将会发送到服务器。此时服务器开始擦除整个用户代码区的Flash空间,然后等待二进制文件的原始数据。最终将接收到的数据写入用户Flash区域。IAP操作的最后,网络页面会指示操作成功,并且提示按下\"ResetMCU\"按钮复位单片机。
图9文件上传成功网页图10使用HTTP完成IAP功能的流程图
3.3软件的使用为了测试HTTP完成的IAP功能,请跟从以下步骤:1.根据表2确保评估板上跳线连接的正确性。2.在main.h文件中,去掉\"USE_IAP_HTTP\"宏定义的注释,并根据你的需要保留或者去掉\"USE_LCD\"以及\"USE_DHCP\"的注释。3.重新编译软件,使用生成的map文件确保在IAP代码和用户代码间没有重叠区域(具体说明见前面TFTP部分)。4.将程序烧写到STM32当中并运行。5.按住用户按键并复位单片机,进入IAP模式。6.如果main.h中\"USE_LCD\"宏定义的注释去掉,则LCD会显示进入IAP模式的相关信息。当然如果\"USE_DHCP\"宏定义的注释去掉,则LCD还会显示IP地址分配成功或失败的信息。地址分配成功后,用户就可以进入IAP模式进行IAP操作。8.用火狐或IE浏览器打开一个网络客户端,并在地址栏输入STM32的IP地址。9.在新进入的登陆页面中输入用户ID及密码,默认的用户ID是\"user\",默认的密码是\"stm32\",然后点击\"Login\"按钮。10.进入文件上传页面。选择要烧写到STM32中去的二进制映像文件,点击\"Upload\"按钮开始IAP进程。11.如果\"USE_LCD\"注释被去掉,则IAP操作的进程会显示在LCD上面。12.在IAP操作结束后,会进入一个新的网络页面,提示固件更新成功。13.点击\"RESETMCU\"按钮复位单片机,刚刚烧写的应用程序就运行了。注意:1.如果网络连接有问题,然后液晶使能的情况下,LCD会显示连接失败。2.该软件在火狐和IE8浏览器下测试成功。3.4已知的限制3.4.1添加到二进制文件中的额外字节一个随机的边界标志(根据RFC1521该标志不会超过72字节)会被浏览器(火狐或IE8浏览器)添加到将要上传的二进制文件中。在当前版本的IAP软件中,如果有足够的空间,这些标志是不会被移除的。如果没有足够的空间,则这些额外的字节不会被写入Flash,但也不会返回错误。4环境4.1MAC和IP地址的设置MAC地址和IP地址在main.h文件中定义。默认的MAC地址是:00:00:00:00:00:02IP地址则可以被设置成动态或者静态,如果是动态的话则由DHCP服务器分配。默认的静态的IP地址是:192.168.0.10要使能动态IP地址功能,只需要在main.h文件中去掉\"USE_DHCP\"宏定义的注释。需要注意的是:如果你使能了动态IP地址的功能,而应用在已有的连接中找不到一个DHCP服务器的话,IP地址就会被自动地设置成静态IP,即默认的192.168.0.104.2STM32评估板上的跳线设置要运行IAP测试软件,必须按照表格2所示的参数配置评估板。并且在main.h中配置
MII或者RMII接口,例如要使用RMII模式://#defineMII_MODE#defineRMII_MODE对于MII模式,PHY的时钟可以是外部时钟也可以是STM32芯片的MCO引脚输出的时钟(如果main.h中MII_MODE和PHY_CLOCK_MCO宏定义的注释都去掉的话)。注意:1.在RMII模式下,因为MCO引脚无法输出50MHz来驱动,因此得使用外部晶振(或频率源)。2.通篇所提到的\"STM322xG-EVALboard\"参考STM3220G-EVAL以及STM3221G-VEAL板子。表2跳线配置4.3软件文件组织(见英文文档,此处略去)4.4软件尺寸测量参考(见英文文档,此处略去)4.5构建IAP映象为了创建一个用于IAP的映象(用IAP软件加载到单片机内的映象文件),必须确保以下几点:1.应用软件必须编译链接从用户Flash区域开始地址(这个地址应该与main.h中USER_FLASH_FIRST_PAGE_ADDRESS定义的地址相同)开始运行。2.中断向量表起始地址必须配置成与用户Flash区域起始地址一样,具体操作可以参考以下两种方法:a)在应用代码内,重新定位中断向量表,可以使用misc.h/.c驱动库中的\"NVIC_SetVectorTable\"函数来完成,例如将中断向量表定位在地址0x8010000:NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x10000);b)通过修改system_stm32f2xx.c文件中的宏定义\"VECT_TAB_OFFSET\"来完成,a)中的功能可以通过以下语句得到:#defineVECT_TAB_OFFSET0x10000n3.要生成能够使用的固件,需要对Keil进行配置,并使用Keil中自带的工具生成bibin文件,否则应用不会成功,具体配置的方法见文档后附录(与官方英文文档不同点)。4.编译后,软件代码的尺寸大小不能超过用户代码区的总容量。附录1利用Keil中自带的软件工具生成bin格式文件使用过Keil的同鞋都知道,现在Keil中默认可以输出.axf的调试文件和可以通过钩选输出的.hex可执行文件,没有bin(二进制)文件的输出选项。可是偏偏某些时候需要或者习惯性的使用.bin文件来进行烧写,下面各举一例:
1.一直使用ADS的用户习惯性的使用.bin文件;2.某些烧写器带的应用软件只支持.bin文件;3.正如笔者遇到的情况,我在使用STM32公司提供的网络更新固件程序的例程时,需要用到.bin文件(.hex文件通过网络更新后遇到某些问题,而且用Hex2Bin软件转换后的也不行)。其实Keil也自带了工具软件,只要进行适当配置便可以输出bin文件了,不过在介绍具体方法前,请仔细阅读下面这一段关于Keil中自带的工具说明:该工具的语法为:fromelf[options]input_file其中options中的选项及说明如下:命令选项格式命令--help--vsn--outputfile--nodebug--nolinkview显示帮助信息显示版本信息输出文件(默认输出为文本文件)在生成的映像文件中不包含调试信息在生成的映像文件中不包含段的信息二进制输出格式选项--bin--m32--i32--vhx--baseaddr--text说明输出plainbinary格式的文件生成Motorola32位十六进制格式的文件生成Intel32位的十六进制格式的文件面向字节的位十六进制格式的文件设置m32,i32格式文件的基地址显示文本信息,文本信息标志如下:-v打印详细信息-a打印数据地址(针对带调试信息的映像)-d打印数据段的内容-e打印表达式表-f打印消除虚函数的信息-g打印调试表-r打印重定位信息-s打印字符表-t打印字符串表-y打印动态段的内容-z打印代码和数据大小信息说明讲完了工具的语法,下面就讲如何在Keil中运用该自带的工具,以使在工程编译后能生成.bin格式的文件:1.打开一个建好的工程文件,就不举例说明了。
2.打开OptionsforTarget‘工程名称’对话框,可直接点图标,如下图:
3.选择User标签页,并进行如下图一样的配置:4.根据User页的配置还要配置Output页面,具体如下:
5.点击OK确定,然后再重新编译则会按照上图中的配置路径生成.bin格式的文件了:附录2在Keil软件中配程序下载到单片机后的偏移量参考附录1进入下面图中的界面根据图上所标注进行适当的修改即可。图中标注的偏移量是整个用户代码程序相对于Flash起始地址的偏移量,而中断向量表在正文部分已经作过说明,是不在这里进行修改的:个人工作笔记分享,比较粗糙,还请指正!
更多推荐
文件,使用,用户
发布评论