最終更新日:2021/8/12
SDメモリーカードは、1999年に東芝、松下電器産業、米サンディスクが共同で開発した小型のメモリーカードと云う事は有名です。年々大容量化が進み、TBオーダに至っています。
創世記は複数のメディアが混沌としていました。SONYのメモリースティックだとか、コンパクトフラッシュ、xDピクチャーカードが主導権争いをしていましたが、20年後にはSDカードに落ち着いてしまいました。このSDカードですが、容量制限やら仕様制限やらで外形上の問題はクリア出来ているのに認識出来ないという事があります。
今更ですがちょっと調べておこうと思いました。
※上の画は『SDカード講座』で引っかかりました。当初は16MBカードとかの容量から始まりました。特に容量制限は思い当たらないです。ファイルシステムはFAT16(一部FAT12)で最大2GBと云う制限までは可成り余裕を感じていたかと思っています。
FAT32の場合、計算上2TBの制限がかかりますが、OS側の制限で32GB上限というのが先に掛かる可能性があります。SDカードで可能なフォーマット及びその制限と云う事で調査をしました。
規格 | ファイルサイズ制限 | ディスクサイズ制限 | その他の制限 |
FAT16 | 2GB | 2GB | 最近は容量が大きいので使わない |
FAT32 | 4GB | 2TB | 一般的に使える Androidも使える |
NTFS | なし | 256TB | Windowsでは一般的だがSDカードで使うには互換性に問題あり。Androidではまず使えません。 |
HFS+ | 8EB(8000PB) | 8EB(8000000TB) | Macで使うには問題ないが、SDカードで使うには互換性に問題あり。Androidではまず使えません。 |
exFAT | なし | 16EB(16000000TB) |
SDXCという規格のSDカードであれば選択肢となります。互換性も一応あります。 SDHC規格であればFAT32に留めた方が安全です。 |
ドライブレコーダ等で使用するSDカードは32GB容量制限をよく見かけます。フォーマットとしてFAT32しかサポートして居らず、SDカードの規格としてもSDHCまでなので32GBMAXとなるようです。
32GBMaxの謎ですが、SDHC(仕様2.0)でメモリサイズは22bitで扱うことになっているモノの16bitしか使っていないことが原因のようです。単位は512kByte。512kB×16bit(65536)・・・・32GB
22bit使えば2TBMaxになりますが、互換性を考慮して挑戦するメーカはなさそうです。※SDXCに対応した方がいいESP32でSDカードを扱う場合、16GBと云う制限があります。
WindowsVistaまではOSが扱い上32GBMaxと云う制限がありました。ESP32で16GBMaxの制限はどこから来ているのか気になりました。
まず、SDXC規格に対応したモジュールを見かけませんからSDHCまでしかサポートしていないでしょう。で有れば32GBMaxでよいはずです。32GB品の方が入手性がいいので是非確認しておきたいです。実際にソースコードを紹介している方を調査してゆくと
- #include "M5Lite.h"でSDカード容量を確認すると、推奨16GBMaxに対し32GBのSDHCカードは認識されたそうです。
ところが、カードサイズの値が4GBMaxになってしまっているみたいだそうです。ライブラリの扱い自体に注意も必要かなと思われます。各ファイルサイズの合計で実現しようとしてしまうとU32の制限で頭打ちとなります。
ライブラリ側の扱いがI64に変更しないといけないみたいです。- SD.hはESP32とArduinoで別物です。この部分が整然としていないとビルドに失敗するようです。
正しくビルド出来れば32GBのSDカードは認識出来るようです。サイズが29.3GBと表示されるみたいです。
基本に立ち戻り SDアソシエーション のサイトを覗いてみました。規格についてまとまっていました。
SD | SDHC | SDXC | SDUC | |
規格 | SD1.0 | SD2.0 | SD3.0 | SD7.0 |
容量 | 最大2GB | 2GB超 最大32GB | 32GB超 最大2TB | 2TB超 最大128TB |
ファイルシステム | FAT 12, 16 | FAT 32 | exFAT | exFAT |
仕様バージョン | 時期 | 内容 |
1.0 | 1999 | |
1.0.1 | 2000 | DefaultSpeed |
1.10 | 2004 | HighSpeed |
1.20 | 2005 | MicroSD |
2.00 | 2006 | SDHC Class2/4/6 |
3.00 | 2009 | SDXC Class10 |
3.01 | 2010 | UHS-T SpeedClass1 |
4.00 | 2011 | UHS-U |
4.20 | 2013 | SpeedClass3 |
5.00 | 2016 | VideoSpeedClass |
5.10 | 2016 | A1 |
6.00 | 2017 | UHS-V A2 |
7.00 | 2018 | SDUC SDExpress |
7.10 | 2019 | MicroSDExpress |
8.00 | 2020 | SDExpress |
明確になった事があります。
- 容量と規格は関係があり、64GBのSDカードでSDHCと云う事はあり得ない。同様にSDXCの32GBも存在しない。
- ファイルシステムについて SDアソシエーション では固定化している。 NTFSを使うことは仕様外という解釈
- SDXC/SDUCではexFATが採用されている
- miniSDの規格が排除されているようです。
- SDカードは端子数9pin固定だと思っていましたが、UHS-II と UHS-IIIと云う規格では低電圧差動信号(LVDS)伝送をして高速化しており、端子数17pinになっています。
マイコンからアクセスする場合、SPIかと思います。そのため1MB/s(10Mbps)が精々なのかと思われますので、現状では書込速度には拘らなくてもいいのかと思います。
フォーマットですが、マイコン用のライブラリでexFATに対応したものは見つかっていません。
また、ラズベリーパイの場合ですが、ラズビアン標準ではexFATは認識しないようです。ただ、インストール処理をすれば使える様になっているみたいですね。その意味では一般には32GB、拡張すれば2TBまでは可能と云う事ですね。既にMicro SD 2TBは市場に出ているモノの1TBとの価格差が大きいですね。
2021年8月26日
モバイルルータ:GL-AR750に使用出来るTFカードですが、Max128GBと云う制限あることが判りました。ただ制限理由が判りません。実際に256GBのカードが使えるかどうか確認すればいいのですが、そのレポートは見つかっていません。
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。