使用数字发现查看Zynq启动序列
介绍
在开发新的FPGA板时,重要的是要了解板上硬件的规格并查看信号的时间。数字发现提供了高速逻辑分析仪,可让您可视化和分析通过板传播的信号。在开发新的Zynq板的过程中,引导序列中QSPI交易的速度不是明显的规范。该项目使用数字发现可视化引导序列以确定时间。
存货
-
数字发现
-
Zynq板和闪光灯
-
笔记: 该文档是使用比D.0提前修订的Zybo Z7编写的。
-
-
SOIC剪辑如果可用
-
电线
在决定如何解决此问题时,有两个较小的仪器设备具有逻辑分析仪,模拟发现2和数字发现。使用数字发现而不是模拟发现的原因有两个。第一个原因是QSPI交易可以以更高的时钟速度进行,超过100MHz,因此具有足够的样本率非常重要。另一个原因是由于512MB数字发现具有的DDR记忆可以执行非常大的收购。
步骤1:连接数字发现
需要以下连接:
QSPI信号 | QSPI/夹子别针 | 数字发现别针 |
---|---|---|
CS | 7 | dio0 |
clk | 16 | dio1 |
D0 | 15 | dio2 |
D1 | 8 | dio3 |
D2 | 9 | dio4 |
D3 | 1 | dio5 |
gnd | 10 | gnd |
当使用这样的电缆时,请确保检查信号完整性/串扰。在某些情况下,用一个扭曲信号gnd将需要电线(在这种情况下,是蓝色CS线)。
步骤2:QSPI脚本
使用自定义解释器,将QSPI信号转换为数据。通过在波形中添加逻辑仪器中的“自定义”通道来激活这。以下是解释QSPI信号的JS代码。
// rgdata:输入,原始数字样本阵列// rgvalue:输出,解码数据阵列// rgflag:输出,解码标志阵列var c = rgdata.length.length // c =原始样本var pclock var pclock = false;//先前的公鸡信号级别var istart = 0;//用于跟踪单词启动索引var cbyte = 0;//每个传输var cbits = 0的字节计数;//位计数器var bvalue = 0;//值变量var fcmd = true;for(var i = 0; i> 0);// PIN0是选择信号var fclock = 1&(s >> 1);// pin1是时钟信号var fdata = 1&(s >> 2); // pin2 is the data signal var fData4 = 0xF&(s>>2); // DIN 2-5 DQ 0-3 if(fSelect != 0){ // select active low // while select inactive reset our counters/variables iStart = i+1; // select might become active with next sample cByte = 0; cBits = 0; bValue = 0; pClock = false; fCmd = true; continue; } if(pClock == 0 && fClock != 0){ // sample on clock rising edge bValue <<= 4; // serial data bit, MSBit first bValue |= fData4; cBits++; if(cBits==2){ // when got the 8th bit of the word store it cByte++; // store rgValue/Flag from word start index to current sample position for(var j = iStart; j < i; j++){ // Flag change will be visible on plot even when data remains constant. // This is useful in case we get more consecutive equal values. rgFlag[j] = cByte; rgValue[j] = bValue; } iStart = i+1; // next word might start after this sample cBits = 0; // reset bit count for the next byte bValue = 0; // reset value variable } } pClock = fClock; // previous clock level }
与此解释器并行,我们还可以使用标准SPI来查看未通过QSPI发送的说明,例如第一个读取指令。
步骤3:触发和获取
尽管最大QSPI时钟频率约为100MHz,启动时,最大频率为25MHz用来。另外,整个引导传输大约需要700毫秒。因此,需要大量样本和不错的样本率,这是数字发现派上用场的地方。2.68亿样品200MHz将转化为〜1.3秒。
使用PC的大量内存(16)GB),处理数据也需要很长时间。
扳机设置在CS信号。
以下是波形捕获的整个QSPI事务。
注意收购左端附近的短暂暂停,这就是时钟频率从5.4变化的地方MHz到25MHz。
步骤4:引导转移
有两个文档需要阅读,以了解数据传输的代表。一个是Zynq TRM另一个是闪存的数据表。
始终使用D0通过SPI发送从ZYNQ发送到闪存的说明。发送的第一个指令是0x03 0x00 0x00 0x20,这意味着SPI从地址0x20读取,并且还使用D1,0x66 0x55 0x99 0xaa通过SPI接收回复。Flash读取指令将在数据表的第85页上说明。
在Zynq TRM第170和179页中,解释了该答复的含义。简而言之,这组字节告诉Zynq,内存具有QSPI。同样重要的是要观察到,在这一点上,SPI时钟频率为5.405MHz,这是一个相对较低的速度。
从这一点开始,由于已确定内存支持QSPI,因此所有交易都将在所有4个数据线上完成。例如,下一个指令将为0x6b,然后是3个字节地址。0x6b表示四读指令,在8个时钟周期之后,QSPI解释器将看到响应,这是“虚拟”字节。
在这种情况下,地址为0x1d,读取7个字节。这些字节来自地址0x1d,0x1e,0x1f,它是中断表的一部分,然后从地址0x20读取4个字节,在第一个SPI读取时读取的字节相同。
Zynq将继续读取字节,将地址递增,直到达到0x45,这是Bootrom标头的末端。
不幸的是,由于我们无法访问Bootrom代码,因此启动序列的其余部分不那么透明。在某个时候,FSBL(第一阶段启动加载器)将开始运行,很可能在SPI时钟频率更改为25的情况下很可能MHz如下所示,启动过程开始后84毫秒。
然后,FSBL将读取启动图像并分析其包含的不同分区,包括.bit文件,该文件将配置Zynq的PL和将在ARM中运行的.ELF。
有关引导图像和引导过程的更多详细信息可以在该用户指南。