遭遇した不具合と原因たち
投稿日時 2015/12/14 01:13:59いらっしゃませぇ~
おとは~どぅぇぁの社 へようこそ(ノ)゚∀゚(ヾ)
こちらのお部屋では実際にルネサス社のマイコンを使ったハードウェア開発で発生した不具合について原因調査の方法や実際の原因などの技術的なノウハウを赤裸々に!?お伝えしちゃいます☆
事例1 SDRAM実装トラブル
SDRAMと言えばメインメモリですが、おとはは比較的簡単に手に入ったSDRAMの中では容量の大きい32MBのものを使用しています。
マイクロン社のMT48LC16M16A2と言う型番のもので16ビットアクセスが可能なものです。
ルネサスのマイコンはSDRAMがハードウェアでサポートされているのでしっかりとした配線とアプリケーションノートに基づいて正しく初期化設定することで利用することが可能です。
実際のトラブル
-
SDRAMの設定ミス
アプリケーションノートを眺めて計算を行って直接数値を書いてデバッグしていた
だが、実際のところ計算を途中で間違えていて正しい数値ではなかった。
気づいたのは管理処理をクラス化して外部からメモリの仕様を外部から渡してプログラムで計算してみて結果が違ったからです
#2の問題の調査をしていた時に気分転換にコードしたのが良いきっかけだと思います
外部パラメータ設定の例
-
MCUと変換ボードの接触不良
これが一番はまったところです
デバッガーでメモリの状態を見ると書き込みが出来ているように見えて実際のところ先頭アドレスに書き込みした内容が2M先や4Mにも書かれているという不思議な状態になってしまっていた
この不具合のために7日くらい使ったかと思う。
ただ7日悩んだわけではなく、バウンダリスキャン技術を使って自作のバウンダリスキャン環境を作るのに3日くらい使ってます
その他は単純に悩んでいたか配線のし直しとかに使いました
1つ1つマイコンをテスターでチェックするのも大変ですがやっておくべきですね
バウンダリスキャンは別途 まとめたページ を作ってますのでご覧くださいませ。
最初に半田づけした時の写真
ちゃんと半田出来ているように見えなくもないけど出来ていない・・・
やることがなくなった時に初心に返ってテスターで見てみたら見事アウトでした
-
ジャンパケーブルの断線
これはSDRAMだけじゃないけど特に54ピン分あるので顕著に発生したもんだいです
ジャンパーケーブルが60本セットになっている便利なやつを使っているのだけど線材がとっても細いのですぐに内部でちぎれてしまうようです
秋月電子で購入したものなのでサンハヤトなどのピンと導線が分かれていないタイプの方が良いと思います。
これもテスターでチェックすればわかります。
私の場合は取り付けるとき・取り外したとき両方ともテスターでチェックしてから利用するようにしていますが少し触れると断線する中途半端なやつは見つけるのが大変なので消耗品ですが高い良品を買うか定期的に買いかえるべきだと思います。
-
アプリケーションノートの掲載ミス?
MT48LC16M16A2は54ピンの端子がありますがその中でアドレスに使用するピンは15本あります。
そのうち、バンクの切り替えに使用する線の接続先が若干違うのです
16ビットでのアクセスの場合はA15~A1を使用するのでA15とA14がバンク切り替えに使用すべきですがA14とA13になっている
この点が違うところなので配線に戸惑ってしまった
アプリケーションノートは間違っていたがハードウェアマニュアルは正しかったのでまあ良しとしますが・・・
アプリケーションノートの”16bit SDRAM 接続およびアクセス例”を参考にされる際は使用するSDRAMのICの仕様とMCUのハードウェアマニュアルもどっちもしっかり読んで実装してください
事例2 STDOUT実装トラブル
プログラムの実装とデバッグとなればデバッガーがほぼ必須と思いますがルネサスのマイコンだとデバッガーはあっても実行ログを出力する機能がない。(もしかしたらあるかもしれないけど)
無いなら実装すればよいだろうってことでSCI、シリアル通信を使って実装することにしました。
Windows上でTeratermを使用してCOMポートを使用したシリアル通信で簡単に実装が出来ますのでおすすめです。
ピン数は2ピンとシンプルだしサンプルプログラムもあってかなり簡単に実装できるので実装トラブルはほぼなかったです。
実際のトラブル
-
ごみ文字が送られてくる
この問題はパターンとして2つありました。
1つは電源を入れている状態での配線をいじったり、電気的なノイズを加えるようなこと(指で触る)をするとごみデータが入るようになります
この場合は、MCUの電源を入れなおしてあげれば治ります。
2つ目は転送速度です
Windows側のCOMポートは通信速度がある程度固定になっています。
MCUの種類によっては誤差が出てしまうので分周機能をうまく使って調整しないとごみデータが乗るようになりますのでご注意下さい。
事例3 Charactor LCD実装トラブル
ハードウェア自身に表示機能をつけるのもデバッグ機能としてうってつけです
文字だけでもあるとかなり変わるので16文字が2行出せるLCDを実装することにしました
配線数が少ない方がMCUの足に困らないしトラブルも少ないだろうってことでI2C通信出来るものを秋月電子で購入してきました。
ややトラブルはありましたけど何とか実用できるレベルになりました
実装時にArduinoのサンプルでLCD制御するものがあるのでそちらのソースコードを利用するとかなり素早く実装出来ますよ。・・・ただし、通信部分はライブラリになっているので参考になりません。
実際のトラブル
-
反応が全くない
基本通信はMCUをマスターにしてLCDをスレーブにした上で会話をしていく形になります。
必要な命令を送っていくのですが返事が来ない・・・と言うかすぐにエラーになってしまいました。
原因は処理速度が速すぎるということで何かしらの通信をしたら少し待ってあげないと駄目だということがわかりました。
最終的には各命令後の待ちを100ナノ秒くらい入れれば動くのでかなり適当に設定した待ち時間ですがそのまま利用しています。
事例4 EEPROM実装トラブル
色々な機能を実装していくと色々なパラメータを保存しておきたくなります
SDカードを実装出来ればそちらでも良いのですが私の場合はSDカードの実装にトラブルが発生してしまったため先にEEPROMの実装をすることにしました
EEPROMもSDカードもSPI通信(ルネサスマイコンではSCIを利用しています)で動くのでどっちかが出来ればもう片方も簡単だろうってことでどちらが先でも良かった
実際のトラブル
-
データの書き込みだけできない
EEPROMにはレジスタがありこちらの情報を見て「プロテクトされているか」、「ビジーか」、「書き込み可能か」など判断して利用します
このレジスタの情報を取り出したり、レジスタのライト許可設定だけは変更することが出来た
なのでデータの読み書きも出来ると思っていたら、見事書き込みが出来なかった。
原因はCSのLowとHighの切り替え不足だった
基本命令要求前にCSをLowにして用事が済んだらHighにしなければいけないWrite前は書き込み許可の命令を出すのだがこの後にCSを一度Highにしなくてはいけないのだがそれを忘れていた
それだけと言えばそんだけだが1日くらいはまってしまった
事例5 SD Card実装トラブル
ポータブルプレイヤーの開発を目指しているおとはにとってデータを入れておくハードウェアは必須だ
だが、意外に仕様が複雑で実装するのも大変だということが身にしみてわかった
SDカードモードだと高速に利用できるがライセンス料金が発生するため個人では厳しい
比較的簡単に実装出来るSPI通信を利用することになるのだがこれも意外とはまることになりました
実際のトラブル
-
全くもって何も応答がない
現在調査中です・・・
2015/12/14 01:11:52 by Otoha
今後も色々経験したトラブルについてご紹介していきたいと思います