Top
HIDaspx
DownLoad
HIDasp高速化
制作
AVR関係
AVR_Monit
AVR_term
W32_term
HIDmon88
HIDtester
usbRS232
Arduino2313
デジタルテスター
ATmega88生活
KeyBoardマニア
KeyBoardマニアII
Arduino400
PICライター
ARMライター
赤外線リモコン
ARM
STM32ブートローダー
STM8S-Discovery改造
STM8S-OpenOCDライター
LPCXpresso
LPC用ブートローダー
NXP用LPCUSB
NXP用ブートローダー
MARY基板
LPC1114FN28
OpenOCD JTAGアダプター
OpenOCDビルド方法
arm-gccビルド方法
mapleIDEの改造
libmapleで仮想COM
PIC32
PIC32MX
Pinguinoで遊ぼう
ブートローダーを作る
シリアルブートローダー
USB仮想シリアル
USBカスタムデバイス
USB簡易モニター
USBオシロスコープ
USBホスト
PIC32でBluetooth
USBAudio
USBStudy
VGA出力に挑戦
BASICを動かす
WinUSB
勝手に改蔵*PIC32
PIC18F
HIDブートローダー
AVR/PIC両用ライター
ARMライター
usb汎用クラス
usbシリアル変換
usbキーボード変換
sdccを使いこなす
mcc18を使いこなす
HIDmon-2550
HIDmon-14K50
PICmonitor
試行錯誤の記録
UBWを試す
旧HIDboot
PIC18F2550試用記
PIC18F4550試用記
その他マイコン
NEC78K
RX62N
SH2A
H8
FM3
XPからubuntuに乗り換え
Android
Xen-hypervisor
Windows8カスタマイズ
開発日記
2015-04
ノウハウ
AVRUSB_Tips
HIDasp情報
汎用USB-IO
・
リンク
フリースペース
ゲストブック
旧コンテンツ
WinVista
インターフェース考
最新の20件
2022-07-25
2008-10
HIDasp高速化
H8/3048F
AutoTicketLinkName
2021-12-11
FormattingRules
2021-12-08
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/V-Z
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/H-K
2020-02-23
YukiWiki
PHP
PukiWiki
WikiWikiWeb
2018-12-19
SandBox
InterWiki
2015-05-07
2015-04
2015-05-02
MenuBar
編集
差分
AVR_Monit の編集
-- 雛形とするページ --
(no template pages)
***AVR_Monit って、いったい・・・。 [#m27c16cf] ''バルク転送で遊ぶ。'' -ATtiny2313を''PCから直接コントロールするにはどうしたらよいか''という命題。 つまり、こういうことだ。 -いちいちプログラムを書いてROMに焼くのは面倒だ。 -原始時代の大昔、ワンボードマイコンでやっていたような、メモリーを読み書きする簡易MONITORのイメージに近い。 #contents ---- *SIZE(28){それは何ですか?} [#ed007df5] +------+ / PC /| +-------+ | |−=− | | +-------+ | | | | ________________ +-------+ |/ USB CABLE / | □ | | / | ・ | | |AVRChip| | | / ~~~~~~~ +-------+ へたれな絵 -USBに繋がっているATtiny2313を制御するファームです。 -AVR側の任意のメモリーやI/Oポートを読み書きできます。 --USB LowSpeedバルク転送のスケルトンにもなっています。 --転送速度ベンチマークテスト用にも使えます。 ***LowSpeedなのにバルク転送を使っています。 [#nd569aad] -8バイトのコマンドパケットを送って、必要なら8バイトのリターンパケットを受け取ります。 -コマンドパケットの内容 0 1 2 3 4 5 6 7 +------+------+-------------+------+------+-------------+ | req | cmd | address | data0|data1 | reserved | +------+------+-------------+------+------+-------------+ -address は読み書きしたいAVRの番地 -data0 は書き込みたいデータ。 -data1 はマスク書き込みする場合のマスクパターン。 -- data1 が0なら *address = data0; -- data1 が0以外なら *address = (*address & data1) | data0; -読み出しの場合は data0に長さを入れる(最大8バイトまで) -読み出しの場合のアドレス空間は cmd の上位[6:5]bitの値で決める。(0=RAM 20=EEPROM 40=PGMEM) -reqはコントロール転送時の予約(bmRequestType) ~ -リターンパケットの内容 0 1 2 3 4 5 6 7 +------+------+------+------+------+------+------+------+ | 読み出したRAMの内容(最大8バイトまで) | +------+------+------+------+------+------+------+------+ と、こんな感じで作ってみました。 ---- *DOWNLOAD [#h91d4685] -[[upload/AVRmonit.zip:http://psp.dip.jp/web/upload.cgi/AVRmonit.zip]]~ をダウンロードしてください。(ソース、HEX、EXE一式) マニュアル -[[AVR_Monitマニュアル]] ---- *ハードウェア [#l88e3281] 配線は%%AVRUSB%% [[VUSB:http://www.obdev.at/products/vusb/index.html]]互換。 -D+,D−はPD2,PD3に繋ぎます。~ http://www.obdev.at/Images/vusb/circuit-zoomed.gif 補足 -R1,R2:75Ω程度でもOK。 -R3: 1K5は1.5kΩのこと。5V駆動の場合は2.2kΩ。 -C1: 4u7は4.7μFの電解コンデンサ。 -C2,C3は省略しても一応動きます。ただし発振周波数12MHzからわずかに誤差が発生します。 -D1,D2は一般の整流用シリコンダイオードです。これを入れるとAVRの動作電圧が5V-(0.6V*2)=3.7〜3.8V程度になります。 -バリエーションとしては、普通の三端子レギュレータで3.3V〜3.5Vを作って供給する手もあります。 ~ AVR側を5V動作にしたい場合は -D1,D2を省略して、かわりにUSBの(D+とGND間)と(D-とGND間)に青色LEDをそれぞれ入れることでUSB信号の電圧を3.3V程度にクランプします。 --5V動作かつ青色LEDを省略してもたいていは動作しますが、ホストPCとの相性によりUSB認識しない場合もあります。 -win32側のビルドはmingw GCCを使います。(cygwinでも出来るはず) -Vendor ID , Product IDはPowerSwitchと同じになってます。PowerSwitchと同時に使うことは出来ません。(そのかわりlibusbドライバーの組み込みは1回で済む) --ToDo: --%%VendorID,ProductIDが重複していてもアプリ名称で区別してデバイスを認識させること。%% --%%スクリプトファイルをあらかじめ用意しておいて食わせるモードが欲しい。(-ifile)%% -済み --%%ファーム側のDDR設定のデフォルトをINかつPULLUPにしたい。%% --全PORTのログを取れるデータロガーモードを付けたい。 --PORTをビット単位でON/OFFするコマンド。 --PORTに時系列データを食わせてON/OFFできるやつ。 --超低速だがロジアナにならんかな。 これをベースに、PCとAVRのコミュニケーションを行うつもり。 -コントロール転送は使わない。 -バルク転送メッセージは必ず8バイト単位。 ---- %%と、書いたが、Vista対応の件もあり、コントロール転送版(但し遅い)と両立させようと思う。%% -済み。 -コントロール転送ではベンダーリクエストを送ることになるので、8バイトの先頭1バイトはbmRequestTypeを入れなければならない。 -そうすると、使えるのは残り5バイト(最後の2バイトはwLength) -しかたなく、コマンド構造体を変更。 -面倒なのでコントロール転送では常にリターンパケット8バイトを受信しようと思う。 -ほぼPowerSwitchと同じつくりになる。 ---- **操作例 [#n3d6505c] F:\avr\AVRmonit\win32> monit -c found 3 busses AVR> help * AVR_Monit Ver 0.1 Command List d <ADDRESS1> <ADDRESS2> Dump Memory(RAM) dr <ADDRESS1> <ADDRESS2> Dump Memory(EEPROM) dp <ADDRESS1> <ADDRESS2> Dump Memory(PGMEM) e <ADDRESS1> <DATA> Edit Memory f <ADDRESS1> <ADDRESS2> <DATA> Fill Memory p ? Print PortName-List p . Print All Port (column format) p * Print All Port (dump format) p <PortName> Print PortAddress and data p <PortName> <DATA> Write Data to PortName sleep <n> sleep <n> mSec bench <CNT> <PACKET_SIZE> Bulk(or ctrl) Write Speed Test q Quit to DOS AVR> p . DIDR = 0000_0000 PORTD = 0111_0011 WDTCSR = 0000_0000 TCCR1A = 0000_0000 UBRRH = 0000_0000 GPIOR0 = 0000_0000 TCCR1C = 0000_0000 TCCR0A = 0000_0000 UCSRC = 0000_1110 GPIOR1 = 0000_0000 GTCCR = 0000_0000 OSCCAL = 0110_0010 ACSR = 0001_0000 GPIOR2 = 0000_0000 ICR1L = 0000_0000 TCNT0 = 0000_0000 UBRRL = 1001_1011 PINB = 1111_1111 ICR1H = 0000_0000 TCCR0B = 0000_0000 UCSRB = 0001_1000 DDRB = 0000_0000 CLKPR = 0000_0000 MCUSR = 0000_0001 UCSRA = 0110_0010 PORTB = 1111_1111 OCR1BL = 0000_0000 MCUCR = 0000_0011 UDR = 0000_0000 PINA = 0000_0000 OCR1BH = 0000_0000 OCR0A = 0000_0000 RXB = 0000_0000 DDRA = 0000_0000 OCR1L = 0000_0000 SPMCSR = 0000_0000 TXB = 0000_0000 PORTA = 0000_0000 OCR1H = 0000_0000 TIFR = 0000_0000 USICR = 0000_0000 EECR = 0000_0000 OCR1AL = 0000_0000 TIMSK = 0000_0000 USISR = 0000_0000 EEDR = 0000_0000 OCR1AH = 0000_0000 EIFR = 0000_0000 USIDR = 0000_0000 EEAR = 0101_1101 TCNT1L = 0000_0000 GIMSK = 0100_0000 PIND = 0111_1011 EEARL = 0101_1101 TCNT1H = 0000_0000 OCR0B = 0000_0000 DDRD = 0111_0011 PCMSK = 0000_0000 TCCR1B = 0000_0000 AVR> p PIND(30) 73 0111_0011 PORTD(32) 73 0111_0011 PINB(36) ff 1111_1111 PORTB(38) ff 1111_1111 PINA(39) 00 0000_0000 PORTA(3b) 00 0000_0000 AVR> p portb aa portb(38) aa 1010_1010 AVR> p portb 55 portb(38) 55 0101_0101 AVR> p PIND(30) 7b 0111_1011 PORTD(32) 73 0111_0011 PINB(36) ff 1111_1111 PORTB(38) 55 0101_0101 PINA(39) 00 0000_0000 PORTA(3b) 00 0000_0000 AVR> q Bye. F:\avr\AVRmonit\win32> ---- **起動オプション [#o871a106] -c コントロール転送で接続する。 -i<file> モニターコマンドを記述したスクリプトファイルを読み込んで実行する。 ---- *作った後で気づいた、驚愕の事実 [#i867ef89] -いしかわさんが、[[2005年10月の日記:http://www.asahi-net.or.jp/~qx5k-iskw/darkside/0510dark.html]] にて、汎用 USB-IO 互換ファームウェアをすでにAT90S2313で実現されておりました。 --SIZE(9){いやー恥ずかしい。} --SIZE(9){またやっちまったぜ、車輪の再発明・・・。} ---- [[English Translation:http://www.excite.co.jp/world/english/web/?wb_lp=JAEN&wb_url=http://hp.vector.co.jp/authors/VA000177/html/AVR_Monit.html]] #ref(http://psp.dip.jp/counter/dream.cgi?id=HIDasp&name=a.gif);
タイムスタンプを変更しない
***AVR_Monit って、いったい・・・。 [#m27c16cf] ''バルク転送で遊ぶ。'' -ATtiny2313を''PCから直接コントロールするにはどうしたらよいか''という命題。 つまり、こういうことだ。 -いちいちプログラムを書いてROMに焼くのは面倒だ。 -原始時代の大昔、ワンボードマイコンでやっていたような、メモリーを読み書きする簡易MONITORのイメージに近い。 #contents ---- *SIZE(28){それは何ですか?} [#ed007df5] +------+ / PC /| +-------+ | |−=− | | +-------+ | | | | ________________ +-------+ |/ USB CABLE / | □ | | / | ・ | | |AVRChip| | | / ~~~~~~~ +-------+ へたれな絵 -USBに繋がっているATtiny2313を制御するファームです。 -AVR側の任意のメモリーやI/Oポートを読み書きできます。 --USB LowSpeedバルク転送のスケルトンにもなっています。 --転送速度ベンチマークテスト用にも使えます。 ***LowSpeedなのにバルク転送を使っています。 [#nd569aad] -8バイトのコマンドパケットを送って、必要なら8バイトのリターンパケットを受け取ります。 -コマンドパケットの内容 0 1 2 3 4 5 6 7 +------+------+-------------+------+------+-------------+ | req | cmd | address | data0|data1 | reserved | +------+------+-------------+------+------+-------------+ -address は読み書きしたいAVRの番地 -data0 は書き込みたいデータ。 -data1 はマスク書き込みする場合のマスクパターン。 -- data1 が0なら *address = data0; -- data1 が0以外なら *address = (*address & data1) | data0; -読み出しの場合は data0に長さを入れる(最大8バイトまで) -読み出しの場合のアドレス空間は cmd の上位[6:5]bitの値で決める。(0=RAM 20=EEPROM 40=PGMEM) -reqはコントロール転送時の予約(bmRequestType) ~ -リターンパケットの内容 0 1 2 3 4 5 6 7 +------+------+------+------+------+------+------+------+ | 読み出したRAMの内容(最大8バイトまで) | +------+------+------+------+------+------+------+------+ と、こんな感じで作ってみました。 ---- *DOWNLOAD [#h91d4685] -[[upload/AVRmonit.zip:http://psp.dip.jp/web/upload.cgi/AVRmonit.zip]]~ をダウンロードしてください。(ソース、HEX、EXE一式) マニュアル -[[AVR_Monitマニュアル]] ---- *ハードウェア [#l88e3281] 配線は%%AVRUSB%% [[VUSB:http://www.obdev.at/products/vusb/index.html]]互換。 -D+,D−はPD2,PD3に繋ぎます。~ http://www.obdev.at/Images/vusb/circuit-zoomed.gif 補足 -R1,R2:75Ω程度でもOK。 -R3: 1K5は1.5kΩのこと。5V駆動の場合は2.2kΩ。 -C1: 4u7は4.7μFの電解コンデンサ。 -C2,C3は省略しても一応動きます。ただし発振周波数12MHzからわずかに誤差が発生します。 -D1,D2は一般の整流用シリコンダイオードです。これを入れるとAVRの動作電圧が5V-(0.6V*2)=3.7〜3.8V程度になります。 -バリエーションとしては、普通の三端子レギュレータで3.3V〜3.5Vを作って供給する手もあります。 ~ AVR側を5V動作にしたい場合は -D1,D2を省略して、かわりにUSBの(D+とGND間)と(D-とGND間)に青色LEDをそれぞれ入れることでUSB信号の電圧を3.3V程度にクランプします。 --5V動作かつ青色LEDを省略してもたいていは動作しますが、ホストPCとの相性によりUSB認識しない場合もあります。 -win32側のビルドはmingw GCCを使います。(cygwinでも出来るはず) -Vendor ID , Product IDはPowerSwitchと同じになってます。PowerSwitchと同時に使うことは出来ません。(そのかわりlibusbドライバーの組み込みは1回で済む) --ToDo: --%%VendorID,ProductIDが重複していてもアプリ名称で区別してデバイスを認識させること。%% --%%スクリプトファイルをあらかじめ用意しておいて食わせるモードが欲しい。(-ifile)%% -済み --%%ファーム側のDDR設定のデフォルトをINかつPULLUPにしたい。%% --全PORTのログを取れるデータロガーモードを付けたい。 --PORTをビット単位でON/OFFするコマンド。 --PORTに時系列データを食わせてON/OFFできるやつ。 --超低速だがロジアナにならんかな。 これをベースに、PCとAVRのコミュニケーションを行うつもり。 -コントロール転送は使わない。 -バルク転送メッセージは必ず8バイト単位。 ---- %%と、書いたが、Vista対応の件もあり、コントロール転送版(但し遅い)と両立させようと思う。%% -済み。 -コントロール転送ではベンダーリクエストを送ることになるので、8バイトの先頭1バイトはbmRequestTypeを入れなければならない。 -そうすると、使えるのは残り5バイト(最後の2バイトはwLength) -しかたなく、コマンド構造体を変更。 -面倒なのでコントロール転送では常にリターンパケット8バイトを受信しようと思う。 -ほぼPowerSwitchと同じつくりになる。 ---- **操作例 [#n3d6505c] F:\avr\AVRmonit\win32> monit -c found 3 busses AVR> help * AVR_Monit Ver 0.1 Command List d <ADDRESS1> <ADDRESS2> Dump Memory(RAM) dr <ADDRESS1> <ADDRESS2> Dump Memory(EEPROM) dp <ADDRESS1> <ADDRESS2> Dump Memory(PGMEM) e <ADDRESS1> <DATA> Edit Memory f <ADDRESS1> <ADDRESS2> <DATA> Fill Memory p ? Print PortName-List p . Print All Port (column format) p * Print All Port (dump format) p <PortName> Print PortAddress and data p <PortName> <DATA> Write Data to PortName sleep <n> sleep <n> mSec bench <CNT> <PACKET_SIZE> Bulk(or ctrl) Write Speed Test q Quit to DOS AVR> p . DIDR = 0000_0000 PORTD = 0111_0011 WDTCSR = 0000_0000 TCCR1A = 0000_0000 UBRRH = 0000_0000 GPIOR0 = 0000_0000 TCCR1C = 0000_0000 TCCR0A = 0000_0000 UCSRC = 0000_1110 GPIOR1 = 0000_0000 GTCCR = 0000_0000 OSCCAL = 0110_0010 ACSR = 0001_0000 GPIOR2 = 0000_0000 ICR1L = 0000_0000 TCNT0 = 0000_0000 UBRRL = 1001_1011 PINB = 1111_1111 ICR1H = 0000_0000 TCCR0B = 0000_0000 UCSRB = 0001_1000 DDRB = 0000_0000 CLKPR = 0000_0000 MCUSR = 0000_0001 UCSRA = 0110_0010 PORTB = 1111_1111 OCR1BL = 0000_0000 MCUCR = 0000_0011 UDR = 0000_0000 PINA = 0000_0000 OCR1BH = 0000_0000 OCR0A = 0000_0000 RXB = 0000_0000 DDRA = 0000_0000 OCR1L = 0000_0000 SPMCSR = 0000_0000 TXB = 0000_0000 PORTA = 0000_0000 OCR1H = 0000_0000 TIFR = 0000_0000 USICR = 0000_0000 EECR = 0000_0000 OCR1AL = 0000_0000 TIMSK = 0000_0000 USISR = 0000_0000 EEDR = 0000_0000 OCR1AH = 0000_0000 EIFR = 0000_0000 USIDR = 0000_0000 EEAR = 0101_1101 TCNT1L = 0000_0000 GIMSK = 0100_0000 PIND = 0111_1011 EEARL = 0101_1101 TCNT1H = 0000_0000 OCR0B = 0000_0000 DDRD = 0111_0011 PCMSK = 0000_0000 TCCR1B = 0000_0000 AVR> p PIND(30) 73 0111_0011 PORTD(32) 73 0111_0011 PINB(36) ff 1111_1111 PORTB(38) ff 1111_1111 PINA(39) 00 0000_0000 PORTA(3b) 00 0000_0000 AVR> p portb aa portb(38) aa 1010_1010 AVR> p portb 55 portb(38) 55 0101_0101 AVR> p PIND(30) 7b 0111_1011 PORTD(32) 73 0111_0011 PINB(36) ff 1111_1111 PORTB(38) 55 0101_0101 PINA(39) 00 0000_0000 PORTA(3b) 00 0000_0000 AVR> q Bye. F:\avr\AVRmonit\win32> ---- **起動オプション [#o871a106] -c コントロール転送で接続する。 -i<file> モニターコマンドを記述したスクリプトファイルを読み込んで実行する。 ---- *作った後で気づいた、驚愕の事実 [#i867ef89] -いしかわさんが、[[2005年10月の日記:http://www.asahi-net.or.jp/~qx5k-iskw/darkside/0510dark.html]] にて、汎用 USB-IO 互換ファームウェアをすでにAT90S2313で実現されておりました。 --SIZE(9){いやー恥ずかしい。} --SIZE(9){またやっちまったぜ、車輪の再発明・・・。} ---- [[English Translation:http://www.excite.co.jp/world/english/web/?wb_lp=JAEN&wb_url=http://hp.vector.co.jp/authors/VA000177/html/AVR_Monit.html]] #ref(http://psp.dip.jp/counter/dream.cgi?id=HIDasp&name=a.gif);
テキスト整形のルールを表示する
ログインまたはアカウント作成