Intel FPGA 基于NIOS的串口远程升级(上)

【时间:2024 年 06 月 20 日, 来源:Cytech Engineer, 作者:Ted Gao】

本文介绍一种基于串口远程升级Intel FPGA的方法,在Intel FPGA运行NIOS,上位机通过串口连接NIOS对FLASH进行操作,上传用户的新FPGA设计,通过擦除重写FLASH,来达到更新Intel FPGA程序的目的。

此应用主要面向有二次升级需求的用户。例如产品出厂之后,客户需要进行刷机更新,就可以采用这个方案,将最新的程序放在官网给客户下载之后,通过串口自行升级。再例如整机装配之后,不方便留调试AS/JTAG口,就可以留串口,利用本文提供的方法进行整机调试过程中的程序更新升级。本文篇幅较长,全文目录如下:

一、实验要求以及方案信息

实现本文实验的要求:

  • Cyclone IV EP4CE10E22C8 开发板
  • Intel Quartus Prime 17.1
  • USB转RS232 串口线
  • 二进制/十六进制文本编辑器

方案信息:

  • 占用资源:LE≤3610、PLL 1个、Memory 87056bits
  • Flash型号:MT25QL128ABA1ESE-0SIT 128MB SOP-8

二、参考例程文件

参考例程包含一个原厂镜像(Factory Image),两个应用镜像(Application Image),以及各自对应的NIOS软件程序(NIOS II Software)。包含下载所需的JIC文件,以及合成JIC需要的SOF和HEX文件,升级需要的RPD文件。

升级文件列表如下所示:

文件名称描述

Factory.zip
Application1.zip
Application1.zip

三个工程的压缩包
\Factory\output_files\output_file.jic合成的JIC文件
\Factory\software\factory\mem_init\epcq_controller.hex
\Application_1\software\app1\mem_init\ epcq_controller.hex
\Application_2\software\app2\mem_init\ epcq_controller.hex
Factory和APP1、APP2的hex文件
\RPD_Data\App2_hw.rpdAPP2的FPGA升级文件
\Factory\output_files\Factory.sof
\Application_1\output_files\application_1.sof
\Application_2\output_files\application_2.sof
Factory和APP1、APP2的sof文件

 

三、框图

图 1 加载流程框图
图 1 加载流程框图

四、例程设置

4.1 下载文件生成

1、SOF文件生成

FPGA文件编译完成之后就可以生成。

2、HEX文件生成

  • 在Quartus 菜单栏上打开“Tools”下的“Nios II Software Build Tools for Eclipse”。
  • 在弹出的Workspace Launcher中选择Factory文件夹中的“Software”文件夹,单击OK。
  • 右击factory_bsp,选择build project。
  • BSP build complete之后,右击factory,单击build factory。
  • factory build complete之后,右击factory,单击make targets,选择build。
  • 在Make Targets 中选择mem_init_genertate,单击Build。
  • 生成的HEX文件在\Factory\software\factory\mem_init 文件夹下,epcq_controller.hex(可修改为factory.hex)。

4.2 下载文件合成

1、在Quartus的Files里面打开 “Convert Programming Files…”
2、在 “Output programming file” 选项卡, 设置一下项目:

  • Programming file type: JTAG Indirect Configuration File (.jic)
  • Configuration device: EPCQ128 (select according to your EPCQ type)
  • Mode: Active Serial
  • File name: You may select your preferred path for the output file (.jic).

3、勾选 “Create config data RPD (Generate output_file_auto.rpd)”。
4、在“Input files to convert” 选项卡, 按照以下步骤进行设置:

  • 选择 “Flash Loader”,单击 “Add Device”, 选择Cyclone IV里面的“EP4CE10” 。
  • 对于原厂镜像的FPGA SOF文件,需要设置如下:

i.  选择“Page_0” 然后单击“Properties”。
ii.  选择“Address mode for selected pages” 里面的“Block”。。
iii.  设置“start address”为“0X00000000”,设置“end address”为“0X003BFFFF。
iv.  单击“Add File”,然后将原厂镜像的SOF文件“Factory.sof”添加进来。

图 2 FPGA SOF 文件详细设置
图 2 FPGA SOF 文件详细设置
  • 对于Application_1,设置如下:

i.    单击“Add Sof Page”。
ii.    选择“Page_0” 然后单击“Properties”。
iii.    选择“Address mode for selected pages” 里面的“Block”。
iv.    设置“start address”为“0X00400000”,设置“end address”为“0X007BFFFF。
v.    单击“Add File”,然后将SOF文件“Application_1.sof”添加进来。

  • 同理,将Application_2的“start address”为“0X00800000”,设置“end address”为“0X00BBFFFF”。
  • 对于原厂的nios 程序文件,需要设置如下:

i. 单击“Add Hex Data”,打开对话框。
ii. 单击“Hex file”框后面的省略号,选择生成的factory.hex文件。

图 3 HEX文件路径文件
图 3 HEX文件路径文件
图 4 HEX文件详细设置
图 4 HEX文件详细设置

5、最后单击Generate,生成JIC文件。

图 5 合成JIC文件所需全部文件列表

图 5 合成JIC文件所需全部文件列表
图 5 合成JIC文件所需全部文件列表

4.3 下载FPGA镜像和nios ii 软件镜像

  • 连接USB Blaster,板子上电。
  • 从“Tools”打开“Programmer”,点击“Hardware setup……”,选择“USB-Blater II”。
  • 点击“Auto Detect” 选择“EP4CE10”。
  • 点击“File”,选择生成的JIC文件。同时在“Program Configure”打钩。

图 6 下载JIC镜像
图 6 下载JIC镜像
  • 打开“Tools”里面的“Options……”,在“Unprotect EPCS/EPCQ devices selected for the erase/program operation”选项打钩。
  • 点击“Start”,开始下载,下载完成后,板子重新上电。

图 7 下载完成
图 7 下载完成

4.4 生成升级RPD文件

我们在生成JIC文件的时候,同时生成了RPD(Raw Programming Data)文件,我们的升级文件需要从RPD文件中截取出来。

  • 利用文本编辑器将生成的“output_file_auto.rpd”文件打开,在“‘编辑“菜单下,选择“选择块”,打开对话窗口。
  • 对于Application_1,FPGA程序对应地址范围:0x00400000 – 0x007BFFFF,在“选择块”的窗口的起始偏移中,填入“400000”,在结束偏移中填入“7BFFFF”,单击确定,选择数据。
  • 在选择的数据上右键选择“复制”。
  • 单击“新建”,右键选择“插入式粘贴”,在弹出的改变文件大小提示对话框中选择“确定”。
  • 选择“文件”菜单下的“另存为”,选择合适位置,存为“app1_hw.rpd”。

图 8 RPD文件起始地址
图 8 RPD文件起始地址

重复上述步骤,根据下面的表格中所列出的起始偏移地址和结束偏移地址,截取出Application_1的NIOS程序,Application_2的FPGA程序和NIOS程序。

程序占用空间列表如下所示:

名称大小(KB)地址范围
Application 2 software2560X00BC0000-0X00BFFFFF
Application 2 hardware38400X00800000-0X00BBFFFF
Application 1 software2560X007C0000-0X007FFFFF
Application 1 hardware38400X00400000-0X007BFFFF
Factory software2560X003C0000-0X003FFFFF
Factory hardware38400X00000000-0X003BFFFF

 

  • 请确认生成的RPD文件有着正确的文件大小。

五、运行

1、连接USB转RS232串口线,连接USB Blaster II,板子上电。

2、打开串口调试助手(理论上任一串口调试皆可,但实际操作中发现有些软件是不行的,如果有发不出数据的情况,可以考虑换一个串口调试助手)。打开串口的设置,设置波特率“115200”,校验位“None”,数据位“8”,停止位“1”。

图 9 串口设置
图 9 串口设置

3、程序跳转

  • 重新上电,会在接收区看到打印信息,可以看到程序从Factory启动。

图 10 串口返回打印信息
图 10 串口返回打印信息
  • 从串口发送字符“5”,从打印信息中看到程序从Factory镜像转到Application_1镜像启动。

图 11 镜像APP1启动成功
图 11 镜像APP1启动成功
  • 重新上电,同样操作,串口发送6,程序会从Factory镜像转到Application_2启动。

4、串口远程更新,本次更新将Application1的hardware擦除,然后将Application2的hardware更新到被擦除的区域。

图 12 镜像升级示意图
图 12 镜像升级示意图
  • 重新上电,发送1,可以看到Flash相关区域(Application1的hardware)已经被擦除。

图 13 APP1的硬件正在升级中
图 13 APP1的硬件正在升级中
  • 在串口调试助手上面的“选择发送文件”,选择之前生成的Application2的hardware文件,点击串口调试助手的“发送文件”选择发送。可以看到下面的发送窗口已经开始发送了。需要等待十分钟左右,等待发送完成。

图 14 选择升级所需文件并发送
图 14 选择升级所需文件并发送
  • 待发送完成之后,会提示“Application 1 Hardware upgrade completed!”,但此时程序还是会打印程序从Factory启动,待重新上电后,发送“5,”,会提示程序从Application2启动(正常情况下会提示从Application1启动),升级成功。

图 15 启动升级以及跳转全过程
图 15 启动升级以及跳转全过程

Intel FPGA 基于NIOS的串口远程升级(下)