SSPI方式配置Lattice ECP3系列FPGA
本文主要包括通过SSPI方式配置Lattice ECP3系列FPGA的一些说明
最近项目中用到了Lattice ECP3,项目中使用ARM通过SSPI方式配置FPGA。所以这里对配置方法做一些笔记待以后自己或需要的朋友参考;本文内容主要来自Lattice官方文档:LatticeECP3SlaveSPIPortUsersGuide.pdf1 。
配置时序
PROGRAMN(内部弱上拉输入)
在INITN为1时给PROGRAMN一个下降沿,即表示开始配置,PROGRAMN低电平要保持Tprgm(最小25ns);
使用JTAG配置时要保证PROGRAMN一直为高。INITN(开漏双向)
在PROGRAMN下降沿后Tdppinit(最大37ns)时间后拉低,这个下降沿会采集CFG决定配置是slave模式还是master模式,在初始化时准备好这其中一种模式;再过Ticgf(初始化时间,即清除FPGA内部数据和配置模式的时间,slave模式最大6ms,master模式最大23ms)时间拉高(这时PROGRAMN要为高,否则要等到PROGRAMN为高之后Tdinit<=1ms时间后才拉高),也可以由外部拉低INITN来延长这个时间,这个上升沿也会采集CFG决定最后配置模式;拉高后即表示可以向FPGA输入配置数据了;若配置开始后(INITN由低到高后)被拉低则表示配置出错。
DONE(开漏内部弱上拉双向)
在PROGRAMN下降沿后Tdppdone(最大37ns)时间后拉低;接收完所有配置配置数据且确定没有错误后拉高,进入用户模式,也可以由外部拉低DONE来延迟进入用户模式的时间(这需要将DONE_EX参数设为ON)。
在JTAG配置模式时INITN,DONE没有以上意义(来自参考文档2 的p7)
注意:以上说明中实际时间针对Lattice ECP3系列芯片,数据来自参考文档3 。
除了使用PROGRAMN下降沿使FPGA初始化并重新配置,还有其它方式使FPGA进入配置;所有初始化方式如下:
- 上电
- PROGRAMN拉低
- JTAG Refresh命令
- SSPI Refresh命令
- Slave Parallel Refresh命令
SSPI配置流程
SSPI配置方式主要按下图的流程配置
- 如上介绍中SSPI可以通过Refresh命令使FPGA初始化并重新配置,或使用PROGRAMN来初始化或上电进入配置状态,要SSPI配置还需要设置配置管脚CFG[2:0]=001;然后进入第1步延迟50ms等待清除完毕
- 第2、3步使用READ_ID命令读取出32位的IDCODE,检查是否和要配置的Bitstream匹配,当然也可以不用检查
- 第4步,再次使用REFRESH命令,注意此处REFRESH命令与前面第一步的REFRESH不同,这里的REFRESH命令当做C类命令用,即该REFRESH后面没有延迟(因为前面已经清除了FPGA这里不用清除所以不用延迟等待)
- 第5步使用WRITE_EN命令,使能配置
- 第6、7步使用WRITE_INC并输入Bitstream文件
- 第8步使用READ_STATUS命令读取状态寄存器,检查状态,是否成功
- 第9步使用WRITE_DIS命令结束配置
各命令列表如下
命令 | 类型 | 操作码 | 描述 |
---|---|---|---|
READ_INC | A | h01 | 读出配置bit流 |
READ_USERCODE | A | h03 | 读出32位USERCODE |
READ_CONTROL | A | h04 | 读出控制寄存器的内容 |
READ_ID | A | h07 | 读出器件的JTAG IDCODE |
READ_STATUS | A | h09 | 读出状态寄存器 |
CLEAR | D | h70 | 清除配置RAM和控制寄存器0 |
WRITE_INC | B | h41 | 连接SI到DI |
WRITE_EN | C | h4A | 使能配置操作 |
REFRESH | D | h71 | 清除FPGA及使能配置 |
WRITE_DIS | C | h4F | 不使能配置操作 |
PROGRAM_SPI0 | E | h74 | 连接SPI主接口到SPI0接口配置SPI Flash |
其中以上READ_STATUS命令读出的状态意义如下表
位 | 功能 | 复位值 | 0 | 1 | 描述 |
---|---|---|---|---|---|
0 | CRC 错误 | 0 | Pass | Fail | Bitstream 损坏 |
2 | Bitstream 无效命令 | 0 | Pass | Fail | Bitstream 损坏 |
4 | 加密秘钥锁定 | 0/1 | No | Yes | 配置了加密秘钥 |
5 | Bitstream密钥有效 | 0 | No | Yes | Bitstream密钥与加密秘钥匹配 |
6 | 发现校准序列 | 0 | No | Yes | Bitstream有效 |
7 | 发现加密校准序列 | 0 | No | Yes | Bitstream是加密的 |
8 | 发现标准序列 | 0 | No | Yes | 检测到序列码0xBDB3 |
15 | 数据清除 | 0 | No | Yes | SRAM被清除 |
16 | 器件安全打开 | 0 | No | Yes | 读回被禁止 |
17 | Done | 0 | No | Yes | Done管脚为高 |
其它 | 保留 | x | x | x | 未定义 |
一共A~E五种类型命令说明和时序波形如下
A类命令从ECP3中读出数据。读出的数据在时钟下降沿读出,0bit首先读出(而命令是7bit先输入),命令与数据之间有24个空闲延迟时钟周期等待命令执行,详细如下图
B类命令用于向ECP3中写入数据。0bit首先写入,命令与数据之间有24个空闲延迟时钟周期等待命令执行,详细如下图
C类命令没有读取或写入数据。命令之后有24个空闲延迟时钟周期等待命令执行,详细如下图
D类命令没有读取或写入数据。命令之后有24个空闲延迟时钟周期等待命令执行,但是24个会中周期后无论是否有时钟或SN有效都不会终止该命令,只有在此命令完成后才自动终止,用于CLEAR和REFRESH两个命令,详细如下图
E类命令是Lattice特殊命令。E类命令有PROGRAM_SPI0,其运行Slave SPI端口链接到对应的Master SPI端口,详细如下图
注意事项
若配置不成功请检查以下项目是否正确:
- 管脚是否配置为SSPI模式,即{CFG2,CFG1,CFG0} = 001;CFG管脚在FPGA中为弱上拉(在INITN下降沿和上升沿会采样,其它时间可以随意改变)
- SSPI在时钟上升沿从SI输入数据,下降沿从SO读出数据;输入数据和输出数据的顺序取决于命令或数据,命令MSB在前,数据(包括读和写数据)LSB在前
- SSPI模式时钟(CCLK,rising edge输入):加密20MHz;非加密33MHz(SSPI支持加密文件烧写,但不支持加密KEY烧写,加密KEY烧写必须使用JTAG方式)
- 输入bitstream文件时要一直保持CSN为低电平直到整个文件被输入;中间若要暂停可以用HOLDN为低或使CCLK为低来实现暂停(烧写加密文件时不能用,加密文件的烧写都不能暂停,其它配置方法的其它暂停方式也不能用)
- 检查配置后PROGRAMN,INITN,DONE是否被外部拉低,从而导致配置一直无法完成
其它说明
一些软件选项说明
以下为Diamond中Spreadsheet View->Global Preferences窗口中一些配置的说明
- MCLK_FREQ:指定SPI或SPIm模式的MCLK时钟,默认2.5MHz,加密配置最大15MHz,非加密配置最大33MHz
- CONFIG_SECURE:其值设置为ON后FPGA的配置数据无法被读出,即只能擦除或写入
- PERSISTENT:其配置决定布局布线工具怎么使用多用配置管脚(可用于配置管脚或普通管脚)
- CONFIG_MODE:用于告诉软件将用什么配置方法,软件会检查设计中配置管脚的使用正确性,出错则给出警告
- DONE_EX:设置为ON时才能通过外部拉低DONE来延迟进入用户模式的时间
- UserCode:设置32位用户码,可以用READ_USERCODE命令读出,可以用于存储一些与此Bitstream文件相关的自定义信息
参考文档
- LatticeECP3sysCONFIGUsageGuide.pdf ↩
- LatticeECP3sysCONFIGUsageGuide.pdf ↩
- LatticeECP3EAFamilyDataSheet.pdf ↩
SSPI方式配置Lattice ECP3系列FPGA相关推荐
- 有谁弄过MCU通过SSPI方式配置 LATTICE XO3 XO2 CPLD的?
向博主本人提问FPGA相关问题 完整版请点击https://hifpga.com/问题/56 最近项目需要,需要通过MCU动态配置LATTICE的XO3 CPLD.主端是的ALTERA的CYCLONE ...
- 关于基于Lattice Crosslink-NX系列FPGA用于图像采集、桥接和处理的应用总结分享
作者:Hello,Panda Lattice Crosslink-NX系列FPGA的定位仍然还是主要面向接口桥接类的应用,虽然它的逻辑已经到了39K的规模,但其处理能力仍然偏弱,特别是存在以下几个很大 ...
- Lattice系列FPGA入门相关0(Lattice与Altera、Xilinx对比及入门)
需求说明:Lattice系统FPGA入门 内容 :Lattice与Altera.Xilinx对比 来自 :时间的诗 1.Lattice与Altera.Xilinx对比 latt ...
- 基于LATTICE ECP3 FPGA的 Nano_Viewer设计(开源)
1.前言 研究生课程要求设计一个电子相框,使用FPGA驱动VGA显示器并能使用无线传输的方式完成图像的传输并将图像缓存后显示到VGA显示器上,我根据该基础需求上,通过更换LATTICE的FPGA以及增 ...
- Lattice系列FPGA入门相关1(Lattice系列FPGA简介)
需求说明:Lattice系统FPGA入门 内容 :Lattice系列FPGA简介 来自 :时间的诗 1.为什么Lattice在进入FPGA市场的第一年就能取得这么好的成绩? 我 ...
- Lattice系列FPGA入门之FPGA选型
网站:http://www.cnblogs.com/emouse/archive/2013/07/26/3217244.html 一.获取芯片资料: 要做芯片的选型,首先就是要对有可能要面对的芯片有整 ...
- 干货干货FPGA lattice深力科 FPGA性能优势以及市场前景分析 以及lattice MachXO2系列MachXO3系列资料参考
干货干货FPGA lattice深力科 FPGA性能优势以及市场前景分析 以及lattice MachXO2系列MachXO3系列资料参考 那什么是FPGA芯片呢? FPGA全称为:现场可编程逻辑门阵 ...
- WCF编程系列(六)以编程方式配置终结点
WCF编程系列(六)以编程方式配置终结点 示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来完成 ...
- Lattice CrossLink NX系列FPGA使用分享
...
最新文章
- 【Qt】Qt发布程序时,报错: could not find or load the Qt platform plugin xcb
- apache+tomcat 搭建负载均衡系统
- 社会计算研究组研究方向
- leetcode-383-Ransom Note(以空间换时间)
- python pyOpenGL安装
- 记一次OutOfMemory定位过程
- 使用tracert命令查看某一个网站的ip地址
- php 原生多图上传,php 原生多图文件上传
- vue2.0父向子传参,子向父传参,路由传参
- r语言regexpr函数_R语言学习笔记-文本挖掘之字符处理(1)
- 第2章 神经网络的数学基础
- CentOS 7 配置DHCP服务器
- 根据ip和子网掩码技术可用网段的在线工具
- 看完这篇 Linux 的基本操作你就会了!
- [转]稳定排序和不稳定排序
- android 运行apk时崩溃,从Android Studio运行时安装APK时应用程序崩溃完美无缺
- 用墨刀设计原型,易被忽略的8种玩法。
- canvas快速实现视频的一键截图功能
- thinkphp5配置完成后,遇到禁止访问!
- XML:Schema、三种编写Schema的方式
热门文章
- Lifekeeper产品正版与盗版的区别
- java方法调用原则,Java 中,在调用重载方法时,原则是( )。_学小易找答案...
- Loadrunner C/S关联函数(LSP)AND(LSSS)使用-案例
- 如何写英文离职邮件/英文离职邮件怎么写/英文farewell邮件怎么写/ how to write farewell email
- 怎样关闭笔记本触控板
- 双字节数据 先低后高_马云回应双11数据造假;字节上市要再等一等;阿里香港IPO首日获40亿保证金认购;Siri未来或能解读情绪 | Tech周报...
- 微信企业号开发:微信考勤百度地图定位二
- 环洋市场调研-2022年全球钙片市场总体规模及应用细分研究报告
- 美洽客服端下载地址是什么?
- Linux内存管理(二)