OSQZSS

オープンソース準天頂衛星(QZSS)受信機

PlutoSDRにJTAGでアクセス

2022-03-24 14:45:14 | SDR
PlutoSDRにオリジナルの回路やソフトウェアを書き込めるよう、
こちらを参考にJTAGでアクセスしてみます。

wiki.analog.com: Accessing Pluto's FPGA Over JTAG

まずは、1.27mmピッチのヘッダピンをJTAGポートに半田付け。



ADALM-UARTJTAG+JTAG-HS3で接続。



問題なくPlutoSDRが認識されました。



まずはLEDを点滅させるHDLでも書いて、動かしてみよう。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Building No-OS Project

2022-03-21 14:59:16 | SDR
Zedboard+FMCOMMS3をターゲットに、No-OSのファームウェアをビルドしてみます。

HDLは、PlutoSDRと同じ手順で「fmcomms2/zed」のプロジェクトをビルドします。
ビルドが完了すると、SDKでのNo-OSのビルドに必要な「system_top.hdf」が
「fmcomms2_zed.sdk」フォルダの下に作られます。



次に、適当なフォルダにNo-OSのレポジトリをクローンします。

$ git clone --recursive https://github.com/analogdevicesinc/no-OS

HDLと同じリリースバージョンとなるよう、ブランチを切り替えます。

$ cd no-OS
$ git checkout 2019_R2

「ad9361」のプロジェクトに移動し、「system_top.hdf」をコピーします。
後は、ビルドに使うSDKのツールを指定して、makeするだけです。

$ source /tools/Xilinx/SDK/2019.1/settings64.sh
$ make

ビルドが完了すると、「build」フォルダの下に「ad9361.elf」が生成されます。



Zedboardに「ad9361.elf」を書き込むために、boot設定のジャンパをJTAGに切り替えます。



書き込みのためのUSBケーブルをPROGポートに、コンソールのUSBケーブルをUARTポートに接続します。
Zedboardの電源をONにすると、PROGポートは「/dev/ttyUSB0」、UARTポートは「/dev/ttyACM0」として
マウントされます。



プログラマのドライバが正常にインストールされていることを確認したら、「make run」で
ファームウェアを書き込みます。



書き込みが完了すると、No-OSのデモプルグラムが実行されます。



デモプログラムは、AD9361を初期化してCWを出力するだけの簡単なものですが、
動作が確認できました。

P.S. 2019_R2以降は、No-OSでも、コンソール経由での制御にIIOドライバが使われるようになっているようです。
IIOドライバをサポートしたNo-OSをビルドは、こちらを参照。

wiki.analog.com: no-OS IIO
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Building PlutoSDR HDL

2022-03-19 20:17:26 | SDR
公開されているPlutoSDRのファームウェアを動かすだけでは面白くないので、
Linuxではなくベアメタルで動かしてみたい。できれば、PLにもオリジナルの
IPを付け加えてみたい。

そんなわけで、まずはPlutoSDRのHDLだけをビルドしてみました。
実験ついでに、Windowsでビルドします。

ビルドの手順は、ここを参考にします。

wiki.analog.com: Building HDL

Windowsでビルドする場合は、Cygwinが必要とのことなので、
こちらを参考にCygwinをインストール。gitとmakeが必須です。

motolog: Cygwinをインストールする

Vivadoへのパスを追加します。

$ export PATH=$PATH:/cygdrive/c/xilinx/Vivado/2019.1/bin

続いて、適当なフォルダにHDLのソースコードをcloneします。

$ git clone https://github.com/analogdevicesinc/hdl.git

現時点でのリリース版は2019_R2なので、ブランチを切り替えます。

$ cd hdl/
$ git checkout hdl_2019_r2

これで準備完了です。PlutoSDRのプロジェクトフォルダに移動して、make。



PlutoSDRのPLに必要なIPとトップモジュールがビルドされ、
Vivadoのプロジェクトファイルであるpluto.xprが生成されます。

また、SDKでソフトウェアを開発する際に必要となるHDFファイルは、
pluto.sdkフォルダの下に生成されます。



Vivadoでpluto.xprを開くと、こんな感じです。
これをベースに改造してみよう。

(クリックで拡大)

P.S. AD9361のNo-OSドライバでは、PlutoSDRがサポートされていない。
同じようなアーキテクチャなので、ポートしたいな。

wiki.analog.com: AD9361 No-OS Software

P.P.S. HDLの改造は、このあたりを参考に。

wiki.analog.com: Using and modifying the HDL designs
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Ubuntuから/dev/ttyUSB0に接続

2022-03-18 14:12:12 | SDR
PlutoSDRの電源ポートに繋がっているUSBシリアル変換を使って、Ubuntuから
コンソール接続をしようとすると、「/dev/ttyUSB0: Permission denied」という
エラーが出てしまいます。

lsコマンドで確認してみると、rootとdialoutグループにしか権限がありません。
そこで、userであるgpsdevをdialoutグループに追加して、Ubuntuを再起動。



これで、無事に「/dev/ttyUSB0」からPlutoSDRにコンソール接続ができました。



USB-OTGポートの「/dev/ttyACM0」は、デバイスをリブートした途端に接続が切れてしまいます。
リブート時のメッセージを見るためには、「/dev/ttyUSB0」でのコンソール接続が便利です。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PlutoSDRのアプリケーション

2022-03-17 17:20:05 | SDR
こちらの手順を参考に、PlutoSDR上で動作するアプリケーションをビルドしてみます。

wiki.analog.com: Building Apps For PlutoSDR Standalone

まずは、クロスコンパイルに使用するツールのバージョンを確認します。



次に、ファームウェアのバージョンに対応したsysrootツールをダウンロードします。
PlutoSDRのファームウェアのバージョンは0.34です。

$ wget https://github.com/analogdevicesinc/plutosdr-fw/releases/download/v0.34/sysroot-v0.34.tar.gz
$ tar zxvf sysroot-v0.34.tar.gz
$ mv staging $HOME/pluto-0.34.sysroot

適当なフォルダに、サンプルアプリケーションのソースコードをダウンロードします。

$ wget https://raw.githubusercontent.com/analogdevicesinc/libiio/master/examples/ad9361-iiostream.c

サンプルアプリケーションをビルドします。

$ arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=$HOME/pluto-0.34.sysroot -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra

ビルドしたアプリケーションをscpでPlutoSDRにコピーします。
その後、sshでログインしてアプリケーションを実行することで、動作を確認することができました。



クロスコンパイルの環境が整ったので、自前のアプリケーションが組めるようにlibiioを勉強しよう。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PlutoSDRのファームウェア

2022-03-17 16:28:26 | SDR
PlutoSDRのファームウェアを自分でもビルドできるように、開発環境を整えます。
ホストマシンは、Ubuntu 18.04.6 LTSにしました。

まずは、PlutoSDRをホストマシンに接続して、USB周りの機能を確認。

wiki.analog.com: Linux Drivers

続いて、ソースファイルをダウンロードします。

wiki.analog.com: Obtaining the Build Sources

次に、ソースファイルをビルドするために必要なVivadoのバージョンを確認します。

wiki.analog.com: Building the Firmware Image



Vivadoのバージョン2019.1が必要とのことなので、以下のサイトを参考にインストールします。

ACRi: Vivado のインストールと使いかた (3) HLx Edition WebPACK の概要とインストール (Linux編)



Vivadoのインストールが完了したら、GitHubのレポジトリのBuild Instructionsに従って、
ファームウェアのビルドに必要となるその他のツールをインストールします。

GitHub: analogdevicesinc / plutosdr-fw

Build Instructionsでは、Vivadoは「/opt/Xilinx/」にインストールされたことになっていますが、
ここではインストーラのデフォルトである「/tools/Xilinx/」にインストールしています。
PATHなどの設定を適切に修正して、make。



ビルドが成功したら、PlutoSDRに書き込んで、動作を確認します。
そのために必要となるスクリプトをGitHubのレポジトリからダウンロードしておきます。

$ git clone https://github.com/analogdevicesinc/plutosdr_scripts.git

pluto_rambootで、新しいファームウェアのimageをRAMに書き込みます。



PlutoSDRにsshでログインして、問題なく動作していることが確認できました。

これで、開発環境が整いましたので、次はPlutoSDR上で動作するアプリケーションを組んでみます。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

AD-FMCOMMS3の備忘録

2022-03-15 16:08:01 | SDR
SDRの開発にAD-FMCOMMS3を導入したので、自分用の備忘録。
SoCにはZynqのZedboardを使います。



まずは、こちらを参考にZedboardのセットアップ。

wiki.analog.com: AD-FMCOMMS2/3/4/5-EBZ Zynq and ZED Quick Start Guide

ジャンパの設定で、AD-FMCOMMS3が接続されているbankの電圧を1.8Vに設定することだけは忘れずに。



Boot用のSDカードには、Analog Devicesが提供するKuiper Linuxのイメージを書き込みます。
現時点での最新のイメージは、2021-07-28-ADI-Kuiper-full.imgになります。

wiki.analog.com: Analog Devices Kuiper Linux

SDカードへの書き込み手順はこちら。

wiki.analog.com: Formatting and Flashing SD Cards using Windows

SDカードへの書き込みが完了したら、以下の3つのファイルをBootパーティションの
直下にコピーします。

zynq-zed-adv7511-ad9361-fmcomms2-3 / BOOT.BIN
zynq-zed-adv7511-ad9361-fmcomms2-3 / zynq-zed-adv7511-ad9361-fmcomms2-3 / devicetree.dtb
zynq-common / uImage

Boot用のSDカードをZedboardのSDカードスロットに差し込み、電源を入れると、
Kuiper Linuxが起動します。

AD-FMCOMMS3にも、LAN経由でローカルエリアのPCからアクセスしたいので、
プライベートIPアドレスをアサインします。

wiki.analog.com: Network Configuration

Kuiper Linuxでターミナルウィンドウを立ち上げて、eth0のIPアドレスを指定します。
この例では「192.168.11.42」としています。



libiioをインストールしたPCから、コマンドプロンプトで「iio_info -S」を実行すると、
ネットワークに接続されたZedboard+AD-FMCOMMS3を確認することができます。


コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PlutoSDRの備忘録

2022-03-15 12:13:23 | SDR
いまさらながらAnalog DevicesのADALM-PLUTOに手を出したので、
自分のために備忘録。



まずは、Windows PCにドライバーをインストールします。

wiki.analog.com: Windows Drivers

次に、ファームウェアをアップデート。
現時点で、最新のファームウェアはバージョン0.34です。

wiki.analog.com: Pluto/M2k Firmware Updates

アップデートが完了したら、sshでログインして、バージョンを確認します。
PlutoSDRをPCにUSBで接続しているとき、ネットワークモードのIPアドレスは
デフォルトで「192.168.2.1」になっています。

しかし、PlutoSDRはbootするたびにsshのキーが変更されてしまいます。
その度にキーを削除して再発行するのは面倒なので、次のようなconfigファイルを
C:\Users\<user_name>\.ssh\に置きます。



これで、コマンドプロンプトから「ssh plutosdr」を実行すると、
キーをチェックせずにrootでログインできるようになります。



PlutoSDRをシャットダウンするときは、「poweroff」コマンドを使います。
LED1の点滅が停止したら、USBケーブルをPCから抜いて、電源を落とします。



PlutoSDRがカバーしている周波数は、デフォルトで325MHzから3.8GHzです。
これは、PlutoSDRにログインして、以下のコマンドを実行することで、
70MHzから6GHzに拡張することが可能です。

# fw_setenv attr_name compatible
# fw_setenv attr_val ad9361
# fw_setenv compatible ad9361
# reboot

wiki.analog.com: Customizing the Pluto configuration

PlutoSDRは、USBのネットワークモードでホストPCに接続するだけでなく、
LAN経由でネットワークデバイスとして接続することもできます。
この場合には、USB-LAN変換のアダプタと、外部電源が必要になります。



PlutoSDRがサポートしているUSB-LAN変換のチップセットは、以下のサイトで確認できます。
外部電源は、スマホの充電器で十分です。

wiki.analog.com: USB OTG – HOST function Support

LAN経由でアクセスするためには、PlutoSDRにローカルエリアのプライベートIPアドレスを
アサインする必要があります。このIPアドレスは、PlutoSDRをPCに接続した際に
大容量記憶装置として認識されるフォルダに含まれる「config.txt」で指定します。



「config.txt」をテキストエディタで開き、[USB_ETHERNET]の「ipaddr_eth」に、
プライベートIPアドレスを指定します。この例では「192.168.11.40」にしています。



PlutoSDRをrebootした後、同じローカルエリアに接続されたPCから、
sshでログインすることができます。



また、PlutoSDRの機能にアクセスするためのインターフェイスとして、
Analog Devicesから「libiio」が提供されています。

wiki.analog.com: What is libiio?

libiioをインストールしたPCから、コマンドプロンプトで「iio_info -S」を実行すると、
ネットワークに接続されたPlutoSDRを確認することができます。



ここまで準備ができたら、Analog Devicesが公開しているworkshopの資料を参考に
PlutoSDRを動かしてみましょう。

GitHub: sdrforengineers / LabGuides

P.S. PlutoSDR rev. Dの回路図を眺めていたら、USB-OTGのチップ以外に、
USBシリアル変換のFT230XQが外部電源のポートに搭載されていることに気づいた。

このUARTからもPlutoSDRに接続できそうだったので、Tera Termで開いてみたら普通に
ログインができました。Baud Rateは115,200です。


コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

GPS Waveform Generation with MATLAB

2022-03-03 15:59:05 | GPS Signal Simulator
ちょっと別件でMATLABのToolboxに関して調べていたら、
Satellite Communication Toolboxのサンプルとして
GPS信号の生成について紹介されていた。

https://jp.mathworks.com/help/satcom/ug/gps-waveform-generation.html

L1C/Aだけではなく、L2CのI/Qサンプリングも生成できるみたい。
SDRに流し込めば、GPS信号シミュレータになるのかな?

後で試してみる。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする