SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|

2009-03-01(Sun) 真・秋月のPICライタをLinux(ほか)で使う

  どうにかLinux上で、PICのプログラムを(Z80風インラインアセンブラ込みの)Cで書いて、秋月のライタでPICに書き込んで、キチンと動かすことができる環境を構築することができたので、ここに公開する。

  画像の説明

  今のところ、12F675系、16F648A系、16F819系しか動かない。オレ的にはこれでかなり十分なので、これ以上がんばるつもりはないが、パッチがくれば公開はします。では。

  <追記>rakipicの最新版は、左の検索窓で「rakipic」と検索し、最新の記事に置いてある。(たぶん)


2009-03-05(Thu) XPortトビますトビます

  先日より、あれこれと環境整備しているのは、とりあえずXPortで何か作るためなのであるが、どうにか環境が整ったところで、XPortの調子が悪い。

# tcpdump -i eth0 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:13:53.246240 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:13:56.245896 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:13:59.245890 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:02.245884 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:05.240880 arp who-has 169.254.146.113 tell 0.0.0.0
23:14:06.450666 arp who-has 169.254.146.113 tell 0.0.0.0
23:14:14.620135 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:17.619874 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:20.619864 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:23.619853 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:26.614845 arp who-has 169.254.146.113 tell 0.0.0.0
23:14:27.824889 arp who-has 169.254.146.113 tell 0.0.0.0
23:14:35.994092 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:38.993839 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:41.993830 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:44.993815 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:14:47.988816 arp who-has 169.254.146.113 tell 0.0.0.0
23:14:49.198607 arp who-has 169.254.146.113 tell 0.0.0.0

  DHCPというか、BOOTPの後、ARPで空いているリンクローカルを調べているようだが、それを何度も繰り返してしまい、一向にIPアドレスが決まらない。

  DHCPサーバを用意してやっても、やっぱりIPアドレスが決まらない。BOOTPの場合は一往復で決まるはずなのだが、二往復しており、正確に8秒弱の周期で同じ動きを繰り返している。どうも、リセットがかかっているようだ。

# tcpdump -i eth0 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:18:19.193321 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:19.257643 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:19.193464 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:19.217945 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:27.177049 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:27.177518 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:27.178035 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:27.445515 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:35.400975 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:35.401409 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:35.401963 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:35.455071 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:43.415276 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:43.416395 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:43.416763 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:43.468734 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:51.429325 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:51.430455 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:51.430812 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:51.511479 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:59.463365 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:59.463811 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300
23:18:59.464352 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:18 (oui Unknown), length 300
23:18:59.495639 IP 192.168.7.96.bootps > 192.168.7.100.bootpc: BOOTP/DHCP, Reply, length 300

  とあるサイトにも、同様にリセットがかかってしまうような記述があった。以前に動かした時は、ちゃんとtelnetできるところまでいったのだが、今回はダメ。

  そう大きくないレギュレータを使っているから電源問題、もしくは、オイラがどうかして壊したのか、とも思ったが、よく見ると最初のパターンでは、正確に8秒強の間隔でリセットしているようだ。これって、内部的にWDTが動いてる挙動としか思えない。ロジックバグがあんじゃねーのか?

  ファームを上げようにも、こんな調子ではLAN側からTFTPすることは望めない。シリアル側からでもできるようだが、Windows専用のユーティリティを動かす必要がある。面倒だし、シリアル接続している時にリセットがかからないという保証はない。

  XPortは追加購入した分も含めて全部で3つ買ったし、変換基板も2枚作ったから、もうひとつで試してみる手もあるが、安かったとはいえ、コレ一個5千円だゼ。そんなに簡単に壊れてもらっては困るんですけどねぇ。


2009-03-06(Fri) XPort落ち着きます

  XPortがどうにも動かないので、仕方なく、もうひとつの個体を変換基板に乗せてみる……って、動くじゃん!!

# tcpdump -i eth0 -xX -s 2000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 2000 bytes
23:05:07.212012 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
	0x0000:  4500 0148 aaab 4000 4011 8efa 0000 0000  E..H..@.@.......
	0x0010:  ffff ffff 0044 0043 0134 50da 0101 0600  .....D.C.4P.....
	0x0020:  aeaf 4701 0000 0000 0000 0000 0000 0000  ..G.............
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0137  ........c.Sc5..7
	0x0110:  0301 0306 7401 010c 0743 3830 3532 3234  ....t....C805224
	0x0120:  3d07 0100 204a 8052 24ff 0000 0000 0000  =....J.R$.......
	0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0140:  0000 0000 0000 0000                      ........
23:05:10.211757 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
	0x0000:  4500 0148 aaac 4000 4011 8ef9 0000 0000  E..H..@.@.......
	0x0010:  ffff ffff 0044 0043 0134 50d7 0101 0600  .....D.C.4P.....
	0x0020:  aeaf 4701 0003 0000 0000 0000 0000 0000  ..G.............
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0137  ........c.Sc5..7
	0x0110:  0301 0306 7401 010c 0743 3830 3532 3234  ....t....C805224
	0x0120:  3d07 0100 204a 8052 24ff 0000 0000 0000  =....J.R$.......
	0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0140:  0000 0000 0000 0000                      ........
23:05:13.211749 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
	0x0000:  4500 0148 aaad 4000 4011 8ef8 0000 0000  E..H..@.@.......
	0x0010:  ffff ffff 0044 0043 0134 50d4 0101 0600  .....D.C.4P.....
	0x0020:  aeaf 4701 0006 0000 0000 0000 0000 0000  ..G.............
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0137  ........c.Sc5..7
	0x0110:  0301 0306 7401 010c 0743 3830 3532 3234  ....t....C805224
	0x0120:  3d07 0100 204a 8052 24ff 0000 0000 0000  =....J.R$.......
	0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0140:  0000 0000 0000 0000                      ........
23:05:16.211745 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
	0x0000:  4500 0148 aaae 4000 4011 8ef7 0000 0000  E..H..@.@.......
	0x0010:  ffff ffff 0044 0043 0134 50d1 0101 0600  .....D.C.4P.....
	0x0020:  aeaf 4701 0009 0000 0000 0000 0000 0000  ..G.............
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0137  ........c.Sc5..7
	0x0110:  0301 0306 7401 010c 0743 3830 3532 3234  ....t....C805224
	0x0120:  3d07 0100 204a 8052 24ff 0000 0000 0000  =....J.R$.......
	0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0140:  0000 0000 0000 0000                      ........
23:05:19.206730 arp who-has 169.254.146.113 tell 0.0.0.0
	0x0000:  0001 0800 0604 0001 0020 4a80 5224 0000  ..........J.R$..
	0x0010:  0000 0000 0000 0000 a9fe 9271 0000 0000  ...........q....
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
23:05:20.416539 arp who-has 169.254.146.113 tell 0.0.0.0
	0x0000:  0001 0800 0604 0001 0020 4a80 5224 0000  ..........J.R$..
	0x0010:  0000 0000 0000 0000 a9fe 9271 0000 0000  ...........q....
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............

  リンクローカルがビシッと決まる。BOOTPの場合も同じ。2回やるのは仕様らしい。

# tcpdump -i eth0 -xX -s 2000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 2000 bytes
23:08:53.072843 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
	0x0000:  4500 0148 aaab 4000 4011 8efa 0000 0000  E..H..@.@.......
	0x0010:  ffff ffff 0044 0043 0134 50da 0101 0600  .....D.C.4P.....
	0x0020:  aeaf 4701 0000 0000 0000 0000 0000 0000  ..G.............
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0137  ........c.Sc5..7
	0x0110:  0301 0306 7401 010c 0743 3830 3532 3234  ....t....C805224
	0x0120:  3d07 0100 204a 8052 24ff 0000 0000 0000  =....J.R$.......
	0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0140:  0000 0000 0000 0000                      ........
23:08:54.001479 IP 192.168.7.96.bootps > 192.168.7.101.bootpc: BOOTP/DHCP, Reply, length 300
	0x0000:  4510 0148 0000 0000 8011 a97f c0a8 0760  E..H...........`
	0x0010:  c0a8 0765 0043 0044 0134 44a5 0201 0600  ...e.C.D.4D.....
	0x0020:  aeaf 4701 0000 0000 0000 0000 c0a8 0765  ..G............e
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0236  ........c.Sc5..6
	0x0110:  04c0 a807 6033 0400 00a8 c001 04ff ffff  ....`3..........
	0x0120:  00ff 0000 0000 0000 0000 0000 0000 0000  ................
	0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0140:  0000 0000 0000 0000                      ........
23:08:54.002037 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:20:4a:80:52:24 (oui Unknown), length 300
	0x0000:  4500 0148 aaac 4000 4011 8ef9 0000 0000  E..H..@.@.......
	0x0010:  ffff ffff 0044 0043 0134 96e0 0101 0600  .....D.C.4......
	0x0020:  377d 14ee 0000 0000 0000 0000 0000 0000  7}..............
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0337  ........c.Sc5..7
	0x0110:  0301 0306 0c07 4338 3035 3232 343d 0701  ......C805224=..
	0x0120:  0020 4a80 5224 3604 c0a8 0760 3204 c0a8  ..J.R$6....`2...
	0x0130:  0765 ff00 0000 0000 0000 0000 0000 0000  .e..............
	0x0140:  0000 0000 0000 0000                      ........
23:08:54.057974 IP 192.168.7.96.bootps > 192.168.7.101.bootpc: BOOTP/DHCP, Reply, length 300
	0x0000:  4510 0148 0000 0000 8011 a97f c0a8 0760  E..H...........`
	0x0010:  c0a8 0765 0043 0044 0134 eaea 0201 0600  ...e.C.D.4......
	0x0020:  377d 14ee 0000 0000 0000 0000 c0a8 0765  7}.............e
	0x0030:  0000 0000 0000 0000 0020 4a80 5224 0000  ..........J.R$..
	0x0040:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0050:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0060:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0070:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0080:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0090:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x00f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0100:  0000 0000 0000 0000 6382 5363 3501 0536  ........c.Sc5..6
	0x0110:  04c0 a807 6033 0400 00a8 c001 04ff ffff  ....`3..........
	0x0120:  00ff 0000 0000 0000 0000 0000 0000 0000  ................
	0x0130:  0000 0000 0000 0000 0000 0000 0000 0000  ................
	0x0140:  0000 0000 0000 0000                      ........

  telnetで設定画面にも入れた。

$ telnet 192.168.7.101 9999
Trying 192.168.7.101...
Connected to 192.168.7.101.
Escape character is '^]'.
 
MAC address 00204A805224
Software version 01.3 (030612) XPTE
 
Press Enter to go into Setup Mode 
 
 
*** basic parameters 
Hardware: Ethernet TPI
IP addr - 0.0.0.0/DHCP/BOOTP/AutoIP, no gateway set
DHCP device name : not set
 
*************** Security ***************
SNMP is              enabled
SNMP Community Name: public
Telnet Setup is      enabled
TFTP Download is     enabled
Port 77FEh is        enabled
Web Server is        enabled
ECHO is              disabled
Enhanced Password is disabled
 
*************** Channel 1 **************
Baudrate 9600, I/F Mode 4C, Flow 00
Port 10001
Remote IP Adr: --- none ---, Port 00000
Connect Mode : C0  Disconn Mode: 00
Flush   Mode : 00
 
*************** Expert *****************
TCP Keepalive    : 45s
ARP cache timeout: 600s
 
*************** E-mail *****************
Mail server: 0.0.0.0
Unit       : 
Domain     : 
Recipient 1: 
Recipient 2: 
 
*** Trigger 1 
Serial Sequence: 00,00
CP1: X
CP2: X
CP3: X
Message : 
Priority: L
Min. notification interval: 1 s
Re-notification interval  : 0 s
 
*** Trigger 2 
Serial Sequence: 00,00
CP1: X
CP2: X
CP3: X
Message : 
Priority: L
Min. notification interval: 1 s
Re-notification interval  : 0 s
 
*** Trigger 3 
Serial Sequence: 00,00
CP1: X
CP2: X
CP3: X
Message : 
Priority: L
Min. notification interval: 1 s
Re-notification interval  : 0 s
 
 
Change Setup:
  0 Server configuration
  1 Channel 1 configuration
  3 E-mail settings
  5 Expert settings
  6 Security
  7 Factory defaults
  8 Exit without save
  9 Save and exit            Your choice ? 8
 
exiting without save !
Connection closed by foreign host.

  もちろん、pingにも反応がある。

$ ping 192.168.7.101 
PING 192.168.7.101 (192.168.7.101) 56(84) bytes of data.
64 bytes from 192.168.7.101: icmp_seq=1 ttl=64 time=0.315 ms
64 bytes from 192.168.7.101: icmp_seq=2 ttl=64 time=0.296 ms
64 bytes from 192.168.7.101: icmp_seq=3 ttl=64 time=0.206 ms
64 bytes from 192.168.7.101: icmp_seq=4 ttl=64 time=0.370 ms
^C
--- 192.168.7.101 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3319ms
rtt min/avg/max/mdev = 0.206/0.296/0.370/0.062 ms

  つーか、調子の悪いヤツ、どうしてくれよう。むぐぅ。


2009-03-07(Sat) XPort動き出します

  というわけで、調子の悪いヤツ、どうしてくれよう。面倒くさいが、仕方ない。ダメモトで、Windows機を立ち上げ、シリアル経由でのアップデートを試そう。アドホックに、シリアル接続する配線を加え、ヘンなWindows用ユーティリティを立ち上げ、アップデートしよ……うにも、ウンともスンともいわない。というか、通信速度が115200固定に見えるんですけどね。ユーティリティには変更できるような設定項目は見あたらない。

  画像の説明

  ……えぇい、なんかわからんが、同時にLANからも接続ッ!! ……って、アレ? もしかして、IPアドレスが付いてない? 特に何もしてないが動き出した。なんつぅ不安定な。トラブルシュートのために計測機をつなぐと、その時だけちゃんと動く、なんて事例を思い出した。telnetで10001番につなぐと、WindowsのTERATERMからのシリアル出力が受け取れてしまう。逆はダメだけど。

  なんでもいいや。動いているなら、その間に、せめて、ファームだけでも最新にしておこう。ファームウェアアップデートはtftpで行う。tftpなんて滅多に使わんから入ってない。入れる。

# yum install tftp

  オフィシャルサイトでは、Windows用のファームウェアアップデート手順しか載せてない。tftpの規格はRFCで決められているんだから、一般的な手順も書けよな。

Example command for firmware upgrade from a DOS command prompt type:
	1.  C:\ tftp -i  put xpt01upg.rom X1 
	2.  Wait 20 seconds
	3.  C:\ tftp -i  put xpte_6100.rom X4 
Example command for the new Web Manager upgrade from a DOS command prompt type:
	1. C:\ tftp -i  put xpt_webm_1300.cob WEB4

  てのは、Linuxのtftpだと、以下の手順になる。

$ tftp 192.168.7.100 -m binary -c put xpt01upg.rom X1

  これは、一瞬で終わるが、20秒待つ必要があるらしい。

$ tftp 192.168.7.100 -m binary -c put xpte_6503.rom X4

  これには、20秒ちょいかかる。telnetして、アップデートの様子を確認してみる。

$ telnet 192.168.7.100 9999
Trying 192.168.7.100...
Connected to 192.168.7.100.
Escape character is '^]'.
 
MAC address 00204A805218
Software version V6.5.0.3 (070403) XPTE
 
Press Enter for Setup Mode 
 
 
*** basic parameters 
Hardware: Ethernet TPI
IP addr - 0.0.0.0/DHCP/BOOTP/AutoIP, no gateway set,netmask 128.0.0.0
DHCP device name : not set
 
*** Security
SNMP is              enabled
SNMP Community Name: public
Telnet Setup is      enabled
TFTP Download is     enabled
Port 77FEh is        enabled
Web Server is        enabled
Web Setup is         enabled
ECHO is              disabled
Enhanced Password is disabled
Port 77F0h is        enabled
 
*** Channel 1
Baudrate 9600, I/F Mode 4C, Flow 00
Port 10001
Connect Mode : C0
Send '+++' in Modem Mode enabled
Show IP addr after 'RING' enabled
Auto increment source port disabled
Remote IP Adr: --- none ---, Port 00000
Disconn Mode : 00
Flush   Mode : 00
 
*** Expert
TCP Keepalive    : 45s
ARP cache timeout: 600s
Monitor Mode @ bootup : enabled
HTTP Port Number : 80
SMTP Port Number : 25
MTU Size: 1400
Alternate MAC: disabled
Ethernet connection type: auto-negotiate
 
*** E-mail
Mail server: 0.0.0.0
Unit       : 
Domain     : 
Recipient 1: 
Recipient 2: 
 
- Trigger 1 
Serial trigger input: disabled
  Channel: 1
  Match: 00,00
Trigger input1: X
Trigger input2: X
Trigger input3: X
Message : 
Priority: L
Min. notification interval: 1 s
Re-notification interval  : 0 s
 
- Trigger 2 
Serial trigger input: disabled
  Channel: 1
  Match: 00,00
Trigger input1: X
Trigger input2: X
Trigger input3: X
Message : 
Priority: L
Min. notification interval: 1 s
Re-notification interval  : 0 s
 
- Trigger 3 
Serial trigger input: disabled
  Channel: 1
  Match: 00,00
Trigger input1: X
Trigger input2: X
Trigger input3: X
Message : 
Priority: L
Min. notification interval: 1 s
Re-notification interval  : 0 s
 
 
Change Setup:
  0 Server
  1 Channel 1
  3 E-mail
  5 Expert
  6 Security
  7 Defaults
  8 Exit without save
  9 Save and exit            Your choice ? 8
 
exiting without save !
Connection closed by foreign host.

  確かに「V6.5.0.3」に上がっている。成功だ。ついでに、内蔵のWeb I/Fのファームも上げておく。

$ tftp 192.168.7.100 -m binary -c put xpt01_webm_1602.cob WEB4

  これには、30秒ちょいかかる。どれどれ。

  画像の説明

  「Version 1.6.0.2」となっている。苦労しただけに、その上の「Configuration」が「Congratulation」に空目したわい。

  さて、このファームのアップにて、安定して動くかどうかはわからんが、とりあえず先に進もう。うほ。


2009-03-11(Wed) ナナメに3.3V→5V変換する

  ファームウェアアップデートの甲斐が、あったのか、なかったのはわからんが、とりあえずXPortは順調に動作するようになったようである。

  んが、ここでちょっとした問題が。XPortは3.3Vロジックであり、PICの5Vと合わないのだ。もちろん、これは当初からわかっていたことであり、PIC側を3.3Vに合わせるという考えもあった。しかし、当初の目標は液晶の汎用表示機を駆動すること。汎用表示機には、3.3Vで駆動するものもあるらしいが、手元のは5V仕様だ。仕方ない。

  XPortの入力側はトランジスタで3.3Vに変換した。よく考えたら、こっちは抵抗で分圧するだけでもよかったようだが……それより問題は出力側の3.3Vを5Vに昇圧する方法である。これも、PICがTTL入力ならば3.3Vのままツッコめばいいのだが、今回はC言語で組んでみたいという都合で、タイミングにシビアでないUSART機能を使いたいトコロなのだ。USART機能を有効にすると、入力モードはシュミットトリガになり、その場合の閾値は「0.8 * Vdd」。つまり、4V以上が必要になる。

  つーわけで、何となく、こっちもトランジスタで変換をカマそうとしたのだが、ハンダ付けしてから「非反転では電圧変換ができない」ことに気づいた。エミッタフォロアでは、1倍以上の電圧が得られないのである。なんつぅタコな。

  ここにきて、ようやくチマタではどうしているのだろう、とググってみる。どうも、そう簡単な方法はないらしい。結局、オペアンプかバッファを使うのが一番簡単そうだ、という結論に至る。しかし、オペアンプを使うのは気が進まないし、基板スペースの問題から、TTLもキビしそう……ん? いや待て。以前にジャンク袋から入手した、ハーフピッチのTTLを使ってはどうだろう。

  探すと、たくさんのインバータに混じって、ひとつだけオアゲートのTTL、74HC32Aが見つかった。これだッ!! これしかないッ!!

  画像の説明 画像の説明

  ハーフピッチのICをフルピッチ基板に載せるにあたっては、以前に適応した必殺のナナメ技を再び使うのである。PICにつながるはずのRXとTXをショートして、ThinkPadからXPortにtelnetしてキーを叩き、エコーバックが得られることを確認した。よっしゃ、動作確認、完了。

  しかし、この微妙なナナメ感は、整然としているのが常識である基板上で、アリエナイ雰囲気を醸し出していて素敵だ。これを見てると、リングが半分になるようにルータで削れば、ちゃんとハーフピッチのICも実装できそうだな。有事の際にはその技も発動することにしよう。うは。


2009-03-12(Thu) この小ささが、既にしゃべりだしとったんじゃッ!!

  別に記事をブツけるつもりはなかったのだが、奇遇なタイミングで「新・iPod shuffle」が発表された。

  なんでも「世界初、あなたに話しかけるミュージックプレイヤー。」であり「この小ささが、しゃべりだす。」んだそうだ。なるほど、ディスプレイのないshuffleの弱点を声で補うワケね。

  しかし、オイラの手元では……

  画像の説明

  「この小ささが、既にしゃべりだしとったんじゃッ!!」

  ……多少の仕様の差はあれど。

  ちょっと前、ラジオをバラして裏のコネクタ経由でUSBから給電できるようにしたのだが、実は、1ヶ月ほど前から、NHKラジオの語学番組を自動録音し(あくまで私用に)Podcast配信するスクリプトを稼働していたのである。

  その際、ディスプレイのないmp3プレイヤの弱点を「声で補う」ために、曲の冒頭に番組名をナレーションするという機能も実装していたのである。もちろん、オイラの肉声ではなく、Linuxに載っている「festival」という音声合成エンジンを使った人工音声で、である。

  スクリプトは以下の通り。cron起動したら、ラジオを録音し、冒頭にナレーションを入れて、mp3に変換、rssとHTMLを生成して、プロバイダにアップロードする、までを行う。

#!/usr/bin/env ruby
 
require 'time'
 
now = Time.now
sdate = now.strftime('%Y-%m-%d')
 
#-------------------------------------------------------------------------------
#
#	録音
#
time = 900
wavdir = 'wav/'
mp3dir = 'mp3/'
pname = 'rec_' + sdate
vname = 'voice_' + sdate		# ナレーション一時ファイル名
talk = now.strftime('%A %B %d. N.H.K. radio english conversation program.')		# ナレーションの内容
 
system('amixer -c 0 sset Capture,0 50%,50%')
system("arecord -D hw:0,0 -t wav -f cd -d #{time} #{wavdir}#{pname}.wav")		# ラジオを録音
system("sox #{wavdir}#{pname}.wav -r 16000 -c 1 #{wavdir}#{pname}_low.wav")
system("echo '#{talk}' | text2wave -o #{wavdir}#{vname}.wav")					# ナレーションの発声 → wav
system("sox #{wavdir}#{vname}.wav #{wavdir}#{pname}_low.wav -t wav - | lame -h - #{mp3dir}#{pname}.mp3")
 
#-------------------------------------------------------------------------------
#
#	rss 作成
#
mp3file = pname + '.mp3'
title = sprintf("%d年%2d月%2d日(%s)の放送", now.year, now.month, now.day, \
		['日', '月', '火', '水', '木', '金', '土'][now.wday])
author = '遠山 顕, Katie Adler, & Jerry Davidson'
subtitle = ['no-subtitle']
summary = ['no-summary']
open('item_source.txt') {|fh|
	fh.each {|l|
		if(l =~ /^summary([0-9]+):([-0-9]+):(.+)/)
			summary[$1.to_i] = $3 if($2 >= sdate)
		elsif(l =~ /^subtitle([0-9]+):([-0-9]+):(.+)/)
			subtitle[$1.to_i] = $3 if($2 >= sdate)
		end
	}
}
url = "http://homepage.example.com/mypage/program1/#{mp3dir}#{mp3file}"
length = File.stat(mp3dir + mp3file).size
pubDate = now.rfc2822
duration = (`mpg321 -t #{mp3dir}#{mp3file} 2>&1` =~ /\[([0-9:]+)\] Decoding/) ? $1 : '15:00'
 
open('item.rss', 'w') {|fh|
	fh.write <<ITEM
	<item>
		<title>#{title}</title>
		<itunes:author>#{author}</itunes:author>
		<itunes:subtitle>#{subtitle.join(' &#12316; ')}</itunes:subtitle>
		<itunes:summary>#{summary.join(' &#12316; ')}</itunes:summary>
		<enclosure url="#{url}" length="#{length}" type="audio/mpeg" />
		<guid>#{url}</guid>
		<pubDate>#{pubDate}</pubDate>
		<itunes:duration>#{duration}</itunes:duration>
		<itunes:keywords>english, conversation</itunes:keywords>
	</item>
ITEM
}
 
system('cat head.rss > rec.rss')
system('cat item.rss >> items.rss')
system('cat items.rss >> rec.rss')
system('cat tail.rss >> rec.rss')
 
#-------------------------------------------------------------------------------
#
#	HTML 作成
#
open('item.html', 'w') {|fh|
	fh.write <<ITEM
	<A href='#{url}'>#{title}</A><BR>
ITEM
}
 
system('cat head.html > index.html')
system('cat item.html >> items.html')
system('cat items.html >> index.html')
system('cat tail.html >> index.html')
 
#-------------------------------------------------------------------------------
#
#	FTP
#
open('ftp.scr', 'w', 0600) {|fh|
	fh.write <<ITEM
open ftp.example.com
user username password
bin
cd homepage
cd program1
put rec.rss
put index.html
put #{mp3dir}#{mp3file}
quit
ITEM
}
 
system('ftp -n < ftp.scr')

  上記で実装した音声ナレーションの効果は絶大で、容易に目的の日付の番組にたどりつけるようになった。つーわけで「世界初、あなたに話しかけるミュージックプレイヤー。」は「Appleの新・iPod shuffle」ではなく、正真正銘「私の手元のZEN stone(¥1,980)」なのであった。うふん。

  しっかし、この「新・iPod shuffle」だが、コストダウンのためだろうが、本体およびリモコンのボタンは最小限であり「リモコン中央のボタンを長押しすると、ボイスオーバーで曲名とアーティスト名を案内。中央ボタン1回クリックで再生/一時停止、2回で次の曲を再生、3回クリックで前の曲を再生」などという極端な操作仕様になっているのには驚いた。なんと、音量調節以外の操作は単一のボタンで行う仕様になっているように思える。これはいくらなんでもダメすぎでは?

  先日から新たに「ZEN stone」を使い始めて、一番気になったのが「元祖・iPod shuffle」との微妙な違いであった。ZENでは「前曲/次曲」の操作数がバッファリングされない。3曲先に進めたいとき、連続3回押しても効かないのだ。また「早送り/早戻し」の操作フィーリングも違う。送り中の音声が短く、速度が遅く、ボタンを離してもオーバランするのだ。正直、これは作り込みの違いであり、この点に関しては、さすがはApple、なんだと思っていた。

  しかし、今回のshuffleでは、これらを軽ぅ〜く捨てているように思える。私がすばらしいと思っていた操作フィーリングを、彼らはまったく大事には思っていなかったらしい。がちょーん。

  試しにN810をmp3プレイヤとして使ってみた時に思ったのは「タッチパネルはアカン」という事実であった。通勤途中などで歩きながら曲を聴く場合、多少の手探り(耳探り?)がまどろっこしくても「メクラで操作するほうがラク」なのである。オイラは今までshuffleしか使ったことなかったから、表示画面で選べるのは便利だろうと思いこんでいたが、歩きながらでは不便なこと極まりなかった。だから、安さ以外の意味も込めて、敢えてZEN stoneを選択したのだ。

  そういう意味で、操作フィーリングの変更は残念だ。まぁ、ボイスオーバ機能を使うには、新しいiTunesが必須であり、Windows環境を捨てたオイラには関係ない話なんだけども。

  しかし、ボイスオーバがあるなら、ここはぜひ、演歌のナレーションをカブせられるようにしてはどうかと思う。あの、歌番組の司会者なんかが、前奏の時間をイッパイに使って、なめらかな口調で盛り上げるセリフをいうやつだ。

  「♪〜♪〜この業界。時の移ろいはやくとも。走ってきました先頭を。今度もヒットを狙います。買ってください新シャッフル。思いを込めて歌います。お聴きください『林檎の春』。では、どうぞ。♪〜♪〜ぎぃいぃんのぉ、りぃんごぉに、想いをこぉめぇてぇ〜♪チャラララッチャ……」


2009-03-20(Fri) 遠隔秋月

  秋月と別れてから約半年……じゃなかった、中部に引っ越してから約半年、つまり、秋月と別れてから約半年が経った……って、一緒やん。

  名古屋の秋葉であるところの大須にも、似たような店はあるものの、秋月はパワーが違う。毎日のように秋月のWebで新製品をチェックしては、そう簡単に行けるワケもない場所に来てしまっていることに気づく日々である。

  とはいえ「必要な時に、必要数の倍買う」作戦によって、いらん部品まで、散々、買い尽くしてきた感もあり、ちょいと作れる範囲の工作では、手持ちの部品で足りないなんてことは少なくなっている。

  んが、今回は「電球型LEDランプ」が安い値段(700円前後)で、しかも「妙にサイバーな形状」で出ているのに気づき、たまらず通販してしまったのであった。

  画像の説明

  届いたのは無愛想な箱。別に箱に愛想は求めないが、秋月の送料ってちょっと足りない部品を買う分には高いんだよね。そうなると、小さな部品を買うときは、定形外でサクッと送ってもらえる共立になってしまうのだ。

  画像の説明

  どうせ送料を出すなら、まとめ買い。液晶表示機はストックがあるが、白色バックライトと、白文字のものが新発売になっていたので両方とも購入。あとは、安くて大きめのケースと、大量のボタン電池。消費しがちなピンヘッダも、お試しセットで購入。3回目のお試しだけど、いいんだよね?

  画像の説明

  で、妙にサイバーな電球がこれ。カッチョエエッ!! 3色あるので、3色とも購入(ピュアホワイト、ウォームホワイト、キャンドル)。ピュアホワイトは完全な純白、キャンドルは優しい色。消費電流が少ないのは当然ながら、蛍光灯な電球のように立ち上がりの暗さはなく、点けたり消したりには強いと思われる。

  見ての通り、電球形状とはかけ離れており、特にお尻の部分のデッパリは、装着側との相性にキビシいと思うが、我が家では玄関と廊下、洗面所に取り付けて使えている。弱いながらも刺すような独特の光だが、悪くない。

  なお、LEDは蛍光灯のように切れることはないが、次第に光量が落ちていくものと推測する。蛍光灯には、点けたり消したりすると、寿命が縮むという妙なジレンマがあるが、LEDにはないだろう。思う存分にパチパチと節電できるというものである。


2009-03-21(Sat) Google [ LavieA 音が出ない SUSE Linux ] [検索]

  実は先日より、openSUSEの環境を整え始めていたりする。別にFedoraに飽き足らず、というワケではない。どっちかってーと、Fedoraより不便なことは多いだろうけど、常用環境に仕上げるまでにブチ当たるであろう壁をブチ破るため、である。私は「手段のためなら目的を選ばない」のである。敢えていえば、まぁ、楽しんでお仕事をするため、かな。

  育て上げたThinkPadX40上のFedora9に不満はない。むしろ、いまや常用環境として愛用しており、これを上書きしてしまうワケにはいかない。逆に、以前は上書きしてしまうワケにはいかなかった、常用環境だった赤いノートPC「NEC LavieA」上のWinXPを縮小し、その脇にSUSEを入れることにする。

  インストールには何の問題もなかった。勝手にデュアルブートの設定までしてくれた。意外と苦労するかと思ったATOK X3も、すんなり入った。一方でXftEmacsは、早々にあきらめた。しかし、どうにもあきらめられないのが、サウンド。出ないのだ。音が。さっぱり。つまんない。つまんないと、環境構築を進めようという気にならない。

  ノートPCでLinuxといえば、無線LANやサウンドなどのハードの認識で苦労する(挙げ句、あきらめる)のはお約束である。が、それにしても、さっぱり糸口がつかめない。そもそも、PCのサウンド関係(ハード, AC'97とか)って、各種概念が複雑すぎだ。さらに、混沌としたLinuxの各種実装(OSS, ALSA, PulseAudioとか)が拍車をかけている。こーゆートラブルになると、ドライバのレベルを超えて、チップセットとか、周辺回路とか、サウンドチップの仕様とかまで足をツッコまなければならなくなりがちだ。そんなことは、知ろうにも限界がある。仕事じゃあるまいし、ソースコードの正面突破は避けたいのだが……。

  Webで情報を探すが、ほとんどが「alsaconfしろ、しらんけど」とか「ミュート状態でした、えへへ」程度で、さっぱり役に立たない。やはり、音が出なければ「あきらめる」のが基本のようだ。といってもなぁ。この「LavieA」は、キーボードの質もかなり高く、サイズや重量もギリギリのトコロを突いていて、かなりギーク向けなんだけど……などと思っているのはオイラだけで、一般的には「日本のライトユーザ向けオシャレっぽいパソコン」である。Linuxなんか入れるようにできてないようだ。TninkPadとは違う。

  うぅむ。最終的にはSUSEで音を出すのが目的だが、最新のFedora10Liveを動かしてみて、音が出るか試してみよう。音が出れば、その設定を盗めば……出ない。Knoppi……出ない。Ubu……出ない……全滅。

  自動的に選択されるモジュールが合ってないのか、と思い、そっちの方面から調べるが「lspci」の結果は「00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 04)」である。モジュールとしては「snd_intel8x0」で間違ってないはずだ。

  チップレベルではどうか。載っているのはANALOG DEVICESのAD1981BLというチップらしいが「sound/pci/intel8x0.c」のコード内には、AD1981Bという記載がある……って、結局ソースコード読みはじめちまってるよ。とほほ。まぁ、チップも問題なさそうだ。

  んじゃ、次は上位側の概念からチェック。ALSAってのは、主にLinuxのサウンド機能の名前で、別にそういう外部パッケージがあるわけではない。カーネルに取り込まれているから、別に他のデバイスドライバと変わらない概念だ。「/dev/dsp」や「/dev/mixer」なんかが、ALSAとの主な対話手段。昔は、この辺りにはOSSというサウンド機能がいた。ALSAはOSSの上位互換。つまり、現在は入れ替わっているはず。たぶん。

  で、最近の新しい概念がPulseAudio。ALSAはAPからの要求に基づいてハードウェアをドライブするが、複数のAPから同時に要求があると、互いに干渉してしまう。そこで、APにはALSAのふりをしつつも、複数のAPからの要求をミキシングして、単一もしくは複数のALSAをドライブするのがPulseAudio。APごとに独立してサウンドカードがあるかのように見せるので、APごとにボリュームを調整したりできるようになる。要するにサウンド環境の仮想化だ。

  ……と、ここまでわかってきて、なんとなく各種GUIの裏側が見えてきたものの、肝心の音は出てこない。むしろ、各種の表面的挙動は、ちゃんと音が出ているようにしかみえない。なんか、最後の最後で、線が切れているような、スイッチを入れてないような、耳が聞こえてないような、そんな印象。

  でも、Windowsを立ち上げると、別に問題なく音は出るんだよな。少なくとも耳は問題ない。なんだよもぉー。ぶぶぅー。

  しつこく、Web検索を続けていると「snd_intel8x0」の後継である「snd_hda_intel」モジュールには、パラメータとして「model」なんてのを与えることができるらしい。やっぱり、ソース調査が必要か。もう一度「sound/pci/intel8x0.c」に潜る。

  やっぱり気になるのは、ハードウェア情報が並んでいるところだ。

static struct ac97_quirk ac97_quirks[] __devinitdata = {
        {
                .subvendor = 0x0e11,
                .subdevice = 0x000e,
                .name = "Compaq Deskpro EN",    /* AD1885 */
                .type = AC97_TUNE_HP_ONLY
        },
        {
                .subvendor = 0x0e11,
                .subdevice = 0x008a,
                .name = "Compaq Evo W4000",     /* AD1885 */
                .type = AC97_TUNE_HP_ONLY
        }, ※続く

  LavieAのサウンドカードは「.subvendor = 0x1033」「.subdevice = 0x8288」に該当するが、もちろん記載はなかった。つーか、quirksってなんじゃ? typeってなんじゃ? 辞書で調べると「quirk」は「くせ, 奇癖; 気まぐれ; 急なねじれ, 急転回;」だそうだ。で、その「type」のひとつが「AC97_TUNE_HP_ONLY」。コードを読み進めると、HPはヘッドホンの意味らしい。この機種は「ヘッドホンのみ」ちゅー「くせ」がある?

  これはつまり、サウンドカードの配線の特殊性を意味しているのではないか。さらに読み進めると「type」を定義している部分が見つかった。

/* quirk types */
enum {
    AC97_TUNE_DEFAULT = -1, /* use default from quirk list (not valid in list) */
    AC97_TUNE_NONE = 0, /* nothing extra to do */
    AC97_TUNE_HP_ONLY,  /* headphone (true line-out) control as master only */
    AC97_TUNE_SWAP_HP,  /* swap headphone and master controls */
    AC97_TUNE_SWAP_SURROUND, /* swap master and surround controls */
    AC97_TUNE_AD_SHARING,   /* for AD1985, turn on OMS bit and use headphone */
    AC97_TUNE_ALC_JACK, /* for Realtek, enable JACK detection */
    AC97_TUNE_INV_EAPD, /* inverted EAPD implementation */
    AC97_TUNE_MUTE_LED, /* EAPD bit works as mute LED */
    AC97_TUNE_HP_MUTE_LED,  /* EAPD bit works as mute LED, use headphone control as master */
};

  統一性はないが、swapとか、JACKとか、LEDとか、いかにも配線の「くせ」くさい。これ、順に試してみようかしらん。この「type」を、外部から与える方法ってないんかな? モジュールのオプションには、それっぽいパラメータがあった。

# modinfo snd_intel8x0 | grep parm
parm:           index:Index value for Intel i8x0 soundcard. (int)
parm:           id:ID string for Intel i8x0 soundcard. (charp)
parm:           ac97_clock:AC'97 codec clock (0 = auto-detect). (int)
parm:           ac97_quirk:AC'97 workaround for strange hardware. (charp) ★コレ
parm:           buggy_semaphore:Enable workaround for hardwares with problematic codec semaphores. (bool)
parm:           buggy_irq:Enable workaround for buggy interrupts on some motherboards. (bool)
parm:           xbox:Set to 1 for Xbox, if you have problems with the AC'97 codec detection. (bool)
parm:           spdif_aclink:S/PDIF over AC-link. (int)
parm:           enable:bool
parm:           joystick:int

  ac97_quirkパラメータは文字列で与える。与えられる文字列は以下。

static struct quirk_table applicable_quirks[] = {
    { "none", NULL },
    { "hp_only", tune_hp_only },
    { "swap_hp", tune_swap_hp },
    { "swap_surround", tune_swap_surround },
    { "ad_sharing", tune_ad_sharing },
    { "alc_jack", tune_alc_jack },
    { "inv_eapd", tune_inv_eapd },
    { "mute_led", tune_mute_led },
    { "hp_mute_led", tune_hp_mute_led },
};

  /etc/modprobe.confにoptionsから与える。SUSEの場合は、/etc/modprobe.d/soundに書く。

options snd-intel8x0 ac97_quirk=hp_only

  設定を有効にするには、モジュールのリロードが必要になる。GUI環境では、モジュールがアンロードできないので、CUIに落ち、モジュールをリロードして、リロードの様子を確認しつつ、GUIに戻って音が出ないか試行錯誤する。

# init 3
# modprobe -r snd-intel8x0
# modprobe snd-intel8x0
# dmesg | tail
# init 5

  hp_onlyでダメなら、次はswap_hp。それでもダメならswap_surroundと、順に試す。たぶん、これはサウンドカードの配線の仕様に依存するので、頭の使いどころはない。我慢して、何度か繰り返す……

  「ズンチャッ、ジャララーン……」

  ……で、出たぁ!! ログインの音どわッ!! 思わず、椅子から転げ落ちた。むっちゃ苦労しただけに、心底うれしい。決めては、以下の記述だった。

options snd-intel8x0 ac97_quirk=inv_eapd

  つーか、こんだけ苦労したんだから、これだけでは済まさんぞ「inv_eapd」って、いったんなんなんだよ。サウンドカードの配線の仕様に依存するならば、AD1981BLのデータシートをチェックだ。

  eapd……eapd……っとッ!! 答えはデータシートの中にあった。「External Amp Power-Down Control」ってことは、外部アンプの電源制御ってことだ。「inv」はインバータ、つまり、負論理。LavieAは、電源制御線の論理が普通と逆。電源ONにすべき状況で、電源OFFになってしまっていたと、そういうことすか。なんとなく「スイッチを入れていないような」挙動にみえたのは、当たってたワケだ……ちっともうれしくネェョ。

  しかし、このデータシート冒頭の回路図はタメになる。サウンド関連の制御ダイアログって、ほとんどこの回路図のまんまなんじゃん。WindowsでもLinuxでも、似たようなI/Fなのはそのせいか。で、ダイアログがわかりにくいのは、結局、どの線が何にどうつながっているのか(つながっていないのか)、ハードの説明書にキチンと説明がなされていないからなんじゃん。

  というわけで、LavieAはLinux開発者も認める「strange hardware」なのであった。しかし、音が出るようになると、動画とかが楽しく観られるようになってしまう。おもしろい。おもしろいと、環境構築を進めようという気にならない……あ、あれ?

本日のツッコミ(全3件) [ツッコミを入れる]

初心者@ubuntu [ubuntuのフォーラムから流れてきました。現在、9.10をアップグレードして弄っているのですが、音が出ないトラブル..]

フルタニアン(管理者) [サウンド関連の問題、特に音が出ないという症状に関しては、これといった切り分け方法もなく、非常に難しいです。 したが..]

でびあんゆーざー [P4C800をDebian/squeezeマシンにして後はSPDIFから音がでればっ、てところで悩んでたところac9..]


2009-03-22(Sun) 表示機通電

  先日、遠隔秋月して購入した、各LCDキャラクタディスプレイモジュールに火を入れてみる。秋月のサイトには、なぜか通電した表示イメージがないんだよね。

  まずは、昔から売っている、緑バックライトのSC2004CS-B。

  画像の説明

  次は、白色バックライトのSC2004CS-WB。

  画像の説明

  最後に、白色バックライトだが、青バック、白抜き文字タイプのACM0802C-NLW-BBH。

  画像の説明

  最後のは、8文字×2行と非常にかわいらしい大きさながら、非常に美しい表示。横8文字という数は、パターン定義可能な文字数と同じだから、下の行は棒グラフ表示なんかにしたらオモシロいかもね。CPU使用率とか、気温変化とか。


2009-03-24(Tue) LOOX S7/60ルージュ酒中分解

  ふとした用件で、昔カミさんが使っていた、LOOX S7/60の復活を目論む。Crusoeの600MHz、メインメモリ128Mと、厳しいことは考慮のうえ。なんとなく「カガリ、ルージュ貸して!」という状況を思い出す。

  この機種は、専用の機器がないとCDブートできず、かなりヘンな技を駆使して、WinMEをWin2kに載せ替えた思い出がある。

  今回はSSDに入れ替えてLinuxを入れようと思っているので、バラしが必須。Webで検索する限りでは、少々苦労するものと覚悟していたが、別にヘンなネジを使っているわけでもなく、酔っぱらった状態にもかかわらず、特にどこも破損することなくバラすことができた。

  画像の説明

  というわけで、SSDの到着待ち。うききっ。


2009-03-27(Fri) LOOX S7/60ルージュ撃破さる

  というわけで、SSDが到着した。上海問屋セレクトの32GB、2.5インチIDEタイプだ。それだけでもナンなので、前から興味のあった極小のmicroSDリーダを8GBのmicroSDと併せて購入。

  画像の説明

  SSDはトランセンドのヤツだった。別に速度は求めていないので、一番安かったのをチョイスした結果だが。

  画像の説明

  極小のmicroSDリーダは、爪なしタイプというヤツ。写真ではよくわからなかったが、コネクタ側からカードを挿して、反対側に貫通するようにできている。すげぇ。

  画像の説明 画像の説明

  microSDの規格策定時、USB-Aコネクタに入るように、と考えていたとしか思えないフィッティング感である。理論的には、カードリーダでなくUSBメモリのほうがもっと小さく作れそうだが、USBコネクタに挿せるメモリとしては、現状、これが最小なのではないだろうか。

  こういうアイテムは、時間とともにものすごい勢いで価値を下げるので、特に使うアテもなく購入するのは愚の骨頂なのだが、この仕組みを手元で確認しただけで、元が取れた気がする。併せてタカが2千円だし。

  で、早速SSDにLinuxをインストール。選んだディストリはEcolinux。母機の光学ドライブで起動して、USBドライブとして接続したSSD上にインストールする。

  画像の説明

  SSDを対象機であるLOOXに取り付けて、バラックで起動。うゎ、なんの工夫もなく起動してしまった。いい意味で、予想外である。

  画像の説明

  んが、しかし、これは重い。オマケに無線LANカードの設定ツールがあがってこない。iwconfigとか使ったことない。めんどい。いやん。で、重い。いやん。重すが。重すぎ。重すぐ。重すげ。重すご。

  画像の説明

  つーわけで、カガリに借りたストライクルージュは、やはり1世代(?)前の機体なワケで、このご時世のOSには太刀打ちできないのであった。しかしなぁ、オイラにとって初のウィンドウシステムといえば、SX-WINDOWなわけで、あれは2MBでもサクサクと動いていたんだけどなぁ。今や2GB程度では驚かない時代。恐ろしや。


2009-03-30(Mon) LOOX S7/60ルージュでパピる

  カガリに借りたストライクルージュは、やはり1世代(?)前の機体だったので、ボコボコに撃破されてしまったのだが、OSを書き換えてやれ(?)ば、もう少し軽快に動くのではないかと、軽くて人気のディストリであるPuppy Linuxを入れてみた。

  と、確かに人気のディストリだけあって、機能の割に結構軽い。PCMCIAに挿した無線カードもサクッとつながった。

  しかし、チワワのように機敏に動くかというと、それはキビしい。せいぜい、セントバーナードの老犬程度……って、その時点で子犬(Puppy)じゃねーし。

  画像の説明

  デスクトップ上にある、Puppy標準のメディアプレーヤで、普段、オイラが通勤途中にN810で観ているmpeg4動画(?)を再生させてみた。なんとか、コマ落ちなしで再生できた! ……んが、音が出ない。調整したら音が出るようになった! ……んが、音が出る状態ではコマ落ちする。だぁッ! ……ギリギリ「使えない」状態といえよう。

  こーなったら、究極のTiny Core Linuxを入れ、mpeg1に再エンコードしたものを再生……と、思ったが、そこまでしてこの機体を使う理由もない。

  まぁ、適した用途が見つかるまで、再びオヤスミ、である。


2009-03-31(Tue) 傘をリピート

  大人になってから、モノを無くしたり、飽きたりするということが少なくなった。必然的に、モノに長期間に渡って接するから、取り扱いにも慣れるし、愛着も湧くし、よいことが多い。

  先日、愛用していた折りたたみ傘の柄がスポッと抜けるようになってしまった。といっても、実は、かなり早い時期に、柄のロックが壊れ、伸ばした状態がちゃんと維持できなくなってしまい、それをどうにか、コツをつかんでダマしダマし使っていた状態だったのだが。それにしても、骨も少し曲がってきており、まだ、使えないことはないが、これにて引退ということに。

  振り返ると、この傘を購入したのは、2年半も前だ。2年半って、長いと思う。折りたたみ傘って、結構、すぐ壊れる。特別、高価な傘でもないし、特別、大事にしていたワケでもないし。

  ただ、この傘には、ちょっとした特長があって愛用していた。というのも、折りたたみ方向が普通と逆なのである。

  通常、折りたたみ傘は、折りたたむと、濡れた面を露出する形でクルクルと巻かれて格納状態になる。しかし、この折りたたみ傘は、濡れた面を内包する形で巻かれるのである。つまり、たたんでから、例え、雑にであっても巻いてしまえば、即座にカバンに放り込めるのである。ビショビショだからと、手にぶら下げておく必要がない。これは電車通勤に便利だ。

  最後に巻くリボンも、ボタンでなく、ベルクロで止めるから、壊れにくく、扱いがラクなのも長所。

  というわけで、これはリピートするべき状態である。Web通販で買っておくと、メールボックスに履歴が残っており、こういうときに便利。サッと注文履歴を検索して、Webサイトに行って、同じモノを探す。

  画像の説明

  しかし、同じモノがない。ディスコンか。ガッカリ。しかし、よくよく探すと、近い型番のモノがあった。取っ手の部分が、折りたたみには珍しい「J」形状から変更になっているが、内側に折りたたまれる機構自体に変わりはないようだ

  注文し、届くと、まさしくほとんど同じモノであった。送料込みで2,600円。これでまた2年も使えれば、お得な買い物といえよう。

  欠点は、上述したように、柄を伸ばす際のロック機構と、濡れた状態でたたんだまま放置しておくと、挟まれた水が腐ってクサくなる点。それ以外では、なかなか品質のよい傘だ。<かきかけ>