2017年4月19日水曜日

I-O DataのWN-AC433UAをArch Linuxで使いAPを立てる(2017年4月版)

概要:以前の投稿で、いくつかリンクをいただいておりましたが、最近のカーネルでは新しいv5のデバイスドライバのほうがよさそうでした。パッケージは「aur/rtl8812au-v5-dkms-git」です。

TL;DR;


2017年3月末頃のLinux Kernel 4.10になって、いままでWi-Fiルータとして使っていたIntel NCU NCU5CPYH内蔵のWi-Fiチップ「Wireless-AC 3165」では起動時に
kernel: iwlwifi 0000:02:00.0: L1 Disabled - LTR Disabled
のエラーがあったり、APに接続してくるデバイスが6か7台目を超えるとマイクロコードのエラーを発生してドライバの再起動を繰り返し、最後にはカーネルパニックで死ぬ、ということになっておりました。

ファームウェア27が現在の最新のようですが、考えられる手を尽くすもどうにもならないので、いったんお蔵入りしていたWN-AC433UAを復活させることにしました。

ただ、いままで使っていたRealtekドライバ4.3.20ベースの「aur/rtl8812au_rtl8821au-dkms-git」が認識されず、同じチップでより新しい、バージョン5.1.5ベースのドライバが最終更新日2017年4月17日でしたので、これに入れ替えることにしました。

以前のドライバのアンインストール


まず、いままでのドライバをdkms removeしておきます。
sudo dkms status
すると、「rtl8812au_rtl8821au, 4.3.22_beta.r9.928e27f, ...」云々と出てくると思いますので、
sudo dkms remove rtl8812au_rtl8821au/4.3.22_beta.r9.928e27f --all
のような感じで「モジュール名/モジュールのバージョン番号」を指定してください。バージョン番号ですが、AURのページをみると、この4.3.22ではなく4.3.20が最新のようですね(ただし2016年9月11日以後更新がない)。

その後、yaourt -Rでアンインストールします。
yaourt -R rtl8812au_rtl8821au-dkms-git

新ドライバのインストール

yaourt -S rtl8812au-v5-dkms-git
コンパイルしてインストールすると、dkms addまで自動でやってくれます。
$ dkms status
rtl8812au-v5, 5.1.5, 4.10.10-1-ARCH, x86_64: installed
うまくインストールできているようです。ip linkすると、wlp0s20u1というデバイスが見つかると思います。

hostapdの設定


その前に、ブリッジデバイスを作っておきます。systemd-networkdを使っているので、

/etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
/etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
Address=192.168.0.1/24
IPForward=yes
などとしておきます。sudo systemctl restart systemd-networkdすると生えてくるんでしょうか、むかし作ったときには再起動してしまったので不明です。 あと、以前はwlp0s20u1をbr0につないでおくという話だったような気がしますが、いまhostapdの解説を読むと、それは「やってはいけない」らしいです。なので、適当にIPアドレスを振っておきます。

/etc/systemd/network/usbwifi.network
[Match]
Name=wlp0s20u1
[Network]
Address=192.168.0.2
こんな感じでしょうか。

それで、iw listした結果からこのチップでサポートされている機能を探り、いま当方で動いているhostapd.confは以下の通りです。

/etc/hostapd/hostapd.conf
interface=wlp0s20u1
driver=nl80211
bridge=br0
ieee80211d=1
country_code=JP
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/run/hostapd
ctrl_interface_group=0
ssid=設定するSSID
hw_mode=g
channel=7
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
# IEEE 802.11n
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
# IEEE 802.11ac
#ieee80211ac=1
#vht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
vht_oper_chwidth=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
#wpa_psk=暗号化されたパスフレーズ
wpa_passphrase=平文のパスフレーズ
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
ご武運を祈ります。

ひとつの設定ファイルでBand 1(2.4GHz帯)とBand 2(5GHz帯)両方を設定するのは面倒そうなので、Band 1のほう(802.11n)を生かしています。Band 2(802.11ac)の設定をする場合は、
hw_mode=a
channel=36
(チャンネル番号はWikipediaの項目を参照)のように置き換えることになると思います。

また、この設定でjournalctl -fのログをみているとちょっとうるさいので、logger_syslog_levelの値を34(大きいほど情報が減る)にしたほうがいいかもしれません。

このあと、iptablesでNATの設定したり、DHCP等の設定が必要ですね。「インターネット共有」のドキュメントを参照してください。

自宅用ではdnsmasqでDHCPサーバとDNSリレーを兼用するのが簡単だとは思いますが、多数の接続がある環境では不具合があるようなので、当方ではdhcpdunboundを設定しています。

2017年3月6日月曜日

秋月TB6612FNG使用デュアルモータドライバ基板について

2月27日に秋月を訪問したところ、TB6612FNG使用デュアルモータドライバ基板を発見、店頭にあったものの大半をおさえてしまった。「新製品なんで店頭在庫少なめ」という話だったけれど、いまサイトをみると、3日前に発売開始したばかりだったらしい。
TB6612使用 Dual DCモータードライブキット (K-11219) 
モータドライバは発熱が怖いので、どうしても十分な放熱面積を確保したモジュール基板を使いたくなってしまう。ところがSparkFunやPololuのブレークアウト基板はかなりいい値段になってしまうので、350円というのはとてもありがたい。

しかし、この基板はブレッドボードでの実験用という位置づけのようで、ロジック側の9ピンは、秋月細ヘッダピン(φ0.5)に合わせた穴サイズ、モータ用電源やモータはターミナルブロックに合わせて5.08mm間隔のピン間隔になっている。マイコン基板を製造して、そこに載せるにはなかなかつらい。特に、ターミナルブロックを載せるために、Pololuと較べて縦横10mm以上大きくなるのもやや難点(放熱的には有利だろうけれど)。

そこで、外形のどの位置にピンがあるのか、もちろん加工誤差があるので記述しても意味がないのだけれど、クリアランスの目安がほしかったので、ノギスをあて、だいたいの寸法を入れてみたのが下の図。
秋月の「取扱説明書」に、寸法を追加してみた図
穴径で、ターミナルブロック側はφ1.3と書いたけれど、秋月のピンヘッダで製造する基板に載せることを考えると、ピンヘッダは0.64SQなので、対角1.1mmと考えてφ1.2で十分かもしれないし、製造公差やめっき処理の種類によってはφ1.3がよいかもしれない。基板の実寸はφ1.2のようだった。ターミナルブロック本体の足はφ1.0とのこと(こちらの寸法図より)。

また、説明書には「JP1をショートすることによりSTBYをプルアップ可能」とありながら、この図ではJP1の位置が、文字のどちら側なのか見えにくいので、印をつけておいた。よくある、半円が向かい合ったジャンパパターンが基板にあるのが確認できたし、回路図でもR1(10kΩ)でプルアップする形なので、隣に並んでいるのは、まあそうなのかなと思う。ただ、ICと非常に近いので、はんだづけが苦手な人には、ここにはんだを盛るのはやや難しいかもしれない。

ひとつ気になるのは、C1(0.1uF)をVMとGNDの間に入れているのはよいとして、VCC側にCがなぜないのか疑問。データシート通りに、VCCとVM両方に0,1uFと10uFを並列に入れるのが無難かと思うところ。ブレッドボードで使う人は、3番(VCC)と、ひとつ置いた5番(GND)のところに、リードの積セラ0.1uFをはんだづけしておくといいんではないだろうか。

製造予定の基板では、いつもモジュールを基板上に実装するときに使っている、秋月のロープロファイルピンヘッダ(7.7mm)の足を一本ずつ抜くか、モジュール側だけ切るかしたのをモータ側に使って高さを合わせようと思っている。ソケットは使わない予定だが、使いたい方は、対応したロープロファイルのピンソケットと、細ピンヘッダはICソケットが合うそうなので、丸ピンソケットを使われるのがよいのではないかと思う。