RX65N Envision Kit の、SD カードインターフェースは、SDHI インターフェースを想定した設計になっている。
しかし、RX マイコンの SDHI インターフェースでは、ハードウェアーマニュアルの情報だけでは、不明な事が多く、ソフトウェアを実装出来ない状態だった。
※SDHI のハードウェアー操作は、SD カードの制御シーケンスと密接に関連している為、これは仕方無いかもしれない・・
※何回かトライしたが初期化の段階で、思ったように動かないので、断念していた・・
※とりあえず、実績のある ChaN 氏のソフトウェアー SPI で動かしていた。
最近、ルネサスは、SD カードの操作が含まれるマネージャー関連(SD カードの初期化などが含まれる r_sdc_sdmem_rx)を公開するようになったので、具体的にどのように SDHI にアクセスするのか不明な部分が明らかになってきた。
※以前、RX64M、RX71M は、SDHI インターフェースがオプションとなっており、自分の持っているデバイスは、「SDHI なし」なので、試せないでいた・・
また、SD カードを SPI でアクセスする方法は、かなり情報があるのだが、4ビット(SD モード)でアクセスする方法は、情報が少なく、どのような初期化をするのか、イマイチ判らなかった・・・
最近ネットで、kingston SD カードの詳細な 解説を見つけ、この情報をたよりにする事で、SD モードでの推移方法がかなり詳しく判った。
それらの情報を元に、初期化プロセスを実装してみたが、正常に動作しない・・・
(1) 1GB、2GB の HC ではない SD カードだと、初期化に成功する事を発見したが、8GB、16GB、32GB(SDHC)のカードでは、初期化に失敗する。
※ACMD41コマンドで失敗しているが原因が判らない。
ACMD41 コマンドは、ステートに、BUSYがREADYに変わるまで呼び続ける仕様だが、SDHC カードの場合、いつまでたっても READY にならない・・・
とりあえず、手持ちの中で、動作する2枚のカードをテストした。
2GB のカードより、1GB のカードの方が性能が高い為、1GB のカードのみ評価した。
・1ビットバスと4ビットバスの速度比較
・クロック速度による違い
KINGMAX 1GB MicroSD CARD:
Clock: 15MHz
1 bit bus:
Open: 0 [ms]
Read: 825650 Bytes/Sec
Read: 806 KBytes/Sec
Close: 0 [ms]
4 bits bus:
Open: 0 [ms]
Read: 1233618 Bytes/Sec
Read: 1204 KBytes/Sec
Close: 0 [ms]
Clock: 30MHz:
Open: 0 [ms]
Read: 1347784 Bytes/Sec
Read: 1316 KBytes/Sec
Close: 0 [ms]
上記のように、大体1.5倍くらいの違いがある。
駆動クロックを倍にすると、10% 弱速くなるようだが、最終的に扱う場合には、ノイズ耐性、インピーダンスのマッチング(ダンピング抵抗、プルアップ、プルダウン抵抗)など色々考える事が多く、微妙だろうと思う。
流石、4ビットモードは、昔の 1GB の SD カードでも 1.3M バイト毎秒以上の速度が出るので、十分利便性が高い。(早急にSDHCカードが動かない原因を突き止めないと・・・)
最近の高速、高容量の SD カードは、高速動作時に、消費電力を下げる為、より低い電圧(1.8V など)で動作するような仕組みがあるようだ。
しかしながら、インターフェースの I/O 電圧が、低い電圧に対応していないとならない為、たとえ、電源電圧を制御する事が出来ても、対応出来ない。
RX マイコンの SDHI は、1.8V などの I/O 電圧に対応していないので、レベルシフターを間に入れるなどの対応をしないと、電圧を下げて使う事が出来ない。
又、バスのサンプリングポイントを調整するコマンドもあるようだ。
今回はここまで、SDHC における、ACMD41 が失敗する原因を色々探って、色々な実験をしたが、成果は無かった・・・
ハードウェアーで足りない部分があるのかとも思ったが、それも違うようだ・・・
ルネサスのソースコードも読んで、同じようなシーケンスを組んでいる筈だが、動かない・・・
ChaN さんの SPI 仕様では、ACMD41 は正常終了して、SDHC は動くのだが、それと何が違うのか、判らないでいる・・・