PCのUEFI BIOS NVRAM(設定情報) 調査メモ

最終更新日 2018/04/20 22:35


「PCのUEFI BIOS NVRAM(設定情報)は一体どこに保存されているのか」についての調査メモです。下記の実機で調べてみました。

調査環境
■CPU Kaby Lake-S  Intel Pentium G4560 3.50 GHz
■マザーボード ASUS PRIME H270-PLUS
■メモリー DDR4-2133 4G x 2 Dual-Channel Mode
■SSD システムドライブ:Samsung NVMe SSD 960 EVO 250GB
■OS Microsoft Windows 10 Home 64bit Ver.1709
■Chipset H270 Stepping A0
■Intel Chipset Driver Ver. 10.1.1.44
■BIOS AMI BIOS Ver. 0808 UEFI Comp Ver 2.60
■BIOS 128Mb Flash ROM
■Onboard PCI Devices  なし

調査環境の様子
IMG_20171028_115432.jpg 



そもそもPC/AT 互換機では…
BIOSの設定値はRTC RAM ( RTC CMOS RAM )に保管される。
詳しくは下記サイトに書かれている。
[PCAT]: RTC+CMOS RAM 関連
http://mcn.oops.jp/dev/pcat/rtc.htm


RTC RAM は現在ではRTCと共にPCHに統合されている。

Intel 200 PCHのデータシートを見てみる。

Intel® 200 (including X299) and
Intel® Z370 Series Chipset Families
Platform Controller Hub (PCH)
Datasheet - Volume 1 of 2

October 2017
Revision 003


28 Real Time Clock (RTC)

28.3 Overview
The PCH contains a Motorola MC146818B-compatible real-time clock with 256 bytes of
battery-backed RAM. The real-time clock performs two key functions—keeping track of
the time of clay and storing system data, even when the system is powered down. The
RTC operates on a 32.768-KHz crystal and a 3V battery.

28.7 Functional Description
The Real Time Clock (RTC) module provides a battery backed-up date and time keeping
device with two banks of static RAM with 128 bytes each, although the first bank has
114 bytes for general purpose usage.

28.7.5 Clearing Battery-Backed RTC RAM
Clearing CMOS RAM in a PCH-based platform can be done by using a jumper on
RTCRST# or GPI. Implementations should not attempt to clear CMOS by using a
jumper to pull VccRTC low.


Intel® 200 (including X299) and
Intel® Z370 Series Chipset Families
Platform Controller Hub (PCH)
Datasheet - Volume 2 of 2

October 2017
Revision 005

30 Real TIme Clock (RTC)
30.1 RTC Indexed Registers Summary

The RTC contains two sets of indexed registers that are accessed using the two
separate Index and Target registers (70h/71h or 72h/73h), as shown in the following

table:
RTC (Standard) RAM Bank
Index Name
00h Seconds
01h Seconds Alarm
02h Minutes
03h Minutes Alarm
04h Hours
05h Hours Alarm
06h Day of Week
07h Day of Month
08h Month
09h Year
0Ah Register A
0Bh Register B
0Ch Register D
0Dh Register D
0Bh-7Fh 114 Bytes of User RAM
データシートではこう書いてるが、正しくは次にようになる。
0Ah Register A
0Bh Register B
0Ch Register C
0Dh Register D
0Eh-7Fh 114 Bytes of User RAM




I / Oロケーション70hおよび71hは、リアルタイムクロックの標準的なレガシーロケーションである。このバンクのマップを表12-7に示します。ロケーション72hおよび73hは、拡張RAMにアクセスするためのものです。
拡張RAMバンクは、索引スキームを使用してアクセスされます。
 アドレスポインタとしてI / Oアドレス72hが使用され、データレジスタとしてI / Oアドレス73hが使用される。 127hを超えるインデックスアドレスは無効です。
拡張RAMが不要な場合は、無効にすることができます。

ソフトウェアは、I / Oアドレス70hでビット7の値を保持しなければなりません。
このアドレスに書き込む場合、ソフトウェアは最初に値を読み取ってから、順次アドレス書き込み中にビット7に同じ値を書き込む必要があります。
ポート70hは直接読み取ることができません。
このレジスタを読み取る唯一の方法は、Alt Accessモードです。
RTCインデックスビット6:0はポート74hから読み出し可能ですが、ビット7は常に0を返します。
ノーマル動作中にNMI#イネーブルが変更されない場合、ソフトウェアはこのビットを1回読み取ってから、その後のポート70hへのすべての書き込みの値を保持することができます。



30.2 RTC PCR Registers Summary
These registers are within the PCH Private Configuration Space which is accessible
through the PCH Sideband Interface. They can be accessed via (SBREG_BAR + PortID
+ Register Offset).

30.2.1 RTC Configuration (RC)—Offset 3400h

Upper 128 Byte Lock (UL): When set, bytes 38h-3Fh in the
upper 128 byte bank of RTC RAM are locked and cannot be
accessed. Writes will be dropped and reads will not return any
guaranteed data. Bit reset on system reset.

Lower 128 Byte Lock (LL): When set, bytes 38h-3Fh in the
lower 128 byte bank of RTC RAM are locked and cannot be
accessed. Writes will be dropped and reads will not return any
guaranteed data. Bit reset on system reset.

Upper 128 Byte Enable (UE): When set, the upper 128 byte
bank of RTC RAM can be accessed.



と書いてあります。では、RCレジスタを見てみる。

SBREG_BAR=FD000000だったので
PortID = 0xC3 (RTC)

RCの1バイト目にUL,LL,UEがある。

Memory Address 00000000FDC33400 100 Bytes
  FDC33400: 1C 00 00 00 FF FF FF FF-FF FF FF FF FF FF FF FF  *................*
  FDC33410: FF FF FF FF 00 00 00 00-03 00 00 00 FF FF FF FF  *................*
  FDC33420: FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  *................*
  FDC33430: FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF  *................*

なので、1C =0001 1100 -> UL=1,LL=1,UE=1でした。このPCHはBIOSにより拡張バンクのRAMが有効になっていることがわかりました。と、いうことで、このPCHのRTC RAMはわづか114+128=242バイトしか記憶できません。

それでは、調査実機のRTC RAM の中身を見てみます。
調査方法
プリブート環境にてUEFI Interactive Shell for x64 v2.2 by EDK 2 のmm -ioコマンドを実行し調査する。

RTC はI/Oポート70h/71h と 72h/73h でアクセスする。このI/Oポート70h or 72hにRAMを読み取る際のオフセット値を書き込み71h or 73hから値を読み取る。しかし、厄介なことが1つある。70hの最上位のビット7はNMI割り込みの制御に使われている。なんで、このような仕様になっているのか?それは、たぶん、IBMかIntelのおじさん達がそう決めたからに他ならない。さらに、またまた厄介なことがある。このI/Oポート70hの値はPCHをAlternate Access Modeにしないと読めない。その方法は

29.2 Interrupt PCR Registers Summary
29.2.14 General Interrupt Control (GIC)—Offset 31FCh
ビット17 ->  Alternate Access Mode Enable (AME): When set, read only registers can be written, and write only registers can be read.

なので、
SBREG_BAR=FD000000
PortID = 0xC4 (Processor Interface, 8254 Timer, HPET, APIC )

で、調査実機では下図のようにAlternate Access Modeにビットはたっていない。ので、ここにビットを立てればよい。

Memory Address 00000000FDC43100 200 Bytes
  FDC43100: 0B 0A 0B 0B 0B 0B 0B 0B-00 00 00 00 00 00 00 00  *................*
  FDC43110: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43120: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43130: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43140: 10 32 10 32 10 32 10 32-10 32 10 32 10 32 10 32  *.2.2.2.2.2.2.2.2*
  FDC43150: 10 32 10 32 10 32 10 32-10 32 00 00 00 00 00 00  *.2.2.2.2.2......*
  FDC43160: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43170: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43180: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43190: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC431A0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC431B0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC431C0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC431D0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC431E0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC431F0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43200: 00 40 FF 00 01 00 00 00-00 00 00 00 00 00 00 00  *.@..............*
  FDC43210: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43220: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*
  FDC43230: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  *................*

そうしましたら、レジスタアドレス FDC431FE を02にすればよい。

実行結果
IMG_20171028_113940.jpg 
1コマンド目:ポート70hをリードするが0が帰る
2コマンド目:Alternate Access ModeをEnable
3コマンド目:ポート70hのリード成功。C6が帰る
8コマンド目:ポート70hのリード成功。46が帰る
BIOSで絶えずNMIの有効・無効を切り替えているようです。しかし、OS起動前の段階ですので、RTCインデックスレジスタを書き込む際にMNIのビットが変わっても、後で再起動すれば元に戻るので問題ないでしょう。気にせず、RTC RAMの内容を見てみます。


RTC RAMの内容 実行結果
IMG_20171028_124852.jpg 
ついでに、RTCの日と月の値も見てみました。
1アドレス目:標準バンク IDX:07 (日) = 28   (by BCD )
2アドレス目:標準バンク IDX:08 (月) = 10   (by BCD )
3アドレス目:標準バンク IDX:0E  = 0A
4アドレス目:標準バンク IDX:0F  = 00
5アドレス目:標準バンク IDX:46  = F0
6アドレス目:標準バンク IDX:70  = 00
7アドレス目:拡張バンク IDX:00  = 00   
8アドレス目:拡張バンク IDX:01  = 00   
9アドレス目:拡張バンク IDX:02  = 00   

ということで、このPCHのRTC RAMは標準バンクのユーザ領域は何らかしらBIOSメーカ仕様で使われいるが、拡張バンクはなにも使われていない模様です。このあたりの仕様は公開されていないので詳しいことはこれ以上わかりそうにありません。いずれにせよ、UEFI GLOBAL VARIABLES などの標準変数はこのRTC RAMの114バイトに収まらないことは確実です。したがって、TRC RAMで使用している部分は互換性維持のために残し、収まりきらない情報はBIOSが格納されているフラッシュROMに保存されていると思われます。また、PnPで必要となるESCD領域もフラッシュROM側にあるのでないかと思われます。今後、さらに、このあたりの詳しいことを調べてみたいと思います。




2017/11/04 追記

さて、さて
PCのUEFI BIOS NVRAM がRTC RAM にはないとなると、他に保存でそうな場所としてはBIOSが格納されているフラッシュROMしかありません。しかし、そもそもこのフラッシュROMはCPUがリセット直後に実行するBIOSコードが書き込まれており、それがメモリ空間にマップされています。Kaby Lake-S CPUではメモリ空間のFFE0_0000h〜FFFF_FFFFhの2MB領域にBIOS フラッシュROMがマッピングされています。そして、CPUはリセットベクタアドレスであるFFFF_FFF0hから命令を実行します(x64 CPUならたぶんこれに同じと思います)。つまり、ROMとして機能しているわけです。この状態ですと、フラッシュROMにイレーズやライトなどは難しそうです。

Intel のPCH データシートの仕様を見てみるとそれらしい記述がありました。

Intel® 200 (including X299) and
Intel® Z370 Series Chipset Families
Platform Controller Hub (PCH)
Datasheet - Volume 1 of 2

October 2017
Revision 003

32 Serial Peripheral Interface for FIash/TPM (SPI0)

32.3 概要
PCHは、システムフラッシュおよびTPMデバイスをサポートするための1つのシリアル周辺インターフェイス(SPI0)を提供します。
インターフェイスは3つのチップセレクト信号(CS#)を実装し、最大2つのフラッシュデバイスと1つのTPMデバイスをPCHに接続できます。
CS0#とCS1#はフラッシュデバイスに使用され、CS2#はTPM専用です。

32.7 Functional Description
32.7.1.2.2 SPI Flash Regions
In Descriptor Mode the Flash is divided into five separate regions.

Table 32-1. SPI Flash Regions
Region Content
0 Flash Descriptor
1 BIOS
2 Intel Management Engine
3 Gigabit Ethernet
4 Platform Data
8 EC



CPUはBIOSコードを順次実行し、システムの状態がDXEフェーズまで来ると、BIOS実行コードはPCIデバイスも使えるので、このPCI to SPIインターフェイスを使い、フラッシュROMのBIOS領域の一部にリード・ライトアクセスをするようです。

ということで、
この実機のマザーボードに実装されているROMはBIOSのコードを実行するROMの機能と初期化後に可用となるSPIフラッシュとしてのデータストレージ的機能を持ち合わせていると思われます。


実機のマザーボードではこのBIOSフラッシュROMにはSPI接続のNOR Flash (winbond製 W25Q128FVSQ)が使われていますが、わずか8本の配線で大きさも1cm角もないぐらいの大きさです。この小さなチップの領域にUEFI BIOSのNVRAMが納めれているようです。マザーボードをよく見ないと見落としてしまいそうな小さな部品にBIOSコードが植え込まれ、設定情報などが読み書きされているとは驚き桃ノ木です。マザーボードのマニュアルでは128Mbitとなっており、16MBの容量となり、RTC RAMよりもはるかに大容量です。


IMG_20171104_184516 (1) 
調査実機のフラッシュROMの様子

Winbond製 W25Q128FVのデータシートを見ると、レジスタなどを持ち、ブロック毎の書き込み禁止属性など設定できるようです。



その後、いろいろ雑誌等を調べていると、次のような記述がありました。

月刊インターフェイス 2011年11月号 CQ出版社 
技術解説
第2特集 IBM PC/AT誕生から30年のしがらみを捨て去る
従来のPC/AT用BIOSを置き換えるUEFI仕様の概要
藤原 尚伸,高橋 泰博 pp.100-106
3.UEFIの導入のメリット
・BIOSの設定領域の拡大
UEFIでは設定情報などをEFI Variableとして、通常BIOSが格納されているフラッシュROMの一部の領域を確保し使用しています。

著者はBIOSメーカであるフェニックス・テクノロジーズの方です。


結論

UEFI BIOSでは設定情報などの変数はフラッシュROMの一部の領域に保存されており、RTC RAMは互換確保のために部分的に使用されている。

しかし、次の疑問が残る。

マザーボードのCMOSクリアでは、そのフラッシュROMに保存された設定情報などはクリアされないのではないか???

今回はここで力尽きました。




2017/11/12 追記

ご注意
これ以降で紹介する内容を実施することにより、状況によってはマザーボードを破壊する可能性があります。また、この行為はメーカー・代理店の製品保証や修理対応の免責事項に該当するようです。ご自身で実施される場合は自己責任でお願いします。


UEFI BIOSの設定情報はRTC RAMとBIOSフラッシュROMに存在していることがわかりました。そうなりましたら、やはり、それを実際に自分の目で確かめずにはおられません。そこで、上記と同じ実機環境で「本当にそうなっているのか?」調べてみました。


調査方法

PCHのデータシートに書いてあるPCI to SPI インターフェイスを使いレジスタアクセスでSPIフラッシュROMを読む方法はやり方がネットには見当たりませんし、難しそうです。UEFI Shellにそれをアクセスできるコマンドもありません。まあ、アーキテクチャ依存な部分ですのないんでしょう。このマザーボードのBIOSに実装されているSPIフラッシュROMにアクセスするドライバのAPIもわかりそうにありません。そこで、より直接的な方法として、ネットでも情報が豊富なROMライターを用いた方法で調べることにします。今回はROMライターをROMからデータを丸ごと吸い上げるツールとして使用します。BIOSの書き換え・書き込み目的ではありません。


用意するもの
IMG_20171111_052206.jpg 

1.ROMライターそのもの
    今回選んだのはROMライター EZP2010です。選定理由はネットに実践事例が多くあるためと価格が安価2000円台なこと。


2.ROMライターを動かすアプリケーション(for Windows )
    ROMライター EZP2010に同梱


3.ROMライター用のデバイスドライバ(for x64 windows )
    ROMライター EZP2010に同梱


4.ROMライターをUSB接続で動かすWindows PC
  NEC LAVIE (Intel Core i3-7100U x64-Windows 10 Pro)を用意


5.ROMライターからSPIフラッシュROMにつなぐコネクタや電線や諸々
    USBケーブルはROMライター EZP2010に同梱で他は自作



ROMライター EZP2010のセットアップは下記サイトを参考にさせて頂きました。
参考サイト
ふらっと 気の向くままに
LGA1151 ASUSマザーボードBIOS復旧 1/2 ROM焼き
http://datyotosanpo.blog.fc2.com/blog-entry-103.html?id=CHOICE_SPI_PROGRAMMER#CHOICE_SPI_PROGRAMMER


ROMライター EZP2010とSPIフラッシュROMの接続は下記サイトを参考にさせて頂きました。
参考サイト
価格コム クチコミ掲示板
SpringbokさんのASUS SPIピンヘッダーによるUEFI(BIOS)更新方法
http://bbs.kakaku.com/bbs/K0000932620/SortID=20768616/#tab



ROMライター EZP2010とSPIフラッシュROMの接続で悪戦苦闘

実機のASUS H270-PLUSに装着されているSPI Flash chipは上記サイトで解説されている通り、SPIピンヘッダでメンテナンスするタイプです。しかし、このピンヘッダが曲者で、マザーボードのPower onやResetなどのシステムピンで広く使われている2.54mmタイプではなく、2mmタイプなのです(下記備考を参照)。ですので、コネクタ付きケーブルの入手性が低く、今回はコンタクトピンとケーブルのみ購入し後は、とりあえず通電すればよい程度に自作となりました。電子工作は小学生にやった時以来です。
ピンヘッダとSPI Flash chipのアサインはやはり、上記サイトのSpringbokさんのASUS ROG STRIX Z270F GAMINGと同じでした。コンタクトピンとケーブルは1本毎、ラジオペンチで挟みました。その後、ピン同士の絶縁のために、ピンにセロテープを巻きました。ピンヘッダにピンを挿すのも間隔が狭いのでライトで照らし、虫眼鏡で拡大しての作業となりました。そして、なんとか、下の写真のように接続が終わりました。ふぅーっっ。
マザーボードについてるものは念のためすべて外してください。RTC用のコイン電池も忘れずに。と言いながら、ナント!CPU、メモリ、SSDを外していませんでした(後で気づく(笑))。



セットアップ完了
 IMG_20171111_052223.jpg 



それでは、緊張のチップリード開始です。EZP2010アプリケーションのリードを実行します。いざ、吸い上げ実行。おーっと。順調に読んでいます。無事読み込み割りました。成功じゃー。やりましたー。この時点、すでにすごく達成感があります。このチップの容量は128Mb(16MB)ですが読み込み時間は1分ぐらいでした。


spiflashrom.png 
このアプリケーションでフラッシュから読み込んだ中身を見てみます。フラッシュのアドレス最下部からオフセット10hにシグネチャである0FF0A55Ahがありました。データシート(詳細はこちらの記事で、Intel Kaby Lake-S Datasheet の調査メモ)通りです。このフラッシュはディスクリプタモードであることがわかります。それでは、BIOS領域を見てみましょう!ありました。とうとう見つけましたNVRAM変数の一つである。Boot000がありました。これは、Windows Boot Managerです。 とうとうやりました。これで、今晩からぐっすり寝れます。


と、いうことでUEFI BIOSの設定情報はASUS H270-PLUSの場合はBIOS ROMチップ(SPI Flash Chip)に書き込まれていると確認できました。


また、これまで疑問だった「マザーボードのCMOSクリアとBIOS ROMチップ設定情報のクリアの関係」はおそらく、RTC CMOS RAMのクリアをBIOSで判断し、それに合わせBIOS ROMチップの設定情報でクリアすべき情報は削除していると思われます。


2017/11/15 追記

今更ですが、Windows 10のハードウェア要求仕様にUEFI NVRANに関するものがありました。

Hardware Compatibility Specification for Systems for Windows 10, version 1703
System.Fundamentals.Firmware.UEFISecureBoot

All client systems must support UEFI Secure boot.
Description
Note: These requirements are "If Implemented" for Server systems and apply only if a Server system supports UEFI Secure Boot.
1. Secure Boot must ship enabled with minimum of UEFI 2.3.1 Errata C.
|
|
30. Reserved Memory for Windows Secure Boot UEFI Variables. A total of at least 64 KB (Recommended 128 KB) of non-volatile NVRAM storage memory must be reserved for NV UEFI variables (authenticated and unauthenticated, BS and RT) used by UEFI Secure Boot and Windows, and the maximum supported variable size must be at least 32 KB (Recommended 64 KB). There is no maximum NVRAM storage limit.

ということで、Windows PC ではUEFI NVRAM 記憶容量は最低64KBは必要とのことです。




備考


ROM(Read Only Memory)だげと書き換え可能???
フラッシュ・メモリでも書き換えできるのではないですか?

 フラッシュ・メモリは書き換え可能です。しかし、消去するときはブロック単位で一括消去しなければならないので、1 バイトずつ自由に書き換えることができません。さらに、消去や書き込みにはとても時間がかかるので、プログラムの実行速度が大幅に低下してしまいます。加えて、書き換え回数の上限があるので、プログラム実行時に自由に書き換えるような使い方をするのは困難です。フラッシュ・メモリを ROM の仲間に分類しているのは、そういう理由からです。
2015 年 6 月 30 日 EDN マイクロサイト掲載の記事広告を転載。記事中の情報はすべて掲載時点のものです

TI ホーム > 技術解説ライブラリ > Q&A でよく分かるマイコン基礎の基礎 > 第 10 回 マイコンのメモリ容量って何? 大きいほどいいの?
http://www.tij.co.jp/lsds/ti_ja/general/mcu_qa/qa10_memory_capacity.page




Flash (ROM) にはプログラムコード格納用に適した小容量のNOR Flash とデータストレージ用に使われているNAND Flash の2種類がある。NOR Flashにはパラレル・タイプととシリアル・タイプがあります。2017年現在はシリアル・タイプ(SPI Flash Chip)が主流のようです。



NOR型シリアル・フラッシュ・メモリはピン数が少ないため,基板実装のコストが節約できます.接続されるCPUのピン数も少なくなるので,CPU上のI/Oの数も節約できます.これによりCPUのパッケージ・コストやチップ面積を削減できる可能性があります.
出典
フラッシュ・メモリの高速化技術と最新の不揮発性メモリの動向 ―― フラッシュの次を担うのは、フラッシュかそれとも...
柴田茂則,太田豊
技術解説 2008年7月31日
http://www.kumikomi.net/archives/2008/07/16flash.php?page=2

SPI Flashの使い方 / LogiClover開発ブログ
http://logiclover.hatenablog.jp/entry/2017/04/02/024351


NOR Flash
NAND型フラッシュメモリとは異なり、データの読み出しにおいて、RAMと同様にアドレス指定によるアクセスができ、コードをRAMにコピーすることなく直接実行すること(execute in place)が可能。データの書き込みについては、一度ブロック単位で消去した後、書き込むという手順を踏む。

NOR型フラッシュメモリ
https://ja.wikipedia.org/wiki/NOR%E5%9E%8B%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%A1%E3%83%A2%E3%83%AA



ソフテックだより 第91号(2009年6月3日発行)
技術レポート
「マイコンによるNOR型フラッシュメモリ制御」
3. NOR型フラッシュメモリ制御
3-1. 特徴
メモリからの読み出しはSRAMなどと同様に1バイト単位のアクセスが可能
メモリの消去(イレーズ)、書き込み(プログラム)は、基本的にコマンド入力によるブロック単位での操作が必要
イレーズ、プログラム等のコマンドにはメーカーにより、若干の違いがある
書き込み動作が低速である(メーカーによっては独自の高速書き込み方式をサポートしている)
リードアクセスについては、SRAMインタフェースを搭載しているマイコンであれば、ソフト的には何も意識することなくアクセスが可能です。しかし、フラッシュへの書き込み(プログラム)に関しては、コマンド入力が必要となるため、ドライバソフトが必要となります。また、プログラム時には0→1のデータ書き込みを行うことができないため、必ず書き込み対象のセクタをイレーズ(対象領域のデータがすべて0xFFFFとなる)してからプログラムする必要があります。
http://www.softech.co.jp/mm_090603_firm.htm



Flashの種類
Flashには二種類あってCFI(Common Flash Interface)というメモリのようにピンの多いタイプとSPI(Serial Peripheral Interface)というピンの少ないタイプがあります。CFIの方が原始的で通常のメモリのように読めますが、SPIはドライバが無いと読めません。
Qiita Flashのこと yamori813 2017年10月06日に更新
https://qiita.com/yamori813/items/89562bade8460ad654c5


2007/01/17
WinPC Labs
大容量かつ高速化で普及が進む、
「フラッシュメモリー」の原理を探る
豊後基彦=バッファロー
http://tech.nikkeibp.co.jp/it/pc/article/NPC/20061129/255245/



ノンマスカラブル割り込みというのは、とにかく無条件に実行される割り込みのことです
http://www7a.biglobe.ne.jp/~thor/pcnyumon/nyu050.htm
本当に初心者の人に捧げるコンピューター入門 
もう少し突っ込んだハードウェアの話


【TIPS】QI(キューアイ)ケーブル/コネクタ
「2550(コネクタ)」との呼称も用いられ、ソケット部はコンタクトピンを圧着したリード線1本1本をハウジングに挿して使用します。ハウジングは1列×n、2列×nのピン数、ピン間(ピッチ)は2mmタイプと2.54mmタイプがあり、逆挿し防止機構や引き抜き防止(ロック)機構は備えていませんが、その分省スペース性に優れています。
電子工作や自作パソコン(マザーボード、各種拡張ボード)で幅広く使用されていますが、逆挿し防止機構を持たないため特に電源を取り扱う場合は注意が必要です。
なお、ソケットに嵌合するプラグ部の指定品種は特になく、一般的に「ヘッダーピン(2mmピッチ/2.54mmピッチ)」と呼ばれるものが使用されています。
共立電子 エレショップ
http://eleshop.jp/shop/c/c11301115_p2/




参考図書

AT互換機 アーキテクチャハンドブック―
DOS/Vプログラミングのためのテクニカルデータを網羅 単行本 – 1995/3
川村 浩也  (著), 吉田 雅秋  (著)
ナツメ社




参考データシート

Intel® 200 (including X299) and
Intel® 2370 Series Chipset Families
Platform Controller Hub (PCH)
Datasheet - Volume 1 of 2

October 2017
Revision 003


Intel® 200 (including X299) and
Intel® 2370 Series Chipset Families
Platform Controller Hub (PCH)
Datasheet - Volume 2 of 2

October 2017
Revision 005


Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 3 (3A, 3B, 3C & 3D):
System Programming Guide

September 2016

CHAPTER 9
PROCESSOR MANAGEMENT AND INITIALIZATION
9.1 INITIALIZATION OVERVIEW
9.1.4 First Instruction Executed



winbond spiflash Datasheet
3V 128M-BIT
SERIAL FLASH MEMORY WITH
DUAL/QUAD SPI & QPI May 13, 2016
http://www.winbond.com/hq/product/code-storage-flash-memory/serial-nor-flash/?__locale=en&partNo=W25Q128FV


参考サイト

Intel Security Advanced Threat Research
System Firmware and UEFI Security
http://www.intelsecurity.com/advanced-threat-research/content/system-firmware.html

Attacking and Defending BIOS in 2015 | 2015-06-20 

Attacking and Defending
BIOS in 2015
Oleksandr Bazhaniuk, Yuriy Bulygin (presenting), Andrew Furtak,
Mikhail Gorobets, John Loucaides, Alex Matrosov, Mickey Shkatov
Advanced Threat Research

PDF Documents
P39,40
Where does firmware store its settings?


関連記事

コメント

ふうえん

非公開ではありません
DXR165さん

すみません。前回のコメントは、非公開ではありません。誤って「管理者にだけ表示を許可する」にチェックが入ってしまったようです。公開して構いませんので、要らぬ気づかいをさせてしまい、申し訳ありません。

DXR165さんも、ここ2、3年PCに関する記事を書かれていないようで、奇しくも私のブログと似ていることに親しみを感じています。

未だにWindows 7を主に使っており、3年以上前に組んだ、i7-6950Xを載せたASRockのX99 TaichiをCorsairのObsidian 750Dに入れたマシンが、私の最新のメインPCなのです。2枚のNVMe SSDの一方にWindows 7を入れ、一応、他方にはWindows 10を入れて、デュアルブートにはしていますが、Windows 10を7と同程度に使えるように整えるのが未だに億劫で、OS選択画面でつい7を選んでしまいます。次席マシンがX79で、3番手がX58(X58チップセットにはRTCが含まれていませんでした)、4番手がP45と、古式ゆかしい布陣のままです。

DXR165さんの他のブログを読んで、改めて勉強したいと思っています。分からないことがあれば、質問させていただきますので、よろしくお願いします。

ふうえん

DXR165

こちらこそよろしくお願いします
ふうえん様

こちらこそよろしくお願いします。
私はハイスペック仕様には疎いのでふうえん様のPC構成のすごさがわかからず申し訳ございません。
さて、X58チップセットにはRTCが含まれていないとの情報ありがとうございます。ということはつい最近?まではRTCはマザーボードにオンボードで実装されていたようですね。
勉強になりました。今後も、情報提供よろしくお願いいたします。

DXR165

ふうえん

データシートを見ると
DXR165様

データシートを見てみました。
"Intel 4 Series Chipset Family Datasheet" (March 2010) には、Real Time Clockの記載はありませんが、"Intel 5 Series Chipset and Intel 3400 Series Chipset Datasheet" (January 2012) には、RTCを含むという件の記載があり、それ以降のチップセットのデータシートには同様のRTCの記載があります。

ただし、"Intel X58 Express Chipset Datasheet" (November 2009) には、RTCを含むという記載は見られません。LGA1366のBloomfieldは、2008年11月には出来しており(i7-940等)、2011年6月発売のGulftown i7-980が最後のLGA1366です。LGA1366のCPUにのみ対応するX58が、古い型の最後のチップセットということになるのでしょう。

ふうえん

DXR165

今は何でもPCHに吸収
最新のINTEL PCHにはサンダーボルトやらUSB3.2 Gen2なども集積されているようです。技術の進歩はすごいもんですね。なかなか、こちらがついていくのが大変です。

暇人

BIOSとBIOS設定とフラッシュROMとCMOSについて勉強になりました。
室温5度で9年ものの自作PCが起動しなくなり、電源を交換する為ASUSマザーボードを露出させたところ、コイン形リチウム電池CR2032が目に入りました。問題切り分けの為CMOSクリアはせずに、電源交換のみで試行したところ無事に治りました。2日目の朝も室温がかなり低かったものの問題なく立ち上がりました。専用ソフトで起動時と定期的に自動で時計調整しているので、長生前の時計の大幅な狂いは確認しておりません。ふとここで、9年前のCR2032は機能していないはずなのに問題なく立ち上がるのはなぜだろうと思いました。そこでBIOSとBIOS設定とCMOSの構成役割を調べて、こちらにたどり着きました。事前情報で、CMOSクリアして初回起動時はBIOS初期設定で立ち上がり、設定変更しないで再度立ち上げると以前のBIOS設定が復元される情報を他所Youtubeで確認していました。おそらくCR2032が機能しなくなっても、時計は大幅に狂うものの、それ以外は利用できるような設計になっているのだろうと推測していましたが、BIOSとBIOS設定とフラッシュROMとCMOSの構成を調べたくなりました。こちらの情報をうまく理解する自信はありませんが、自分なりに疑問点が解消する貴重な情報でした。ありがとうございます。

DXR165

コメントありがとうございます。
PCに興味がある方でも、マイナーな領域であるBIOSにこだわるかたは少ないようです。しかし、なぜか、わたしはBIOSに興味をそそられ、素人ながらチマチマとネットや雑誌などで知りたいことを調べ、わかったことをブログに書いてきました。そんな、ブログ記事が少しはお役に立ったようで、うれしい限りです。今後ともよろしくお願いいたします。
非公開コメント

プロフィール

DXR165

京都府在住の磯釣り師です。
DXR165の意味は釣り竿の名前です。DAIWA DXR AIRTUNE 1.65-53が正式名称です。