@Juwa16Sib47

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Wio LTE JP VersionでSDカード使いたい

解決したいこと

Iot初心者からの質問となります。
Wio LTE JP VersionでSDカードを使用したいと考えていますが、
SDカード初期化の段階で発生するERRORを解消できません。
お力添えいただけると甚だ幸いでございます。

★使用したアイテム
・Wio LTE JP Version (https://soracom.jp/store/5301/)
・Transcend microSDHC 32G

★実行した内容
1:以下のリンクの内容をほとんどそのまま実行。
しかしながら、SDカードの初期化の段階で、ERRORが返ってくる。
[1]https://github.com/SeeedJP/WioLTEforArduino/blob/main/examples/basic/SDReadWrite/SDReadWrite.ino

2:過去の投稿で、本件と同じERRORについて対処されたものがあり、同じように実行。
しかしながら、どうにもERRORが解消されない。
[2]https://qiita.com/riris4488/items/910d1120dbadbd859871

発生している問題・エラー

--- START ---------------------------------------------------
### I/O Initialize.
### Power supply ON.
### Initialize SD card.
### ERROR! ###

自分で試したこと

上述の通り、過去の投稿[2]を参考に、以下の対応を実施。
1:SDカードへの配線を調べる。
[3]https://wiki.seeedstudio.com/Wio_LTE_Cat.1/#wio-lte-jp-version-v13b-schematic-online-viewer

<調べた結果>
"Adruino Pin #" | "STM32F412RG Pin" | 線名 | "SD card Pin"
51 | PC10 | SDIO_D2 | DAT2
52 | PC11 | SDIO_D3 | CD/DAT3
54 | PD2 | SDIO_CMD | CMD
53 | PC12 | SDIO_CK | CLK
39 | PC8 | SDIO_D0 | DAT0
40 | PC9 | SDIO_D1 | DAT1


2:C:\Users{ユーザ名}\Documents\Arduino\libraries\SDforWioLTE\src\utility\Sd2Card.h
に記載されているコードを確認。
MOSI以外にもPin番号が異なる様子であったので、Sdcard.hのファイルに以下の修正を実施→上書き保存。

修正前

/** SPI chip select pin */
uint8_t const SD_CHIP_SELECT_PIN = 43; //10;
/** SPI Master Out Slave In pin */
uint8_t const SPI_MOSI_PIN = 50; //11;
/** SPI Master In Slave Out pin */
uint8_t const SPI_MISO_PIN = 40; //12;
/** SPI Clock pin */
uint8_t const SPI_SCK_PIN = 44; //13;

修正後

/** SPI chip select pin */
uint8_t const SD_CHIP_SELECT_PIN = 52;// 43; //10;
/** SPI Master Out Slave In pin */
uint8_t const SPI_MOSI_PIN = 54;// 50; //11;
/** SPI Master In Slave Out pin */
uint8_t const SPI_MISO_PIN = 39;// 40; //12;
/** SPI Clock pin */
uint8_t const SPI_SCK_PIN = 53;// 44; //13;


3:再度Wio LTE JP Versionに以下のソースコードを書き込み→実行するも、変わらずSDカードの初期化の段階でERRORが返ってくる。

該当するソースコード

#include <WioLTEforArduino.h>
#include <SDforWioLTE.h>

#define FILE_NAME "test.txt"

WioCellular Wio;

void setup() {
  delay(10000);

  SerialUSB.begin(115200);
  SerialUSB.println("");
  SerialUSB.println("--- START ---------------------------------------------------");

  SerialUSB.println("### I/O Initialize.");
  Wio.Init();

  SerialUSB.println("### Power supply ON.");
  Wio.PowerSupplySD(true);
  delay(10000);

  SerialUSB.println("### Initialize SD card.");
  if (!SD.begin()) {
    SerialUSB.println("### ERROR! ###");
    return;
  }

  File myFile;
  
  SerialUSB.println("### Writing to "FILE_NAME".");
  myFile = SD.open(FILE_NAME, FILE_WRITE);
  if (!myFile) {
    SerialUSB.println("### ERROR! ###");
    return;
  }
  myFile.println("testing 1, 2, 3.");
  myFile.close();

  SerialUSB.println("### Reading from "FILE_NAME".");
  myFile = SD.open(FILE_NAME);
  if (!myFile) {
    SerialUSB.println("### ERROR! ###");
    return;
  }
  SerialUSB.println(FILE_NAME":");
  while (myFile.available()) {
    SerialUSB.write(myFile.read());
  }
  myFile.close();

  SerialUSB.println("### Setup completed.");
}

void loop() {
}
0 likes

2Answer

こんにちは。
SD.beginを以下に差し替えて、動いたりしませんか..?

!SD.begin(SD_CHIP_SELECT_PIN, SPI_MOSI_PIN, SPI_MISO_PIN, SPI_SCK_PIN)

動かなければ、ERRORとprintしているところで、SD_CHIP_SELECT_PINをprintして期待通りか確認するなど..

0Like

Comments

  1. @Juwa16Sib47

    Questioner

    早速のご返答ありがとうございます。
    コメントいただきました案を試してみましたが、上手くいきませんでした。

    一方で、過去の投稿で実行されていた対策、
    すなわち「MOSIの番号を48に修正。」をそのまま試してみたところ、
    なぜか上手くいきました。
    https://qiita.com/riris4488/items/910d1120dbadbd859871

    コメントいただき誠にありがとうございました。

51 | PC10 | SDIO_D2 | DAT2
52 | PC11 | SDIO_D3 | CD/DAT3
54 | PD2 | SDIO_CMD | CMD
53 | PC12 | SDIO_CK | CLK
39 | PC8 | SDIO_D0 | DAT0
40 | PC9 | SDIO_D1 | DAT1

この 51 とか 52 の数値は、STM32チップのピン番号であって、Arduino で扱う GPIO ピン番号とは 異なるものだと思います。

Arduino環境なら、ピン番号に、PC10 とか PD2 などの名称が そのまま使えるはずです。
(PC_10, PD_2 かもしれません)

ちなみに、SDカードのフォーマットは、普通にPCで FAT16 でフォーマットすれば使えると思うのですが、専用のフォーマットなのでしょうか?

0Like

Comments

  1. @Juwa16Sib47

    Questioner

    迅速なご回答ありがとうございます。
    コメントいただきましたピン番号変更の案を試してみましたが、上手くいきませんでした。(また、使用していたSDカードは専用のフォーマットであることは確認できず、FAT32(既定)のようでした。)

    一方で、過去の投稿で実行されていた対策、
    すなわち「MOSIの番号を48に修正。」をそのまま試してみたところ、
    なぜか上手くいきました。
    https://qiita.com/riris4488/items/910d1120dbadbd859871

    コメントいただきましたこと、心より御礼申し上げます。

  2. すなわち「MOSIの番号を48に修正。」をそのまま試してみたところ、
    なぜか上手くいきました。

    何故かではなく、それが正しいGPIOピン番号だからですね。

    信号線 STM32 ピン番号
    CS PC11 43
    MOSI PD2 48
    CLK PC12 44
    MISO PC8 40

    解決でよろしければ、当Q&Aをクローズしていただければと思います。

  3. @Juwa16Sib47

    Questioner

    補足ありがとうございます。
    正しいピン番号を指定できたため、ということで理解できました。
    また、これにより、ピン配置についての基本的な理解が不足してることも改めて認識できました。ありがとうございました。

    当Q&Aはクローズとさせていただきます。

Your answer might help someone💌