RX72T で SD カードの読み書き
以前に制作したRX72Tボード、SDカードの実験をしていなかったので、必要な部品をハンダ付けして実験した。
イモハンダ・・・
ところが、思ったように動作しない・・・
以前に RX24T 用に、RSPI のソフトを動かしていたので、問題無いと思っていたが、非常に奇妙な動作をする・・
- SanDisk のカードだと認識する。
- 他のカードだと認識しない・・・
原因不明で、随分悩んだ。
何故か、カードの挿入信号が正常では無かった・・・
原因は、カードの挿入信号用端子のイモハンダだった・・・
SanDisk のカードだと、形状がほんの少し微妙に違うのだろうと思うが、何とか接触するようだ・・・
※他のカードだと解放状態になる・・・
原因が判り、ハンダ付けをやり直して、動作するようになった。
表面実装部品のハンダ付けは、相当気を使う必要がある・・・
少し前も、RX72T ボードで I2C の実験を行ったが、動作が不安定で、原因を調べたら、RX72T ピンのハンダ不良だった・・・
リードが凄く遅い・・・
色々実験を行う過程で、mmc_io.hpp を色々改修していた。
その中で、デバッグメッセージ表示を行う部分を改修していた。
以前は、「#ifdef」でメッセージの表示を行っていた。
#ifdef MMC_DEBUG
utils::format("rcvr_datablock_: 0x%08X, %d\n") % (uint32_t)(buff)
% static_cast<uint32_t>(btr);
utils::delay::micro_second(100000);
#endif
しかし、デバッグ時に表示するメッセージを色々付けたり外したりするのには適切では無いので、以下のようにした。
// typedef utils::format debug_format;
typedef utils::null_format debug_format;
これで、上記の「typedef」をどちらか有効にするだけで、切り替わる。
※「null_format」は中身が無いので最適化されると、メッセージ表示の仕組みがそっくり無くなる。
ところが、以前にデバッグした時に、メッセージが速く流れて良く判らなかったのだろうと思うが、無効な遅延を入れていた。
そんな事はすっかり忘却の彼方になっているのは言うまでもない・・・
debug_format("rcvr_datablock_: 0x%08X, %d\n") % (uint32_t)(buff)
% static_cast<uint32_t>(btr);
utils::delay::micro_second(100000);
それが残り、1ブロックリードする度に大きな遅延が入っていた・・・
オシロで、SPCK を観測して、初めて気がついた・・・
これを消して、正常になった。
Lexar 633X 16GB (SDHC) Class10
Write Open: 200 [ms]
Write: 151 KBytes/Sec
Write Close: 17 [ms]
Read Open: 2 [ms]
Read: 654 KBytes/Sec
Read Close: 0 [ms]
※遅延が残った状態だと、リードは、4 KBytes/Sec だった・・・
I2C_sample
I2C_sample も少し手を入れた。
以前は、各 I2C デバイス毎にプロジェクトを作成していたが、I2C_sample に統合するようにした。
現在サポートしている I2C デバイスは:
I2C デバイス | メーカー | 機能 |
---|---|---|
AS5600 | ams | 12bits 磁気エンコーダ |
BMP280 | Bosch Sensotec | 温度、圧力センサ |
DS3231 | Maxim Integrated | リアルタイムクロック |
EEPROM[0-7] | Micro Chip | EEPROM |
※これから順次追加する予定。
I2C マスターコマンド
コマンド | 機能 |
---|---|
list | 対応デバイスの表示 |
scan [start=0] [end=127] | 接続I2Cされた I2C デバイスのスキャン |
exec I2C-name | list 表示されたデバイス操作を起動 |
adr [X] | I2C アドレスを設定 |
r [num=1] | デバイスから num バイトを表示 |
s data... | デバイスにデータを書き込む |
※exec で起動した場合、exit で戻る。
BMP280 コマンド
コマンド | 機能 |
---|---|
list | 温度、圧力、標高を表示 |
DS3231 コマンド
コマンド | 機能 |
---|---|
date | 日付、時間の表示 |
date yyyy/mm/dd hh:mm[:ss] | 日付、時間の設定 |
EEPROM コマンド
コマンド | 機能 |
---|---|
read ORG [END=+16] | EEPROM からデータを読み込み表示 |
write ORG DATA... | EEPROM へデータ書き込み |
AS5600 コマンド
コマンド | 機能 |
---|---|
list | 磁気検出、回転位置表示 |
run | 連続的に回転位置など表示(CTRL-Cで抜ける) |
まとめ
やはり、表面実装部品をハンダ付けするのは無理がある・・
かと言って、ステンシルを使ってハンダペーストとかを塗り、全体を焼くのも、1枚とかだと、逆に大変そうだ・・
YouTube のノートPCなどの修理動画を観ていると、ホットブロアーで、QFN などのハンダ付けを行っていた。
それを見て、ああなるほどと思ったー、今後、機器を揃えて、この方法を試してみたいと思った。