2016年にウェブ縄文時代がどうこう書いたけど最近どうやらウェブ縄文時代が本当にきつつあるみたい、と書こうとしたら既に morygonzalez さんが書かれていた のであまり書くことはない。縄文時代というか、個人サイトへの回帰という話だけど、観測範囲のブログやら日記がASPホスティングから個人サイトに移行したりしている。

知り合いとチャットしていて教えてもらったけど、国内だけの事象というわけではないみたいで、今年の6月には The Return of the 90s Web という記事が書かれていた。不思議な潮流。

2017年に個人サイトは終わってしまったのかと書いたことがあるけど、終わってないかもしれないので嬉しい。このエントリでも触れてるけどASPホスティングの個人ブログも、セルフホスティングの個人サイトも境界は技術的には曖昧で、しいていえばコンテンツを自分で所持しているといえるかどうか。「個人サイト」は閲覧者的には技術的に区別はつかず、どちらかといえば誰のブランドで発信されているかという印象的なものと思う。

  1. トップ
  2. tech
  3. ウェブ縄文時代への回帰

NanoVNA V2 という名前で開発されているが、ややこしいので開発コードである S-A-A-2 (Simple Antenna Analyzer 2 の略らしい) と呼ぶことにしておく。NanoVNA に触発されて開発されていて (開発者は別)、操作性やファームウェアコードの一部は NanoVNA と一緒だが、ハードウェアは再設計されている。

NanoVNA ではクロックジェネレータ1つを5次高調波まで使って 900MHz まで実用的なダイナミックレンジを実現しているが、S-A-A-2 ではここが違っていて、クロックジェネレータに加えてPLLシンセサイザ(ADF4350)を使って高調波を使わない設計になっている。ADF4350 は 137.5MHz~4,400MHz の範囲を出力できるため、基板がしっかりしていればこの範囲を測定範囲にすることができる。140MHz以下はクロックジェネレータの出力をそのまま使う。S-A-A-2 はハードウェアバージョン V2_3 までで 3GHz まで対応している。

ファームウェアはUIや計算まわりで NanoVNA を引き継いでいる部分もあるが、C++11 で書かれており、特に USB 通信まわりはまったく別のプロトコルになっている。MCU は STM32 の互換品の GD32F303CCT6 ARM Cortex-M4 で DSP/FPU/SIMD がついている。

既にこれのクローンも Aliexpress で売られていたりする。扱う周波数が高くなるほどクローンも怪しくなるので、自分は tindie で注文した。

使い勝手

操作性はほとんど NanoVNA と変わらない。充電回路はついているが、バッテリ本体が付属しないので適当なのを選んでつけてやる必要がある。

ケース

- https://www.thingiverse.com/thing:4592730

これがいい感じだった

  1. トップ
  2. tech
  3. S-A-A-2 (NanoVNA V2) を手に入れてみた

Robotime 3D立体パズル DIY組立 ギア 宝箱 パーペチュアルカレンダー クラフト 123PCS 子供 おもちゃ おもちゃ オモチャ 知育玩具 男の子 女の子 大人 入園祝い 新年 ギフト 誕生日 クリスマス プレゼント 贈り物(振り子) - ROBOTIME

ROBOTIME

4.0 / 5.0

↑ と同じだと思うけど Aliexpress 経由で買ったので作った。箱が潰れてたり板が反ってたりで厳しいので、あまり Aliexpress で買わないほうがよいかも。

ゼンマイ動力振り子式脱進機のちゃんとした機械時計で結構おもしろい。組立方法もよくできてるし、ギアを1つ1つ塊にしてく工程も楽しかった。

24時間動くわけではないようなので実用ではなく、あくまで動く模型という感じかな。それにしては振り子にしっかりネジとスプリングをつかった時間の補正機能がついていたりして凝った設計。ちょっと調整すれば1〜2時間ぐらいは大きな狂いなく動いてるのが観察できる。

単に可愛い女の子のレベルをあげるだけのハクスラ系… | Wed, Sep 23. 2020 - 氾濫原 とか書いたけどエピックセブンというスマフォゲーを最近やってる。スマフォゲーにしては割と続けられている気がする。

最近のゲームは課金体系が複雑で、エピックセブンもこれに漏れない。ピックアップと呼ばれる特定キャラクター(火氷木属性のみ)の出現率があがるガチャは無課金でも天井(確定でひけるという意味) までいけるぐらいゆるい。一方で光と闇という2属性に関しては別扱いされており、かなりえげつない設定がされている。

とはいえ特定のキャラがどうしても欲しいみたいなこだわりさえなければ気にする必要はなく、光と闇のキャラも課金せずともそこそこひくチャンスはある。PvP をやるなら別だけど、PvP は完全に廃課金煽りのためにあるコンテンツで、特定キャラクターを持っていることがまずスタートラインなので、あんま頑張っても際限がない。

結構ゆるくやっててもそこそこ楽しめるようになってて、要求を通そうとすると急激にお金がかかるというのは最近のスマフォゲーらしい設計に感じる。

個人的には何も考えずただ育成して強くしていくのがやりたいことなので、コストかけずに楽しめているかな。

ちなみにキャラよりも装備のほうが強さに支配的で、最良を目指すとキャラガチャよりも遥かに厳しい。


最近上方修正が入ったセレストさん。このキャラが一番すきだけどあんまり強くはない。☆3キャラ

天メルさん。手持ちでいちばん全体攻撃が強い。最近の周回でよくつかってる。手持ちの☆4☆5の中で唯一15までスキル強化した。



ワイバーン13で使ってる4人。11まではカリンとか水キセとかルルカとか他適当なのを使ってたけど、13では通用しなかったのでいろいろ育ててみた。デバフが綺麗に入るならバリア前に倒せるけど自動戦闘で安定するというレベルにはなってない。

アンジェリカは防御が不足気味で運が悪いとバリア前後で死ぬことがある。

アレクサは装備があまり良くなくて攻撃が足りないけど十分強い。

ワイバーン専用セクレット。デバフと火力を両立しつつスピードも高めにしてて厳しい。スピード捨てて攻撃上げれるならいいんだけど、そういう装備が手持ちにない。

フューリオスが要、クリ率アップしつつ常時防御デバフ(当たれば)つけれる。このゲーム、全てのデバフが15%外れることが保証されているのでそう狙ったようにはならない。

ワイバーン13みたいなのは面白いけど結局特定のキャラしか使えないのが残念。

Aliexpress で「15W 5-6dB 1.35GHz-9.5GHz UWB Ultra Wideband Log Periodic Antenna」と称して売っていたもの、せっかく NanoVNA V2 (S-A-A-2) で 3GHz までリターンロスが見れるようになったので見てみた。

測定点を増やして見たかったので NanoVNA-QTを使って USB 接続で計測

こんな感じで、確かに 1.35GHz ぐらいから SWR=2.0 以下ぐらいになっている。

  1. トップ
  2. tech
  3. 1.35GHz-9.5GHz 基板ログペリアンテナ

RIGOL デジタル・オシロスコープ MSO5074 70MHz 周波数帯域+4チャンネル+16デジタルアナログチャンネル+8bit垂直軸分解能+最高8Gサンプルレート+500000wfms/s波形取り込みレート+450000フレーム+200Mポイントレコード長+最大10V/div垂直軸レンジ+25MHz信号発生器内蔵(オプション)【国内正規品】【メーカー直営3年保証】【日本語取扱説明書対応】 - RIGOL

RIGOL

5.0 / 5.0

今まで使っていたもの

今まで使っていたのは2014年1月に買ったOWON SDS7102。安くて使えはするけど、ロータリーエンコーダーに不具合があったり、ノイズに弱いのを感じたり、全体的におもちゃっぽいので若干不満だった。

SDS7102 は帯域が100MHzな一方、MSO5074 は 70MHz なので若干スペックダウンしているが、実際 100MHz まで必要な測定はそれほどしてこなかったので、まぁいいかな。付属プローブや、ハードウェア的には MSO5074 は 350MHz モデルと全く同じらしく、ソフトウェアで制限がかかっているだけなので、最悪オプションでなんとかできる。

なぜ MSO5074 か

  • 4ch (2ch だと足りないなと思うケースが何度かあった)
  • I2C SPI RS232 がデコードできる (ロジアナも持ってるけど、出してきて接続するのが面倒くさい)
  • カラーグレーディングできる
  • メモリ長が非常に長い
  • 表示が綺麗
  • チャンネルごとに独立操作できる
  • 25MHz までのシグナルジェネレータがついている

Rigol は手持ちに スペクトラムアナライザ DSA815-TGを持っているけど、ネットワーク関係が割と良かったり、比較的堅牢で使いやすかったので、そこそこ印象が良い。

MSO5000 シリーズは Rigol の中でもミドルレンジなのでそれほど安くはない。が、オシロは電子工作する上でどっちにしろ一番使う測定器には違いないので多少お金かけてもいいかなと思う。

ちなみに 16chロジックアナライザ機能もついてるけど、専用プローブが普通に高いのでたぶん買わない (5万円ぐらい)。I2C SPI RS232 ぐらいなら 4ch アナログで十分かな

最初の印象

まだあまり使ってないので細かいところはわからないが以下の点の印象が良い

  • LAN 経由でブラウザから操作できたりキャプチャしたりできる
  • タッチ液晶 (思ったより良い)
  • ズーム機能

今のところよくないなと思う点

  • 起動が遅い (1分ぐらい)
  • レスポンスはそれほど良くない

経緯

プライムデーにあやかって?代理店が独自にキャンペーンしてたみたいで、バンド幅拡張以外のオプション全部付きで12万弱になっていた。すこしまえから気になってチェックしていたので、この機会にということで購入。

  1. トップ
  2. tech
  3. オシロスコープ Rigol MSO5074 を買った

ZeroPlus LAP-C と sigrok pulseview の組合せについては書いたことがあるけど、ビルドする必要があったり、UI 的にいまいち使い勝手がよくなかった。

けどそれは2014年の話で、それから6年が経ち、改めて PulseView を使ってみたら大変進化していて、普通に使えた。各プラットフォームでビルド済みのものがダウンロードできる し苦労する点はない。

試しに STM32 の SWD を解析してみたがうまく動いている。トリガのかけかたも簡単 (A1 の右側についてるアイコンがトリガのマーク)

プロトコルアナライザも豊富にみえる。設定も簡単で何も悩むところはなかった。

  1. トップ
  2. tech
  3. ロジックアナライザ sigrok PulseView + ZeroPlus LAP-C



バッテリーが付属していなかったので、別途買った保護回路付き 1000mAh のバッテリーをインストールした。XH コネクタで、極性は見ての通り基板に印刷されているのでよい。

S-A-A-2 はバッテリーの状況は画面に表示されない。基板裏の赤い4つLED(裏返してコネクタを下にしたとき右端にある)が充電管理ICと直結しており、残量や充電状況を示すようになっている。充電中は点滅する。

  1. トップ
  2. tech
  3. S-A-A-2 (NanoVNA V2) にバッテリーをインストール

久しぶりに動かしてみたシリーズ。STM32F103C8 + ChibiOS の環境でやってみた。

基本的に ST7735 を使った液晶 などとプロトコルそのものは一緒なので、コードは流用できる。が、ハマってしまった。

  • SCL: SCK
  • SDA: MOSI
  • RES: RESET
  • DC: Data/Command
  • BLK: Backlight control (float で良い)

ハマったところ: CS (チップセレクト) がない

写真を見たらわかるが CS 信号がピンヘッダに出ていない。どうやら GND に接続されているらしい。この状態だと CPOL (極性) を 1、CPHA を 1 (いわゆる SPIMODE=3) にしないとダメなようだった。

そして CS の制御ができないと何が困るか、というとクロック信号を不要に発生させるとグリッチが発生してしまう。

今回はSPIデバイスのオン/オフを都度都度行っていた関係でどうしてもクロックに余計な信号が入っていたので、それをなくしたら動いた。

参考文献

  1. トップ
  2. tech
  3. 1.3inch ST7789 240x240 SPI TFT 液晶

現行の最新は V2 Plus (V2.3) または V2 Plus4 だけど、 これらが出る直前に V2.2 を買ってしまったのでちょっと残念な感じ。とはいえ V2.2 と V2.3 はハードウェア的には非常に差分が少ないようなので、改造してみた。Upgrade your NanoVNA v2 to v2 Plus を参考にしてやれば良い。

変更を加える箇所

  • R311 10 -> 68
  • C318 220nF -> 10nF
  • C321 10μ -> 100nF
  • L302 22μH (変更なし参考)




ファームウェアのバックアップ

bootloader も含めてファームウェアのすべてをバックアップしておく。

接続

よく売ってるやすい ST-Link V2 というやつを使う 参考

メインボード上にスルーホールがありシルクも印刷されているので普通に繋ぐだけ。

スルホール用テストワイヤを使うと楽

backup and restore 手順

まず一応書きこまれている内容をバックアップしておく

openocd を使う場合

読みこみ (ダウンロード)

openocd -f interface/stlink.cfg -f target/stm32f3x.cfg -c init -c "reset init"  -c "flash read_bank 0 backup.bin 0x0000000 0x40000" -c exit

書きこみ (アップロード)

openocd -f interface/stlink.cfg -f target/stm32f3x.cfg  -c "program backup.bin 0x08000000 verify reset exit"
st-flash を使う場合 (書けない)
$ st-flash read backup.bin 0x08000000 0x8040000
st-flash 1.4.0
2020-10-27T01:00:56 INFO common.c: Loading device parameters....
2020-10-27T01:00:56 INFO common.c: Device connected is: F1 High-density device, id 0x17010414
2020-10-27T01:00:56 INFO common.c: SRAM size: 0x10000 bytes (64 KiB), Flash: 0x40000 bytes (256 KiB) in pages of 2048 bytes

ただ、これを st-flash で書こうとすると失敗してしまう……

$ st-flash write backup.bin 0x08000000
st-flash 1.4.0
2020-10-27T01:02:39 INFO common.c: Loading device parameters....
2020-10-27T01:02:39 INFO common.c: Device connected is: F1 High-density device, id 0x17010414
2020-10-27T01:02:39 INFO common.c: SRAM size: 0x10000 bytes (64 KiB), Flash: 0x40000 bytes (256 KiB) in pages of 2048 bytes
2020-10-27T01:02:39 INFO common.c: Ignoring 864 bytes of 0xff at end of file
2020-10-27T01:02:39 INFO common.c: Attempting to write 261280 (0x3fca0) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x0803f800 erased
2020-10-27T01:02:41 INFO common.c: Finished erasing 128 pages of 2048 (0x800) bytes
2020-10-27T01:02:41 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2020-10-27T01:02:41 ERROR flash_loader.c: unknown coreid, not sure what flash loader to use, aborting! coreid: 2ba01477, chipid: 414
2020-10-27T01:02:41 WARN flash_loader.c: Failed to write flash loader to sram!
2020-10-27T01:02:41 ERROR common.c: stlink_flash_loader_init() == -1
stlink_fwrite_flash() == -1
exit 255

bootloader

bootloader は Serial Number によって何かが異なるらしく、実際間違った bootloader を書きこむと BBGAIN の値がおかしくなったり、起動しなくなったりする。とにかく現状をバックアップしておけば元には戻せるので、バックアップは大事。

レポジトリにある bootloader は V2_2 用で、最新版は事情があって今のところ公開されていないらしい。現時点では Discord で開発者にコンタクトをとってビルドしてもらう必要がある。が、そのうち SN を指定してビルド・ダウンロードできるページを作るらしいので急ぎじゃないのなら待ってればいいかも。

どういう変更点なのか

該当箇所の回路図

  • 前段の AD8342 はミキサ
  • GS8722C は2回路入りオペアンプ (11MHz)
  • MXD8641 は SP4T スイッチ。オペアンプの増幅率を決めている

なのでここの一連の回路はミキサ出力を ADC 前にフィルタ・増幅する回路になる。


R311, C318, L302 はローパスフィルタで、カットオフは変更前は約72kHz、変更後は34kHz。noise improvement はここのカットオフ変更によるものだと思う。

C321 は交流増幅のための直流カットキャパシタだと思うが、小さくすることで反応性を上げてスキャン速度を上げられるようにしたのだと思う。違うかも

メモ: ADCのサンプルレート

S-A-A-2 の場合 ADC は MCU のものを直接使っている。

  • V2.2 では 300kHz board_v2_1/board.cpp (v2_1 と v2_2 は同じ)
    • ADC のクロックは 6MHz
  • V2.3 では 1500kHz board_v2_plus/board.cpp
    • ADC のクロックは 30MHz
  1. トップ
  2. tech
  3. S-A-A-2 (NanoVNA V2) V2.2 から V2.3 への変更

SWD (Serial Wire Debug) やっててさらにトレース(printfみたいなこと)も行いたいことは多い。別途 USART を繋げて printf() デバッグしても良いが、正直めんどうくさい。

ITM とは?

Instrument Trace Macrocell の略で Cortex-M の Arm CoreSight (MCU 側のデバッグ機能) に含まれるトレース機能。トレース機能は雑にいうと printf() みたいなもので、実際 printf() を中継するのに使うこともできる。

SWO (Serial Wire Output) というトレース用のピンを使う。

semihosting との違い

セミホスティングとはが詳しいが、セミホスティングはホスト側でシステムコールの一部をホストするという仕組みで、bkpt (ブレークポイント) などで発生する例外を ARM プロセッサのデバッガインターフェイスが拾ってホスト側に中継する。

仕組み的にビルド・トレース環境とかを作るのがめんどい。

ITM の Pros. Cons.

  • ↑ 特殊なビルドが不要
  • ↓ 余計な配線が1つ必要 (SWO)

semihosting の Pros. Cons.

  • ↑ できることが多い
  • ↓ ビルドが複雑

中華 ST-Link V2 の改造

よく売ってる安い ST-Link V2 には SWO 用のピンが出ていない。機能自体はあるので配線してやる。5V と 3.3V はピンが2本ずつ重複しているので、片方を潰せば特にデメリットなく拡張できる。

↑ こういう感じでケース(カバー?)は外せる。USB コネクタ側にスライドする

↑ 31ピンが SWO 用のピン。一応親切?なのか若干配線が伸びてるので、カッターでレジストを剥してはんだづけするのが楽

↑ 今回は 5V のピンを1つ配線をカットして使うことにした。22Ωを介して外に出す。UEW 線でやってる。ちゃんとテスターで導通チェックしましょう

配線


MCU 側は SYS_JTDO_SWO の機能があるピンを設定する。STM32F401 の場合は PB3。Alternate function を設定しなければデフォルトで SWO のはず?モノによるかも

コード側

ここでは printf() を中継する前提で _write() を適当な位置に定義する

int _write(int file, char *ptr, int len) {
	for(int i = 0; i < len; i++) {
		ITM_SendChar(*ptr++);
	}
	return len;
}

あとは printf() を使うところで以下のように stdio.h を include すれば良い

#include <stdio.h> 

VSCode + Cortex-Debug の設定

Cortex-Debug は ITM のデコードをサポートしていて以下のような設定をできる。

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "OpenOCD-Debug",
            "type": "cortex-debug",
            "request": "launch",
            "servertype": "openocd",
            "executable": "build/stm32f401-usbserial-host.elf",
            "configFiles": [
                "interface/stlink.cfg",
                "target/stm32f4x.cfg"
            ],
            "postLaunchCommands": [
                "monitor reset init",
                "monitor itm port 0 on"
            ],
            "cwd": "${workspaceRoot}",
            "svdFile": "STM32F4x1.svd",
            "device": "stm32f4x",
            "preLaunchTask": "build",
            "swoConfig": {
                "cpuFrequency": 64000000,
                "source": "probe",
                "swoFrequency": 1000000,
                "enabled": true,
                "decoders": [
                    {
                        "port": 0,
                        "label": "ITM",
                        "type": "console"
                    }
                ]
            }
        }
    ]
}

これで、VSCode の「出力」タブのドロップダウン「SWO: ITM [port: 0, type: console]」に ITM 経由のログが出るようになる。type: console の場合 "\n" 区切りであることを前提にタイムスタンプを追加してくれる。

postLaunchCommandsmonitor reset init はないほうがいいかも。cpuFrequency は HCLK にあわせるのが良い。

ref

  1. トップ
  2. tech
  3. Cortex-M の SWD/ITM を使った UART を使わない printf() デバッグ