OSQZSS

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

No-OSのIIOドライバ

2022-04-05 12:00:09 | SDR
IIOドライバをサポートしたNo-OSをビルドしてみたのですが、
IIODサーバの初期化に失敗しているようで、起動しません。

ADI EngineerZoneで検索してみると、丁度同じタイミングで
同じトラブルが報告されていました。

ez.analog.com: No-os IIO initialization

どうやら、リリース版の2019_R2のブランチのbugのようです。
また、ZedBoardのUSBシリアルでは、115200 baud以上の通信で不具合があるようです。

ADIからの回答通りに、masterブランチのソースコードを使い、
parameters.hのUART_BAUDRATEを115200に変更してビルドします。

これで、無事にIIODサーバの起動が確認できました。



シリアル経由でIIOデバイスとして認識されています。



P.S. ついでに、IIO Oscilloscopeもインストールしてみました。

wiki.analog.com: FMCOMMS1 IIO OSCILLOSCOPE

手順通りに「sudo make install」をしたのですが、IIO Oscilloscopeを起動すると
エラーが出てしまいます。

$ osc
osc: error while loading shared libraries: libosc.so.0: cannot open shared object file: No such file or directory

ldconfigをすることで、無事にIIO Oscilloscopeを起動することができました。

$ sudo ldconfig
$ osc



IIO OscilloscopeでもIIOデバイスとして認識されています。



ただし、115200 baudのシリアル通信は、I/Qのサンプリングデータを取り込むには遅すぎて、
あまり実用的ではありません。

No-OSでもEthernet経由での通信をサポートしてくれないかな。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Building HDL / No-OS on Windows

2022-04-04 08:36:00 | SDR
WindowsでもHDLとNo-OSが正常にビルドできるようになったので、備忘録。
ポイントは、HDLのビルドはCygwinですが、No-OSはコマンドプロンプトを使う事。

まずはこちらを参考にCygwinでHDLのビルドから。

wiki.analog.com: Building HDL

レポジトリはmasterブランチのまま。Vivadoは2021.1を使います。

$ export PATH=$PATH:/cygdrive/c/xilinx/Vivado/2021.1/bin
$ make

ビルドが完了すると、.sdkフォルダの下にxsaファイルが生成されます。



次にこちらを参考にNo-OSをビルドします。

wiki.analog.com: NO-OS Project Build Guide

No-OSのビルドは、Cygwinではなく、管理者権限で起動したコマンドプロンプトで実行します。
ビルドのためのツールは、Vitis 2021.1を使います。

> C:\Xilinx\Vitis\2021.1\settings64.bat

HDLのビルドで生成されたxsaファイルをNo-OSのプロジェクトフォルダにコピーしてmake。



いくつか警告はでるものの、無事にelfが生成できました。

しかし、とにかくCygwinでのビルドが遅い。結局、Ubuntuを使うことになりそう。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

UbuntuにMatlabをインストール

2022-04-03 11:11:13 | SDR
MatlabとZynq+AD9361でHardware-Software Co-Designを試してみたいけれど、
どうしてもWindows 10+Cygwinの環境では、Analog Devicesが提供する
サンプルコードが正常にビルドできません。

仕方がないので、UbuntuにMatlabをインストールすることにしました。
それなりにknown issuesがあったので、備忘録。

まずは、Matlabのインストーラをダウンロードしてunzip.

$ unzip matlab_R2022a_glnxa64.zip

インストールの際に、インストール先のフォルダがないとエラーがでるようなので、
こちらを参考にフォルダを作成しておきます。

MATLAB Answers: LINUX OS(Ubuntu) のインスール時のフォルダー指定について

$ sudo mkdir -p /usr/local/MATLAB/R2022a
$ sudo chmod 777 /usr/local/MATLAB/R2022a

ついでに、シンボリックリンクも作成できるよに、/usr/local/binのアクセス権限も
変更しておきます。

$ sudo chmod 777 /usr/loca/bin

これでもまだインストール先のフォルダに書き込みができないとエラーがでるので、
こちらを参考にroot権限でインストーラを起動できるようにしました。

MATLAB Answers: Matlab unable to install R2021b: "unable to write to selected folder" in Ubuntu 20.04

これでやっと準備完了。無事にMatlabがインストールできました。

$ sudo ./install

Matlabを起動すると、Failed to load module "canberra-gtk-module"というエラーがでます。
とりあえず何の影響もないようなので、放置します。

Bug Reports: MATLAB prints message about "canberra-gtk-module" and/or "pk-gtk-module" on startup

まだまだこれでStep 1。先は長い。

Help Center: Installation for Hardware-Software Co-Design

P.S Matlabのアドオンのインストールで、ユーザのアクセス権だとエラーが出てしまう。
それなのにsudo matlabで起動するとMatlabがクラッシュする。どうすればいいの?

MATLAB Answers: Matlab 2021b crashed when running with sudo / root
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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でシェアする