最近用lattice的FPGA,研究了一下固件加密功能。本文讲述的是用Diamond软件进行固件加密下载的方法。
需要两个文件,一个是密码文件,格式为.bek。一个是固件,我用的.bit格式。两个文件都用Diamond生成。
一、生成bek文件。
打开Diamond软件,打开对应的FPGA工程。
在Tools--->Security Setting
点击进去后,需要输入一个password。这个密码是将来烧录bek的时候要用的。要记住。
默认的是LATTICESEMI,我点击ChangePassword,修改为自己的密码。一定要记住这个密码。
接下来,进行加密KEY设定。打钩,选择密码格式,支持ASCII、Hex、Bin三种格式。
自己输入一个KEY。
输完KEY,点击OK,就会生成一个.BEK文件。
生成的.bek文件到对应的工程文件夹里可以找到。
二、加密固件
接下来有两种方式进行固件加密,一种是采用Deployment Tool软件(不推荐。作为备用方案)。
推荐的方式:
另一种方式是,先用Diamond生成了bek文件,然后用Diamond综合编译生成bit文件。此时Diamond会利用生成的bek文件自动加密,无需再手动对bit文件加密。(注意顺序,先生成bek文件,再生成bit文件)
三、烧录
烧录分两步,先烧录.bek秘钥文件。再烧录固件。这里以ECP5U为例。
- 打开Lattice Diamond Programmer 3.10 (64-bit),连上烧录器,点击program进入下载界面
①选择设备类,(这里选ECP5U)
②选择具体设备类型(LFE5U-25F)
③操作模式(点击后配置)
④烧录文件所在的路径(也可以在③中操作),配置秘钥不需要操作
3.1下载秘钥到FPGA
点击③选择如下界面
点击LoadKey按钮,导入秘钥文件(文件名为.bek)
此时需要输入密码,密码为前面的password。
输入正确后,成功导入秘钥文件。显示黑点。
接下来,把下面两个选项打钩,并在框里输入yes
如下图所示:
貌似第二个钩只针对ECP5U芯片。详情请看官方英文文档。
点击OK
接下来就可以点击绿色按钮烧录FPGA秘钥了。
注意:FPGA内部加密模块是熔丝结构,只能烧录一次秘钥。熔断后不可恢复,再次烧录秘钥是无效的。如下次重新烧录固件,无需再次烧录秘钥,只需烧录对应的固件即可(用这个秘钥文件加过密的固件)。
注意:烧录秘钥,如果显示成功则进行下一步,烧录固件。如果显示是编程失败,再重烧的时候,显示
说明熔丝已经断了,不能再二次烧录秘钥了。不用管,继续烧录固件。
3.2烧录固件
导入bit文件路径(加密后的固件)
点击③,选择配置界面如下。这里以W25Q32型号flash为例。
配置完成点击ok,回到下载主界面,点击绿色下载图标
下载成功后Status下面出现绿色的PASS。完成。重新上电。测试板子是否OK。
ps:有问题欢迎批评指正。