2024年8月7日水曜日

RasPi OTG

ref.:: 

1) https://qiita.com/Saito5656/items/5f369ba8a8d419e3cbff 

2) https://synrock-tech.com/hardware/single_board/raspberry-pi-emulate-hdd/


1)

WindowsPCなどからUSBケーブル接続したラズパイにデータ転送する環境の構築手順の説明です。

  • ラズパイのUSB On-The-Go(OTG)設定
  • USB mass strage設定
  • systemd設定
  • microSDカードのROM化設定

相変わらず平日は時間が取れず週末に手を付けましたが、今回もしっかり嵌りポイントがあったので記録を残しておきたいと思います。

参考文献

こちらの記事を参考にしました御礼申し上げます。

環境

Raspberry Pi: Raspberry Pi 4 Model B Rev 1.2
OS: Raspberry Pi OS Lite 64-bit (Raspbian GNU/Linux 11 (bullseye))
microSDカード: 16GB、32GB各一枚ずつ
USBケーブル: usb-A <-> usb-c オスオス
クライアント機: DesktopPC(Windows11 Pro)

事前準備

こちらの記事等を参考にRaspberry Pi Imagerで起動用microSDカードを作成します。

構築手順

USBストレージ用記憶領域の確保

嵌りポイントその①です。初めに、USBストレージとして割り当てるボリュームを作る為に、microSDカードに空き領域を確保します。

邪道ですが手持ちのサイズ違いmicroSDカードを使って準備しました。

  • Imagerで16GBカードに起動イメージを作る
  • 16GBカードのimageで一度起動してupdateとupgradeする
  • 16GBカードimageを保存して32GBのmicroSDカードに書き込む

記事の手順を使われる際は、普通にラズパイimageの入ったSDカードを圧縮してimage保存する等ご自分のやり易い方法で準備ください。

昨年まではImagerでimage書き込み後にcmdline.txtから"init=/usr/lib/raspi-config/init_resize.sh"を削除することで初回起動時にパーティションの自動拡張を止められたようですが、記事執筆時点(2023.05.14)では出来ませんでした。

ということでmicroSDカードを2枚使い「imageを作って別のマシンで圧縮して保存する」より一手間少なく済ませました。

USB On-The-Go(OTG)設定

USB On-The-Go(OTG)

接続したデバイス(WindowsPC)側からラズパイをUSBストレージとして認識させるには起動時OTG設定が必要になります。以下、WikiPediaより

USB On-The-Go(略してUSB OTG)は、USB機器どうしを直接接続するインタフェース規格である。パソコン等をホストとせずに、動作時にホスト機器を動的に切り替える機能を拡張したもの。 IEEE 1394のように直接接続できるので、いろいろな機器に応用できる。2001年12月18日に発行されたUSB OTG 2.0 Revision 1.0 は High Speed (480Mbps) がオプション扱いとなっていたが[1]、2009年5月8日に発行された USB OTG 2.0 Revision 2.0 では High Speed を含み[2]、2011年7月1日に発行された USB OTG 3.0 では SuperSpeed (5Gbps) を含む。

/boot/config.txt

ラズパイのOTGを有効にする為に、起動設定に以下の一行を追加します。

/boot/config.txtに追加
dtoverlay=dwc2

USB mass strage設定

/boot/cmdline.txt

g_mass_storageを使ってストレージ起動するのに以下を起動設定に追加します。

/boot/cmdline.txtに追加
modules-load=dwc2,g_mass_strage

exfat-fuseインストール

exfatをUSBメモリのフォーマットとして使用するためにexfat-fuseをインストールします。

$ sudo apt install exfat-fuse

パーティション設定

microSDカードの空き領域にUSBストレージとして利用する領域を確保します。
初回起動直後のパーティションの状態は以下のようになっています。
16GBのSDカードのimageがそのまま書き込まれています。

$ sudo parted /dev/mmcblk0
GNU Parted 3.4
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: SD EB1QT (sd/mmc)
Disk /dev/mmcblk0: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   15.9GB  15.7GB  primary  ext4

15.9GB以降の空き領域にUSBストレージ用のボリュームを作ります。

(parted) mkpart

primary partitionでWindowsファイル用にntfsで作ります。

Partition type?  primary/extended? primary
File system type?  [ext2]? fat32

ボリュームサイズは約1GBにします。

Start? 15.9GB
End? 16.9GB
(parted) p
Model: SD EB1QT (sd/mmc)
Disk /dev/mmcblk0: 32.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  273MB   268MB   primary  fat32        lba
 2      273MB   15.9GB  15.7GB  primary  ext4
 3      15.9GB  16.0GB  88.1MB  primary  ntfs         lba

partedから抜けます。

(parted) q
Information: You may need to update /etc/fstab.

/etc/fstabを書き換えなさいと優しく怒られますが、fstabではコピーしたファイルのTZが上手く修正出来なかったので今回は別の方法でmountします。

blk03にUSBストレージ用の新しいボリュームができたことを確認します。

$ sudo fdisk -l
Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1          8192   532479   524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        532480 31116287 30583808 14.6G 83 Linux
/dev/mmcblk0p3      31117312 33007615  1890304  923M  7 HPFS/NTFS/exFAT

ボリュームタイプ変更

古い設備にUSB接続する予定があるのでFAT32に変換しておきます。

$ sudo mkfs.vfat -F 32 /dev/mmcblk0p3

ラズパイ側のmount point設定

Linuxのファイルシステム側のmount pointとして、user直下に/usbを作ってUSBストレージ用ボリュームをmountします。mount pointは意図してtmpfsに設定しますのでデータロスには注意が必要です。

/etc/fstab
tmpfs /home/user/usb   tmpfs   defaults,size=1024m,mode=0755   0 0

mountコマンドはcronの起動時設定に組み込みます。Windowsのtimestampが+09:00になってしまうのでマウント時にオフセット処理します。

crontab
@reboot sudo mount -otime_offset=540 /dev/mmcblk0p3 /home/user/usb

systemd設定

サービス化してmass starageを起動/停止します。

$ sudo nano /lib/systemd/system/usb_storage.service
/lib/systemd/system/usb_storage.service
[Unit]
Description = USB MASS Storage Service
After = local-fs.target

[Service]
ExecStart = /sbin/modprobe g_mass_storage file=/dev/mmcblk0p3 removable=y
ExecStop = /sbin/modprobe -r g_mass_storage
Type = oneshot
RemainAfterExit = true

[Install]
WantedBy = multi-user.target

サービスを起動時有効にします。

$ sudo systemctl enable usb_storage

動作確認

mass strageがUSBストレージとしてWindowsPCから認識できるか確認します。

OTG接続port

結論から言うとPi4BではUSB-c portと相手側の端末をUSBケーブルで接続します。

実は今回のメイン嵌りイベントはここでした。

2023.05.14時点でラズパイのどのUSB portでOTG接続できるかを公式のアナウンスで確認したところZeroに関するドキュメントしか確認することができませんでした。

この部分です。

Specification
802.11 b/g/n wireless LAN
Bluetooth 4.1
Bluetooth Low Energy (BLE)
1GHz, single-core CPU
512MB RAM
Mini HDMI port and micro USB On-The-Go (OTG) port
Micro USB power
HAT-compatible 40-pin header
Composite video and reset headers
CSI camera connector

micro USB On-The-Go (OTG) port Micro USB powerとあるので給電port以外のUSB portでOTGすると捉えましたが、残念ながらPi4BではUSB-c portを使う必要がありました。半日以上溶かしましたがこちらの記事のおかげでクリアすることができました。本当に感謝です。

mass strage起動

ここまでで自動起動設定が完成しているので一度電源を落とします。

$ sudo shutdown now

普段は給電に使うラズパイのUSB-cとWindowsPCのUSB portをケーブルでつなぎ再起動します。

しばらくするとWindows側でUSBデバイス認識の通知が出ててラズパイをUSBストレージ化出来たとこが確認できます。

ファイル転送

Windows上で立ち上がったexplorerでUSBドライブ上にサンプルテキストを作成するとラズパイのmount先でも確認できました。

~/usb $ ls -lah
合計 16K
drwxr-xr-x 3 root     root     4.0K  1月  1  1970  .
drwxr-xr-x 6 user     user     4.0K  5月 14 14:16  ..
drwxr-xr-x 2 root     root     4.0K  5月 14 13:22 'System Volume Information'
-rwxr-xr-x 1 root     root        4  5月 14 13:51  test1.txt

microSDカードのROM化設定

最後に連続使用を想定して、今まで同様microSDカードにROM化設定をします。

ROM化設定/解除/再設定用のscriptを/protectにまとめ、初期設定用のscript(protect_prov.sh)と一緒にuser directoryにコピーして実行します。

sudo chmod +u+x protect_prov.sh
./protect_prov.sh

それぞれのscriptは以下です。

ROM化設定用script

protect_prov.sh
#!/bin/bash

test -d ./root-ro
if [ $? == 0 ]; then
  sudo rm -r ./root-ro
  echo "Elminated old root-ro"
else
  echo "root-ro is not exist" 
fi

sudo cp ~/protect/protect.sh /root
sudo cp ~/protect/protect /bin
sudo cp ~/protect/nonprotect /bin

sudo chmod u+x /root/protect.sh /bin/protect /bin/nonprotect
sudo chown root:root /root/protect.sh /bin/protect /bin/nonprotect

sudo sh /root/protect.sh

sudo rm *prov.sh
sudo rm -r ./protect

sudo reboot
/protect/protect.sh
#!/bin/bash

echo Installing all dependencies
apt-get install git subversion rsync gawk busybox bindfs -y
echo Disabling swap
dphys-swapfile swapoff
dphys-swapfile uninstall
update-rc.d dphys-swapfile disable
systemctl disable dphys-swapfile
echo Cloning repository
git clone https://github.com/josepsanzcamp/root-ro.git
echo Doing the setup
rsync -va root-ro/etc/initramfs-tools/* /etc/initramfs-tools/
mkinitramfs -o /boot/initrd.gz
echo initramfs initrd.gz >> /boot/config.txt
echo Restarting RPI
exit

ROM化解除用script

/protect/nonprotect
#!/bin/sh

if [ -e /mnt/boot-ro/config.txt ]; then
    sudo mount -o remount,rw /dev/mmcblk0p1
    sudo grep -v initramfs /mnt/boot-ro/config.txt >/tmp/config.txt
    sudo cp /tmp/config.txt /mnt/boot-ro/config.txt
    sudo reboot
else
    echo Already write enabled
fi

ROM化再設定用script

/protect/protect
#!/bin/sh

if [ -e /mnt/boot-ro/config.txt ]; then
    echo Already write protected
else
    sudo grep -v initramfs /boot/config.txt >/tmp/config.txt
    sudo echo initramfs initrd.gz >> /tmp/config.txt
    sudo cp /tmp/config.txt /boot/config.txt
    sudo reboot
fi



2) 

ラズパイを録画用HDDにエミュレートする

目次

OTG

OTGとは

USB On-The-Go(略してUSB OTG)は、USB機器どうしを直接接続するインタフェース規格である。パソコン等をホストとせずに、動作時にホスト機器を動的に切り替える機能を拡張したもの。 IEEE 1394のように直接接続できるので、いろいろな機器に応用できる。

https://ja.wikipedia.org/wiki/USB_On-The-Go

OTGとはOn-The-Goの略であり、USBで接続された機器のホストを動的に切り替えることのできる機能である。ラズパイは基本的にホストとして動作するのだが、TVに接続した場合、TVをホスト(親)、ラズパイを子として動作させることができる。

OTGをサポートしてるUSBport

ラズパイのドキュメントには以下のようにある。

The USB host port inside the Pi is an On-The-Go (OTG) host as the application processor powering the Pi, BCM2835, was originally intended to be used in the mobile market: i.e. as the single USB port on a phone for connection to a PC, or to a single device. In essence, the OTG hardware is simpler than the equivalent hardware on a PC.

https://www.raspberrypi.org/documentation/hardware/raspberrypi/usb/README.md

ラズパイに電力を供給するUSBがOTGホスト、とある。Raspberr pi 4の電力供給用のUSBはUSB-Cである。なので、USB-CをOTGとして利用することができる。

OTGの設定

前置きはこの程度にして、早速ラズパイに設定をしていこう。

config.txtに追記

/bootディレクトのconfig.txtを編集。

pi@raspberrypi:/ $ sudo vi /boot/config.txt

以下の一文を最終行に追記。

dtoverlay=dwc2

cmdline.txtの編集

続いて、/bootディレクトリのcmdline.txtを編集する。

pi@raspberrypi:/ $ sudo vi /boot/cmdline.txt

modules-load=dwc2,g_mass_strageの記載を追記し、dwc2とg_mass_storageのモジュールをロードするように設定。

console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles modules-load=dwc2,g_mass_strage

g_mass_storage

続いて、仮想ストレージとなるイメージファイルを作成する。

pi@raspberrypi:/ $ dd if=/dev/zero of=/media/pi/HD-3/public/dlna/movies/virtual_storage bs=1MB count=100000
100000+0 レコード入力
100000+0 レコード出力
100000000000 bytes (100 GB, 93 GiB) copied, 1668.4 s, 59.9 MB/s

上記のコマンドでof=で指定したファイルが作成される。ファイルサイズはbs × count。この場合100,000MB=100GB。少々時間がかかる。ちなみにファイルの拡張子は.isoでも.binでも.imgでもあるいは拡張子がなくてもいい。※少なくとも.imgと拡張子なしは動作確認した。

以下コマンドで作成したファイルをstorageとして設定する。

pi@raspberrypi:/ $ sudo modprobe g_mass_storage file=/media/pi/HD-3/public/dlna/movies/virtual_storage removeable=0

起動しているモジュールのリストを表示させる。

pi@raspberrypi:/ $ lsmod | grep -E '(dwc|mass)'
g_mass_storage         16384  0
usb_f_mass_storage     49152  2 g_mass_storage
libcomposite           53248  2 g_mass_storage,usb_f_mass_storage
dwc2                  167936  0
udc_core               57344  3 usb_f_mass_storage,dwc2,libcomposite

g_mass_storageとdwc2が表示されていれば良い。もし表示されていない場合、sudo rebootなどで再起動を試す。

TVに接続

ラズパイのUSB-CとテレビのUSBportなどを接続する。

するとTV側でHDDとして認識される。

録画用HDDとして登録するにはフォーマットします、という文言に対してちょっとビビりつつ登録する。(当然フォーマットされる対象は先ほど作成したイメージファイルなのだが)

20200814-1.jpg

適当に番組を録画してみるとなんの問題もなく録画することができた。

20200814-2.jpg

あとは、どこからでも録画した番組が視聴できたらいいなあ。

参考サイト

2024年8月5日月曜日

 

https://ja.fmuser.net/content/?7782.html  参照

折り返しダイポールアンテナ


基本的なダイポールアンテナまたはアンテナは、その基本的な形で広く使用されています。 ただし、多くの状況下では、折り返しダイポールアンテナと呼ばれるこれに対する変更には多くの利点があります。

折り返しダイポールアンテナまたは折り返しダイポールアンテナは、それ自体だけでなく、八木アンテナや他のさまざまなタイプのアンテナなどの他のアンテナの被駆動要素としても広く使用されています。

折り返しダイポールアンテナの基本

折り返しダイポールアンテナは基本的なダイポールで構成されていますが、両端を接続する導体が追加されています。 これにより、DCへの短絡であるワイヤの「ループ」が作成されます。 両端が折り返されているように見えるため、アンテナは折り返しダイポールアンテナと呼ばれます。

折り返しダイポールアンテナの基本フォーマットを以下に示します。 基本的なダイポールと同様に、折り返しダイポールアンテナはバランスアンテナであり、バランスフィーダーで給電する必要があります。 バラン(不平衡から平衡への変圧器)が使用されている場合は、不平衡フィーダーを使用できます。

 


折り返しダイポールアンテナの追加部分は、基本的なダイポールセクションと同じ直径のワイヤまたはロッドを使用して作成されることがよくあります。 ただし、これが常に当てはまるとは限りません。


また、ワイヤまたはロッドは通常、平行要素の長さに沿って等間隔に配置されます。 これは、さまざまな方法で実現できます。 多くの場合、VHFまたはUHFアンテナの場合、エレメントの剛性は十分ですが、低周波数ではスペーサーを使用する必要がある場合があります。 ワイヤーを離しておくため。 明らかに、それらが絶縁されていない場合は、それらが短絡しないようにすることが不可欠です。 場合によっては、フラットフィーダーを使用できます。


 


折り返しダイポールアンテナを使用する主な理由の73つは、それが提供する給電インピーダンスの増加です。 メインダイポールの導体と300番目または「折り畳み」導体が同じ直径の場合、給電インピーダンスがXNUMX倍(つまりXNUMX乗)増加することがわかります。 自由空間では、これにより給電インピーダンスがXNUMXΩから約XNUMXΩオームに増加します。 さらに、RFアンテナの帯域幅は広くなっています。


折り返しダイポールインピーダンス増加理論
折り返しダイポールアンテナのインピーダンスがXNUMX倍に増加する理由は考えられます。

標準のダイポールアンテナでは、導体に沿って流れる電流は同相であり、その結果、フィールドのキャンセルはなく、その結果、放射または信号が発生します。

折り返しダイポールアンテナを作成するためにXNUMX番目の導体を追加すると、これは、両端が互いに合うように折り返されている標準ダイポールの延長と見なすことができます。 その結果、新しいセクションの電流は元のダイポールの電流と同じ方向に流れます。 したがって、両方の半波に沿った電流は同相であり、アンテナは単純な半波ダイポールと同じ放射パターンなどで放射されます。

インピーダンスの増加は、折り返しダイポールアンテナに供給される電力がアンテナを構成する2つのセクション間で均等に共有されるという事実から推測できます。 これは、標準のダイポールと比較した場合、各導体の電流が半分に減少することを意味します。 同じ電力が印加されると、ワット= IXNUMX x Rの式でバランスを保つために、インピーダンスをXNUMX倍に上げる必要があります。

折り返しダイポール伝送線路効果
折り返しダイポールアンテナの折り返し要素には、伝送線路効果が付いています。 ダイポールのインピーダンスは、短絡した伝送線路セクションのインピーダンスと並列に表示されることがわかりますが、上記のインピーダンスの議論は依然として当てはまります。これは、同じ問題を見る別の方法にすぎません。

これは、アンテナの他の特性のいくつかを説明するのに役立ちます。

長さはこの効果の影響を受けます。 通常、フィーダー内の定在波の波長は速度係数の影響を受けます。 空気を使用する場合、これは空き領域の値の約95%になります。 ただし、速度係数の低いフラットフィーダーを使用すると、必要な長さが短くなる効果があります。

フィーダー効果により、折り返しダイポールアンテナの応答がフラットになります。つまり、折り返しのないダイポールよりも帯域幅が広くなります。

これは、共振から離れた周波数では、ダイポールのリアクタンスがソートされた伝送ラインのリアクタンスと反対の形式であり、その結果、アンテナの給電点でリアクタンスがキャンセルされるために発生します。

折り返しダイポールの利点
標準のダイポールよりも折り返しダイポールアンテナを使用することには、主にXNUMXつの利点があります。

インピーダンスの増加:  より高いインピーダンスのフィーダーを使用する必要がある場合、またはダイポールのインピーダンスが寄生要素などの要因によって低下する場合、折りたたまれたダイポールはインピーダンスレベルを大幅に増加させ、アンテナを利用可能なフィーダーにより簡単に適合させることができます。

広い帯域幅:  折りたたまれたダイポールアンテナは、よりフラットな周波数応答を備えています。これにより、テレビや放送ラジオなど、さまざまな選択可能なチャネルを利用する多くの送信で、より広い帯域幅で使用できるようになります。広い帯域幅のアンテナが必要です。 標準のダイポールアンテナは必ずしも必要な帯域幅を提供するとは限らず、折りたたまれたダイポールの追加の帯域幅は要件を満たします。


不等導体の折り返しダイポール

多くの場合、折り返しダイポールアンテナでは通常の標準の4:1比に対してインピーダンス比を実装する必要があります。 上部と下部のXNUMXつの導体の有効径を変えるだけで、さまざまな比率を得ることができます。




以下の式を使用して、インピーダンスのステップアップ比を決定することができます。


 
どこ:
    d1は、ダイポールのフィードアームの導体直径です。
    d2は、ダイポールの非給電アームの導体直径です。
    Sは導体間の距離です
    rはステップアップ率です


通常のワイヤとは対照的に、太い導体の使用に関連する短縮効果があり、これは折りたたまれたダイポールの長さに影響を与えることを覚えておく必要があります。


多導体フォールドダイポール
折り返しダイポールアンテナの概念は、多くの場合、XNUMXつの追加導体の使用を意味しますが、追加の導体を追加することにより、概念をさらに拡張できます。 これは、全体のインピーダンスをさらに増加させ、帯域幅をさらに広げる効果があります。

 
すべてのワイヤまたは導体の直径が同じである9線式折り返しダイポールの場合、インピーダンスは9乗、つまり73倍に増加します。これは、600本の導体を持つ折り返しダイポールの公称値がXNUMX倍であることを意味します。 XNUMXΩまたは約XNUMXΩ

折り返しダイポールアプリケーション
折り返しダイポールを使用する方法はたくさんあります。 彼らは多くのアプリケーションで用途を見つけます:

自分自身で:   折り返しダイポールアンテナは、単独で使用されることもありますが、通常300オームの高インピーダンスフィーダーで給電する必要があります。 これ自体は、バランスの取れたフィーダーを使用できる特定のアプリケーションで非常に役立ちます。