ATtiny2313を100個買うのが流行っている(2)
さっそく書き込みテストをするのだが、以前買ったATtiny2313が何故かAVRWRTで認識しないものが一つあった。たぶん、外部クロック設定にしてしまっているのだろうと思い、セラロックを取り付けたら書き込めるようになった。
外部クロック設定なんかにしちゃいかん!たかが90円のマイコンに50円もするクリスタルをつけるのは(値段的な)バランスが悪すぎる!と思ってヒューズビットを書き換えることにした。
外部クロックになってるので、これをなおすには…CKOUTこれかいな?CKはクロックで、OUTは外部…チェック入ってないけど、負論理なんかなと思ってチェックを入れたら、セラロックをつけても認識しなくなった。
データシートを調べてみたら、クロックを出力するための設定だった。出力するだけならいいのだが、クリスタルを取り付けるはずのピンに出力するので、外部クロック設定にしている状態でCKOUTにチェックを入れてヒューズを書き換えると、パラレルライタがないと復旧不可能になるようだ。(?) (追記。謎電の高橋さんから指摘をもらったが、CKOUTで出力されるのは6番ピンのようだ。ということは動かないのはおかしいのだが、要するに壊れたのだろう。ひょっとしたら壊れてないかも知れないが、壊れたことにしよう。何せ1個90円のデバイスなので…)
さっそく1個返らぬ人となったわけだが、1個90円なので気にしない!
これが1200円ぐらいする石だったら悔しくて夜も眠れないところだ。
秋月のFT232RLモジュールはディフォルトではFTDI社のVenderIDになっている。これは適当なIDに変更しておいたほうがいいだろう。(変更方法 → http://d.hatena.ne.jp/yaneurao/20080630)
そうこうしているうちに、COMポートをOpenして数秒後にエラーが出るようになった。
原因不明。しかも、データ長として5bitを指定するとOpenのときに「無効なパラメータ」というエラー(例外)が出る。
何かドライバの上書きでおかしくしてしまったのかと思ってFTCleanというFTDI社のドライバを一掃してくれるツールでドライバ削除する。(FTCleanの使い方などについては → http://www.hdl.co.jp/USB/ftcln/index.html)
Yesを適当に押していくが、削除されないなぁと思ってよく読むと…
「ドライバのアンインストールをcencelしたいのか?」
何も読まずに「Yes」押してたよ(´ω`)
FTDI社のドライバを使っているハードは結構多い。全部消したつもりだが、上のエラーは解消しない。
一度、System.UnauthorizedAccessExceptionが出ても再度Openすればあとは普通に通信出来ているようなので、そういうものだということで我慢する。
それにしても、このエラー、気持ち悪い。
serial.Open(); // ←ここで例外発生
}
catch (System.UnauthorizedAccessException)
{
serial.Dispose();
// ↑何故かcatchされたときに
// serial==nullになっていて
// ここでNullReferenceExceptionが発生。
ありえない。 何かメモリを破壊されているのだろうか。Googleで検索したら、同じ現象だと思われる、SerialPortのOpenに失敗するエラーは山のように掲示板に質問が投稿されていて、それでいて、まともな解決法は誰も答えられない。(まあ、ドライバか何かを壊しているのだろうし…)
P/InvokeでCreateFileを使ってやればそんなことは起きないので、bug持ちの .NET Framework のSerialPortクラスを使うべきではないと書かれているサイトもある。SerialPortクラスと同等のクラスを作るのは結構骨の折れる作業だ。そこまでしないといけないものなのかは私にはわからない。
(つづく)