新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

adapter speed: 500 kHz

Info : clock speed 500 kHz
Error: libusb_open() failed with LIBUSB_ERROR_ACCESS
Error: open failed
in procedure 'program'
** OpenOCD init failed **
shutdown command invoked

環境が壊れて再度 PlatformIO を再構築した際に上のエラーが出た。libusb はちゃんとインストールされているし、/dev/ttyACM0 のアクセス権も大丈夫。 なんだろうな~と思っていろいろしらべるとどうやら udev の rules の追加をし忘れていたらしい。 /etc/udev/rules.d/99-platformio-udev.rules を platformio のレポジトリからコピーしたらうまく動くようになった。

MKR やっと安定

これをみてやっと気が付いた。

gojimmypi.blogspot.com

MKR シリーズの裏面には大きな reset pad がある。こいつが GND に落ちるとリセットしてしまう。 出荷時にはよくある黒いウレタンのクッション?がついてきて、そいつにボードが刺さっている。 長い脚がささっていて、つい、このボードを保護するためにクッションつけたまま。 そうすると、reset がしょっちゅうかかる。

はずしたら安定したよ。

firmware のせいでもライブラリのせいでもなかった。

Arduino MKR ZERO 不安定(その後解決)

Arduino ZERO は今のところ質が悪い。もしかして IDE が 1.6.19 と古いせいかもしれないと思い現時点の最新版(1.8.13) を再インストール中。 f:id:ryos36:20210120154919p:plain

手元の Arduino の M0+(SAM D21 のARM) の MKR WAN 1300 はちょっとしたものをインストールすると Windows 側が USB Serial を見失ってしまう。何が悪いのだろうか不明。

Linux で調査。

[365770.323788] usb 1-1: new full-speed USB device number 94 using xhci_hcd
[365770.451841] usb 1-1: Device not responding to setup address.
[365770.659846] usb 1-1: Device not responding to setup address.
[365770.867757] usb 1-1: device not accepting address 94, error -71
[365771.592365] e1000e: eno1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[365844.004103] usb 1-1: new full-speed USB device number 96 using xhci_hcd
[365844.153594] usb 1-1: New USB device found, idVendor=2341, idProduct=0053, bcdDevice= 2.00
[365844.153600] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[365844.153605] usb 1-1: Product: Arduino MKRWAN1300
[365844.153608] usb 1-1: Manufacturer: Arduino LLC
[365844.169216] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
[365844.170194] usbcore: registered new interface driver cdc_acm
[365844.170195] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[365852.320888] usb 1-1: USB disconnect, device number 96

一旦、ACMバイスとして認識された直後に USB disconnect している。理由は不明(USB のパケットをモニターする必要があるでしょう)。full speed だし。

これ、たぶん、バグだよね。bootloader が 2341 0053 で ACM として USB を動かした後に、アプリをロードして動かす。ところが、そのアプリがハング?(動作実績ありなのに)して、その後、USB シリアルを disconnect している。bootloader がアプリが終了した時に、そのまま書き込みモードにしてくれればいいのに。bootloader の作りに問題があるのでしょう(予測でしかないが)。

ちょっとした回避方法があり、電源を入れた直後に RST ボタンを2連打(早押し!!)すると、黄色い LED がゆっくり点滅して bootload モードになるみたい。RST ボタンといってもソフト的なものみたいで、電源投入直後にはたぶん GPIO 。その後、割り込みで RST ボタンにしているのでしょう。なので、この技は本当に電源投入直後にしか聞かないみたい。その上、ときどき、また暴走する。これもバグだよね、、、きっと。

これだと、なかなか ARM の環境には行けないね。Atmel も評判落としちゃうね。

後日談。バグでも何でもありませんでした。MKR のボードの裏には RESET のパッドがあります。これがウレタン?のクッションに刺していると GND に繋がって頻繁にリセットがかかる、、、というものでした。ウレタンから外したら安定するようになりましたとさ。

最新の LMIC

github.com

こっちはちゃんと LBT やっているぽいよ。AS923 にも対応している。やっぱりある閾値をみてるみたい。radio_monitor_rssi で rssi をみて、lbt_dbmax より上だと通信中という判断をしている。それによって starttx を再スケジュールするようにしている。あれ、普通に再スケジュールしているけど、、、これランダムな時間待たなくてよいのかね?

radio_monitor_rssi では monitor する時間も設定できるので、ちゃんと放棄を守って、いや蜂起を守って、いや法規を守って送信できるね。ただ、普通に Arduino からインストールしたら obsoleted の方がインストールされたけど、ArduinoSDK が古いせいかな?

これでやっと安心して LoRaWAN の送受信が出来そう。

SX1276 のレジスタマップ

やっとここにたどりついた。LMIC の今見ているソース(obsolute みたいだが) はどうやら LBT やってない。で、SX1276 のレジスタマップ(レジスターテーブルというみたいだが)をみると RegModemStat で受信状態がわかる(わかりそう。未確認よ)のと RegRssiValue で今の Rssi がわかる。 あーRegDetectionThresholdというのがあるね。これより下が雑音で、これより上がデータだ。これでデータのあるなしがわかるね。