1. 7of9

    No comment

    7of9
Changes in body
Source | HTML | Preview
動作確認
ESP8266 (気圧計で使用したユニバーサル基板: I2Cを4.7kでプルアップ)
SDモジュール: MSC-MOD20 ( http://www.microtechnica-shop.jp/shopdetail/000000000026/ )

http://qiita.com/7of9/items/1a4ceb8d32ddff8a6070
の続き。

MSC-MOD20の癖を見つける。

code v0.7

v0.7 @ github

v0.2以降の主な変更

  • I2C処理を別ファイル化
    • 他のマイコン対応を考慮
  • MSC-MOD20関連の処理を別ファイル化
    • ソースのメンテ性を高める
  • SD_Init()を追加

メイン処理は以下となった。

esp8266_160730_MSC-MOD20p1.ino
#include <Wire.h>
#include "esp8266_160730_i2cWrapper.h"

/*
 * v0.7 2016 Jul. 30
 *   - MSCMOD20lib: add MSCMOD_InitSD()
 *   - MSCMOD20lib: add receiveAck()
 * v0.6 2016 Jul. 30
 *   - separate MSC-MOD20 functions to external file
 * v0.5 2016 Jul. 30
 *   - separate i2c setup/read/write to external file
 *   - rename readData() to readCode()
 *   - readData() takes adr param
 * v0.4 2016 Jul. 30
 *   - rename helloWorld() to checkWithAck()
 *   - add sendData()
 *   - rename readAck() to readReply()
 *   - readAck() returns bool type
 * v0.3 2016 Jul. 30
 *   - add readAck()
 *   - add isData()
 *   - readData() returns char type
 *   - add readBootBanner()
 * v0.2 2016 Jul. 30
 *   - fix bug > Device Address was not 7 bit 
 * v0.1 2016 Jul. 30
 *   - add readData()
 *   - add helloWorld()
 *   - add loop()
 *   - add setup()
 */

void setup() {
  Serial.begin(115200);
  Serial.println("");

  i2c_setup();
  char rcvstr[100] = { 0 };
  MSCMOD_ReadBootBanner(/*rcvmaxlen=*/100, rcvstr);
  if (strlen(rcvstr) > 0) {
    Serial.print(rcvstr);
  }
}

void loop() {  

  if (MSCMOD_InitSD(/* dstPtr=*/NULL)) {
    Serial.println("init SD: OK");
  } else {
    Serial.println("init SD: NG");    
  }

//  char rcvstr[5] = { 0 };
//  if (MSCMOD_CheckWithAck(rcvstr)) {
//    Serial.print(rcvstr);
//  } else {
//    Serial.println("ACK NG");
//  }

  delay(3000); // msec
}

結果

結果
 GHI Electronics, LLC 
----------------------
 ALFAT SoC Processor 
!00
init SD: NG
init SD: OK
init SD: OK
init SD: OK

Power on boot直後のSD Initが必ず失敗する。

癖なのか、仕様なのか。取説をもっと読む必要がある。

MSC-MOD20の起動時のメッセージ文字列があることで、Power on boot直後のSD Init()のI2C波形をとるのが難しい。
追加のI/Oピンを使ってrising edgeを発生させ、それをトリガしないといけないだろうか。