INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
本業の方のお仕事が再び忙しくなりつつあるので、断続的にしばらく更新が止まることがあります。

目次 | ←前へ / 2015-02-03 00:00 / 次へ→ / 最新へ⇒

■eMMCのドライブ情報判別ってどうやって行うんだろう?

2015/ 2/ 3 0:00:00


RSSRSS配信中

https://www.inasoft.org/








先日、マウスコンピュータのスティック型PC 「m-Stickシリーズ MS-NH1」を入手した話を書きまして、内蔵されているストレージがHDD(ハードディスク)でなく、SSDでもなく、eMMCというストレージだということを書いたかと思います。

正確には「e・MMC」と書くようですが「・」という表記が国際的には扱いづらいので「e-MMC」とか「e.MMC」とか「eMMC」という表記を刷ることが多いんだとか。ここでは、eMMCという表記で扱おうかと思います。

eMMCの「e」は、「embedded」の略で、組み込みの、というような意味があるらしい。詳細はIT用語辞典の記述を参考に。同じフラッシュメモリを利用したSSDとの違いは、こちらを参考にして頂きたいですが、要は、SSDより速度は劣るがHDDよりは早く、それでいてサイズが非常にコンパクトなので、小型デバイスの組み込みに適しているということですね。

さて、そんなeMMCですが「いじくるつくーる」や「すっきり!! デフラグ」等に内蔵されている「CCPU」(環境情報の表示)が、どのように反応するのか、ちょっと楽しみなのでやってみましたら、見事に「HDD」と判別してくれました。

CCPUでは、固定されたディスク(GetDriveType() APIがDRIVE_FIXEDと返すドライブ)は、基本的にHDDと判別し、デバイスに対して回転数を問い合わせたときに「1」と返ってきたときだけ、「SSD」と判別しています。

(DeviceIoControl()でIDENTIFY DEVICEコマンドを発行し、217番目のWORDが1だったら、という判別方法を採用。ただし、UACの影響で管理者権限が足りず、そもそもDeviceIoControl()に渡すためのCreateFile()すら失敗する場合は、単に「Fixedドライブ」という判定をする)

eMMCでは、IDENTIFY DEVICEが失敗するため、「とりあえずHDDと表示している」というルートに流れている様子です。

というわけで、このルートに一工夫加えてみることにしました。

先ほど紹介した解説によれば、eMMCとは、MMCが採用している方式(I/F)でフラッシュメモリが接続されているというわけで、I/Fより向こう側はどうでもいい。むしろ、接続I/Fさえ分かれば良い。

接続I/Fを探る方法は、ネットでググるとすぐに出てきた。やっぱり、DeviceIoControlを使うんですね。発光するのは、IOCTL_STORAGE_QUERY_PROPERTYコマンドとのこと。

この結果が、MMCか、その上位互換のSDならば良いだろうと予測しまして、実装。

GetDriveType() APIがDRIVE_FIXEDと返し、かつ、DeviceIoControl()がIDENTIFY DEVICEコマンドの発行に失敗し、さらにDeviceIoControl()がIOCTL_STORAGE_QUERY_PROPERTYコマンドを発行して、その結果、接続I/FがMMCかSDならば、eMMCであると判別する。

この方法で試したところ、無事に、「MS-NH1」の内蔵ストレージが「eMMC」であると判定させることができるようになりました。


さて、接続I/Fが調べられるようになったところで、Fixed(固定)ストレージ以外の、リムーバブル(脱着可能な)デバイスでも、接続I/Fを調べてみようかと思いました。

先ほどの「MS-NH1」には、eMMCの内蔵ストレージの他に、MicroSDカードを差し込むことができるようになっているのですが、これの接続I/Fを調べてみたら「SD」と出てきました。

そりゃまぁ、SDカードを読み取るんだから、インタフェースもSDにしておくのが一番単純ではありますね。

ついでに、eMMCを名乗る内蔵ストレージも、I/F的にはSDになっていたので、そのようにして回路を単純化しているとか、何かしらの工夫なのかも知れません。

msti_ccpu.png

メインPC(DELLのInspiron620s)にくっついているSDカードを読み取るための差し込み口。これの内側は何で繋がっているのかなぁと思ったら、USBで繋がっていることが分かりました。こちらは、マザーボード自体の作りを簡易にするための工夫ってところでしょうかね。

他に、内蔵HDDはATA、光学ドライブはATAPIと表示されておりました。てっきり、SerialATAと表示されると思っていたので、ちょっと意外でしたね。

insp_ccpu.png

だいぶ前に購入した(元SONYの)VAIO P(発売当時はVAIO type Pという名前だった)もいちおう調べてみました。

vaiop_ccpu.png

メディアを差し込むまでは、ドライブとして認識されない作りになっていたのですが、メディアを差し込んだら「USB接続」と認識されました。

やっぱり、特段の理由が無い限りは、カードリーダはUSB経由でマザーボードに接続される方式が多いってことなんでしょうかね。

マザーボードとしては、その方がシンプルになるでしょうし。

「接続I/F」表示対応のCCPU(環境情報の表示)は、2月以降に公開されるソフトから、順次入れていこうかと考えています。



目次 | ←前へ / 2015-02-03 00:00 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。




2557281 (+0092)[+0622]

Copyright© 2010-2021 INASOFT