« JavaScript shell (js)、OSSP js 1.6.20060820のZaurus向けパッケージ | Main | Zaurusで音響生成プログラミング言語Csoundを使う »

2006.09.17

Mac OS X Tiger上にAVR-GCC環境を構築する@2006

WinAVRもいいけど、Mac OS XにもAVR-GCCの環境を構築してみよう。
現在使っているのはMac OS X Tiger(10.4.7)。
intel Macは持ってないので、PPC Mac上で試している。

スキルが無いくせして新しいもの好き。
だから、可能な限り、最新版で構築したい。ちなみに、

sudo gcc_select 3.3

としてGCC3.3で作業している。

参考サイト

Mac OS X で Atmel AVR マイクロコントローラのプログラムを作る
Programming ATMEL microprocessors on a Mac
AVR Microcontroller Programming on a Mac
Using AVR Microprocessors Under OS/X
Installing AVR Toolchain on MAC OS X

今は、binutilsにしろgccにしろ、本家本元がAVRに対応しているので、昔のように特別な作業をする必要無し。
binutils、gcc、avr-libc、uispの最新版を入手してビルドすればいいだけ。

基本のインストール方法はAVR LibCのマニュアルに書いてある。

http://www.nongnu.org/avr-libc/user-manual/index.html
http://www11.ocn.ne.jp/~akibow/AVR-LibC_1.2.3J/

GNU Binutils、GCC、AVR LibCの順でビルドする。

GNU Binutils(アセンブラ、リンカ等)

http://www.gnu.org/software/binutils/

最新のリリース版をダウンロードしてくる。CVS先端を試してみたけど、現時点のものはうまくビルドできなかった。

tar xvzf binutils-2.17.tar.gz
cd binutils-2.17
mkdir obj-avr
cd obj-avr
../configure --target=avr --program-prefix='avr-' --disable-nls; make; sudo make install

GCC, the GNU Compiler Collection(Cコンパイラ)

http://gcc.gnu.org/

GCC4.2のsnapshotを落としてきた。snapshot版はMPUのサポートがリリース版より厚い。

http://gcc.gnu.org/mirrors.html

上記のミラーから適当なftpサーバを探してダウンロードする。

wget ftp://ftp.iij.ad.jp/pub/gcc/snapshots/LATEST-4.2/gcc-core-4.2-20060916.tar.bz2
tar xvjf gcc-core-4.2-20060916.tar.bz2
cd gcc-4.2-20060916
mkdir obj-avr
cd obj-avr

../configure --target=avr --program-prefix='avr-' --enable-languages=c --with-dwarf2 --disable-nls --disable-libssp; make; sudo make install

--disable-libsspを指定しないとダメなので注意。

AVR LibC(Cランタイムライブラリ)

http://www.nongnu.org/avr-libc/

これは、AVR LibCのマニュアルが勧める通りmkdir obj-avr、cd obj-avrしてからconfigureしようとすると失敗したので、カレントディレクトリでconfigureしている。

CVS先端ですんなりビルドできたので、それを使った。

cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avr-libc login
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avr-libc co avr-libc
cd avr-libc
cvs update -dP
./bootstrap
./configure --build=`./config.guess` --host=avr; make; sudo make install

uisp(ユニバーサルインシステムプログラマ)

http://savannah.nongnu.org/projects/uisp/

tar xvzf uisp-20050207.tar.gz
cd uisp-20050207
mkdir obj-avr
cd obj-avr
../configure; make; sudo make install

AVR-GDB

役に立つかどうか分からないので試してない。
AVR LibCのインストールマニュアルに解説あり。

スクラッチから環境を作る際の注意点

上記の手順だけではサポートデバイスが不十分かもしれない。その場合はパッチを当てる必要があるそうだ。

http://www7a.biglobe.ne.jp/~attlee/avr-jp-wiki/wiki.cgi?page=AVR-LibC

USB Serial変換アダプタとuisp関係

手持ちのUSB Serial変換アダプタは、秋月通商のUSB-RS232変換ケーブルとKeyspanのUSA-19HS。
秋月通商のUSB-RS232変換ケーブルの中の人はATEN社のUC-232Aで、Mac OS X用のドライバは以下にあった。

http://www.aten.com.tw/download/download.php?pid=20050824161341006&type=driver#showResult

KeyspanのUSA-19HSは、現在ドライバーがデッドリンクになっていて、どうしたものかと思ったら以下にあった。

http://www.keyspan.com/downloads-files/usa/UniversalBinary/

ドライバをインストールし、接続すると/dev/tty.xxxxにデバイスが現れる。

使っているのは、MorosansoftさんのAVRISP互換ライタ。とても簡単に作れ、AVR Studioで認識するし、USB Serial変換アダプタ経由でも使えるので便利。マイコンをいじるのはほぼ初めてで、ライタを自作したのも初めてなので客観的評価はできないが、とても素晴らしいライタに思える。AVR Studioからはちゃんと使えているが、パフォーマンスのいい新しいプロトコルのみの対応。よって、古いプロトコルを使うuispからは使えないとのこと。

uispから書き込むには、古いプロトコルにも対応し、なおかつUSB Serial変換アダプタ経由でも使えるSTK500のようなライタが必要のようだ。

その後、MorosanさんのAVRISP互換ライタは、avrdudeでなら使えるという情報をsenshuさんからいただいた。
AT90S2313のようなレガシーデバイスの場合はエラーが出ていたが、その後のMorosanさんの対応作業のおかげで、avrdudeから、レガシーデバイスであっても問題無く書き込むことができるようになった。
AVRISP互換ライタ対応済みavrdudeのMac OS X用のバイナリは配布していないが、avrdude5.1のソースをもらってきて、Morosanさんのサイトに記載されている変更をし、ビルドすればOK。

AVR Studio 4.12 Service Pack 4で使おうとすると警告メッセージが出ていたが、新ファームで問題無くなった。なおかつ、ターミナルソフト経由で設定変更が可能になっている。EEPROMにバージョン番号を保存してしまうんだね。カコイイ。

MorosanさんのAVRISP互換ライタは、(いろいろ前提条件があるけれども)Mac OS Xユーザにも有用な選択肢になった。
Morosanさんsenshuさん、本当にお世話になりました。

最近のAVR-GCCの仕様変更

最近(といっても、ここ2年ぐらいの話だと思うが)のAVR-GCCは、結構仕様が変わっているらしく、昔のソースはそのままではほぼ動かない。
とても頻用するであろうoutp等が使えなくなくなったことに始まり、少なくとも以下のような変更がある。

outp(PORT, val) は PORT = val に

BV() は _BV() に

sbi(PORT, bit) は PORT |= _BV(bit) に

また、avr/signal.hは、avr/interrupt.hに統合している。
その他、いっぱい仕様変更はあると思われる。

ちなみに、GCC3.x用と思われるMakefileをどこかのサイトから頂戴して流用しようとしたら、コンパイル、hexの生成まですんなりできるものの、うまく動かなかったので注意。原因がどこにあったか、根性が無いので追及しておらず。


objcopyの問題

avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex main.elf main_eeprom.hex
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make: *** [main_eeprom.hex] Error 1

こんなようなエラーに遭遇するかもしれない。これは、binutilsのobjcopy.cの以下の行のFALSEをTRUEにすると回避できるそうだ。

if (bfd_count_sections (obfd) == 0)
{
non_fatal (_("there are no sections to be copied!"));
return FALSE;
}

情報元

参考サイト

テスト

PORTBにLED付けたAT90S2313でテスト。

ダウンロード at90s2313test.c (0.7K)

適当にソース書く。

avr-gcc -mmcu=at90s2313 main.c -o main.o; avr-objcopy -O ihex main.o main.hex

出来たmain.hexをプログラムして動作すればOK。
どのバージョンのことだよオマエ、と思うことがよくあるので、念のためバージョンも併記しておく。

iMacG5:~/workshop/avr/gcctest $ avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ../configure --target=avr --program-prefix=avr- --enable-languages=c --disable-nls --disable-libssp
Thread model: single
gcc version 4.2.0 20060916 (experimental)

既成の環境を使う

フルスクラッチしなきゃいけないわけじゃない。
ここにGCC3.xの環境だけど、バイナリあり。

Using AVR Microprocessors Under OS/X

Darwinportsにもバイナリがある。バージョンは本日時点のもの。

http://darwinports.com/

avr-gcc (4.0.2)
avr-libc (1.2.5)
avr-binutils (2.16.1)
uisp (20050207)

Finkにもバイナリがあった。intelバイナリもあった。

http://fink.sourceforge.net/index.php?phpLang=en

avr-gcc (3.3.2)
avr-libc (1.0.4)
avr-binutils (2.14)
uisp (20050207)

Source Package

DebianにSource Packageあり。バージョンは本日時点のもの。
適度に枯れたのがよければこれを使えばいいかも。

http://packages.qa.debian.org/g/gcc-avr.html (4.1.0)
http://packages.qa.debian.org/a/avr-libc.html (1.4.4)
http://packages.qa.debian.org/b/binutils-avr.html (2.16.1)
http://packages.qa.debian.org/u/uisp.html

|

« JavaScript shell (js)、OSSP js 1.6.20060820のZaurus向けパッケージ | Main | Zaurusで音響生成プログラミング言語Csoundを使う »

Comments

はじめまして、senshuです。

MAC上でavr-gcc環境を構築する手順、興味深く拝見しました。

AVRISPがuispで使えないことで悩んでいらっしゃるようですが、avrdudeの新しい版では、AVRISPの新プロトコルに
対応していたように記憶しています。

一度、試してみてはいかがですか?

Posted by: senshu | 2006.09.17 at 11:49 PM

senshuさん初めまして。もの凄いスピードのコメントありがとうございます。早速もの凄いスピードで試してみました。
MorosansoftさんのAVRISP互換プログラマのLEDが一瞬光り、反応するもののコマンドの実行は失敗してしまいます。
残念です。Verbose outputオプション付けて実行した結果をとりあえず貼っておきます。Windowsでも試してみようかな。

cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avrdude login
{enter}
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avrdude co avrdude
cd avrdude
./bootstrap
./configure
make
sudo make install
avrdude -v -p 2313 -c avrispv2 -P /dev/tty.USA19Hb1P1.1 -U flash:w:main.hex:i

avrdude: Version 5.1cvs, compiled on Sep 18 2006 at 00:05:08
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

System wide configuration file is "/usr/local/etc/avrdude.conf"
User configuration file is "/Users/stallman/.avrduderc"
User configuration file does not exist or is not a regular file, skipping

Using Port : /dev/tty.USA19Hb1P1.1
Using Programmer : avrispv2
AVR Part : AT90S2313
Chip Erase delay : 20000 us
PAGEL : P00
BS2 : P00
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 4 12 64 0 no 128 0 0 4000 9000 0x80 0x7f
flash 4 12 128 0 no 2048 0 0 4000 9000 0x7f 0x7f
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00

Programmer Type : STK500V2
Description : Atmel AVR ISP V2
Programmer Model: AVRISP
Hardware Version: 2
Firmware Version: 2.07
Vtarget : 23.6 V
SCK period : 1.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | | 0% 0.00savrdude: stk500v2_cmd(): failed to send command
avrdude: stk500v2_cmd(): failed to send command
Reading | ################# | 33% 0.01savrdude: stk500v2_cmd(): failed to send command
Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.


avrdude done. Thank you.

Posted by: moyashi | 2006.09.18 at 12:31 AM

そうですか、、、たまたま見かけたので書いたのですが、
ものすごく早かったのですね、、、。

ところで、avrdude は結構良い線までハードウエアを
認識しているようです。Windows 用のavrdudeで試してみるのは
正しい試みだと思います。

やはり、以下のメッセージが気になります。

> stk500v2_cmd(): failed to send command

この原因になっているのは何でしょうね。
ソースもあるのですから、追求してみると面白そうですね。
何か、AVRISP互換ライタの持っている非互換な部分が
あれば、改良も必要となるかもしれませんし、、、。

では、また。

Posted by: senshu | 2006.09.18 at 12:47 AM

今、avrdudeのstk500v2のソース差分を見てみました。
上記のメッセージを出力しているのは一箇所だけでした。

+ result = stk500v2_command(pgm, buf, 8, sizeof(buf));
+ if (buf[1] != STATUS_CMD_OK) {
+ fprintf(stderr, "%s: stk500v2_cmd(): failed to send command\n",
+ progname);
+ return -1;

ということですから、stk500v2_command()で受け取る
データが正しくないと判断しているようです。

ところで、MACのシリアルポートは真のRS232ですか?
(USBの変換なら、115200bpsでは正しい通信ができますか?)

ちょっとだけ気になったので、書きました。

Posted by: senshu | 2006.09.18 at 01:22 AM

Mac(iMac G5)には、随分前からシリアルポートがありません。
ゆえに、USB変換です。
それに、正しく動作するかをテストする環境というものも無いので、Mac側のシリアルポートに原因が無いとも限りません。
さてどうしたものかというところですが。

Posted by: moyashi | 2006.09.18 at 04:16 AM

なるほど、USBの変換アダプタ経由の場合、完全な互換性は
無い場合が多く、特にタイミングに敏感なアプリでは問題を発生しがちです。

今回の場合、AVRISPからのデータ受信には成功しています。問題は、MAC←→AVRISPでのデータで遅れなどが生じて
不具合を起こしていないかです。

avrdudeのコードにはデバッグ用のコードが多数埋め込まれています。何らかのオプション指定でデバッグメッセージを有効にし、エラー個所を特定する必要があるようです。

まずは、実績のあるプラットホーム上でavrdudeの動作を確認してみることをお勧めします。

また、書込みではなく、読み出しを試してみましたか?
プログラマを製作したら、まず読み出しを試して見ましょう。マイコンチップを痛めるのは書込み操作です。
読み出しが完全に行えることを確認するのが第一歩だと思います。

Posted by: senshu | 2006.09.18 at 07:45 AM

こんにちは、moyashiさん。
トラックバックありがとうございます。

avrdudeでの動作ですが、ちょっと心当たりがあったので、
ソースコードを読んで見ました。

V2プロトコルでは、"CMD_SPI_MULTI"という特定の処理を
行うのではなく、あたかもSPIブリッジとして働かせるよう
な命令があります。この命令はAVRStudio環境下では発行さ
れる事はなく、私はこの命令を補助的な命令と捕らえ
PIC-AVRライタには実装しませんでした。

しかし、avrdudeの場合識標やヒューズなのどのアクセスに
この命令を使用していました。そこで、この命令を16F648-
AVRライタに実装してみました。一応フラッシュメモリの
読み出し/書き込みは行えるようです。まだ、全ての機能の
検証をしていないのですが、さすがに人様のソースを読む
事に疲れたので残りは後日にしたいと思います。

ダウンロードファイルを差し替えておきます。
よかったら試して見てください。ただしWindowsXPでしか
検証していません。また使用したavrdudeはWinAVR同梱の
ものです。

Posted by: Morosan | 2006.09.18 at 05:19 PM

Morosanさん、またお手を取らせてしまい恐縮です。
早速Windows XP Home SP2の環境で試してみました。
しかし、Window XP下で失敗してしまいます。
Mac OS Xでも同様の結果となりました。

これに前後してAVR Studioから2種類のUSB Serial変換アダプタを介して書き込みができることを確認しています。

一応、ログは以下にアップしました。

http://moyashi.air-nifty.com/avrdude_log.txt

USB Serial変換アダプタの相性という線もありそうですね。
Morosanさんは何を使ってらっしゃいますか?
また、コマンドラインオプションで心当たりのあるものはあるでしょうか?

あまり急ぎませんし、お時間のある時で結構ですのでよろしくお願い致します。

Posted by: moyashi | 2006.09.18 at 10:37 PM

やはり Morosan さんの登場となりましたか、、、。それでも解決して
いないとは困りましたね。

ログファイルをみると、Mac OS と Windows XP では異なるエラーを生
じています。どちらの環境でも AVRISP 側のファームが改良されたこ
とから、正しくシグネチャが読み出せています。

Mac OS では"main.hex"のファイルを読み取るところでエラーになって
いますが、main.hex ファイルは存在していますか?

また、Windows XPでは両方の変換ケーブルで、

>avrdude: stk500v2_recv(): previous packet sent with wrong checksum
>avrdude: stk500v2_paged_write: write command failed with 1

が発生しています。

このことを考えると、AVRISP とのやり取りに問題があるような感じで
す。以前、USB とのやり取りで不具合が起きたとき、USB ドライバの
更新で解決したことがありました。可能なら、直接 RS232 の環境で試
すことですがそれは難しいのでしょうね。

私も近日中に手持ちの USB 変換ケーブル経由でのテストを行ってみた
いと思います。

Posted by: senshu | 2006.09.18 at 11:47 PM

USB変換ケーブル経由で avrdudeを使ってみました。
(AVRISP互換ファームウェアは更新しました)

結果ですが、RS232C直結、USB変換ケーブル経由ともに
問題なく動作しました。

USB変換ケーブルは、IOデータのUSB-RSAQ2を使いました。
使ってみると、USB変換ケーブル経由の方がやや遅いような
気もしますが、数値を見ると同等の結果でした。

ドライバは、IOデータの公開しているver 1.13を使っています。

以上、報告まで。

Posted by: senshu | 2006.09.19 at 09:07 AM

ありがとうございます。
いよいよUSB Serial変換アダプタの線が濃くなってきましたね。
早速USB-RSAQ2を買おうと思ったのですが、既にUSB-RSAQ3に変わっていて、入手できないようです。
搭載しているチップも変わっているそうですので、残念ながらちょっと手が出せません。
Morosanさんの使っているものが現行機種かつMac OS X対応のものだといいのですが。

Posted by: moyashi | 2006.09.19 at 12:54 PM

USB-RSAQ2にはPL-2303が搭載されています。

秋月電子の変換ケーブルもPL-2303チップが搭載されているようなの
で、ドライバの更新を行えば、問題は解決できるような気もします。

秋月でもドライバの更新版を公開していますので、ぜひ試してみて
ください。


Posted by: senshu | 2006.09.19 at 05:34 PM

avrdude と PL2303 を Mac OS X 上で使う、という試みは英語圏で
も行われているようです。

http://www.harbaum.org/till/macavr/index.html

以下の URL では、PL2303 用のドライバが公開されています。

http://sourceforge.net/projects/osx-pl2303/


わざわざ自前でドライバを作成しているところをみると、メーカー
が提供するものにも問題があるのかもしれません。

Posted by: senshu | 2006.09.19 at 09:22 PM

動作しませんでしたか。

手元でそのエラーが検証できればいいのですが、
こちらからは推測程度の事しか出来ず、あまり
お役に立ちそうになく残念です。

ちなみに
previous packet sent with wrong checksum
このエラーの意味ですが、AVRライタ側がパケットを
受信し、その内容と添えられたチェックサムを比較した
際、値が一致せずエラーを返した時に表示されます。
なので、データを取りこぼしているか、ビット化けが
起きている状態なんじゃないかと思うのですが、
AVRStudioからだと動作するのが不思議です。

なにせ抵抗だけのレベル変換なんで、内外的なノイズ
に弱い気もします。気休めとは思いますがシリアル
受信部を書きな直しました。データビットの中央付近を
3回サンプリングして、多数決で受信ビットを決定する
ようにし、多少のローパス・フィルタ的な効果を持たせ
てみました。

http://morosansoft.cocolog-nifty.com/DOWNLOAD/AVRISP16F648A.hex

私の使っているUSB変換ケーブルは秋月製の¥1200の
もので、ドライバのバージョンは2.0.2.1です。

Posted by: Morosan | 2006.09.20 at 01:17 AM

みなさんありがとうございます。本当に恐縮しています。
Morosanさんと同じケーブルを使っていたことが判明したのは幸いです。
また、PL2303が、比較的標準のものであると判断してよさそうなことも分かってよかったです。

みなさんからのアドバイスに基づきやってみました。
Keyspanのやつは置いておいて、動作実績のあるPL2303に絞ることにしました。

まずはMorosanさんにお作りいただいたローパスフィルタ付きhexにアップデート。

Windowsの方は、ドライバを秋月のFAQから落としてきて、2.0.2.1へアップデート。
これで試してみるも、やっぱりダメ。

Mac OS Xの方は、osx-pl2303の0.2.2を落としてきて、現状のドライバをアンインストールしてからインストール。
こちらもやっぱりダメでした。

Mac OS Xで失敗するならまだしも、Windows XP下ですら失敗するのが変ですね。
しかし、相変わらずAVR Studioからは絶好調です。書けまくり。

http://moyashi.air-nifty.com/avrdude_log2.txt

別のWindowsXPマシンでも試してみましたが、これでもダメでした。
AVR Studioからはこちらでも書けました。

http://moyashi.air-nifty.com/avrdude_vaio_pcv-w120.txt

とりあえず自分の環境は、

iMacG5 / Mac OS X Tiger (10.4.7) / 1.8GHz Mem 2GB
VAIO SRX7 / Windws XP Home Edition SP2 / 800MHz Mem 384MB
VAIO PCV-W120 / Windows XP Home Edition SP2 / Celeron 1.8GHz Mem 512MB

こんな感じで、

■Windows XP下

AVR Studio 4:Version 4.12 Service Pack 3
WinAVR:20060421
avrdude:上記WinAVR付属 Version 5.1
ドライバ:秋月FAQから落とせるProlificの2.0.2.1

■Mac OS X下

avrdude CVS先端のVersion 5.1
ドライバ:osx-pl2303 0.2.2(Universal)

こんな感じです。みなさんのところで動いているのだから、うち固有の問題ですよねぇ……。

ライタを作り損じているか、ターゲットへの接続方法が悪いか。
でも、AVR Studioからは書けまくりなのが変だし。
avrdudeのコマンドラインはしくじってないですよね?

> avrdude -p 2313 -c avrispv2 -P com4 -b 115200 -U flash:w:main.hex:i

現在はブレッドボード上でテストをしていて、ターゲット(AT90S2313)の空きポートは接地させてないのですが、それが悪いとか?

「comport sniffer」、「serialport sniffer」、「シリアル キャプチャ」などでググるといろいろ出てくるので、間に割って入ってログをキャプチャできたらまた書きます。

Posted by: moyashi | 2006.09.20 at 06:10 AM

うーーむ、avrdudeでだけ書けない、、、。

こうした不安定な動作をするときには、電源を疑ってみるのが良いと思います。AVR
付近にバイパス用のキャパシタは付いていますか?

AVR Studio で書けても回路が安定とは限りません。とかくブレッドボードでは配線
が冗長になりがちで、電気的に不安定な場合が多いのです。この機会に、無駄だと
思ってもパスコンやケミコンを追加してから試してください。

健闘を祈ります。

Posted by: senshu | 2006.09.20 at 06:57 AM

3台のマシンで似たような症状なのだから、senshuさんのおっしゃる通り、USB Serial変換アダプタより先の問題であると思った方がいい気がしてきました。

心当たりはあります。
電源はスイッチング電源だし、パスコンは付けてないですし、空きポートはプルダウンしてないし。

電圧が出ているのは確認してますが……。
本来スイッチング電源なんかはダメだというのは承知しています。
3端子レギュレータで006Pから5Vを作って、なおかつパスコン付けて試してみます。

仕事がありますので、続きは本日深夜ですね。

Posted by: moyashi | 2006.09.20 at 01:05 PM

スイッチング電源は、パスコンが無い状態で使うと不安定な電圧を
発生させるものもあるようです。

AVR Studio で問題が無いのは、単なる偶然(あるいは幸運)なのか
も?!

私も死蔵していた秋月電子扱いの USB 変換ケーブルがあったのを思
い出し、同様に動作確認してみましたが、問題はありませんでした。

つまり、秋月電子のUSB変換ケーブルでもOKということになります。

ぜひ、電源周りを強化してからお試しください。

Posted by: senshu | 2006.09.20 at 01:59 PM

006Pを78L05へ入力。78L05には0.1uの電解コンを二つ付けて、これを電源にしてみました。
AT90S2313には、0.1uの積層セラコンをパスコンとして付けて、空きポートはすべてプルダウン。

これでも症状に変わり無しでした。
一応実験風景を写真撮影してみました。

http://hitoriblog.web.fc2.com/index.html

もはや、AVR Studioから書ければいいかって気持ちです。

Posted by: moyashi | 2006.09.21 at 03:55 AM

お疲れ様です。諦め気味のようですが、気になった点を書きます。

AVRISP からターゲットまでのケーブルが長すぎると思います。この
ケーブルは長くとも 20cm 以内にとどめるべきです。現状は中継コ
ネクタを経由しており、 50cm を超える長さがあると思います。こ
のケーブルが長すぎると高速な信号では正しく伝送されない可能性
があります。可能なら信号をオシロスコープなどで観測すると良い
のですが、、。

avrdude でうまくいかないのは、信号を高速にやり取りしているか
らかの知れません。

再現性のある不具合は、解決しておかないと類似の障害が起きたと
きに再び解決できなくなることが多いので何とか原因を追求してい
ただきたいと思います(勝手な意見ですが)。

Posted by: senshu | 2006.09.21 at 07:08 AM

なるほど。気にはなっていましたが、つぶしてみるしかないですね。
10ピンのボックスヘッダから、直接ブレッドボードに差せるケーブルを作ってみたいと思います。今日試すかどうか分かりませんが……。

Posted by: moyashi | 2006.09.21 at 08:20 PM

実験風景見せて頂きました。

私が適当な推測をしてしまったので、なんか違う方向に
向いてしまっている感じがします。本当に御免なさい。
AVRStudioから書き込めるのだから、ハードウェア側の
しては問題は無いと思います。
(確かにISPケーブルは長いと思いますが、AVRStudio
から書き込めるので原因であることは薄いと思います。)

ここ2晩程avrdudeのソースを読んでいたのですが、
ちょっと面白い事に気付いたので、手を入れて見ました。

http://morosansoft.cocolog-nifty.com/DOWNLOAD/AVRDUDE.zip

avrdude.exe, avrdude-d.exeが入っています。
このうちavrdude-d.exeはデバッグ用で標準出力に
ライタとの通信内容を出力します。

これで試していただけないでしょうか。

Posted by: Morosan | 2006.09.21 at 10:23 PM

おおおおおお!!! 書けました!! ありがとうございます!! とりあえずご報告まで。ただ、

>avrdude: stk500v2_cmd(): failed to send command

といったようなエラーは相変わらず出てますので、何かのエラーチェックをすっ飛ばした感じでしょうか? 後でログを貼ります。
でも、なぜみなさんのところでは大丈夫なのに、うちだけダメなのか、そこが気になりますね。
senshuさんのアドバイスに従い、ケーブルを短くすることもやっています。とりあえず、ライタ側のD-SUB9ピンコネクタ左右のインチネジを外して、延長ケーブルを外し、ライタとアダプタを直結しても変わりはありませんでしたが……。

Posted by: moyashi | 2006.09.22 at 01:00 AM

Windows XP Home SP2+秋月ケーブルのログです。
http://moyashi.air-nifty.com/avrdude_d_log.txt

Posted by: moyashi | 2006.09.22 at 01:14 AM

少し進展があったようですね。

ケーブルは AVRISP 互換ライタとターゲットボード間のケーブル長
が延長できません。RS232C は多少長くとも大丈夫です。(元々延長
できるように設計されています)

依然エラーが発生する理由は「何かがよくないため」だと思います
が、根気よく原因追求を行うことは今後の糧になると思います。

Morosan さんの、ライタではなく制御側のプログラムを改造する方
法は非常に有効な手段でしたね。

問題解決の手段として、大変参考になりました。(これほど手厚い
サポートは、有料の環境でも得られないかも知れませんね)

Posted by: senshu | 2006.09.22 at 07:06 AM

そうですね。まだケーブルはいじってませんが、Morosanさんの手が入ったソースをavrdude5.1に交ぜてMac OS Xでコンパイルして試してみたところ、Mac OS Xからも書けました。やっぱりエラーは出てますが。しかし、やった! Mac OS Xからも書けました! 本当にありがとうございます。

Posted by: moyashi | 2006.09.22 at 12:52 PM

まだ完全ではないようですが、当初の目標は達成したようですね。
おめでとうございます。

私も他の環境ではどうかを試してみました。

Windows 2000 の環境では、WinAVR の 2006年 4月に出た版に付属す
る avrdude では、RS232C と USB 変換ケーブル共に問題なし。

Ubuntu-Linux ver 6.06 と apt-get でインストールした avrdude
5.0 の環境で、/dev/ttyS0, 秋月の USB 変換ケーブル(何と!単に
挿しただけで認識) /dev/ttyUSB0 の二つで試しましたが、特に修
正無しで使えました。

今回の変更はパージサイズが 256=>128 の変更ですから、データ長
が長いと致命的なエラーになる、ことが判明したわけです。

PICマイコンは内蔵するメモリが限られるため、かなり技巧的な技を
用い、バッファリング無しでデータ転送を行っているとのことです
から、セラロックの周波数のバラツキなども影響があるのかもしれ
ません。

後は、エラーが出ながらも使える?原因を特定すべきですが、デバ
ッグメッセージつきの avrdude があるのですから時間の問題で解決
しそうですね。

Posted by: senshu | 2006.09.22 at 02:08 PM

ケーブルも短くしてみました。

http://moyashi.air-nifty.com/R0011151_.JPG

しかし、結果は変わり無しです。セラロックですか。確かに、それもあるかもしれません。
何個か持ってますが、スルーホール基板だから、抜くの大変ですね……。ここまで来たらやるしかないか。

Posted by: moyashi | 2006.09.22 at 02:36 PM

ちょっと待った。
S2313はシリアル・プログラミングで
ヒューズ/ロックビットの操作が出来ないので、
純正AVRISPを使ったとしてもエラーが出ると
思います。

(と思うんですが、今職場なんで帰宅してから
確認して見ます。)

Posted by: Morosan | 2006.09.22 at 05:13 PM

なるほど!

私は Tiny26Lで動作確認をしていました。
S2313の動作確認は、readのみを確認していました。
(この辺が盲点だったかな?)

必ず起きるエラーとなれば、もっと適切なメッセージで
通知して欲しいですね>avrdude


Posted by: senshu | 2006.09.22 at 05:17 PM

まな板の上でパクパクしているしかない鯉みたいな気持ちですが、優秀な皆さんのお時間を使っていただいて、本当に恐縮というほかありません。
とりあえず、仮病を使って家で作業を続け、自動ハンダ吸い取り器にてセラロックを抜くところまでやりました。ICソケットと換装して、手持ちのセラロックを差し替え差し替えしてみます。

Posted by: moyashi | 2006.09.22 at 05:44 PM

セラロック抜いちゃいましたか。

純正でもエラーが出るのではないかと言う推測は
間違いでした。すみません。

で、avrdude-d の通信ログを読ませてもらいました。
ちょっとCMD_SPI_MULTIの応答が納得がいきません。

そこで、お手数ですがファームウェアを私のブログで
公開している物に戻した場合のログと、再び先日の
受信部を書きなおしたファームウェアのログを見せて
いただけないでしょうか。

よろしくお願いします。

Posted by: Morosan | 2006.09.22 at 07:27 PM

遅くなりました。セラロックをICソケットで取り付けるように変更し、手持ちの三つのセラロック、合計四つで差し替えて確かめてみましたが、変化無しでした。

ファームウェアを書き換えてログを取りました。

以降、日付はファームウェアのことを指します。

■Windows XP下での試験

09.20のもの。
http://moyashi.air-nifty.com/avrdude_new_firm.txt

09.18のもの。
http://moyashi.air-nifty.com/avrdude_old_firm.txt

何と09.18に書き換えた時点でエラーが出なくなりました。

再度09.20のものに書き換えて、つまり最初のログと同じ状態のものにしてログを取ると、依然エラーが出ない状態を維持しています。

http://moyashi.air-nifty.com/avrdude_new_retry.txt

09.20に書き換える時点で失敗していたということでしょうか。

それなら、ということでWinAVR付属のavrdudeで試してみると、これはダメでした。やはり書き込みができません。
Morosanさんがavrdudeに加えた修正に依存した状態というものは抜け出せていません。

■Mac OS X上での試験

09.18に戻してエラーが出なくなった時点で「Morosanさんの修正ソースをマージしてコンパイルしたavrdude」で試してみると、エラーが出ませんでした。

09.20に再度書き直したもので試しても、エラーは出ませんでした。

修正無しのavrdudeを消してしまい、なおかつOSの再インストールをして開発環境を消してしまったので、修正無しのavrdudeでの試験については後で書きます。

Posted by: moyashi | 2006.09.23 at 01:52 AM

御免なさい、大変な作業をさせてしまったようですね。
最初にきちんと説明しておくべきでした。

ターゲットをS2313とした場合、16F648A-AVRライタを
使って書き込みをする際、修正したavrdudeを使用しないと
書きこむ事が出来ません。私はS2313を持っていないので、
ファームにCMD_SPI_MULTI命令の対応を行った時点では
気が付かなかったのですが、avrdudeのソースコードを
読んで問題を把握しました。
ターゲットをMega88やTiny26などのAVRを使用した場合
きちんと書き込めるので、問題が無い様に見えていただけ
でした。

avrdudeに行った修正は、決してエラーを無視するといった
修正ではなく(この様な対処療法的な修正は別の問題を
引き起こす可能性を持っています)avrdudeに
16F648A-AVRライタを対応させるものです。

昨日も書いた通り、ハードウェア側の問題は無いと思います。

ただ、なぜ対処したファームでエラーが出るのかが疑問でし
たが、一連のログを見て納得しました。9/20のファーム更新
の際、新しいファームに書き換えるのでは無く、さらに古い
ファームに書き戻されている事を確認しました。

16F648-AVRライタを使う際は、対応版のavrdudeを使用して
下さい。

ログを見せて頂いてありがとうございました。結構大変な
作業だったでしょう?以上の事から、問題は解消されたと
考えます。

Posted by: Morosan | 2006.09.23 at 06:31 AM

なるほど。そうだったのですか。何から何までお世話になりました。
ライタは大事に使わせていただきます。

Make一発で書き込みまで終わらせられるので、とても快適ですね。

しかし、まったく自分の筋の無さっぷりに腹が立ちます。
でも、貴重な体験だったと思います。
Morosanさんはもちろん、senshuさんもありがとうございました。

AVRで外部クロックに追従するシーケンサのようなものを作る、という目的がありますので、16F648-AVRライタには、存分に活躍してもらおうと思います。

16F648-AVRライタはUSBの無いMac OS Xユーザにも有用な選択肢ですので、avrdude対応(レガシーmmu対応?)は、経緯はともあれ意義の大きいことだと感じています。

本当にありがとうございました!!

Posted by: moyashi | 2006.09.23 at 02:58 PM

問題が解決して、本当に良かったですね。(私の経験則からのアドバイスはあまり
有用ではなく、単に仕事量を増しただけのようでちょっと残念ですが。)

Morosan さんの詳細な解説もブログで拝見しました。今回の経緯を見てみると、三
者三様の考えがあり、少しずつ力点を置く位置が異なり、ややもすると「船頭多く
して船、山に登る」になる可能性がありました。

しかし、Morosan の冷静な対応によって理想的な結果が得られたと思います。この
スレッドを整理すると、トラブルシュートの事例にもなりそうです。この成果を整
理して記録しておきたいものです。

皆さん、どうもお疲れ様でした。

Posted by: senshu | 2006.09.23 at 06:38 PM

書き忘れました。

Mac OSで利用している、もう一つのUSB変換ケーブルの結果はいかがですか?

今なら、問題なく使えるような気がしますが。

Posted by: senshu | 2006.09.23 at 06:41 PM

そもそもsenshuさんからavrdudeがv2プロトコル対応であることを教わらなければ始まらなかった話です。
また、いただいたアドバイスは今後に生かせるとも思っています。

KeyspanのUSA-19HSでも動作OKでした。
秋月のUSB-RS232変換ケーブルの方がコンパクトなので、どちらでも動くとなれば、秋月の方を使うことになるかと思いますが。

Posted by: moyashi | 2006.09.23 at 10:53 PM

AVRISP互換ライタのファームが更新されました。

また、このブログに記載されているサンプルプログラムは
#include のファイル名部分が欠落しています。

インデントもちょっと変です。可能なら修正してもらえると、
後に続く人にとって親切だと思います。時間に余裕のある時に
修正をしていただけると幸いです。

Posted by: senshu | 2006.10.02 at 08:10 PM

ありがとうございます。補足しておきました。
ソースは#includeの後がタグ扱いになって消えてしまってました。
インデントのこともあるので、別ファイルにしてリンクしました。

Posted by: moyashi | 2006.10.02 at 10:51 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/13760/11934821

Listed below are links to weblogs that reference Mac OS X Tiger上にAVR-GCC環境を構築する@2006:

» AVRのためのPIC再入門 [MorosanSoft]
PICでAVRライタを作る11 先週は16F648A-AVRライタをavrdudeに対応させるという事をやっていた。ことの始まりは ひとりぶろぐ moyashj [Read More]

Tracked on 2006.09.26 at 10:49 PM

« JavaScript shell (js)、OSSP js 1.6.20060820のZaurus向けパッケージ | Main | Zaurusで音響生成プログラミング言語Csoundを使う »