BIOS开发笔记 13 – 使用 DediProg 读写 Flash 寄存器

以 Winbond W25R256JW 为例,介绍如何使用 Dediprog 编程器的工程模式读写 Flash 中的寄存器。

一、寄存器

该 Flash 中有好几类的寄存器,但本文侧重于如何使用 Dediprog 来读写 Flash,所以不多描述了,为了方便演示,简单了解一下几个状态寄存器。

该型号支持三个状态寄存器,分别是 Status Register-1Status Register-2Status Register-3,提供了有关闪存阵列可用性、设备可写状态、写保护状态、Quad SPI设置、安全寄存器锁定状态、擦除 / 编程挂起状态、输出驱动强度和上电状态的信息。

 

这三个寄存器中,对我们稍微有联系的是状态寄存器 2 中的 Quad Enable 位,简称 QE。在生产过程中,有些烧录器会擦除该 bit,便可能出现主板不开机的现象。

二、指令

该 Flash 支持的指令长度并不是固定的,它可以是单独一个指令,也可以是指令 + 数据的形式,具体的格式需要根据指令的类型决定,使用前除了查看 8.1 中的指令集,也需要仔细阅读 8.2 中对应指令的描述。

三、使用 Dediprog 读写

Dediprog 系列的烧录器相信很多的 BIOS 人都使用过,它提供了一个工程模式,可以手动给 SPI Flash 发送命令,执行某些操作。通过下面步骤启动工程模式界面:

1.执行 Dediprog 主程序,点击 Config

2.左侧选择 Engineer Mode

 

在工程模式界面,支持单命令和多命令操作。单命令一次只能发送一条指令,而多命令则可以通过命令列表一次发送多条。

1.读取 Manufacturer / Device ID

查看 Flash 手册的 Instruction Set Table 1,并跳转至详细定义,可知,指令是 90h,指令后需要接 24 bit 值为 0 的地址,最后返回两个字节的数据。

 

知道这些信息后,便可在Dediprog进行操作,如下:

可看到返回 ef 18,与手册定义的一致,说明此读操作正确。

 

2.读取 Status Register-2

从 Instruction Set Table 1 中,可知读取的指令是 35h,返回一个字节。执行结果如下:

返回的值是 02,结合前文的说明,表示 QE bit 为 1。

3.将输出驱动强度设为 50%

输出驱动强度位于 Status Register-3 中,说明如下:

 

使用 15h 指令读取该寄存器,值为 20,对应上图中的 75%。为了演示写操作,将其设置为 50%,即写入 40。此操作需要写寄存器,写前需要06指令启用可写模式,然后再发送写寄存器指令,最后读取写后的值。这一系列的操作可以利用 Dediprog 的命令列表,先逐个添加指令,然后执行指令,如下:

4.读取 SFDP

Serial Flash Discoverable Parameter(SFDP),即串行闪存可发现参数,包含有关设备配置、可用指令和其他功能的信息。Intel 较新的平台已经逐渐弃用 VSCC 的方式配置对 Flash 的支持,转而使用更加通用的 SFDP,所以不再需要额外配置 SPI Flash 的信息了。

SFDP 是一组记录 Flash 配置信息的的数据,如果异常,也会导致无法开机。当遇到此类问题的时候,则可以尝试读取该信息确认。

读取 SFDP 的指令是 5Ah,需要接 24 bit 地址和一个 dummy byte,使用 0 填充即可,返回数据共 256 byte。

执行结果如下:

版权声明:
作者:bin
链接:https://ay123.net/mystudy/bios/1829/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
BIOS开发笔记 13 – 使用 DediProg 读写 Flash 寄存器
以 Winbond W25R256JW 为例,介绍如何使用 Dediprog 编程器的工程模式读写 Flash 中的寄存器。 一、寄存器 该 Flash 中有好几类的寄存器,但本文侧重于如何使……
<<上一篇
下一篇>>
文章目录
关闭
目 录