PIFWの開発設計メモ

このページは筆者の開発メモであり、一般公開している情報ではありません。
各種問い合わせ等には対応できませんのでご了承ください。

仕様

  • 入出力端子
    • LINE-OUT(TSフォンx2)
    • LINE-IN(TSフォンx2 または TRSフォンx1)
    • HEADPHONE-OUT(TRSフォンx1)
    • MIDI-IN
    • MIDI-OUT
    • DC 5Vまたは12V(ACアダプタ入力) ◆T.B.D
  • 操作系
    • LINE-IN LEVEL
    • LINE-OUT LEVEL
    • HEADPHONE-OUT LEVEL(LINE-OUT連動でも可)
    • プッシュスイッチ(L/R/U/Dの最大4個)
    • ロータリーエンコーダ(VALUE)
    • タッチパネル
  • 表示系
    • 5インチLCD(800x480 HDMI接続)または3.5インチLCD(480x320 SPI接続) ◆T.B.D

raspbian イメージ

https://www.raspberrypi.org/downloads/raspbian/

ここから、「RASPBIAN JESSIE WITH PIXEL」のZIPを取得する。
ZIP解凍後SDカードにddする。
LITEから最小限必要なモジュールを組み込んだイメージができあがった。

WaveShare?互換 3.5インチ TOUCH LCD

WaveShare?の製品が何もせずそのまま使える。(標準でドライバモジュールが組み込まれているので有効にするだけ)

公式からLCD-Showをダウンロードしてtar展開。 http://www.waveshare.com/wiki/3.5inch_RPi_LCD_(A)

$ tar xvf LCD-show-*.tar.gz
$ cd LCD-show/
$ chmod +x LCD35-show
$ ./LCD35-show

これをやると/boot/config.txtを上書きするので、その他の設定をしていた場合は消える。
したがって、LCDの設定関係は最初にやるべき。

LCDの上下反転方法

/boot/config.txt

dtoverlay=waveshare35a

これを

dtoverlay=waveshare35a:rotate=270

に、変更すると上下反転する。 続いてタッチパネルのキャリブレーションを行う。

次のコマンドを実行しても同じ(ただし、config.txtが上書きされる)

$ cd LCD-show/
$ ./LCD35-show 180

OSOYOの3.5インチ

OSOYOは専用カーネルが必要でドライバは非公開。(OS Updateすると動かなくなる)

5インチ MDMI タッチLCD

HDMI 5インチHDMIに出力するための設定

$ cd LCD-show
$ ./LCD5-show

/boot/config.txtに次の1行を追記して上下反転させる

display_rotate=2

今まで設定してあったAudio等の設定はすべて消えるので、config.txtを修正する

タッチパネルのキャリブレーション

$ sudo apt-get install -y xinput-calibrator
$ DISPLAY=:0.0 xinput_calibrator

コンソールに表示されたメッセージをメモっておく

$ sudo vi /usr/share/X11/xorg.conf.d/99-calibration.conf

設定ファイルを開いて、Calibrationの所の4つの数字を書き換える

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3952 219 184 3911"
        Option  "SwapAxes"      "1"
EndSection

WiFi?かLANでInternetにつなぐ

OSアップデート

$ sudo apt-get update
$ sudo apt-get upgrade

モジュールインストール

$ sudo apt-get install freeglut3-dev g++ libasound2-dev libcurl4-openssl-dev libfreetype6-dev libjack-jackd2-dev libx11-dev libxcomposite-dev libxcursor-dev libxinerama-dev libxrandr-dev mesa-common-dev usbmount

JUCE5対応

$ sudo apt-get install webkit2gtk-4.0-dev

pifwインストール

$ chmod 755 pifw
$ chmod 755 sw_pifw.py
$ sudo cp pifw /usr/local/bin/
$ sudo cp sw_pifw.py /usr/local/bin/

.xsessionに「/usr/local/bin/pifw」を記述

画面スリープの抑止

.xinitrcを用意して以下の内容を書き込む

xset s off
xset -dpms
xset s noblank

/etc/lightdm/lightdm.confを以下のように編集する

< xserver-command=X
---
> xserver-command=X -s 0 -dpms

編集したらlightdmを再起動する

sudo /etc/init.d/lightdm restart

.config/autostart/screensaver.desktopを作成し、以下の内容を書き込む

[Desktop Entry]
Type=Application
Exec=/home/pi/.xinitrc

クロック固定(1200MHz化)

cpu freq utlをインストール

$ sudo apt install cpufrequtils

設定する

$ sudo cpufreq-set -g performance

/boot/config.txtを編集(行追加)

arm_freq=1200

/etc/init.d/cpufrequtilsを修正(オンデマンドではなく固定にする)

ENABLE="true"
#GOVERNOR="ondemand"
GOVERNOR="performance"
MAX_SPEED="0"
MIN_SPEED="0"

再起動して確認する

$ sudo reboot
$ cpufreq-info

600MHzが0%、1200MHzが100%になっていれば固定化できている

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

CPU温度の確認

$ vcgencmd measure_temp

I2S Audio Interfece

WM8731を使用する。
オーディオはI2S、制御はI2Cで行っている。

  • I/Oリスト
    • LINE-IN
    • MIC-IN(使わない)
    • LINE-OUT
    • HP-OUT
  • ドライバの有効化 config.txtを編集
    dtparam=i2c_arm=on
    dtparam=i2s=on
    dtoverlay=i2s-mmap
    dtoverlay=rpi-proto ←使用するAIFに合わせる必要がある(後述)
    設定した最初の1回目は起動直後にエラーがでて進まなくなる。
    強制OFFして起動しなおせばOK。 内蔵AUDIOのほうは止めておいたほうが良いかもしれない。
  • セットアップ
    • Settings - OUTPUT → snd_rpi_proto : Direct hardware device without any conversions
    • Settings - INPUT → snd_rpi_proto : Direct hardware device without any conversions
    • コンソールでalsamixerを操作する必要がある(やらないと音が出ない)
      • F6で対象デバイスリストを開いてsnd_rpi_protoを選択する
      • F5でALLを選択する
      • Masterを「↑」「↓」キーで増減させて0dBに設定する
      • Lineまで移動して、「;」キーでLのOn/Off、「’」キーでRのOn/Off
        L Rの表示が出るようにしておく。これでLINE-INが有効
      • Captureまで移動して、「↑」「↓」キーで増減させて0dBに設定する
      • Input Muxまで移動して、「↑」「↓」キーでLine Inに設定する
      • Output Mixer HiFi?まで移動して、「M」を押してミュート解除する(表示は00)
alsamixer.PNG

Master : 79/79 0.00dB/0.00dB
Master Plauback: MM
Sidetone: 0
Line: L R/Capture
Mic: --
Mic Boost: 0
Mic Boost: 0
Playback Deem: MM
Capture: 75/75 6.00dB/6.00dB(GAIN調整品)
ADC Hich Pass: 00
Input Mux: Line In
Output Mixer HiFi?: 00
Output Mixer Line Bypass: MM
Output Mixer MIC Sidetone: MM
Store DC Offset: MM

  • メモ
    • PiAIF基板は全ジャックの配線がL/Rテレンコになってる(→本番で直す)
    • BUFFERは32 samples (0.7ms)が良い。16ではわずかにチリチリノイズが乗る。
    • OUTに周期的なパルス性ノイズが漏洩している(→本番ではフィルター追加)
    • 3.3V LDOが納期遅延して入手できていないため、β1は3.3V_AをPi3本体からもらう(ノイズレベルが悪くなるが許容範囲)

ドライバ

  • rpi-proto
    /boot/config.txtに「dtoverlay=rpi-proto」を追記する。
    AIFのクロックは12.288MHz。Fs=44.1KHzは使えない。
    BUGがあってFs=48K以外は動かない。
    Fs=48kのみで使用するならクロックの関係で音は良いはず。
  • audioinjector-wm8731-audio
    /boot/config.txtに「dtoverlay=audioinjector-wm8731-audio」を追記する。
    AIFのクロックは12.000MHz。すべてのFsが使用できる。
    すべてのFsが使えるがクロックの関係で音質は多少劣るはず。

スイッチボード

sw_board.png

AIFボード MIDI用拡張ポート(β1のみ)

EXP_CN_MIDI.png

MIDI

UARTにMIDIを通すには、UARTクロックを変更する必要がある。
https://openenergymonitor.org/forum-archive/node/12412.html

GPIO UARTクロックを変更し、Bluetoothを無効にする

Bluetoothを無効にする

$ sudo systemctl disable hciuart
$ sudo nano /lib/systemd/system/hciuart.service
change the first ttyAMA0 in ttyS0

/boot/cmdline.txt から、次の文字列を削除する(デフォルトではUARTはコンソール)

console=serial0,115200

/boot/config.txt に、次の文字列を追加する

dtoverlay=pi3-miniuart-bt
init_uart_clock=39062500
init_uart_baud=38400
dtparam=uart0_clkrate=48000000

再起動

$ sudo reboot

ALSAにMIDIデバイスとして見えるようにする

https://github.com/cjbarnes18/ttymidi

UART-MIDI I/F

MIDI-UART.png

フォトカプラは高速品が好ましいが汎用品でも問題ない。
トランジスタも汎用品(2SC1815等)でも問題ない。
回路図の型番は表面実装用のチップ。

GPIO

SIGNALPIN(内)PIN(外)SIGNAL
3.3V125V
GPIO-2(I2C SDA)345V
GPIO-3(I2C SCL)56GND
GPIO-4(空き)78GPIO-14(UART TXD)
GND910GPIO-15(UART RXD)
GPIO-17(TP IRQ)1112GPIO-18(I2S BCK)
GPIO-27(空き)1314GND
GPIO-22(空き)1516GPIO-23(空き)
3.3V1718GPIO-24(LCD RS)
GPIO-10(SPI MOSI)1920GND
GPIO-9(SPI MISO)2122GPIO-25(空き)
GPIO-11(SPI SCK)2324GPIO-8(LCD CS)
GND2526GPIO-7(TP CS)
ID-SD2728ID-SC
GPIO-5(ENC-B)2930GND
GPIO-6(ENC-A)3132GPIO-12(LEFT)
GPIO-13(DOWN)3334GND
GPIO-19(I2S LRCK)3536GPIO-16(RIGHT)
GPIO-26(UP)3738GPIO-20(I2S DIN)
GND3940GPIO-21(I2S DOUT)

LCDとTPは共用でSPIを使っていて、CSで切り替えている。
TPは割り込み(IRQ)で取り込む。

AUDIOはI2Sで接続。
AD/DAチップの制御はI2Cで行っている(レジスタ設定時のみ)。

UARTはMIDIに使用予定。

その他の空きGPIOはスイッチ類に使用予定。
現在はプッシュスイッチ2個とロータリーエンコーダーのみ。

ストレージのサイズ変更(縮小)

以下は別PC(Linux専用機)のFedoraでの作業

概要: 第2パーティションの使用量は2GB弱。
目標パーティションサイズを2.3GBとする。(少し余裕を残さないと後で困る)
resize2fsで縮小するサイズは2.2GBとする。

e2sck -f /dev/sdd2
チェックする(必須)

resize2fs -p /dev/sdd2 2200M
目標パーティションサイズより少し少なくする
指定サイズが小さすぎて縮小が無理だとエラーがでる

fdisk /dev/sdd
dコマンドで第2パーティションを削除する
pコマンドで状態を確認する
nコマンドで新しいパーティションを作る(開始シリンダに注意)
pコマンドで状態を確認する
wコマンドで書き込む

ストレージのサイズ変更(最大に拡張)

e2fsck -f /dev/sdd2
チェックする(必須)

fdisk /dev/sdd
dコマンドで第2パーティションを削除する
pコマンドで状態を確認する
nコマンドで新しいパーティションを作る(開始シリンダに注意)
pコマンドで状態を確認する
wコマンドで書き込む

resize2fs -p /dev/sdd2
サイズ指定をしなければ、パーティションサイズまで自動で拡張される

SDカードからイメージを作成

SDカードに作成した状態から、最小限のサイズだけイメージ化する。
例えば、8GBのカードに最小構成を作成して上記パーティションの縮小作業をして2GBまで切り詰めたとする。
これをそのままddやWin32DiskImage?でイメージ化すると、8GBカードの後半6GBもゴミデータとしてファイルに書き出されてしまう。

  • ストレージのサイズ変更(縮小)の作業を行って、パーティションサイズを少し余裕を持たせて最小にする。
  • 別のLinux機にカードを接続する(ここでは/dev/sddに乗ったとする)
  • 自動マウントされた場合はアンマウントする
  • fdisk /dev/sdd でパーティションの最終セクタを確認する
    # fdisk /dev/sdd
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    
    Command (m for help): p
    
    Disk /dev/sdd: 7948 MB, 7948206080 bytes, 15523840 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0xf8e23f7b
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdd1            8192       92159       41984    c  W95 FAT32 (LBA)
    /dev/sdd2           92160     4140072     2023956+  83  Linux
    
    Command (m for help): q
  • 最終セクタは4140072と分かった。これに1足して4140073とする。
  • 次に、dd コマンドでファイル化する
    dd if=/dev/sdd of=raspbian_pifw.img bs=512 count=4140073

こうしてやれば、出来上がったイメージを4GBのカードに展開することもできる。

IPアドレスを調べるスクリプト

#!/bin/sh
/sbin/ifconfig -a |
   grep "inet addr" |
   grep -v "127." |
   sed -E 's/[\t ]+inet //g' |
   sed -e 's/ Bcast/\nBcast/g' |
   sed -e 's/ Mask/\nMask/g'
sleep 10

添付ファイル: fileMIDI-UART.png 361件 [詳細] fileEXP_CN_MIDI.png 407件 [詳細] filealsamixer.PNG 400件 [詳細] filesw_board.png 403件 [詳細] filepi3_gpio.png 255件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-18 (日) 02:25:14 (400d)