当前位置:   article > 正文

【智多晶FPGA-041】基于串口的在线升级方案_串口远程更新fpga程序的流程

串口远程更新fpga程序的流程

案例说明
SPI FLAS分成两大区域:一部分叫做bootloader区,一部分叫做app用户代码区。通过bootloader区存放的引导程序,对用户代码区的程序进行更新。
操作步骤说明
1.设置串口调试助手
打开串口调试助手,将波特率设置为500000,将发送文件延时设置为连续发送,选择HEX发送,在第一字节的末尾加上校验ModbusCRC16。

2.下载工程文件
打开HQ软件,找到对应的bin文件进行下载。

将程序下载之后,串口调试助手中出现“倒计时4!!!”、“ 倒计时3!!!”“倒计时2!!!”、“倒计时1!!!”,前面这4S的倒计时是预留给用户升级程序的。如果用户需要更新程序,就需要通过发送对应的指令对FLASH进行操作,此时程序将会进入更新的状态。如果不需要进行升级的话,这4S过后,串口会显示“正在进入用户程序!!!”,此时将会进入用户需要执行的功能程序,不能再对FLASH进行操作。当功能代码区没有内容时,程序将会一直执行升级部分的代码。下载用户功能代码的步骤如下3~5所示(需要在程序运行升级代码的前4S之内进行)。

3.通过串口调试助手发送读ID命令
在对Flash进行操作之前,首先必须读取ID,ID读取成功之后,才能进行一系列操作,第一次进行文件烧写的时候,建议执行此步骤,后续进行文件更新的时候可忽略此步骤。对于Flash操作定义的命令列表如下。

 

命令内容

  

命令意义

01 06 00 01 00 01 +CRC校验(通过软件自动添加)

读Flash ID

01 06 00 01 00 02 +CRC校验(通过软件自动添加)

扇区擦除

01 06 00 01 00 03 +CRC校验(通过软件自动添加)

块擦除

01 06 00 01 00 04 +CRC校验(通过软件自动添加)

整片擦除

01 06 00 01 00 05 +CRC校验(通过软件自动添加)

向Flash中写入数据

01 06 00 01 00 06 +CRC校验(通过软件自动添加)

直接跳转至用户程序

ID读取成功之后,串口会显示对应的ID信息,本次实验操作的Flash的型号为W25Q64,其ID读取成功之后,串口会显示“FlashIDis 0x684017,  Manufacturer Device ID is0x16”。

3.发送擦除指令
在向Flash中写入数据之前,必须先对其擦除,可以发送擦除扇区指令或者擦除块指令,请勿选择整片擦除,整片擦除之后将会擦除bootloader区的引导升级的代码部分,后续进行升级将需要重新下载程序。下面我们以块擦除为例:
1) 发送擦除指令01 06 00 01 00 03

2)输入app用户代码区的起始地址(需要注意的是,这里需要预留升级代码的区域,app用户代码区的起始地址都是从0x110000开始)

3)输入需要擦除的块区的个数,根据不同的Flash芯片进行设置,以W25Q64为例,一个扇区的大小为4K(4096个字节),一个块的大小为64K(65536个字节),一共有128个块,每块16个扇区,如果你需要烧写的文件大小为1059076个字节,选择使用扇区擦除的话,需要擦除的个数为259个,选择用块擦除的话,需要擦除17个块。在进行发送的时候要转换成16进制的数进行发送(需要注意的是定义的输入的数据是24位,如果需要擦除的块区的个数是17的话,需要输入的值为00 00 11)。

4)等待擦除完成,块擦除完成之后,会出现“BlockErase OK”,此时就可以进行接下来的操作。
5.发送写数据命令
擦除完成之后,发送写数据命令,打开文件,选择需要下载的bin文件。

文件发送完成之后,串口助手会显示下载完成,如下图所示,这样就完成将文件下载至Flash的操作。

6.查看结果
文件下载成功之后,程序将会跳转至用户程序执行相关的功能,以我们提供的示例“uart_rtc8563_hex8.bin”为例,文件发送完成之后,串口和数码管会显示相应的时间。

7.给用户代码区添加跳转模块
通过上述步骤完成了从bootloader区的引导程序到app用户代码区的跳转,但是并没有完成从app用户代码区跳回至bootloader区的过程。如果需要更新app用户代码区的内容只能通过重新给开发板上电,在程序运行的前4S发送对应指令进行更新。用户其实可以给自己的app用户代码区加上跳转指令,使其在某种特定的条件下跳回至bootloader区,比如我们提供的bin文件中,是通过开发板上的S1按键来控制地址的跳转,当S1按下之后,程序将重新从bootloader区的代码开始运行。给用户代码区添加跳转指令的方式如下:
1)复制跳转指令文件夹至工程中
找到我们提供的跳转指令代码文件夹“Flash_AddChance”复制至需要执行的工程中。
2)打开HQ软件,添加跳转指令模块

3)例化模块至工程顶层
在工程顶层添加例化代码,如下所示:
 

   Flash_addChance Flash_addChance(
    .clk_in(clk25m),  //系统时钟
    .rstn(reset_n),  //系统复位
    .key_in_1(key_in1)  //跳转条件
  );


上述代码的跳转指令对应的是AC208开发板上的按键S1,用户在使用的时候可以通过一个GPIO口来进行控制,使其在特定的情况下输出高电平便可以实现跳转。

工程文件已置顶绑定

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/990519
推荐阅读
相关标签
  

闽ICP备14008679号