STM32F7を使ってみる15 -工業用SDカードからSMART情報をスマートに読み出そう-

あれ?ESP-WROOM-32が秋月から発売されて絶好のチャンスなのに
ESP-WROOM-32の記事書かないのですって?
あああれね…去年の時点で飽きました・・・今更になって弄ってるとか時代遅れ
ですよぅ!(挑発


今回はS.M.A.R.T.(以下SMARTと記載)対応のSDカードからSMART情報を読み出して
みます。別にF7じゃなくてもよいのですけど次回以降のネタに繋がる内容なので
しばし御静観願います。
今回もSTM32F746G-Discoveryを使います

工業用のSDカードの中にはSSDやHDDのようにSMARTの情報が取れる希有なものが
存在しております。残念ながら一般に購入出来る民生向けSDカードではその
ような機能は搭載されておらず、SMART対応どころか工業用SDカードも入手が
ごく限られております。もちろん値段も民生品に比べ極めて高価です。

なんで高価かと言うとカードの動作に関する"信頼性"を保証しているからに
つきます。皆さんご存知の通り2017年現在市販で流通しているSDカードは明記が
無い限りはTLCタイプのNANDフラッシュメモリが使用されており、TLCという
のはSLCやMLCに比べて大容量が取れる割にデータ保持のための寿命が短い、
また書き換えできる回数も極端に短いという代物となっております。

一方工業用SDカードは4GB以下はSLC,それ以上の容量でもMLCを保証しており
(容量を犠牲にして疑似的にSLC風の動作をするpSLCやaMLCなんで奴もありますが)
さらにSDカード内コントローラのファームウェアもデータ保護に特化した
特別となっております。たとえばECCチェック機能とかパワーダウン
プロテクションとかオートリフレッシュ機能とかバッドブロックマネージメント、
ダイナミック+スタティックウエアレベリング等々いろいろありますが、実は
これTLCカードを世に出すために必須の技術でそれが耐久性がもともと高い
SLCやMLCを使用した工業用製品にフィードバックされて最強に強まった
信頼性を謳うわけです。

というわけでこれらの機能実装は最早当たり前となった今、カードの健康情報を
把握するための機構を仕込む事が新たな付加価値として注目されており、
各社でSMARTもしくは独自の寿命診断を組み込んだ工業用SDカードが販売
されております。


で、われわれホビイストが問題となるのはその工業用SDカードの入手から
始まりさらにSMART情報を取得するための"情報"を入手し利用せしめるまでに
多くの壁があることです!

まずDigikeyやmouser,RSの海外在庫くらいからしか工業用カードの入手法が
日本国内からではまず困難で、さらにSMART対応と謳っていてもカタログの
隅っこに(※オプション対応)とか書いてあったりして高い金出して購入したのに
目当てのSMART機能が実は搭載されてなかったとか悲惨なことがほとんどです。

それでやっと入手にこぎつけたとしてもSMART情報を取得するための手段や
ツールは公開されておらずメーカに直接問い合わせることになりますがほとんどの
場合対企業間の問い合わせにしか対応してなかったり(もちろん個人事業主として
問い合わせてもTHE・シカト)、SDAのライセンスに加入していないと情報を
渡すことができないよ
などつっけんどんの反応しかもらえません。

ねむいさんも方々に手を尽くしましたが個人レベルではなしのつぶてて困り果て
ていましたが灯台下暗し、DELKINというメーカの工業用SDカードを扱っている
代理店が日本国内に存在しておりました
。こちらは在庫があれば
一枚から対応(無ければ受注生産20枚単位)というホビイストにもうれしい
対応でしたので早速1GB品を注文し、ゲッツしました。



でかいDELKIN箱に小さいMicroSDが対照的です。


今となっては微々たる容量の1GB、見た目も普通のMicroSDカードですが…
このDELKINのU331というシリーズは中身は某粉飾決算にチャレンジしたおかげで
倒産寸前の日本メーカのSLC型NANDフラッシュが使用されております!
なにルネサスより先に死んでんだよ東芝!!11!11!!1!!!!!!
動作温度範囲もやたらと広くて-40~+85度まで保証しております。

ひとまずUSB接続のカードリーダーに接続してパフォーマンスを見てみました

規格的には"2GB以下のSDSC"に位置するカードなのでUHS-1とかには対応しておらず
理論上最大でも25MB/Secの転送スピードとなりますがマイコンで使用する限りでは
ハイスピードモード(最大SCLK=50MHz)に対応さえしてれば全く問題ないです。


SMART情報をPC経由で取得するために"USBカードリーダ"を用いて
"DELKIN DashBoard"なるアプリケーションを使用する必要があります。
ねむいさんの持っているTranscend製のUSB3.0カードリーダーは無事に
SMART情報を読み出すことができました。やったぜ!
どういう理屈でSMART読み出してるかしらないけど(伏線)

ちなみに"DELKIN DashBoard"の動作保証しているDELKIN製カードリーダーは
上記のねむいさんのもってるTranscendのと全く同じチップが使用されてます。


お次はSTM32を使って動作させてみます。

FatFs module test terminal for STM32F427IIT6
LFN Enabled, Code page: 932
AppVersion : W.I.P
Build Date : Dec 6 2016
>fg piano
rc=0 FR_OK
>fo 1 ftbt.mp3
rc=0 FR_OK
>fr 132949600
132949600 bytes read with 14338 kB/sec.
>ds 0
rc=0
Drive size: 1947648 sectors
Erase block size: 8192 sectors
Default r/w block size: 512 bytes
Card type: SDv2(Byte)
SpeedMode: HighSpeedMode(51.43MHz)
DataBusWidth: 4bit

CSD:
00000000 00 5E 00 32 5B 59 A3 B6 FF FF FF 80 0A 40 00 6D .^.2[Y.......@.m
CID:
00000000 58 44 44 44 44 49 4E 43 30 6D 6D D4 59 01 0C 49 XDDDDINC0mm.Y..I

Parsing SD CID Register
Manufacturer ID :0x58
OEM/Application ID :DD
Product Name :DDINC
Product HwRev :3
Product SwRev :0
Serial Number :0x6D6DD459
DateCode.Month :12
DateCode.Year :2016

OCR:
00000000 80 FF 80 00 ....
SD Status:
00000000 80 00 00 00 00 00 00 28 03 03 90 02 00 AB 00 00 .......(........
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
SCR:
00000000 02 25 80 00 01 00 00 00 .%......

Parsing SCR
SD Spec Version :2
SD Spec Version 3 :1
SD Spec Version 4 :0
SD Spec Version X :0
SD Security :2
SD Bus Width :5

SD_Spec V3.0x!
Detected as SDSC Card!
Available NS(or HS) Mode Only.
>

先ずはいつものでSDカードの情報を読み出してみました(これだけSTM32F429を使用)
2016年製!
ATPの工業用カードでもそうでしたが現在はW/R性能はSDカード内コントローラの
ファーム次第なのでSLCとはいえ転送速度がめちゃくちゃ早いとは言えません。
どちらかと言うとSLCを使う理由は速さよりもデータの確実性を求める方向に概念が
遷移していると感じます。


そしてついにSTM32F7-Discoveryを使いSMART情報の読み出しに掛かります!
このDELKINのカードはSDカードに昔から存在するCMD56という"汎用コマンド"を
用いてSMART情報の取得を行います。SMART情報を取得する方法は各社バラッバラで
門外不出の所もありますがDELKINは"CMD56でSMART採れるYO!"と公言している
ためかなりフレンドリーと感じます。

この"CMD56"は引数によってデータの受信送信を変えることができるコマンドで
CMD17等のシングルブロック転送と同様最小512Byte単位でやり取りをおこないます。
DELKINカードにおいては特別な引数で、ある一定の順番で、CMD56の送受信動作を
行うことにより目的とするSMARTの情報を得ることができました。





DelkinDashboardとCMD56で読みだしたSMART直値をUARTに吐かせて値の
比較です。カードに何らかの書き込み動作を行うと電源再投入時にDashboardの
"TotalPowerupCount"に相当するSMART直値が更新されているので正しく
SMARTが読めていると判断しました。
ところで具体的にどうやってCMD56投げたのと知りたい方がいると思いますが
対価を払って得た情報ゆえこのぶろぐ上で詳しく公表できません
が…
…おや?このデータシートDELKINと関係ないのになんだかそっくりだー(棒読み


詳しくは言えませんが512バイト分のSMART情報のフッタに相当する部分の
データがCIDの情報と一致しておりました。何かのvalidationに使うので
しょうか???????(棒読み
まぁあまり重要な情報ではないでしょう(伏線




このDELKINカードを選んだ理由は拙作のSTM32Primer2を使ったGNSSロガー
信頼性向上につきます。一度Primer2の筐体中に組み込んでしまうと構造上
ケースの中にカードが封印されてしまうため簡単に取り出せなくなるのでSDカードの
寿命診断を何らかの形で外部から行いたいと思いSMARTが取れるカードを選んだ…
と言う経緯です。
次回のちょっとネタバレになりますがこのGNSSTrackerのマスストレージモード
でもDelkinDashboardを使いSMARTの取得に成功しています。
なんでCMD56発行してないのにSMART採れるんでしょうね(意味深


願わくばSMARTを利用した寿命診断機能がSDAで正式に規格化され、民生用の
SDカードでも気軽に寿命診断できる素敵な時代が来るようになることを願います。

だからSDAの中の人のPanasonicさん頼みますよ!
なぜか不自然なくらいパナ推しのねむいさん。






ここでねむいさんFAQ特別編
Q:ねむいさんねむいさん、確実にSLCのカードを見極める方法を教えてくださいっ!
A:
 SLCってカードにでかでかと書いてあるカード選べばOKです☆

Go to top of page