質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • C

    3809questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • SDK

    129questions

    SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

BLENanov2とSDカードのSPI通信のCMD発行方法等

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 407

46psm

score 5

BLE Nano v2というNordicのnRF52832といったチップを搭載しているモジュールを用い、SDカードとSPI通信をしようとしています。

開発環境としては、
ARM社のNordik SDKを用いkeil uVersion5で行っています.
言語は C言語です。

SPI通信をするにあたって、BLENanov2とSDカードのSPIにおいての配線はできています。
問題はプログラムなのですが、SDカードのSPIモード化をするのに詰まってしまっています。

流れとしては
・CSをHIGHにしておく(このとき通信速度400kbps以下)
・マスタからSDに80クロックのダミークロックを送る
・CSをLOWにしてCMD0を発行
・レスポンスを読み込んでSPIモードにいこうできたか判定
この際、すぐにはできないため1バイトずつ受信を行う
・CMD1を発行(初期化プロセスを起動させる)

ということが調べて分かったのですが、

/#define SPI_USE_EASY_DMA 0;
/#define SPI0_CONFIG_SCK_PIN 2
/#define SPI0_CONFIG_MOSI_PIN 29
/#define SPI0_CONFIG_MISO_PIN 30
/#define SPI0_CONFIG_SS_PIN 28
/#define SPI0_CONFIG_IRQ_PRIORITY APP_IRQ_PRIORITY_LOW

const char CMD0[] = {6,0x00,0x00,0x00,0x00,0x00,0x95};
const char CMD1[] = {6,0x41,0x00,0x00,0x00,0x00,0xf9};

int SD_init(void)
{
nrf_delay_ms(10); //wait

//CS(SS) = HIGH
nrf_gpio_cfg_output(28);
nrf_gpio_pin_set(28);

//10bite dummydata
nrf_gpio_cfg_output(2);
int j;

nrf_gpio_pin_set(2);

for(j=0;j<80;j++)
{
nrf_gpio_pins_clear(2);
nrf_gpio_pin_set(2);
}

nrf_gpio_pins_clear(2);

//CS = Low
nrf_gpio_pin_clear(28);

//CMD0の発行というのが分かりません
//それ以降もわかりません

というところまでしか書けていなく、CMD0の発行方法が分かりません。
MOSIピンにCMD0を出力させればよいのでしょうか?
またそのときのコードというか、書き方も調べてみたのですがよくわからないままでいます。

また、80クロックは上記の書き方であっているのでしょうか?
より良い書き方があれば教えていただきたいです。

ほかにも、レスポンスを判定や、1バイトずつ受信などもどうすればよいでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

46psmさん、

NordicSDK(nRF5_SDK_15.0.0_a53641a)に、SPI接続のSDカードを使うサンプルコードがあります。

  • examples/peripheral/fatfs/ ...

  • SDカードにアクセスするコードは、↓このあたりですね。
    components/libraries/sdcard/app_sdcard.c
    (sdc_cmd(...)という関数で、SDへCMDを送信。... 追っていくと、nrf_drv_spi_transfer()というAPIでSPIで送信しています)

(今後お世話になるであろう)fatfsの簡単な使い方ものってるので、そのへんも参考になると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/20 21:36

    mt08さん回答ありがとうございます!
    サンプルコードを読んでいるのですが、書き方が難しく、ピン番号を変えるだけで使えるのかなどの使い方がまだわからない状態です。
    もしなにかありましたら質問させていただきたいのでそのときはまたよろしくお願いします。

    キャンセル

  • 2018/06/22 21:43

    mt08さん
    今日fatfsのプログラムを最初のSDCのピン番号を設定して、app_sdcard.cのAPP_SDCARD_ENABLEDをmain中に書き込み、実行してもファイルが作成されなかったのですが、ほかにやるべきことがあったりするのでしょうか

    キャンセル

  • 2018/06/27 02:56 編集

    46psmさん、

    う~ん、困りましたね。
    NordicSDKを使っていくなら、デバッガー(SWD)がないと厳しいんじゃないかなぁ、と思います。

    Nordicの開発ボードnRF52-DKにはJ-Link-OBが載っているので、まずは、そういったものを使って、
    ソフト・ハードのデバッグと動作確認をしたほうが良いと思います。

    ※追記: BLENano2のDAPLinkは、SWDとして動くみたいですね。これを使って追ってみてはどうでしょう?
    >https://github.com/redbear/nRF5x/blob/master/nRF52832/docs/DAPLink_User_Guide.md#using-daplink-on-keil-5-ide

    あとは、nRF52のArduino環境やmbed環境で、SDカードライブラリを使ってみる、とかですかね。
    すくなくとも、ソフトの問題か、ハードの問題か(ハードウェアの接続が正しいか)、は切り分けられるといいですね。



    - [Arduino環境](https://github.com/redbear/nRF5x/blob/master/nRF52832/docs/Arduino_Board_Package_Installation_Guide.md)

    - [mbed環境](https://github.com/redbear/nRF5x/blob/master/nRF52832/docs/Mbed_IDE_User_Guide.md)

    キャンセル

0

nRF52832 というCPUには、SPI通信を行うモジュールが内蔵されていて、適切なコマンドを設定することにより勝手にSPI通信を行ってくれます
「nrf52832 spi」でぐぐると、それなりの工作例が出てきますんで読んでみてはどうでしょう。

まあ、SPIデバイスを使うのが難しい、という向きには、クロックラインとデータラインを出力ポートにしてコードでSPI通信の動作を行うということも可能です。
2本だけの操作でできるのでそんなに難しくはないです


nRF51822のSPIモジュール(マスター)機能の概要
ここらへんなんかがわかりやすそうですが、どうでしょうか

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/18 22:07

    y_waiwaiさん回答ありがとうございます。
    自分でも調べてたつもりだったのですがこんなに分かりやすそうなものを見落としていたんですね。明日にでも試してみたいと思います。

    キャンセル

関連した質問

同じタグがついた質問を見る

  • C

    3809questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • SDK

    129questions

    SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。