当前位置:   article > 正文

qspi(spi四线模式)

qspi

目标:使用spi的四线模式,可以加快cpu读取bios rom里面的数据,从而更快的开机

一、基础参考资料CPU手册,ROM手册,硬件连接

用到的参考资料:主要是软件编程手册中qspi寄存器部分和对应的spi rom手册(如GD25LQ128D)

注意是QSPI寄存器,不是SPi寄存器,因为现在硬件是连在QSPI线上的。

SPI主要是CE#,SCK,SI以及SO四根信号线

QSPI会把除了VCC,GND之外的线,全部变成数据线。也就是SI,SO,HOLD#,WP# 4根数据传输线

然后我们目前用的只是读取数据的时候使用4根线。对应的命令在GD25LQ128D手册

目前使用的是0x6B命令,

BIOS读取数据前要把这个命令填在D2000 qspi RD_CFG(0x4)寄存器中。

(0x6B<<24) | (0x2<<20) | (0x4<<16) |(0x7<<4) | (0x1<<3) | 0x4

其中:6B对应spi手册上的Quad Output Fast Read命令,

0x2<< 20,代表使用010---->1-1-4模式,就是读取数据使用4根线,其余使用1根线传输

0x4代表sck为pclk的16分频,也就是37.5MHZ

0x7<< 4代表 数据要在命令之后8个cycle才读取(这个可以对应spi 手册 0x6b命令的要求)

a dummy byte对应 8个cycle

二、要修打开这个值,还必须要打开QE寄存器;

上图是spi对应的手册,要把这一位置1.有些spi rom出厂就是置1并且不可修改。

要修改QE,要先进入进入spi write enable

三、要通过qspi寄存器0x****10 0x****1c来操作上面这几个寄存器

对应的流程在手册中有说明,我们使用的是寄存器端口访问,也就是先往0x****10写指令,然后往0x****1c写1发送

这个write寄存器和上面那个read寄存器比较相似

so,我们先做个实验,将时序中所需要的CS#,SCLK,SI,SO找硬件连出来到示波器

然后在uefi shell中

mm 0x****10 0x6400000 -w 4(意思是往0x2****10写0x6400000,对应0x6这个命令write enable指令)

此时没有信号

然后mm 0x****1c 1 -w 4

示波器触发模式下信号如图:

从上到下分别是clk,cs,si对应时序:

可以看到后面四位是粉色那条线,对应110,也就是0x6

说明操作正确。

四、通过硕飞烧录器来读取修改寄存器来验证操作流程是否正确

可以看到QE处于Status register2上,查手册对应的修改命令为0x1或者0x31

查看status2的命令为0x35

五、完整验证流程

1.通过硕飞烧录器将QE置0

2.在shell下通过命令将QE置1

3.通过硕飞烧录器查看QE是否需要被置1

2步骤具体流程:

2.1通过0x35命令查看QE是否置0

mm 0x****10 0x35402000 -w 4

mm 0x****1c -w 4

可以看到0x2对应的就是QE,现在是置1的

2.2先将QE置1后,通过0x6进入write enable

mm 0x****10 0x6400000 -w 4

mm 0x****1c 1 -w 4

2.3,通过命令0x1置位QE

mm 0x****10 0x1402008 -w 4

mm 0x****1c 0x200 -w 4

这个0x1命令是同时修改status1 &&status2 .有些芯片支持只修改status2的命令

2.4通过硕飞烧录器看是否烧录正确

六、代码

修改的代码路径

这段代码的意思是往x0写0x****10,往w1写0x35402000,然后把w1写到x0对应的地址上

也就是往0x****10 写0x35402000

这个b.ne意思是如果w9不等w0(0x1828a1 这个是一个区别号),就跳转3f,3f意思是后面那个3:,如果是3b,是指前面那个3

具体操作流程参考五、完整验证流程

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/124809
推荐阅读
  

闽ICP备14008679号