OSQZSS

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

tinySA Ultra

2024-03-30 10:52:05 | SDR
遅ればせながら、tinySA Ultraを入手。
オフィシャルページの案内に従って、Zeenko storeから購入。
1週間くらいで届きました。
https://tinysa.org/wiki/pmwiki.php?n=Main.Buying

ファームウェアは最新だったので、セルフチェックとキャリブレーションを実行。
もちろん、Ultra modeをenableする。
https://tinysa.org/wiki/pmwiki.php?n=Main.FirstUse

SDRの開発が捗る!



P.S. 収納用にエレコムのセミハードケースをチョイス。
https://www.elecom.co.jp/products/HDC-SH002BK.html

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

Petalinuxでiiostream

2023-01-15 15:57:55 | SDR
Petalinuxのmeta-adiレイヤで追加しているlibiioを使って、
AD9361を操作するアプリケーションを作成してみます。

サンプルとして、ADIが公開しているAD9361 IIO streaming exampleを使います。

https://github.com/analogdevicesinc/libiio/blob/master/examples/ad9361-iiostream.c

ライブラリを使うアプリケーションのビルドの手順は、こちらを参考にしました。

PetaLinux Yocto Tips: Creating Apps (which uses libraries) in PetaLinux Project

まずは、いつも通りにpetalinux-createでアプリケーションのプロジェクトを生成します。

次に、すでにビルドされているlibiioのフォルダから、libiio.soとlibiio.hをプロジェクトのfilesにコピーします。





さらに、Makefileを編集して、リンカがlibiioを探せるようにします。
-liioのオプションだけではリンカがlibiioを見つけられず、-Lでフォルダを指定してもダメでした。
DEPENDSにlibiioを追加する必要があります。

【訂正】DEPENDSのラインはMakefileではなく、.bbファイルに追加します。(2023/09/13)





これで準備完了です。petalinux-buildでアプリケーションをビルドします。



ビルドされたアプリケーションをSDカードのrootfsパーティションの/usr/bin/にコピーします。



SDカードをZedBoardのスロットに差し込み、Petalinuxを起動。
AD9361によるstreamingが確認できました。



これで一通りの開発フローが分かったので、測位信号の送受信機能を組み込んでいきます。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

UART user space example

2023-01-15 11:46:59 | SDR
PetalinuxでAXI UART Liteが正常に動作するようになったので、
user spaceのアプリケーションを作成し、動かしてみます。

今回試すアプリは、こちらのUART Demo。
入力されたキャラクタをエコーバックするだけのサンプルです。

https://github.com/Digilent/linux-userspace-examples

まずは、petalinux-createでアプリケーションのプロジェクトを作成します。



次に、project-spec/meta-user/recipes-apps/<app_name>/に自動生成された.bbファイルに
ソースファイルを追加します。



さらに、<app_name>/files/MakefileのAPP_OBJSに、オブジェクトファイルを追加します。



これで準備が整いましたので、アプリケーションをビルドします。



ビルドされたアプリケーションをSDカードのrootfsパーティションの/usr/bin/にコピーします。



SDカードをZedBoardのスロットに差し込み、Petalinuxを起動。
UART Demoの実行が確認できました。





さて、次はLibiioを使って、AD9361を動かしてみよう。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

AXI UART Liteのinterrupt ID(2)

2023-01-14 10:47:14 | SDR
Petalinuxが自動生成するdevice treeで誤ってアサインされてしまうinterrupt IDをオーバーライトするために、
system-user.dtsiでAXI UART Liteに接続したinterrupt sourceのIDを直接指定してみます。



その後、device treeをリビルド。



image/linux/system.dtbをdecompileして、中身をチェックしてみると、interruptsのパラメータが
system-user.dtsiで指定した値にオーバーライトされています。



Petalinuxを起動し、ttyUL1の出力を受信してみます。





正しいinterrupt IDのおかげで、スムーズに通信ができています。
誤ったinterrupt IDがアサインされてしまう原因は不明なままですが、とりあえず良しとしましょう。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Interrupt IDとConcat

2023-01-13 22:22:12 | SDR
fmcomms2_zedに追加したAXI UART Liteのinterrupt IDが、Petalinuxのdevice treeでは
Block Designと異なるinterrupt sourceに接続されてしまいます。

AXI UART Liteのinterrupt ID

何が原因などだろうと気になったので、シンプルなZynqとAXI UART LiteだけのDiagramに
Concatを追加して、fmcomms2_zedのHDLを模擬してみました。

PetalinuxでAXI UART Liteを使う



新しいxsaファイルでPetalinuxをリビルドして、device treeを確認してみると、
Block Design通りにbit 10のinterrupt sourceに対応するIDである86-32=54になっていました。



どうやら、Petalinuxのバグというわけではないようです。
fmcomms2_zedで指定するkernel dtbであるzynq-zed-adv7511-ad9361-fmcomms2-3の影響でしょうか?
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

AXI UART Liteのinterrupt ID

2023-01-12 12:00:34 | SDR
fmcomms2_zedに追加したAXI UART Liteがpetalinuxでstallするのは、
割り込みが正常に動作していないように見えるので、device treeをチェックしてみます。

まず、petalinux-buildで/images/linux/system.dtbに生成されたバイナリのdevice treeを、
device tree compiler(dtc)でdecompileして、テキストファイルに変換します。

https://siliconbladeconsultants.com/2022/05/26/decompiling-the-linux-device-tree-dtb/



テキストファイルに変換されたdevice treeをチェックしてみると、
AXI UART Liteがamba_plのserial@42c0000として追加されています。



interruptsのパラメータを見てみると<0x0 0x22 0x1>となっています。
それぞれの値が何を意味しているのか調べてみると、最初のパラメータはshared peripheral interruptかどうか、
2番目はinterruptのIDから32を引いた値、最後は割り込みのタイプで0x1はrising edgeです。

http://xillybus.com/tutorials/device-tree-zynq-4

ここで気になるのが、2番目の値です。0x22(34)に32を足すと、interrputのIDは66になります。
ZynqのPLからPSへの16ビットのinterrupt portであるIRQ_F2PのIDは[91:84], [68:61]となっており、
MSBが91になります。



fmcomms2_zedに追加したAXI UART Liteは、bit 10のinterrupt sourceに接続したので、IDは86のはずです。
そうであれば、device treeのinterruptsの2番目の値は、86-32=54(0x36)になるべきでは?

ちなみに、オリジナルのfmcomms2_zedのAXIデバイスは、interrupt IDの[91:87]に接続されています。

Petalinuxが自動生成してくれるdevice treeのバグでしょうか?
ユーザ側でオーバーライトするには、どうすればいいのだろう。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Petalinuxのビルド

2023-01-07 13:58:42 | SDR
AXI UART Liteを追加したfmcomms2_zed用に、Petalinuxをビルドします。
まずは、いつも通りにプロジェクトを作成し、petalinux-configでxsaファイルを指定します。



設定メニューで、Yocto Settings -> User layersに進み、meta-adi-coreとmeta-adi-xilinxのレイヤを追加します。



さらに、Yocto Settingsで、Enable Network sstate feedsのオプションをdisableします。



ついでに、axi_uartlite_0が追加されていることを確認します。



設定が完了したら、Saveして設定メニューを終了します。

続いて、device treeを指定します。
fmcomms2_zedのHDLには、zynq-zed-adv7511-ad9361-fmcomms2-3を選択します。



次に、petalinux-config -c kernelで、カーネルの設定を変更します。
ここでは、Xilinx uartlite serial port supportをenableし、Maximum number of uartlite serial portsの値を2に設定します。



さらに、system-user.dtsiでデバイスツリーにstatus = "okay"を追加し、axi_uartlite_0を有効にします。



これで準備が整いました。buildフォルダに移動し、Petalinuxをビルドします。



ビルドが完了したら、ブートイメージを作成し、SDカードに書き込みます。





SDカードをZedBoardのスロットに挿入し、Petalinuxの起動を確認。
axi_uartlite_0に対応したttyUL1が追加されています。



PmodにUSBシリアル変換のアダプタを接続し、ttyUL1の出力を受信してみます。



素直に動作してくれるかなと期待したのですが、TX側のコマンドがストールした感じになり、
RX側には送信した文字が途中までしか表示されません。





ZYBOでのテストとは異なり、ADIが提供するユーザレイヤやデバイスツリーが追加されているので、
その辺りとコンフリクトがあるのかもしれません。

さて、どこから手を付けよう?
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

fmcomms2_zedにAXI UART Liteを追加

2022-12-29 15:47:40 | SDR
PetalinuxへのAXI UART Liteの追加手順がZYBOで確認できたので、
同じようにZedBoard+AD-FMCOMMS3にも追加してみます。

ターゲットのHDLはすでにビルド済みなので、これをベースに改修していきます。

https://blog.goo.ne.jp/osqzss/e/160e3ff2c3de95c1b96d0855deea759d

projects/fmcomms2/zedのフォルダから、Vivadoのプロジェクトファイルをopenします。



Block Designを開き、AXI UART Liteを追加します。



PLからPSへのinterruptは、Concatというブロックを経由しています。
まずはすでにGNDに接続されているIn10[0:0]を右クリックし、"Disconnect Pin"でピンをリリースします。



その後、In10[0:0]をAXI UART Liteのinterruptに接続します。



次に、AXI InterconnectにM11_AXIを追加し、それをAXI UART LiteのS_AXIと接続します。



後は、AXI UART Liteのs_axi_aclkとs_axi_aresetnを、それぞれsys_cpu_clkとsys_cpu_resetnに接続し、
rxとtxを外部に引き出します。



最後に、Address Editorのタブを開き、/axi_uartlite_0/S_AXIのアドレスをアサインします。

これで、Block Designの改修は完了。Validate Designをしてから、Create HDL Wrapperを実行します。

しかし、wrapperは生成されているようですが、"Existing Wrapper File"の警告が出て、wrapperファイルが
アップデートされません。調べてみると、Tclスクリプトで生成されたプロジェクトでは、wrapperファイルが
fmcomms2_zed.srcs/sources_1/imports/hdlから読み込まれていますが、Create HDL Wrapperは
fmcomms2_zed.gen/sources_1/bd/system/hdlにwrapperを生成しているようです。

https://support.xilinx.com/s/question/0D52E00006hpmAYSAY/wrapper-doesnt-update-when-changing-a-block-diagram

そこで、オリジナルのwrapperファイルをRemove File from Projectで、プロジェクトから削除します。



そうすると、Vivadoが自動的に階層構造をupdateして、fmcomms2_zed.gen/sources_1/bd/system/hdlの
wrapperファイルを選択してくれます。



これで、system_wrapper.vにAXI UART Liteのポートが追加されたので、上位階層であるsystem_top.vも
適切に編集します。





最後にピンをアサインして、新しいxsaファイルを生成します。



さて、これでハードウェアの準備は整いました。Petalinuxのビルドは年明けかな。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PS UARTをEMIOでPLに接続

2022-12-18 08:12:19 | SDR
わざわざAXI UART Liteを追加しなくても、PS UARTをEMIO経由でPLに接続すればよいのかと思い、試してみました。
まずはZynqのみのハードウェアから、PROG/UARTに接続されているPS UART1をEMIOに切り替えます。
さらに、UART_1を展開し、UART1_TXとUART1_RXのポートをそれぞれ右クリックし、Make Externalで外に引き出します。



これらがPmod USBUARTと接続できるよう、JEのPin 2(W16)をUART1_TX_0に、Pin 3(J15)をUART1_RX_0にアサインします。



後は、いつも通りにxsaファイルを生成し、Petalinuxをビルドします。

SDカードをZybo Z7-20に挿入し、電源を入れると、JEに接続されたUART1にbootメッセージが出力されました。

しかし、ここでまたautobootに失敗してu-bootで停止します。
どうやらboot中にPmod USBUARTが何等かの信号を送信してしまい、autobootが中止されているようです。



とりあえず、u-bootのコンソール画面で、bootdelayの値を-2に設定して回避します。

Zynq> setenv bootdelay -2
Zynq> saveenv

bootdelayの値については、こちらを参照。-1でautobootが無効になり、-2でdelayなしのautobootとなります。

Build U-Boot: List of environment variables

これで無事にPetalinuxが起動しました。ttyPS0のコンソールに、PL側からアクセスできています。



P.S. U-Bootのパラメータは、petalinux-configからは設定できず、テンプレートを直接編集するようです。

59349 - PetaLinux - How do I customize U-BOOT parameters?
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PetalinuxでAXI UART Liteを使う

2022-12-17 18:53:22 | SDR
こちらの記事を参考に、PetalinuxにAXI UART Liteを追加してみます。

Zedboard-PetaLinux2020.2 UARTLITE使用手順

いくつかハマりどころがあったので、備忘録。

まずは、ZynqとAXI UART Liteだけの簡単なハードウェアを作成します。
ここで重要なのは、PLからPSへのinterruptを忘れないこと。



TXとRXは、Pmodのピンにアサインします。





後は、いつも通りにxsaファイルを生成します。

Petalinuxのconfigurationで、axi_uartlite_0が追加されていることを確認します。







次に、petalinux-config -c kernelで、カーネルの設定を変更します。







ここで、Xilinx uartlite serial port supportをenableするだけでなく、Maximum number of uartlite serial portsの値も適切に設定します。
今回はPSのUARTだけではなく、AXI UART Liteが追加されるため、この値を2とします。

Xilinx Wiki: Uartlite Driver Kernel Configuration



さらに、system-user.dtsiでデバイスツリーにstatus = "okay"を追加し、axi_uartlite_0を有効にします。



これで準備が整いました。Petalinuxをビルドし、ブートイメージを生成したら、起動を確認します。



axi_uartlite_0に対応したttyUL1が追加されています。

P.S. PmodにUSBシリアル変換のアダプタを接続し、ttyUL1の出力を受信してみました。





問題なく動作しているようです。





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