HIDasp情報 の変更点


From:[[HIDasp]]


''このページは瓶詰堂さんが2007.3月に公開されたオリジナル版HIDaspに関する情報です''

[[瓶詰堂さんのHPへのリンク:http://www.binzume.net/library/avr_hidasp.html]]
のほうを見てください。

瓶詰堂さんのHPは最新版のHIDaspに変わっていますので、~
下の情報はもう当てはまらなくなっております。
----

***HIDaspとは? [#p8e5e109]
-USB経由でAVRに書き込むライターの一種。~
-''ATtiny2313''で作れるUSBライターはこれしか無かったので、とりあえず''作る''。
-自分が作った奴は、ここの''Wikiの左上''に画像を貼り付けてあります。

*質疑応答 [#n181b201]

#contents
----
***Q1:HIDaspが動かん。 [#e9b8a78e]
-パソコンに挿すと、不明なUSB機器になる。
-動かんのじゃあ!

''A1:''USBのD+、D−はどこに繋ぎましたか? 
--D+は PB1とPD2(==INT0)の両方に接続する必要があります。
--D−は PB0に繋ぎ、1.5kΩでプルアップする必要があります。
-[[AVRUSB:http://www.obdev.at/products/v-usb/index.html]]のページを見るとD+,D−はPD2,PD3なので間違えやすいです。~
http://www.obdev.at/Images/v-usb/circuit-zoomed.gif
-[[AVRUSB:http://www.obdev.at/products/vusb/index.html]]のページを見るとD+,D−はPD2,PD3なので間違えやすいです。~
http://www.obdev.at/Images/vusb/circuit-zoomed.gif
-↑D+、D−の接続は上の回路と違うので注意しましょう。

----
***Q2:HIDaspは遅い? [#s131d559]
-2K書き込むのにVerify含めて10秒以上待たされるぞ!

''A2:''avrspx の-dオプションを与えましょう。 
 C:> avrspx -ph -d3 main.hex 
とか、します。自分はavrspxのソースを書き換えたので、-phと-d3は不要になりました。
-これで2秒くらいに短縮されます。

----
***Q3:なんでHIDaspなの? [#v816e86d]

''A3:''なにかとUSBのほうが手軽だからです。
-実はChaNさんのシリアルライタの方が高速なんですが、
-5V電源を別に用意しないといけないのが面倒です。
-それに、最近のインテル3シリーズのマザーではレガシーポートが消滅しつつありますので。
-今のところATtiny2313で作れるUSBライターがこれしか無かったというのもあります。
-USBtoシリアルのケーブルでシリアルライタを使うという手もありますが、やはり5Vをどうするかという点があります。
-しかし、シリアルコンソールとして使えないという問題もありまして、今は微妙なところですねー。
-ChaNさんのFT232+シリアルというのが良さそうですが、配線が微細なので不器用な向きにはつらいですね。
----
***Q4:HIDaspのAVR側ソースをビルドするとでかくなるんですけど・・・ [#w0369d46]

''A4:''たしかに2Kに入りませんね。ちょっと待ってください。 
-WinAVRのバージョンを最新でなく、2つくらい前に戻すとオリジナル版と同じHEXが作れるようです。
-GCC4ベースでなく、GCC3ベースのほうがAVRにとっては吉なのかもしれませんね。
-それでも、2Kから''僅か12バイト''しかお釣りが来ませんが・・・。

----
***Q5:AVR側のコードサイズはもっと縮まんかのー? [#p76708d7]

''A5:方法はあります。''
-全部アセンブラで書く ---そんなアホな!。
-crt.Sに相当する部分を最適化する。
--WinAVRのライブラリソースにcrt1.Sが含まれています。
--これは、実際のATtiny2313のものと微妙に違ってるんですが
--それを改造して、小さなcrt.Sを作ります。~
http://psp.dip.jp/web/upload/crt_S.zip
--リンクするときは gccのオプションに -nostdlib を追加して、標準のcrt.oがリンクされないようにしておきます。

改造方法は
-まず、割り込みテーブルを削る。
-- initとint0以外は使ってないのでばっさりと。
-次に、dataのコピーとbssのクリアを最適化する。
--ATtinyのSRAMは128バイトで、アドレス上位が常に0なので
--上位も含めてポインタ比較する必要はありません。
--dataの直後にbssが来るというのが事前に分かっているので、bssクリア前にポインタセットアップするのをサボります。dataのポインタのお古をそのまま使います。
-dataのコピーとbssのクリアは、while()なループになっているのを do { } while()型にランクダウン。
--これは、ループ末の条件比較へダイブしているrjmpをコメントアウトするという意味です。
--実際にこれをやると、data,bssどちらかが0バイトのときにバグるので、そこは適切に対処です。

~
-あとは、固定データをPRGMEMではなくEEPROM上に移すとか。
--アクセスルーチンが余分にいりますけどね。

----
***Q6:実際にAVRに書き込むと、時々AVRデバイスを認識しない。 [#t93be3c9]
''A6:''リセット直後に書いていませんか?
-どうやらリセットして20mSしか待っていないようですが。
-avrspxのソースをいじって、長くしてみます。
-どうですか?

----
***Q7:これ作る前にどうやってATtiny2313に書き込むのだ。 [#i41076fe]
''A7:''ChaNさんのシリアルライターを作ったのじゃ!
-http://elm-chan.org/works/avrx/report.html
-上記リンクの ''COMポート用ISPアダプタ回路図'' というやつです。
-74HCが無かったので、手持ちの適当な74LS86(XORゲートだが片方をGNDにして単なるバッファ化)で動かしました。
-TTLの入力抵抗は10k〜20kくらいに下げます。
-本当はCOMポートが±10Vくらい振れるので逆流防止ダイオード入れたほうが良いけれど入れてません。
-TTL電源の5Vが必要ですが、これはシリアルから確保できないので書き込みターゲットから借用してます。(書き込みターゲット=USBライタ)
-ChaNさんの回路ではバッファの3ステートオープンスイッチがありますがLS86では無理なので省略です。
~
-ここだけの話、%%HIDaspよりシリアルライターの方が書き込み速いし安定してるんだよねー。%%
--制作直後はいくつかの点で不安定でしたが、今は安定しています。誤解を招く表現をしてしまいました。

----
***Q8:なんで5Vに整流用ダイオード2個挟んで減圧するの? [#ufb824d5]
''A8:''USBの1.5kΩのプルアップ抵抗は3.3V(〜3.6V)に繋ぐ必要があります。(5Vでは高すぎ)
-それと、D+、D−ラインの受電側差動アンプのレベル範囲が0.8V〜2.5Vに設定されているので、5Vフルスィングするとエラーの原因になります。
-整流用ダイオードの代わりに3.3V〜3.6Vの減圧レギュレータを使用してもOKです。
-レギュレータを使用する場合は発振防止コンデンサを必ず入れましょう。
-さらに負荷側にも47μF以上の電解コンを入れておきます。
--そうしないと発振してしまい、出力をテスターで計ると4V以上になり、''壊したか''と錯覚します。
-どうしてもAVRを5Vで駆動したい場合はD+、D−に3.6VくらいのツェナーDiを入れるという方法もあります。

//--でも面倒くさいときは、ツェナーも入れずに直結してますけど、一応動いてます。
//--ついでにクリスタルの負荷コンデンサも入れてません。(つーか15pFとか持ってないもん)
//--そんなこと、とても%%素人には%%人にはお勧め出来ない。
//--恐らくは、ホストコントローラ側のコンパレータの性能とか0〜5Vの範囲を超えたオーバーシュート波形発生時のクランプ特性などに依存するので
//--全てのパソコンでOKなわけはないです。
//--たまたま自分のPCで動いてるだけ・・・ハハハ、お勧めできんわ。

----
[[AVRUSB_Tips]]

[[HIDasp高速化]] -- 実験記録

----
#ref(http://psp.dip.jp/counter/dream.cgi?id=HIDasp&name=a.gif);