FPGA开发过程中经常需要用到远程系统更新(RSU)功能,通过网络将镜像文件下载到FLASH中,无需回收产品,就能修复产品错误和增强产品功能。本文介绍了intel官方提供的远程下载例程,使用tcl脚本通过system console实现远程下载的过程。
远程更新流程
- 生成初始化RSU镜像
- 生成应用程序镜像
- 切换镜像
- 远程烧写镜像
远程系统更新组件
intel s10器件远程更新组件如下图所示:
包括一下三部分:
- JTAG to Avalon Master Bridge
- Mailbox Client Intel FPGA IP
- SDM
生成镜像
生成初始化RSU镜像
File->Programming File Generator,选择map和rpd文件。
添加两个sof文件,一个是出厂sof文件,一个是应用程序sof文件。
FACTORY_IMAGE通过出厂sof文件生成,P1通过应用程序sof文件生成,当P1出问题时,上电启动后会自动导入FACTORY_IMAGE。通过quartus最多可添加7个应用程序镜像,通过远程烧写功能,可添加508个镜像。通过指令可以切换不同镜像。
生成三个文件,map文件存储各个部分首地址,在切换镜像和远程烧写镜像时要使用。
map文件
BLOCK START ADDRESS END ADDRESS
BOOT_INFO 0x00000000 0x0010FFFF
FACTORY_IMAGE 0x00110000 0x0045FFFF (0x0041CFFF)
SPT0 0x00460000 0x00467FFF
SPT1 0x00468000 0x0046FFFF
CPB0 0x00470000 0x00477FFF
CPB1 0x00478000 0x0047FFFF
P1 0x00480000 0x006F0FFF
生成应用镜像
生成应用程序镜像时,只选择rpd文件。
添加sof文件。
配置镜像
打开system sconsole
TCL控制台
运行TCL命令
在tcl控制台中运行
source rsu1.tcl
使用rsu_status命令验证当前镜像
rsu_status
当前镜像地址为0x00480000,运行P1,参照map文件。
切换镜像
rsu_image_update 0x00480000
重新上电后,镜像又变回原来镜像。
添加应用镜像
烧写新镜像
往地址0x006F1000地址中添加文件output_file_jic.rpd,每次写1024个字节。0x006F1000在P1之后
program_flash app.rpd 0x006F1000 1024
验证当前CPB0和CPB1
读CPB0中指向当前应用的地址,读地址0x00470020,该地址通过CPB0地址偏移20得到,参照map文件
qspi_read 0x00470020 1
读CPB0中指向添加应用的地址,读地址0x00470028,该地址通过CPB0地址偏移28得到,读取到0xffffffff后才可以写入新地址。
qspi_read 0x00470028 1
读CPB1中指向当前应用的地址
qspi_read 0x00478020 1
读CPB1中指向添加应用的地址
qspi_read 0x00478028 1
修改当前CPB0和CPB1
将烧写应用程序地址写入CPB0和CPB1
qspi_write_one_word 0x00470028 0x006F1000
qspi_write_one_word 0x00478028 0x006F1000
验证写入内容
写入正常。
参考文档
Intel Stratix 10 配置用户指南 和mailbox ip手册。