汎用 USB-IO 互換ファームウェアへのチャレンジ。一昨日作成した AT90S2313 基板を動かしてみる。本家 AVR-USB のソースをベースにと思っていたが、ふと魔が差して ATmega8 用のソースから AT90S2313 用への変更にチャレンジしてみる。main.c のポート設定を PORTB/D のみとし、USB バス接続ポートを PORTB から PORTD に変更したことに合わせてポート初期設定値の変更と usbconfig.h のポート指定マクロ USB_CFG_IOPORT を PORTD に変更した。そして Makefile のデバイス指定を ATmega8 から AT90S2313 に。こうして出来たソースで何の問題も無く AT90S2313 でも動くようになった。スゴイな AVR-USB と WinAVR のポテンシャルは。
しかしその過程で AVRISP にトラブル発生。突如 AT90S2313 への書込みが出来なくなった。ATmega8 への書き込みは出来るのだが AT90S2313 相手だとチップや基板を変えても書き込み時にエラーが発生する。何故だ?とりあえず以前使っていた AVR910 互換ライタで難を乗り切ったが、このまま AVR910 ライタを使うのもなあ。しかし USB 対応の AVRISP mkII がもうすぐ出ることを考えると今 AVRISP を買いなおすのもなあ。しかし AVRISP mkII はレガシーデバイスには対応しないから AVRISP があっても悪くないよなあ。どうしようかなあ。とりあえず Digi-Key Wish リストを更新しようぜ。
昨夜から島田奈美が続く。今まで気にもしていなかった「ぶきっちょな手作りの夢」というフレーズに、電車の中で泣きそうになった。気持ちとしては常に愚直に攻めたいのだが、な。
昼間は農大で学園祭の香りを感じ、夜は堀北真希で文化祭の香りを感じる。かつては自分にもあったんだよな。今夜は島田奈美を堪能しよう。
という訳で oddebug.c を有効にしてシリアル出力で変数の中味を確認。色々と見ていた結果、ようやく原因が判明。ベンダリクエストが PC から送られてきても usbFunctionWrite() が呼ばれていなかった。結局 usbProcessRx() の中でベンダリクエストが来た時の処理に flags = 0 を追加して usbFunctionWrite() が受信データと共に呼ばれるようにした。ヤッツケではあるがこんなソースで ATmega8 による汎用 USB-IO 互換 HID デバイスが形になった。
今は出力だけしか確認していないので、次は入力か。それとも DIP 20pin での実現に走るか。いずれにしても usbdrv は公開するのに回路図や英文ドキュメントを用意しないといけない。この辺もある意味チャレンジか。
続いて HID 互換となるべくファームの修正を行う。自分で作った EZ-USB 用 HID 互換ソースを参考にしてみる。公開されている DLL を活用できるようにベンダ ID やプロダクト ID はモルフィー企画のものをそのまま利用。この辺の基本的なパラメータは usbconfig.h に集約されているのか。やっぱりうまく出来ているな。
次に Configuration Descriptor 配列に手を入れる。Endpoint Descriptor の前に HID Descriptor を挿入し Total Length の値を修正する。更に Report Descriptor を新規に用意し usbdrv.c の usbProcessRx() に応答処理を仕込む。そして main.c を適当に修正。これで OK なハズだ。
早速 PC に挿してみる。一応 HID デバイスとしての認識はされるのだが、デバイスマネージャで見ると黄色の!マークが付いている。やっぱり問題があるようだ。こういう時のために作ったイカサマ USB バスモニタを引っ張り出す。DATA0 と DATA1 をフィルタ条件にして何度もモニタする。何となく Report Descriptor 要求に対して応答してないということが見えてきた。
結局 usbProcessRx() の中で応答処理を書く所を間違えていたのが原因だった。修正して無事 HID デバイスとして認識された。やっぱり測定器があると効率良いな。ロジアナで波形を見て手作業で NRZI 変換していた時とは大違いだな。素晴らしい。
しかし欲望は止まらない。ファームウェアを内蔵 Flash に焼きたい、ワンチップなスタンドアローンで動かしたい、DIP でハンダ付けをバリバリやりたい。その上で HID 互換で Windows ドライバ不要で、でも単にデータをポートで入出力するだけじゃなくて自作のファームウェアで I/O をイロイロ操作したい。欲望は止まらない。
そして 68HC908JB8 に出会う。Low Speed 専用ではあるが 20pin DIP で Flash 内蔵。チップも Digi-Key で購入可能。コレだ。これで汎用 USB-IO 互換チップが自分でも作ることが出来る。早速 HC08 で遊ぶ環境を整えてみた。しかし結局そこから手が動かず。敗北。
次は AVR でチャレンジ。USB ホスト完成の勢いで馬や鹿になり格闘を続けたが、結局敗北宣言をして自分を見つめなおす修行の旅に出てしまった。そして USB デバイスコントローラコンプレックスに。敗北。
そして今回手作り USB 機器がブースタになり、3度目のチャレンジを開始する。今回は素直に自分の実力を考え、他人の成果を活用してみる。見ていて安定感の漂う USBasp を活用して HID 互換ファームウェアを、汎用 USB-IO 互換ファームウェアを作ってみることにする。敷居はかなり低い。あとは手を動かすだけだ。
DIP マイコンへの欲望は続く。いつものように ryosuke670's 掲示板を訪れていたらいつの間にか DEMO9S08QG8 を Submit する直前まで入力していた。ヤバイ。送料込 $80 死蔵コースだったな。ヤバイ。
自分を、他人を見つめなおす時間。ハンダ付けよりも大事なものがあると、ふと思った。
今日も現物確認。手作り USB 機器を結局買う。帰りの電車の中で軽く読み終える。期待通りブースタに点火。今夜は久しぶりにハンダの煙を吸ってみるか。
現物確認。Video 対応 iPod を見る。60GB モデルであの薄さということは 30GB モデルを見たら驚愕衝撃とか書きたくなるんだろうな。ヤバイな。見た後従来機の 60GB モデルを見るとやたらと分厚く感じたもんな。人間ってワガママだよな。しかし展示機の HDD にビデオ映像が入っていないのが非常に非常に残念だった。やっぱり動画は動く所見てナンボだよな。
色々な所でリンクされているが、書かずにはいられない。惑星大怪獣ネガドンの予告編を見てコーフンする。これはテアトル池袋に行くしかないな。かつて文芸坐ル・ピリエとかに通っていた頃の血が騒ぐ。ああ今関映画でプチタイムスリップしたいなあ。MILK-O-MILK とか見たいよなあ。
何だかんだでここ数日手が動いていない。目的とか関係なくデバッガとかイジって気持ちよくなりたくなった。こーゆーのを禁断症状と言うんだろうな。
先月末に知ったオーム社の手作り USB 機器の表紙写真が掲載された!やはり USB-IO というのはアレなのか。と思ったら Amazon にも登録されている!帯の「ひまだからな....」というのがナニだが、しかし書籍データの所を見ると 18日に店頭に並ぶのか?要は明日なのか?
何となくヤマギワテクニカとつぶやいてみる。プチタイムスリップ。
といった流れで余計なことを書いてみる。何となく複数の機能を1つのデバイスに統合する流れは必然だと思っていたけど、本当なのか?オレ自分の nano は人に見せたくないよな。未だに島田奈美とか聴いてますもう20年になりますとか言えないよな相手選んじゃうよな。あと京ぽんも触らせたくないよな。ブックマークとか見られたら赤面逆上だよな。出力系デバイスでストレージが入った瞬間、デバイスを分けたい状況がある。よし今日は物欲への理論武装がまた一つ出来た。
後輩から World’s Smallest Low-speed USB Analyzer (Atapchi) を教えてもらう。ちゃんと RAM を搭載して 500 transaction を保存できるし reset も検出している。素晴らしい。自分のイカサマ USB バスモニタとはえらい違いだな。それはともかく FRAM を使っているのはウラヤマシイなあ。購入先として紹介しているページは online shop を閉じているようだし Digi-Key では売ってないし。やっぱりマイコンを I2C SRAM 代わりに使うのが現実解か?
予定通り dsPIC 熱が急速に高まる。8月末から放置プレイの dsPIC 基板に久しぶりに火を入れてみるか。それから Digital Filter Design Lite が欲しくなったな。$29 だし Digi-Key でも買えるし。しかし今日は訊きたい事も沢山聞けたし 17:00 までだったし良かったな。
WebPACK ISE と戯れる。リハビリを兼ねて XC9572 用の簡単な回路を Verilog で書く。ここまでは問題ない。次にテストベンチを書く。ModelSim を動かす。ダメだ。全ては忘却の彼方だ。ああマメにテキストファイルを残すのは重要だなあ。メメックジャパンの無償トレーニングの資料でも引っ張り出してみるか。
結局今夜は寝てしまったので ATmega88 の HEX ファイルが ATmega168 でそのまま動くか実験をするのみ。勿論問題なく動いた。今手持ちで使える ATmega88 は1個しか無いからな。ちょっと不安だったからな。GWS PICO と一緒に Strawberry-Linux で買うのも良いかもな。