BIOS开发笔记 13 – 使用 DediProg 读写 Flash 寄存器
以 Winbond W25R256JW
为例,介绍如何使用 Dediprog 编程器的工程模式读写 Flash 中的寄存器。
一、寄存器
该 Flash
中有好几类的寄存器,但本文侧重于如何使用 Dediprog
来读写 Flash
,所以不多描述了,为了方便演示,简单了解一下几个状态寄存器。
该型号支持三个状态寄存器,分别是 Status Register-1
、Status Register-2
、Status 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,返回一个字节。执行结果如下:
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/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论