Arduino勉強会/0J-SDライブラリの移植
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[Arduino勉強会]]
#contents
2015/02/15からのアクセス回数 &counter;
** Arduino SDカードライブラリ [#x0dbac65]
SDカードシールドを作ってから、LBEDにはまだSDカードライブ...
通常なら、LBEDは完全を目指す物では無いのでまぁいいや的に...
lbeDuinoではシールドを作成したガジェットを外に持ち運ぶこ...
このような状況で記録手段がないことは大きな問題と考え、思...
移植に取り掛かりました。
この記事のみどころ?は、どうやって移植したかでは無く、ど...
*** Arduino SDカードのマシン依存部 [#s8c35f01]
移植の元にしたのは、Arduinoアプリケーション配下の(MacOSX...
このソースはとても良くできていて、SDカードのSPIの処理に関...
lbedへの移植は、Sd2Cardクラスのメンバ変数にSPIクラスの_sp...
((ソースの見通しが良いようにSOFT_SPIとOPTIMIZE_HARDWARE_S...
Sd2Card.hの変更点
#pre{{
//#include "Sd2PinMap.h"
#include "SdInfo.h"
#include "lbed.h" // LBEDのヘッダをインクルード
// コンストラクタの変更
Sd2Card(void) : errorCode_(0), inBlock_(0), partialBloc...
spi_(MOSI, MISO, SCKL), chipSelect_(D4){}
// spiSend, spiRecの変更
void spiSend(uint8_t b) { spi_.write((int)b); };
uint8_t spiRec(void) { return spi_.write((int)0xFF); };
// private:宣言の追加
SPI spi_;
DigitalOut chipSelect_;
}}
ここでは、SDカードシールドに合わせchipSelectをD4に固定と...
** 失敗談 [#bbba690a]
最初は、SPIのSCKLのピンをD10に割り当てており、SDカードの...
ここでもLabToolのプロトコルアナライザーが役に立ちました。
&ref(LabTool_SPI.png);
LabToolとlbeDuinoとの接続は、以下の通りです。
| LabToolピン| ケーブルの色 | 機能 | lbeDuino |h
| DIO_3 | Orange | SPI-SSEL | D4 |
| DIO_4 | Yellow | SPI-MOSI | D11 |
| DIO_5 | Green | SPI-MISO | D12 |
| DIO_6 | Blue | SPI_SCK | D13 |
*** 初期化は規定どおり [#a816f3bb]
SDカードの処理手順は、ChaNさんの
[[MMC/SDCの使いかた>http://elm-chan.org/docs/mmc/mmc.html]]
を参考にさせて頂きました。
初期化のchipSelectがHightでSCKLを74クロック以上入れるとあ...
&ref(th_SD_init.jpg);
*** MBRの読込失敗 [#h0ea7b88]
初期化でSDカードの情報のタイプはきちんと読み込んでいるの...
ここでもLabToolが役立ちました。以下の画面では、0x0が続い...
&ref(th_read_MBR.jpg);
このような状態ではSPIの読込が原因では無いことが明らかです。
そこで、FAT関連の構造体をよく見てみると原因が隠れていまし...
FatStructs.hを見てみると、fat32BootSectorの構造体が以下の...
#pre{{
struct fat32BootSector {
/** X86 jmp to boot program */
uint8_t jmpToBootCode[3];
/** informational only - don't depend on it */
char oemName[8];
/** BIOS Parameter Block */
bpb_t bpb;
/** for int0x13 use value 0X80 for hard drive */
uint8_t driveNumber;
/** used by Windows NT - should be zero for FA...
uint8_t reserved1;
/** 0X29 if next three fields are valid */
uint8_t bootSignature;
/** usually generated by combining date and ti...
uint32_t volumeSerialNumber;
/** should match volume label in root dir */
char volumeLabel[11];
/** informational only - don't depend on it */
char fileSystemType[8];
/** X86 boot code */
uint8_t bootCode[420];
/** must be 0X55 */
uint8_t bootSectorSig0;
/** must be 0XAA */
uint8_t bootSectorSig1;
}__attribute__ ((packed));
}}
volumeSerialNumberの後に、char型でvolumeLabel[11], fileSy...
32bitマイコンのLPC1114では、構造体のアライメントが32bit単...
これで何とかSDライブラリが動くようになりました。
*** 動作確認 [#r2b0eca7]
[[Arduino勉強会/0G-lbeDuinoシールドを作る]]の結果を再度掲...
&ref(SD_Info_monitor.png);
** コメント [#i789bc57]
#vote(おもしろかった[1],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。勉強会で分から...
スパム防止に画像の文字列も入力してください。
- Lab ToolをLLのRasPiを見て購入し少しさわったが、取説も英...
- sakazakiさん、コメントありがとうございます。Lab Toolの...
#comment_kcaptcha
終了行:
[[Arduino勉強会]]
#contents
2015/02/15からのアクセス回数 &counter;
** Arduino SDカードライブラリ [#x0dbac65]
SDカードシールドを作ってから、LBEDにはまだSDカードライブ...
通常なら、LBEDは完全を目指す物では無いのでまぁいいや的に...
lbeDuinoではシールドを作成したガジェットを外に持ち運ぶこ...
このような状況で記録手段がないことは大きな問題と考え、思...
移植に取り掛かりました。
この記事のみどころ?は、どうやって移植したかでは無く、ど...
*** Arduino SDカードのマシン依存部 [#s8c35f01]
移植の元にしたのは、Arduinoアプリケーション配下の(MacOSX...
このソースはとても良くできていて、SDカードのSPIの処理に関...
lbedへの移植は、Sd2Cardクラスのメンバ変数にSPIクラスの_sp...
((ソースの見通しが良いようにSOFT_SPIとOPTIMIZE_HARDWARE_S...
Sd2Card.hの変更点
#pre{{
//#include "Sd2PinMap.h"
#include "SdInfo.h"
#include "lbed.h" // LBEDのヘッダをインクルード
// コンストラクタの変更
Sd2Card(void) : errorCode_(0), inBlock_(0), partialBloc...
spi_(MOSI, MISO, SCKL), chipSelect_(D4){}
// spiSend, spiRecの変更
void spiSend(uint8_t b) { spi_.write((int)b); };
uint8_t spiRec(void) { return spi_.write((int)0xFF); };
// private:宣言の追加
SPI spi_;
DigitalOut chipSelect_;
}}
ここでは、SDカードシールドに合わせchipSelectをD4に固定と...
** 失敗談 [#bbba690a]
最初は、SPIのSCKLのピンをD10に割り当てており、SDカードの...
ここでもLabToolのプロトコルアナライザーが役に立ちました。
&ref(LabTool_SPI.png);
LabToolとlbeDuinoとの接続は、以下の通りです。
| LabToolピン| ケーブルの色 | 機能 | lbeDuino |h
| DIO_3 | Orange | SPI-SSEL | D4 |
| DIO_4 | Yellow | SPI-MOSI | D11 |
| DIO_5 | Green | SPI-MISO | D12 |
| DIO_6 | Blue | SPI_SCK | D13 |
*** 初期化は規定どおり [#a816f3bb]
SDカードの処理手順は、ChaNさんの
[[MMC/SDCの使いかた>http://elm-chan.org/docs/mmc/mmc.html]]
を参考にさせて頂きました。
初期化のchipSelectがHightでSCKLを74クロック以上入れるとあ...
&ref(th_SD_init.jpg);
*** MBRの読込失敗 [#h0ea7b88]
初期化でSDカードの情報のタイプはきちんと読み込んでいるの...
ここでもLabToolが役立ちました。以下の画面では、0x0が続い...
&ref(th_read_MBR.jpg);
このような状態ではSPIの読込が原因では無いことが明らかです。
そこで、FAT関連の構造体をよく見てみると原因が隠れていまし...
FatStructs.hを見てみると、fat32BootSectorの構造体が以下の...
#pre{{
struct fat32BootSector {
/** X86 jmp to boot program */
uint8_t jmpToBootCode[3];
/** informational only - don't depend on it */
char oemName[8];
/** BIOS Parameter Block */
bpb_t bpb;
/** for int0x13 use value 0X80 for hard drive */
uint8_t driveNumber;
/** used by Windows NT - should be zero for FA...
uint8_t reserved1;
/** 0X29 if next three fields are valid */
uint8_t bootSignature;
/** usually generated by combining date and ti...
uint32_t volumeSerialNumber;
/** should match volume label in root dir */
char volumeLabel[11];
/** informational only - don't depend on it */
char fileSystemType[8];
/** X86 boot code */
uint8_t bootCode[420];
/** must be 0X55 */
uint8_t bootSectorSig0;
/** must be 0XAA */
uint8_t bootSectorSig1;
}__attribute__ ((packed));
}}
volumeSerialNumberの後に、char型でvolumeLabel[11], fileSy...
32bitマイコンのLPC1114では、構造体のアライメントが32bit単...
これで何とかSDライブラリが動くようになりました。
*** 動作確認 [#r2b0eca7]
[[Arduino勉強会/0G-lbeDuinoシールドを作る]]の結果を再度掲...
&ref(SD_Info_monitor.png);
** コメント [#i789bc57]
#vote(おもしろかった[1],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。勉強会で分から...
スパム防止に画像の文字列も入力してください。
- Lab ToolをLLのRasPiを見て購入し少しさわったが、取説も英...
- sakazakiさん、コメントありがとうございます。Lab Toolの...
#comment_kcaptcha
ページ名:
SmartDoc