赞
踩
目标:使用spi的四线模式,可以加快cpu读取bios 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
上图是spi对应的手册,要把这一位置1.有些spi rom出厂就是置1并且不可修改。
要修改QE,要先进入进入spi write enable
对应的流程在手册中有说明,我们使用的是寄存器端口访问,也就是先往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
具体操作流程参考五、完整验证流程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。