- 追加された行はこの色です。
- 削除された行はこの色です。
* PIFWの開発設計メモ [#yc9ad9ac]
このページは筆者の開発メモであり、一般公開している情報ではありません。~
各種問い合わせ等には対応できませんのでご了承ください。
** 仕様 [#bbdd07b5]
- 入出力端子
-- LINE-OUT(TSフォンx2)
-- LINE-IN(TSフォンx2)
-- HEADPHONE-OUT(TRSフォンx1)
-- MIDI-IN
-- MIDI-OUT
-- DC 5Vまたは12V(ACアダプタ入力) ◆T.B.D
- 操作系
-- LINE-IN LEVEL
-- LINE-OUT LEVEL
-- HEADPHONE-OUT LEVEL
-- プッシュスイッチ(L/R/U/D)
-- ロータリーエンコーダ(VALUE)
-- タッチパネル
- 表示系
-- 5インチLCD(800x480 HDMI接続)または3.5インチLCD(480x320 SPI接続) ◆T.B.D
** raspbian イメージ [#j9a623a2]
https://www.raspberrypi.org/downloads/raspbian/
ここから、「RASPBIAN JESSIE WITH PIXEL」のZIPを取得する。~
ZIP解凍後SDカードにddする。
** TOUCH LCD [#i5177b97]
WaveShareの製品が何もせずそのまま使える。(標準でドライバモジュールが組み込まれているので有効にするだけ)~
※OSOYOは専用カーネルが必要でドライバは非公開。(OS Updateすると動かなくなる)
** WiFiかLANでInternetにつなぐ [#f23b16ac]
** OSアップデート [#zd20370d]
$ sudo apt-get update
$ sudo apt-get upgrade
** モジュールインストール [#x54375bd]
$ 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
** pifwインストール [#m007cf70]
$ chmod 755 pifw
$ chmod 755 sw_pifw.py
$ sudo cp pifw /usr/bin/
$ sudo cp sw_pifw.py /usr/bin/
.xsessionに「/usr/bin/pifw」を記述
** 画面スリープの抑止 [#be2b6eca]
.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化) [#h1aa2ad2]
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 [#f5c55f31]
WM8731を使用する。~
オーディオはI2S、制御はI2Cで行っている。
- I/Oリスト
-- LINE-IN
-- MIC-IN
-- LINE-OUT
-- HP-OUT
- ドライバの話~
https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=157834
- ボード~
http://www.dm9records.com/index.php/release/sound/piaif/
- ドライバの有効化
config.txtを編集
dtparam=i2c_arm=on
dtparam=i2s=on
dtoverlay=i2s-mmap
dtoverlay=rpi-proto
設定した最初の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)
#ref(alsamixer.PNG,left);
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本体からもらう(ノイズレベルが悪くなるが許容範囲)
** スイッチボード [#qba5afb4]
#ref(sw_board.png,left);
** AIFボード MIDI用拡張ポート(β1のみ) [#o41ad1c0]
#ref(EXP_CN_MIDI.png);
** MIDI [#jbb78f4d]
UARTにMIDIを通すには、UARTクロックを変更する必要がある。~
https://openenergymonitor.org/forum-archive/node/12412.html
*** GPIO UARTクロックを変更し、Bluetoothを無効にする [#o6f2139d]
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/cmdline.txt に、次の文字列を追加する
/boot/config.txt に、次の文字列を追加する
dtoverlay=pi3-miniuart-bt
init_uart_clock=39062500
init_uart_baud=38400
dtparam=uart0_clkrate=48000000
再起動
$ sudo reboot
*** UART-MIDI I/F [#cb464dd9]
#ref(MIDI-UART.png);
フォトカプラは高速品が好ましいが汎用品でも問題ない。~
トランジスタも汎用品(2SC1815等)でも問題ない。~
回路図の型番は表面実装用のチップ。
** GPIO [#p16a80fc]
|RIGHT: |CENTER: |CENTER: |LEFT: |c
|SIGNAL |PIN(内) |PIN(外) |SIGNAL |
|3.3V |1 |2 |5V |
|GPIO-2(I2C SDA) |3 |4 |5V |
|GPIO-3(I2C SCL) |5 |6 |GND |
|GPIO-4(空き) |7 |8 |GPIO-14(UART TXD) |
|GND |9 |10 |GPIO-15(UART RXD) |
|GPIO-17(TP IRQ) |11 |12 |GPIO-18(I2S BCK) |
|GPIO-27(空き) |13 |14 |GND |
|GPIO-22(空き) |15 |16 |GPIO-23(空き) |
|3.3V |17 |18 |GPIO-24(LCD RS) |
|GPIO-10(SPI MOSI) |19 |20 |GND |
|GPIO-9(SPI MISO) |21 |22 |GPIO-25(空き) |
|GPIO-11(SPI SCK) |23 |24 |GPIO-8(LCD CS) |
|GND |25 |26 |GPIO-7(TP CS) |
|ID-SD |27 |28 |ID-SC |
|GPIO-5(ENC-B) |29 |30 |GND |
|GPIO-6(ENC-A) |31 |32 |GPIO-12(LEFT) |
|GPIO-13(DOWN) |33 |34 |GND |
|GPIO-19(I2S LRCK) |35 |36 |GPIO-16(RIGHT) |
|GPIO-26(UP) |37 |38 |GPIO-20(I2S DIN) |
|GND |39 |40 |GPIO-21(I2S DOUT) |
LCDとTPは共用でSPIを使っていて、CSで切り替えている。~
TPは割り込み(IRQ)で取り込む。~
AUDIOはI2Sで接続。~
AD/DAチップの制御はI2Cで行っている(レジスタ設定時のみ)。
UARTはMIDIに使用予定。
その他の空きGPIOはスイッチ類に使用予定。~
現在はプッシュスイッチ2個とロータリーエンコーダーのみ。
** ストレージのサイズ変更(縮小) [#m6b50878]
以下は別PCのCentOS7での作業
umount /run/media/pi/*
SDカードのマウント解除
e2sck -f /dev/sdf2
チェックする(必須)
resize2fs -p /dev/sdb2 4G
目標パーティションサイズより少し少なくする
指定サイズが小さすぎて縮小が無理だとエラーがでる
fdisk /dev/sdf
dコマンドで第2パーティションを削除する
pコマンドで状態を確認する
nコマンドで新しいパーティションを作る(開始シリンダに注意)
pコマンドで状態を確認する
wコマンドで書き込む
** ストレージのサイズ変更(最大に拡張) [#da6b2f05]
以下は別PCのCentOS7での作業
umount /run/media/pi/*
SDカードのマウント解除
e2sck -f /dev/sdf2
チェックする(必須)
fdisk /dev/sdf
dコマンドで第2パーティションを削除する
pコマンドで状態を確認する
nコマンドで新しいパーティションを作る(開始シリンダに注意)
pコマンドで状態を確認する
wコマンドで書き込む
resize2fs -p /dev/sdb2
サイズ指定をしなければ、パーティションサイズまで自動で拡張される
** SDカードからイメージを作成 [#m230823c]
SDカードに作成した状態から、最小限のサイズだけイメージ化する。~
例えば、8GBのカードに最小構成を作成して上記パーティションの縮小作業をして2GBまで切り詰めたとする。~
これをそのままddやWin32DiskImageでイメージ化すると、8GBカードの後半6GBもゴミデータとしてファイルに書き出されてしまう。
- ストレージのサイズ変更(縮小)の作業を行って、パーティションサイズを少し余裕を持たせて最小にする。
- 別のLinux機にカードを接続する(ここでは/dev/sdbに乗ったとする)
- 自動マウントされた場合はアンマウントする
- fdisk /dev/sdb でパーティションの最終セクタを確認する
# fdisk /dev/sdb
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/sdb: 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/sdb1 8192 92159 41984 c W95 FAT32 (LBA)
/dev/sdb2 92160 4140072 2023956+ 83 Linux
Command (m for help): q
- 最終セクタは4140072と分かった。これに1足して4140073とする。
- 次に、dd コマンドでファイル化する
dd if=/dev/sdb of=raspbian_pifw_ring2_mod_2017-04-22.img bs=512 count=4140073
こうしてやれば、出来上がったイメージを4GBのカードに展開することもできる。