AVR32 Network Gateway Reference Board

このレポの続きはBlogでのんびり進行中です〜ヽ(´ー`)ノ

最近発売されたらしいATMEL純正のAVR32を使ったネットワークゲートウェイのリファレンスボードです。某所で話が出ていたので、試しに買ってみました。DigiKeyで9200円ぐらいです(送料+2000円で11000円ちょっと)

ちなみに付属品は一切ありません(ぉ DCアダプタも適当な9〜15Vまでのを使います。極性はどっちでもOKなようになっていますので、コネクタさえ合えば問題ありません。自分は秋月の12Vアダプタで動かしています。サポートソフトもATMELサイトからダウンロードします。

OSはLinux 2.6.18です。OSの書き換えとかはブート領域(U-boot)を書き直さなければ、SDカードとかtftpでアップデートできます。U-bootの書き換えには JTAGICEmk2が必要。まともに使うことを考えたら、買っておいた方がいいと思います。Digikeyで品切れですがSTK500とのセット品が1.8万ぐらいで買えます。自分は昔に買ったので、4万近い値段で買いましたが・・・orz

あんまりLinuxは興味がないので、消して使おうかなとか思ってましたが、以外に遊べそうなので当分そのまま使おうかと。

で、届いてからいじってますが、ちゃんとリセットするときにはpoweroffしてからでないと激しくまずいです。当たり前ですが、簡単にふっとびます(ぉ 普通の堅牢な組み込み機器のつもりで使ってはいけません。

そもそもLinuxなんてPCでちょっとしか使ってない、自分のようなあんまりよくわからない奴が遊ぶにはかなりの覚悟が必要です。なにしろ情報があんまりないのと、かなーりATMELの方がイイカゲンっぽいので、、。ただ、いじり倒して遊びたい人には、すべての情報が手に入る低価格組み込みLinuxボードとして有用かと思います。

●ターミナル

ブートからのコントロールはシリアルから行います。設定は115200bps N81 です。適当なターミナルソフトを準備して、RS232Cストレートケーブルで繋げばOK。USB-232C変換ハードだったら、GenderChanger噛ませば直結できると思います(自分はその構成)

自分はターミナルソフトは昔niftyで使ってた秀TermEvoを使ってます。速くて高機能、信頼性も高いのでお勧め。シェアウェアだから嫌う人も多いけど。

U-Bootに入るには、起動直後に1秒間スペース待ちがありますので、そこで入ります。以下、ブートログ。

U-Boot 1.1.4-at0 (Jan 3 2007 - 10:30:09)

U-Boot code: 00000000 -> 000144f7 data: 24000000 -> 24002d80
SDRAM: 32 MB at address 0x10000000
Testing SDRAM...OK
malloc: Using memory from 0x11fc0000 to 0x12000000
Flash: 8 MB at address 0x00000000
DRAM Configuration:
Bank #0: 10000000 32 MB
In: serial
Out: serial
Err: serial
Net: macb0, macb1
Press SPACE to abort autoboot in 1 seconds
### JFFS2 loading 'uImage' to 0x10200000
Scanning JFFS2 FS: ........ done.
### JFFS2 load complete: 905936 bytes loaded to 0x10200000
## Booting image at 10200000 ...
Image Name: Linux-2.6.18-at0
Image Type: AVR32 Linux Kernel Image (gzip compressed)
Data Size: 905872 Bytes = 884.6 kB
Load Address: 10000000
Entry Point: 90000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK

Starting kernel at 90000000 (params at 11fc0040)...

pdc pdc.0: Atmel Peripheral DMA Controller enabled
EIM: External Interrupt Module at 0xfff00000, IRQ 19
EIM: Handling 4 external IRQs, starting with IRQ 64
smc smc.0: Atmel Static Memory Controller at 0xfff03400
pio0: Atmel Port Multiplexer at 0xffe02800 (irq 13)
pio0: Handling 32 external IRQs, starting with IRQ 96
pio1: Atmel Port Multiplexer at 0xffe02c00 (irq 14)
pio1: Handling 32 external IRQs, starting with IRQ 128
pio2: Atmel Port Multiplexer at 0xffe03000 (irq 15)
pio2: Handling 32 external IRQs, starting with IRQ 160
pio3: Atmel Port Multiplexer at 0xffe03400 (irq 16)
pio3: Handling 32 external IRQs, starting with IRQ 192
pio4: Atmel Port Multiplexer at 0xffe03800 (irq 17)
pio4: Handling 32 external IRQs, starting with IRQ 224
dmac0: DesignWare DMA controller at 0xff200000 irq 2
NET: Registered protocol family 2
IP route cache hash table entries: 256 (order: -2, 1024 bytes)
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 1024 bind 512)
TCP reno registered
JFFS2 version 2.2. (NAND) (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler cfq registered (default)
Serial: Atmel USART3 driver
usart.1: ttyS0 at MMIO 0xffe01000 (irq = 7) is a USART3
loop: loaded (max 8 devices)
eth0: Atmel MACB at 0xfff01800 irq 25 (00:04:25:1c:55:0c)
eth1: Atmel MACB at 0xfff01c00 irq 26 (00:04:25:1c:55:0d)
physmap platform flash device: 00800000 at 00000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank
Amd/Fujitsu Extended Query Table at 0x0041
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
Using physmap partition information
Creating 3 MTD partitions on "physmap-flash.0":
0x00000000-0x00020000 : "u-boot"
0x00020000-0x007f0000 : "root"
0x007f0000-0x00800000 : "env"
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xffe00000 (irq 3)
mtd_dataflash spi0.0: AT45DB642x (8448 KBytes)
ip_conntrack version 2.4 (256 buckets, 2048 max) - 204 bytes per conntrack
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP bic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
Time: avr32 clocksource has been installed.
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 56K (90000000 - 9000e000)
init started: BusyBox v1.2.2 (2006.12.13-14:13+0000) multi-call binary
* mounting virtual filesystems: /proc /sys /dev/pts /dev/shm /config /var/log /var/log/samba /var/log/ntpstats /tmp
* setting hostname ... 'ngw.example.net'
* network loopback ... [ OK ]
* starting syslogd ... [ OK ]
* log messages to syslog ... [ OK ]
* starting klogd ... [ OK ]
* set mdev hotplug ... [ OK ]
* mdev ... [ OK ]
* probing modules ... vfat loaded, mmc_block loaded, atmel-mci loaded, [ OK ]
* mounting filesystems: /usr
* setup eth0 ... [ STATIC ] (10.11.12.1)
* setup eth1 ... [ OK ]
* network ... [ OK ]
* starting telnetd ... [ OK ]
* enable ipv4 forwarding ... [ OK ]
* iptables postrouting ... [ OK ]
* iptables incoming trafic ... [ OK ]
* iptables outgoung trafic ... [ OK ]
* starting dnsmasq ... [ OK ]
* running ntpdate ... [ FAILED ]
* starting dropbear ... [ OK ]
* starting inted ... [ OK ]
* starting nmbd ... [ OK ]
* starting smbd ... [ OK ]
* starting winbindd ... [ OK ]
* starting httpd ... [ OK ]
* get board type for GPIO ... 'NGW'
* setup GPIO boot LED ... [ OK ]
* setup GPIO LED A ... [ OK ]
* setup GPIO LED B ... [ OK ]

Network Gateway ready

BusyBox v1.2.2 (2006.12.13-14:13+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ #

●中身(ハードウェア)

回路図みた方が速いです(ぉ 

http://www.atmel.com/dyn/resources/prod_documents/AT32NGW100_schematics.pdf

結構拡張ヘッダにピンが出てますので、Linux制御組み込み機器を作るのは楽でいいかも。ちなみにTFT液晶I/Fで必要なピンは全部出てるので、液晶を繋いで画面表示という拡張か可能と思われます。

USBはHispeedですから、高速性が必要な用途にも十分使えます。

●中身(ソフトウェア)

取りあえず、定番のhttpd,ftpdもありますし、sambaもあります。ネットワークラジオとか作るのは楽ですね。デバッグでgdbserverが入ってないのでgdb使えないっぽい?

EclipseでデバッグしようとするとftpがPassiveモードを使ってくれないので、アップロードでAVR32に蹴られます。たぶん、どっかに設定スクリプトがあるはずなんだけど、まだ探索中・・・(;´Д`)

inetd.confとftpaccessの設定ミスです。ftpaccessは新規作成して追加(Linuxな人なら常識なんだろうけど・・・

うちのローカルは、192.168.11.*になってるんで、環境に合わせて設定してください(赤字がデフォルトと違うトコ)

ただ、やっぱりgdbserverがないから使えないっぽいです。うーん。Linuxアプリのデバッグはちょっとまだ駄目そう。

/etc/inted.conf
ftp stream tcp nowait root.root /usr/sbin/ftpd ftpd -a
#netbios-ssn stream tcp nowait root.root /usr/sbin/smbd smbd
#netbios-ns dgram udp wait root.root /usr/sbin/nmbd nmbd
swat stream tcp nowait.400 root.root /usr/sbin/swat swat

/etc/ftpaccess
port-allow address 192.168.11.0/24

内蔵アプリはデフォルトはIPアドレスが10.0.0.0/24の範囲で使うようになってるんで、hostsとかinterface、httpd.conf等の設定を直しましょう。そうすると、LANに繋いでWebブラウザでアクセスすると、設定画面とか出ます(変えないと403エラーが出てアクセスできません)

Linuxアプリケーションは、Eclipseの環境で作れます。取りあえず動かしたい人は、NGWのGetting Startedの通りやってみましょう。

なお、普通はavr32-gccとかをデフォルトで使うようになってますが、linuxアプリを作る場合にはavr32-linux-gccを使います。作ったelfファイルをftpでアップして、chmod 755すれば実行できます。

test.c

#include <stdio.h>

int main(int argc, char** argv)
{
printf("Hello World!\n");
return 0;
}

console
~ # mv /home/ftp/test.elf . << ftpで転送
~ # chmod 755 ./test.elf
~ # ./test.elf
Hello World!
~ #

ARMのEclipse開発環境と混ざるとちゃんと動かないっぽいので、別フォルダにインストールした方がいいかも?

使った後は、poweroffコマンドでシャットダウンしてから電源OFFしましょう。そうでないと、ファイルシステムがすぐに死にます。

●一応、メモ書き代わりにフラッシュメモリがブランク状態からの復旧法記載。

<ポイント>

・ボードが届いたら、JTAGICE2を持っていれば、すぐにフラッシュ領域を全部読み出してバックアップしましょう。ATMELのサポートにはSTK1000のU-bootが使えるようなことが書いてますが、全く使えません(ぉぃ 0x00000-0x20000までがU-bootなんで、この領域をファイル化しておきましょう。

>もう消してしまったお(;´Д`) ←自分 (これではまった・・・

 →U-bootをリビルドするか、AVRFreaksのフォーラムにバイナリがあるんでそれを使いましょう。

>U-bootの環境変数をバックアップ・メモ書きしておきましょう。全域Eraseしたあとに戻すときに必要です ← これもはまった(;´Д`)

ビルド直後のデフォルトはmmcからの起動ですから、元に戻すには以下の書き換えが必要

eth0,1のMACアドレスもここで設定されているので、購入直後にメモ書きしておきましょう。

avr32programで0x7f0000-0x7fffff領域をバックアップするのもOK。

 bootargs=console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2
 bootcmd=fsload; bootm

●ファイルシステム破損対応
Time: avr32 clocksource has been installed.
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 56K (90000000 - 9000e000)
ブート中にここでロックしたら、ファイルシステム死んでます。フラッシュを消して、イメージを書き込みし直します。JTAGICE2があれば、Cygwinのコンソールからavr32programを動かして、Erase,Programmingします。JTAGICE2を持ってなければ、U-bootを起動して、そこからtftpでアップするか、Ext2でフォーマットしたSDにngw_jffs_root.imgをコピーして、それをロードして書き込みます。ここらへんはマニュアルに書いてありますので、そっちを参照。

●U-bootの書き換え/バックアップ

BSP2.0のCDにはngwのU-bootイメージが入ってません(STK1000のみ)。必ず、Linux以外のプログラムを書いて遊びたい場合には、U-bootを自分でバックアップしておきます。

avr32program read -F bin -O 0 -s 0x20000 > uboot.bin (バックアップ)

avr32program program -F bin -vfcfi@0 uboot.bin (書き直し)

avr32program erase -fcfi@0 (All erase,全域消したくないときは上のとこで-eオプション使う。全域Eraseしないので、サムエラーがでるかも。)

●全域書き換えた後

全域書き換え直後にはmmcからイメージをロードして起動するようになっているので、NORフラッシュから読み出して起動するようにします。

(0x7f0000-0x7fffffを消していなければ不要)

環境変数設定(他に必要なモノがあればそれも直します)

Uboot> setenv bootargs 'console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2'
Uboot> setenv bootcmd 'fsload; bootm'

NORの環境変数エリアのプロテクトを解除

Uboot> protect off 0x007f0000 0x007fffff
Un-Protected 1 sectors

環境変数保存
Uboot> saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...Erasing sector 134...Erased 1 sectors
Writing to Flash... done
Protected 1 sectors

再度プロテクト(念のため・・
Uboot> protect on all
Protect Flash Bank # 1

リセット

boot> reset




もくじに戻る