今回はSDカード・アダプタのカード検出・ライトプロテクト検出の動作検証のレポートである。

カード検出・ライトプロテクト検出信号

ヒロセのSDカードソケットは、カード状態・ライトプロテクト状態に連動した機械的スイッチが組み込まれてる。この機能によって、カードのライトプロテクトの状態を外部に取り出すことができる。

実は昨日、Arduinoで簡単なスケッチ(プログラム)を書いてテストしたのだが、SDカードを抜き差ししても変化なく動作確認が取れなかった。
製作時のミスか回路のミスかを検討したところ、O-Familyさんの回路ではCSがLOW状態でないと信号が出てこないのに気が付きました。(@_@;;;;)

動作確認

CSがLOWになるようスケッチを修正してテストした。

/*
  カード検出・ライトプロテクト検出テストスケッチ
 */

const int detectSW = 8;     // カード検出スイッチ端子
const int protectSW = 9;    // ライトプロテクト検出スイッチ端子

const int detectLED = 6;    // カード検出スイッチ状態表示LED
const int protectLED = 7;   // ライトプロテクト検出スイッチ状態表示LED

const int csPin = 10;        // CS端子

// 状態変数
int detectState = 0;
int protectState = 0;

void setup()
{
    pinMode(detectLED, OUTPUT); 
    pinMode(protectLED, OUTPUT);
   
    pinMode(detectSW, INPUT);
//    digitalWrite(detectSW, HIGH);
   
    pinMode(protectSW, INPUT);
//    digitalWrite(protectSW, HIGH);
   
    pinMode(csPin, OUTPUT);
    digitalWrite(csPin, LOW);    // CSをLOWに(コレ重要)
}

void loop()
{
    // カード検出スイッチの状態読み出し
    detectState = digitalRead(detectSW);
    if (detectState == HIGH)
    {
        digitalWrite(detectLED, HIGH);
    }
    else
    {
        digitalWrite(detectLED, LOW);
    }
    
    // ライトプロテクト検出スイッチの状態読み出し
    protectState = digitalRead(protectSW);
    if (protectState == HIGH)
    {
        digitalWrite(protectLED, HIGH);
    }
    else
    {
        digitalWrite(protectLED, LOW);
    }
}

SDカードの状態によって、以下のようになった。

書き込み可のSD カードを挿入

書き込み可のSD カードを挿入

書き込み不可のSD カードを挿入

書き込み不可のSD カードを挿入

SDカードを抜いた

SDカードを抜いた

期待した通りの挙動。合格!

補記

カード検出・ライトプロテクト検出の動作確認が取れ、この基板は問題ないようだ。ただし、カード検出・ライトプロテクト検出の端子をどこにも繋がない状態でテストすると、SDカードを認識できない場合があったりと不安定な挙動をみせた。カード検出・ライトプロテクト検出機能を利用しないのなら両端子はGNDに落としておく必要があるかも知れない。

Eagle関係ファイル一式

あるみエンジニアさんも、ご指摘されてましたが、サンハヤトのSDカードアダプタは単なる変換基板なのに高価です。
自作すると安価にできますし、当方のSDカードアダプタは、5V対応のさらに高性能なアダプタです。
SDカード・アダプタのEagle関係ファイルを置いておきます。自己責任の範囲で、ご自由に利用してください。

SDカード・アダプタのEagle関係ファイル一式 (447 ダウンロード)

謝辞

SDカード・アダプタの回路は、O-Familyさんの回路を元に、そしてEagleのライブラリィは、後閑さん・がた老さんが提供していただいたライブラリィを元にしてます。皆様ありがとうございます。