QF-16、最終127号機を納入
QF-16って結構な数作ったんだな。どれくらいの数がミサイルで落とされたんだろう。第4世代ジェット戦闘機で一番被撃墜数が多いのってF-16かしら? 第3世代も含めるとベトナム戦争に参戦したF-4とかがいるので怪しいけど。
コンピューター側の人間が作ったJSF++周りの動画
NERVのマグカップやうーぱ(S;G)のぬいぐるみ等が置いてあるあたり、いかにも現代のコンピューターオタクって感じがある。……現代、か? 学生時代に触れたコンテンツと考えるとそう外してもないか。
GCAPとかF-47ってソースコードどうするんだろう? 今更Adaを使うこともないだろうし、JSF++だって現時点でも20年前のコーディングルールだし、とはいえRustを使おうって話にもならないだろうし。最近だってRustでおざなりに例外処理したコードのせいで世界中がパニックになったしな。
言語レベルで安全性を重視したからと言って、それを本当に信頼していいかを判断するほどの実績はまだなさそう。それくらいなら何十年も使っているC++(少なくともJSF++だって開発期間も含めれば20年の実績がある)を使おうって話になるだろうし。
半潜水式の重量物運搬船みたいにフラットな船でSTOL機を運用したら軍事作戦で便利やで、みたいなコンセプト
9人乗りで滑走距離45mとかアホみたいな短距離離陸能力である。
日本近海で使ってるイメージのあたり、島嶼部みたいなところでチマチマした人員・物資輸送に使いたいんだろうなぁ。滑走路がなくても多少開けた場所があれば離着陸できるし。とはいえ、このあたりで平らな場所か…… UH-1で良くねって気がする。シリーズハイブリッドの小型高翼機ならUH-60やV-22よりは安価に量産できるだろってことなんだろうけど。
米軍で戦闘機パイロットだった人たちが「レーダーロックなんて日常茶飯事だよ。ロシアとかイラン相手にもやったし、暇なときは民間機をロックして遊んでたし」とか言って笑っていて、いやぁ、核兵器ぶら下げて相手の鼻先まで行ってた国の人たちは覚悟が決まってるなぁ、って感じが。
amazonの変なシステムトラブル?に巻き込まれて、その対応でWebサイトをめっちゃたらい回しにされてしまった。なんでamazonって人間相手にもっと簡単に問い合わせできないんだよ。。。スパムの問題とか言ったって、過去に何百回も正常に取引してる相手なら信用して連絡フォームくらい開けてくれよ。
チャットボットは全く使い物にならず、結局自分の電話番号を入力して向こうからの連絡待ち。5分くらい会話して、対応してくれた人曰く「最近はAIで処理してるからミスることもある」だそうで。結果だけ見ればだいぶ得した気分なので(実際得したので)この件は水に流して終了。
amazonのカスタマーサービス、最近はちょっと定型から外れた問い合わせをしようとするとたらい回しされて大変だけど、人間相手に話がつくとキッチリ丁寧にしっかり対応してくれて好感持てるのよな。そこにたどり着くまでが大変だけど。そもそも普段はカスタマーサポートに連絡する必要がある事態もそう起きないけど。
だいぶ前から探していた75Ωの終端抵抗
雑多に変換コネクタを入れている場所に入ってた。地金のやつはだいぶ紛らわしい。これで50Wくらいのダミーロードだと巨大なヒートシンクが目立つんだけど、1W程度のターミネーターだと全く主張がない。
サンワサプライのスマホスタンドを買ってみた
https://www.amazon.co.jp/dp/B0843Q5CND
試しに色々載せてみたけど、かなり汎用性が高くて使いやすい。普通にスマホを置くのはもちろん、ヒンジがかなり硬いので、タブレットとか多少重いものも載せられる。まさか乗らんやろ、と思ってノートPCを載せてみたら、乗っちゃった。かなり軽いモデル(13.3インチ、800g)だから、1kgを超える一般的なノートPCだとさすがに耐えられないと思うけど。あと、画面が共振してさすがに実用的ではないけど。ドキュメントを開いておくサブディスプレイ的な用途なら使えないこともないかな、といった程度。そのくらいの用途ならタブレットで済むからなぁ。
電卓とか、小袋のお菓子とか、工夫次第で色々載せられるので、机の上に2,3個置いておくと便利そう。
試しにStream Deck Mk.2を載せてみたら、かなりいい感じ。Mk.2付属のスタンドは角度が固定(orスタンド無しの2段階)だけど、スマホスタンドに乗せれば自由な角度や高さに置けるし、キーボードに多少重なるような配置にもできるから、ホームポジションから押しやすい場所に配置できる。ただ、元がスマホスタンドだから、Stream Deckみたいに多少強く押さなきゃいけないものを乗せると、剛性が足りてない感じが若干ある。
上面のパネルが水平になるようにすれば小物を置いたりもできるから、工夫次第でわりと何にでも使える。
https://www.jstage.jst.go.jp/article/itej1997/52/3/52_3_277/_pdf
D-1 VTRの標準化に関して。
国際規格だから世界中の組織が口出ししてきて、どれがいいかを決めるには実際に作って比較する必要に迫られた。結局他国の提案はあまり実験を行わずに、政治的に主張していたこともあって、実際に比較してみれば日本が主張した方向でまとめることができた。
前にも全く別の分野で似たような話を見かけたな。どの業界でもあるんだろうな。
https://www.jstage.jst.go.jp/article/itej1978/43/4/43_4_404/_pdf/-char/ja
1989年。テレビ局の記者が、自宅においてある15年以上前の14インチテレビを37インチに買い替えた時の話。
かつてのテレビ放送は14インチのテレビで視聴する前提で調整して放送していた。最近になって各社が大型のテレビを販売するようになってきた。実際に制作に関わっている立場から大画面テレビを自宅に置いてみると、色々と気になるようになってきた。
前回の、NTSCのクロマがなんでセットアップレベルに影響を受けるんだよ、というやつ、コンポーネント信号をIREに変換してから加算するのでなく、コンポジット信号をIREに変換するならすんなり書けるんだな。ただしコンポジット信号はあくまでもYUVの加算であって、IREに変換したあとに基準位相や同期信号を加える。
今回の実装の場合、YUV段階でIREレベルへ上げてからクランプして加算するから、セットアップレベルが0%以外の場合とは相性が悪い。
日本の場合、後期の仕様がどの程度だったのかは調べていないけど、初期はセットアップレベルは0%+10%-0%(0% - 10%)で規定していたらしい。なのでアメリカの7.5%±2.5%(5% - 10%)と互換性がある。あくまでも信号の電圧レベルはアメリカの規格を内包しているというだけであって、モニタ側は調整が必要になるけど。とはいえ、日本スペックの端端を入れたら影響を受けるわけだし。
NTSCのエンコードはもうちょっとちゃんとやりたいんだが、優先度はあまり高くないのですこし先送りの予定。
***
AORのブラックフライデーセールでAirSpy R2がセールで売ってたので、購入。
付属のカードに書いてあるURLとパスワードで日本語のクイックスタートガイドと説明書のPDFがダウンロードできるけど、いかんせんバージョンが古いので参考になりそうなことは書いてないな。スクショも古いUIのまま。
RTL-SDR blog v3ドングルとAirspy R2の基板
どちらもRFフロントエンドはR860で同じ(R860とR820T2は名前が違うだけで全く同一のチップ)。
Airspy R2の拡大
表は主にR860、LPC4370、Si5351Cが乗っている。かなり高密度。
SMAは端面から少し内側に入っているから、外側のナットを締めすぎると不必要なストレスがかかる。脱落して紛失しない程度にゆるく締めておく程度で良さそう。内側にも平ワッシャなりシム的なものを入れてもいいけど、調整が面倒。そもそもナット自体いらないのではという考え方もある。
よく見ると下側についてるピンヘッダの高さがそろっていない。うーん。。。一応、拡張用のコネクタは1.27mmピッチに乗っているようだから、ドーターボードを作る場合は困らないようにはなっているはずだが(左下はJTAG)。
裏面
水晶は12MHz(LPC用)と25MHz(Si用)の2個。中央の水晶のパッドからハンダが漏れてるのがちょっと嫌な感じだ。クォリティチェック通過だって??
8ピンパッケージはSPIフラッシュ(LPCのブート用)。マーキングは25Q80DVSIGで、W25Q80DVはWinbondの8Mb3.3V系の製品。ただ、接尾辞SIGはデータシートに記載がない。おそらくW25Q80DVSSIGというやつのはず(SSIGとして売っているやつも商品画像を見るとマーキングはSIGと書いてあるから、カタログの型番とマーキングは取り違えが無い程度に省略しているのかも)。
SDR#で地デジの帯域を観察
サンプリングレートが10MHz、SDR#では上下1MHzが非表示で、8MHz範囲が見える。ISDB-Tの5.57MHzも全体が余裕で見える。ch28の一番上のCPが565 928 424Hzに見えていて、本来は565 928 571Hzあたりのはずだから、-0.26ppmくらいかな? スペックは0.5ppmだから、それなりの精度は出てる。ただ、サンプリングを停止して放置して常温に戻してから再びサンプリングすると、結構ずれるから、温度特性はあまり良くないかも。70Hzくらいずれるかな? 常温から熱平衡で約0.15ppm程度の変動という感じ。ま、十分だろう。
SDR#は相変わらず使いづらいな。最新版は2025年1月1日のやつ。なんでおまえ正月に仕事してるんだよ…… 一部のUIが文字化けしていたり、出力オーディオが壊れていたり、まともに使えない。手元の少し古いリビジョンなら正しく動く。
R2は外部10MHzを突っ込めばそのまま引き込んでくれるはずだけど、とはいえ0.1ppmより精度のいいクロックをどうやって確保するかという問題がある。10MHzは用途が多いから、例えばSiTimeのSiT5503とか、5ppbで1.8万円くらいのクロックも売ってるけど。1本3000円くらいのRTL系に3万円の50ppbクロックは流石に高すぎだろと思うけど、Airspy R2に1.8万円の5ppbクロックなら、まあ、必要なら買えないこともないか、位の値段に感じられるな(28.8MHzは特殊な周波数だから在庫があるやつは値段が高いし精度も悪い。10MHzなら汎用的だから安くて精度のいい製品の在庫がある)。そもそもそこまで精度のいいサンプリングレートが必要な用途も思いつかないけど。
5503はI2Cで発振周波数を数ppmとか引っ張れる。例えばR2でGPSを受信して周波数を追従、そのクロックを別のR2に配分すれば、高い周波数確度の受信機を作れる。そこまで極端な安定性が必要ない場合は、1分に1回くらいの頻度で1秒くらいGPSを受信して制御することもできるし、あるいは1時間に1回とかでもいい。時刻も合わせて計測すればUTC(USNO)とかUTC(NICT)に同期することもできる。
5503は1分間で-11乗くらいの分散らしいから、複数箇所でGPSで時刻&周波数同期して21cm線を受信するVLBI的な遊びもできるはず。最近のインターネットなら登り50MB/s程度なら出ない速度じゃないから、リアルタイムにインターネットで結合したホビーVLBIも作れそう。外付けでRFスイッチが必要だけど、HMC7992をGPIOで制御するとか、どうにかなるはず。
R2が定価で4万円、5503が2万円、RasPiやGPSアンテナ、21cmアンテナ等の周辺回路を合わせて10万円/拠点くらい、日本全国10箇所くらいに配置して、150万円くらいの設備投資で学習用VLBI観測ネットワークが組める。基線数が多すぎて計算コストが高すぎるって言うなら拠点数を減らして安価に組むこともできる。
/* オンライン教材の会社が小中学生向けのVLBIシステムを作ってるらしいんだけど情報が全く出てこないんだよな。学会での発表の概要はあるからオフラインでは発表してるんだろうけど。小中学生相手にVLBIはうまく説明できれば面白そうだけど、だいぶ端折った説明を求められそうな気もするな*/
地デジの帯域をWAVに保存して、とりあえず相関処理
有効シンボル10080、ガードインターバル1260。1フレーム。ちゃんとピークが出る。
有効シンボルをフーリエ変換
中央セグメントは位相がそれなりに安定しているけど、それにしてもちょっと変な感じ。
今のところISDB-Tを復調するモチベは無いので、とりあえずは放置の予定。地デジ放送は(どこかの政党が主張していたのとは反対に)スクランブル放送が行われているから、ISDB-Tのフルセグを復調しても、映像を取り出すことはできない。なのでISDB-TはSDR的にはあまり魅力的ではない。/* 実際はともかく、NHKも公式にはスクランブル放送を行っていないと言っているが*/
ISDB-TはSPを取り出せば放送局(中継所)の高精度なクロックを仲介して受信機のクロックエラーを計測できるので、そのあたりを見たくなったらまたやるかも。とはいえ500MHzで0.2Hzくらいだから、0.1ppm程度までしか見えないはずだけど。それ以上精度のいいクロックを検証しようとすると、やはりGNSSを使うしかないかな。
民間機が飛んできたときにSDR#で1030MHzと1090MHzをサンプリング、WAVで保存して、適当に振幅・位相復調
インテロゲーションではインターモードとモードS、レスポンスはモード3/A/C系とモードS系が得られている。10Mspsなので、質問(0.8us幅)もちゃんと幅が見えている(インパルス信号ではない)し、モードS質問や応答も位相変調やパルス位置変調が正しく見えている。Mark Xの応答は0.45usだから質問よりは狭いけど、それでも多少の幅には見える。
airspy.dllの練習がてら、C#からAirspy R2のファームウェアバージョンの読み出し。v1.0.0-rc10-0(2016-09-19)だそう。10年近く前のファームウェアだ。GitHubでリリースされているファームウェアはrc10-0(2016年)の次はrc10-6(2020年)だから、一つだけアップデートがある。気が向いたらファームウェアアップデートをやっておこう。しかし、最新のファームウェアアップデートが間4年で5年前か。。。
とりあえずairspy_start_rxにコールバック関数を渡して、出てくるポインタをファイルに書き出して、SDR#で読み込んで、正しそうな結果は得られた(例えばFMラジオの帯域を受信してWAVに保存して、それをSDR#で読み込めばちゃんとラジオっぽい声が聞こえる)。
ゲインは3箇所を設定できるけど、すべてR820Tに内蔵されたものなので、R2側(ADC以降)は固定ゲインっぽい。大きな信号が入るとスプリアスが出るので、いい感じに調整してやる必要がある。
データフォーマットは、S16IQやF32IQを指定すれば、DLLレベルでフォーマット変換を行って適切な形に出力される。そのままWAVへ書き出せば正しく保存される。DLLの中ではIIRやFIRでDCブロックとか色々処理しているっぽい。商品ページに書いてあるIQインバランスやDCオフセットが無いというのは、ソフト的にDLLレベルで除去しているという意味らしい。
DLLで処理する前の、R2から送られてくるRAW形式は、少なくともDLLのソースには説明が全く無いし、ファームウェアのソースを読むのも面倒なので完全に推測だけど、おそらく平衡IQ4本を1個のADCで20Mspsで順番にサンプリングしている感じらしい(少なくとも、商品説明には12bit ADC@20Mspsと書いてある)。複素平面を90度ずつ順番にサンプリングしているイメージ。
LPC4370FET100には高速ADC(ADCHS、12bit, 80Msps)が1個しか乗っていないから、それを時分割で平衡IQ4chのサンプリングに使っているらしい。ADCHSは差動入力もできるけど、これは1chしか使えない(負信号が1ピンしか無い)から、ゼロIFを受けるには不適(低IFなら受けれるはずだが)。
平衡IQ(あるいは平衡Iと平衡Q独立)である程度長い平均を取ると、DCオフセットが見えてくるから、それを差っ引けば一応DCオフセットフリーになる。IQインバランスは、そもそも1個のADCでIQをサンプリングしているから、原理的にはADC以降でゲインエラーが出ることはないはず。
これを受け取って処理する場合、単に正極はそのまま、負極は符号反転して読み込んだ場合、5MHzの強烈なスペクトルが出る。その代わりにDCオフセットは相殺されるから、単にLPFを通して5MHzの線スペクトル(高調波は見えない(±5MHzに折り返される)から無視していい)を除去するだけでいい。
正極は直接、負極は 4096-サンプル みたいに計算した場合、強いスペクトルが出る。正極は サンプル-2048 、負極は 2048-サンプル、みたいにしてDC付近に寄せると、わずかなDCオフセットの影響で弱めの5MHzのピークが出る。単純に負極を符号反転した場合に比べればピークは低くなるから、FIRの特性はその分大人しくても良くて、だいぶ楽になるはず。
もう少し技巧的にやるなら、全サンプル(IQ正負4ch)の長期的な平均を取って正確なDCオフセットを得て、それを基準にすると、5MHzのピークはほとんど消える。
ただしI軸とQ軸に50nsの時間差があるから、IQ軸が完全には直交しておらず、そのまま複素信号として扱うと0Hzでミラーした形で反対側にスペクトルが漏れる。SDR#で見るとそういう特性は無いから、DLLのフィルタはうまいことミラーを消してるんだと思う。
このサンプルは、DCオフセットを別にすれば、IQ軸を相互に(正負をうまくハンドリングしつつ)ゼロパディングして、一旦20Mspsのデータにアップサンプリングした後に、適当なLPFに通して高周波成分を捨てつつ、10Mspsにデシメーションすれば、概ね正しい波形が得られる。I軸とQ軸はそれぞれ奇数番目と偶数番目(orその逆)がゼロパディングされるわけだから、20Mspsで作成したFIR係数を奇数番目と偶数番目の2つに分けて、IQ軸に対してそれぞれの係数を実数演算すればいい。ただ、広帯域でフラットな特性を得ようとすると、FIRはかなり係数を長くする必要があると思う。DLLのフィルタはもっと短いから、また違ったテクニックを使っているっぽい。
RAWで取ったバイナリを一旦ファイルに保存してから、後処理でIQ信号に変換して、WAVファイルに保存
とりあえず設計通りに動いているはず。
+3.6MHzと-3.5MHzにFMラジオが2局あって、周波数対称の位置に目立ったスペクトルは出ていないし、通過帯域4.47MHzのLPFも設計通りの特性に見える。
FIRは普通に実装すると演算コストがかなり高いし、そもそもDLLの変換でも問題ないだろうから、実用上はRAWを読む意味は無いはず。
R2、ゲインを上げていくと結構早い段階で飽和する気がする。
適当なアプリを作ってヒストグラムとスペクトル(F32IQ, I16IQだけ)を表示。とりあえず地デジの電波を受信。
↑飽和していない状態のヒストグラム
↑飽和し始めた状態
↑かなり飽和している状態
飽和するとガードバンドもかなり浮いてきている。
Rawで読み出し
Raw状態(ADC出力値?)ですでに飽和している。LPC4370の高速ADCは電圧レンジが狭いらしいから、それが制限になっているのかな?
Raw形式でデータを受け取るなら、ヒストグラムを見ればレンジを超えているか(or超えそうか)は判断できるから、ゲインにフィードバックするなり、アラートを表示して調整させるなり、対策は考えられる。ただしRAWからの変換が高コスト。
SDR#等で受信する場合、かなり低い信号レベルでも飽和するから、注意する必要がある。
4370のADCHSには任意の閾値から出たり入ったりすると割り込みする機能があるらしいから、ADCが飽和しそうになったらPC側に通知を出すみたいなことも、比較的簡単にできそうな気もするが。USBがどれくらい自由にデータを通せるのかはわからないけど、PC側からポーリングして1Hzくらいで監視するとか、PC側から閾値を設定するとか、その程度なら作れそう。
オンボードにLEDが乗っているので、DLLからGPIOを叩いてLチカしてみた。ちゃんと反応する。ファームウェアから触ろうとするとled_on()とかled_off()みたいな関数が定義してあるからそれを使えばいいんだけど、C#からDLLを叩こうとするとポート番号0、ピン番号12、true、みたいな感じで指定しなきゃいけないので面倒。まあ、このLEDはケースを閉じてしまえば外からは見えないから、使うこともあるまい。なんでこんなところにLEDが付いてるんだよ。ケースの穴加工1,2個くらいケチるなよ。
同様にタクトスイッチも乗っているけど、これについてはファームウェア側にも定義がない。試しに押してみるとUSBデバイスが切断されるから、単なるリセットスイッチらしい。商品説明の写真見たらちゃんとRESET Buttonって書いてあった。
その商品説明にはオンボードLEDはRX LEDって書いてある。試しにSDR#で受信したら受信中に点灯した。ちゃんと制御しているのか…… なんで隠してるんだよ。
C#のDLLラッパー、rtlsdr.dllよりだいぶ簡単に作れた気がする。まあ、単にrtlsdr.dllでDllImportの使い方をある程度学んだから、というのもあるだろうけど。あとは、今回はあまりググらず迷ったらCopilotに丸投げしたのも結構大きい気がする。Think Deeperで質問すればかなり実用的な回答が得られるので便利(GPT-5で質問すると劣化版検索エンジンみたいな性能しか出なくて謎い)。
C#、Marshal.Copyで構造体にコピーできないのが結構つらいんだよなー。nintで渡されたポインタを(float,float)[]とか(short,short)[]にコピーする場合、一旦byte[]にコピーしてからMemoryMarshal.Castで型を変換して再度コピーしなきゃいけない。メモリ転送が多い。
Airspy R2ってオンボードで丸々未使用のCortex-M4F 204MHzが乗っているから、いい感じのカスタムファームウェアを入れれば、例えばUSB CDCでADS-Bを吐き出すアダプタとか、あるいはUACでFMラジオを吐き出すアダプタとか、UVCでワンセグ映像を吐き出すアダプタとか、いろいろ作れそうな気がするんだけど、そういう用途ってあんまり見かけない気がする。そもそもAirspy R2の使用例を探したこともないから、あっても知らないだけだけど。
LPC4370にはSD/MMCペリフェラルが乗ってるけど、R2の拡張ヘッダにはSDカードに必要な端子すべては出ていないはずだから、microSDカードスロットを追加してスタンドアロンでRawデータを保存する、みたいな拡張ボードは作れないはず。SPI端子は出てるからSPIモードでSD/MMCのファイルを読み書きすることはできるだろうけど、10Mspsの12bitパックデータを保存するにはバス帯域で1桁足りないはず。スタンドアロンでRawデータを記録したいならmicroBにOTGでUSBメモリをつなぐほうが早そうだな。
買っといてなんだけど、Airspy R2ってどういう用途で使えるんだろうか。RTL系の2MHz幅では足りなくて、10MHz、1.7GHzくらいまでなら足りるような用途。うーん……
試しに430MHz帯をSDR#で覗いてみた。違法無線が2,3組いたので聞いてみたけど、SDR#の狭い画面(最大化すると描画が遅くなる)で8MHz幅から選択しなきゃいけないから、かなり使いづらい。430MHzアマチュア無線に特化した受信ソフトとかがあるなら便利だろうし、あるいはR2は広帯域スペアナとしてしか使わず、実際の受信(&送信)は専用無線機を使うと割り切るならそれなりに使えるだろうけど、Airspy R2 + SDR#の組み合わせで8MHz幅の狭帯域通信を監視&復調しようとすると、あまり使い道はない気がする。
アメリカならFMラジオが隣接してるから便利かな、という気はするけど、FMラジオを聞くだけならRTL系や普通のポケットラジオを使うほうが安く済むし。R2はカスタムファームを作りたいとか、あるいは専用の受信ソフトを作る(or探す)みたいな感じで、用途に特化した使い方をしないと、あまり利便性を感じない気がする。
LPC4370は、282kBのRAMを内蔵するかわりFlashを内蔵しておらず、RAM上で実行することを前提としている。204MHzという高速な動作クロックのため、内蔵Flash上の動作では読み出しアクセスがボトルネックになるためである。
SPIフラッシュからSRAMに読み出して起動するあたりFPGAみがある(理由は違うけど)。
Airspy R2のリカバリ方法(ファームウェアを破壊した場合の復旧方法)を探してるんだけど、見当たらない。
Airspyのファームウェアアップデートの手順を読む限り、ケースを開けてジャンパを変えろみたいなことは書いてないから、AirspyのファームウェアからもSPIフラッシュに書き込みはできるはず。実際、AirspyのDLLにはairspy_spiflash_erase, write, read関数があるから、SPIフラッシュの書き換えは好きにできるはず。ただ、これを使ってファームウェアを書き込む場合、USB DFUとは非互換だから、万が一ファームウェアを破壊してしまった場合は、別の方法でUSB DFU経由で書き込む必要があるはず。
ファームウェアに付属のテキストファイルだとairspy_spiflash.exeにバイナリを渡して書き込め、と書いてあるけど、Wikiにはairspy_flash.batで書き込め、と書いてある。ファームウェアにはdfu_util.exeとかlpcdfu.exeみたいないかにもそれっぽいヤツも付属している。もしかしてバッチの中でうまく分岐してるんか?と思って見てみたら、単にairpsy_spiflash.exeを起動するだけの1行が書いてあるだけだった。。。
LPC4370は内蔵プログラムROMが無くてSPIフラッシュから起動できるんだから、マイコン自身がSPIフラッシュにアクセスできるんだろうけど、読めるのと書けるのは別だろうからなぁ。それともイレース単位とかって標準化されていて、マイコンで透過的に処理できるんだろうか?
このあたりはLPCのユーザーマニュアルを読めばいいんだろうけど、NXPマイコンって使ったことないから勘所がわからん(mbedでちょっと遊んだ程度ではLPCを使ったとは言わないし)。
UM10503 LPC43xx User manual Chapter 5 Boot ROMのFig 16 Boot process for parts without flashを見る感じ、シリアルデバイスとして起動した場合、受け取ったバイナリはSRAMに保存するだけなのかな? その場合、USB DFUでまずSPIフラッシュに触れるプログラムをSRAMに転送して、そいつを起動してSPIフラッシュにファームウェアを書き込む、という二段階の手順が必要なんだろうか? Airspyの場合はUSB DFUでファームウェアのバイナリをSRAMに転送すれば、そのファームウェアが走るはずだし、そいつのairspy_spiflash_writeを叩いてもう一度バイナリを転送すれば、ファームウェアをSPIフラッシュに書き込めるのかも。
ファームウェアのソースをざっと見た感じ、LPCのペリフェラルはレジスタを直叩きしている感じ(所謂HALみたいなレイヤを経由していない)。
HALがあったところで、結局はデータシートでレジスタマップを見て、そのレジスタを書き換えるHAL関数を探して、それを実現する引数を探さなきゃいけないから、HALがあっても余計面倒なだけなんだよな。特定のマイコンしか使わないならレジスタを直接叩くほうが圧倒的に早いし楽。
とはいえ、データシートの読み方すらわからないマイコンだと、レジスタに書いてる内容を調べるだけでも大変。
試しにLPC4370の評価ボード的なものが無いか探してみたけど、なさそう。10年以上前のマイコンだしな。当時大人気のLPC-Link2もすでに秋月での取り扱いは終了している。一応マルツには在庫があるから、必要ならそれを買うことはできるだろうけど、納期16週間だって。試しにDigiKeyで見てみたら、生産中止で在庫無しだそうだ。じゃあなんでマルツで注文できるんだよ…… NXPのWebサイトではLPC-Link2はステータスがアクティブだから、まだ作ってるはずなんだけどな。
値段を気にせずLPC4370ボードが必要ならAirspy Miniを買うのが早そう。壊さない限りはSDRドングルとしても使えるし。
4370にはI2Cペリフェラルが2個乗っているけど、ファームを斜め読みした感じ、片方を5351に、もう片方を860に使っていて、拡張コネクタにはI2Cは出ていないらしい。どうしてもI2Cデバイスをぶら下げたいなら、DLLからGPIOを叩いてめちゃくちゃ遅いソフトI2Cを作るか、あるいはカスタムファームでソフトI2Cを作るか、工夫が必要そうだ。
Airspyの解説記事
https://airspy.com/downloads/Airspy%20RadioUser%20March%202015.pdf
シルクによるとAirspy R0だそうで、部品の種類や配置はR2とほぼ同じ。R0の日付は2014年8月でR2は2015年8月だから、1年でR0, R1, R2を作ったのかな? で、その後10年改定無しか……
2010年代前半のオープンソースソフトウェアorハードウェアって謎の活力があったよな。
試しにLED用の穴付きのサイドパネルを作ってみた
LEDのところに穴を開けて、光ファイバで導光している。輝度が低いので明るいところではほとんど見えないけど。ファイバを曲げて効率よくLEDに接続すればもっと明るくなるだろうけど、今回は端面を45度くらいに切り落として光の一部を取り込んでいるだけ。
リセットスイッチも押せるような機構があるとカスタムファームを作るときに便利そうではあるけど、USBコネクタとかケースの突起を避けながら力の向きを90度曲げなきゃいけないから、ちょっと大変そうだ。
リセット端子がブートセレクトの2.45mmにも接続されていれば取り扱いが楽でいいんだけど、JTAGとか拡張コネクタとか、ハーフピッチの場所にしか出ていないので外付けスイッチは大変そうだ。かといってオンボードのスイッチもJTAGのハーフピッチの横だから下手に触ると横の端子を折りそうだし。そういう意味では、リセットスイッチを操作できるような機構がサイドパネルについていると便利なんだよな。
試しにAirspyのファームのビルド環境を作ってみようと思って、とりあえずUbuntuで試してみるか、と思って、USB 3.0のUSBにISOを焼いてみたんだけど、なぜか起動しない。前に焼いたUSB 2.0のメモリからだと、なんかやたら遅い気がするけど、一応起動するから、USBメモリ側の問題のような気がする。
USBが問題ならNVMeに焼けばいいのかもしれないけど、わざわざWinOS環境消してまで試そうとも思えないしなぁ。ノートPC、NVMe交換するの面倒すぎ。このあたりの手間はFrameworkとかもほぼ同じなんだよな。パームレスト剥がしたら簡単にNVMeが交換できるような構造になってれば便利だろうに。
AirspyファームのGitHubのWikiを見た感じ、makeを通すのにpythonが必要らしい。大変そうだなー。
0 件のコメント:
コメントを投稿