Raspberry Pi CH340G(LPC1114FN28+LPC810ボード)
前回のRaspberry Pi(Raspbian)環境で使用するLPC1114FN28+LPC810の学習用ボードをもう少し弄ってみました。
● osの起動時およびUSB端子の抜き差し時プログラムがRUNしない
これはDTR,RTS信号がロー(RESET ON)になっているためであり、ポートにアクセスすることにより解除できます。
Linuxでは/bin/sttyコマンドを使うといいことがわかりました。
いろいろオプションがありますがオプションは指定しません。
ポートにアクセスするだけでいいです。
見るだけの英語でいいです。(失礼)
このコマンドを/etc/udev/rules.d/に99-CH340G.rulesというファイルを新たに作成して接続時に実行させます。
# vi /etc/udev/rules.d/99-CH340G.rules ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0666" RUN+="/bin/stty -F /dev/ttyUSB0"
idVendor, idProductはdmesg | tailで確認できます。
$ dmesg | tail [11162.545043] usb 1-1.2.4: new full-speed USB device number 28 using dwc_otg [11162.647378] usb 1-1.2.4: New USB device found, idVendor=1a86, idProduct=7523 [11162.647416] usb 1-1.2.4: New USB device strings: Mfr=0, Product=2, SerialNumber=0 [11162.647433] usb 1-1.2.4: Product: USB2.0-Serial [11162.655941] ch341 1-1.2.4:1.0: ch341-uart converter detected [11162.660575] usb 1-1.2.4: ch341-uart converter now attached to ttyUSB0
再起動後に確認してみます。
● 時折/dev/ttyUSB0を認識しなくなる
dtr,rtsラインの回路変更時に発生しやすくなる。
ICの切り換えにスライドスイッチを設けましたがあまり頻繁に使用すると顕著に発生するようです。
ジャンパーピンに変更
いずれにしてもポートをロストした場合再起動するしか無いようです。
以上を踏まえた上で改めてLPC1114のdtr,rtsラインにダイオードを入れてみましたが問題無く書き込み、自動リセットがかかりました。
このピンは必ずしもプルアップで使用するとは限らないのでダイオードを挿入するのがよいと思います。
● LPC810で自動リセットがかからない
LPC1114と同じ条件で書き込みを行うとやはりエラーが発生してしまいます。
現状はLEDを挿入することにより正常に書き込みができる(自動リセットはかからない)ことから詳しくは理解していませんがLPC810の仕様によるものかなと思います。
LPC1114では自動リセットがかかることからLPC810用にリセット回路を組んでみました。
ATTiny13aを使用してRTS信号を監視しています。
動作はlpc810_helloworld_LPC812.binを基に簡単なプログラムを書いてみました。
最低限の動作を書いてるだけです。
lpc810_helloworld_LPC812.binでは正常に動作していますがほかのプログラムは試していません。
参考 lpc-t13.txt
lpc810_helloworld_LPC812.binのRTS信号は
H –> L 1200ms L –> H 100ms H –> L 100ms L –> H と変化しています。
セクターごとに出力していると思います。
ATTiny13aは約1msの割り込み処理で各50回カウントして最後に200msリセットをかけています。
USBの抜き差し時は1s後にリセットをかけています。
Osの再起動時のみはリセットがかかりません。リセットボタンを押すかUSBの抜き刺しをします。
LPC1114とLPC810のVCC電圧を切り換えてみましたが実際にはTXD,RXDに電圧がかかっており各ピンに少し電圧が現れてしまうようです。
使用してないICに書き込むことは無いようですが素直に別ボードにするかICを外した方がよいようです。