EZ-USB FX2 Slave FIFO②

e-tipsmemo.hatenablog.com
続き。

FIFOを接続するまえに16bitずつ受信できるかどうかを確認する。

まずEZ-USBのデバイスディスクリプタの一部を示す。


変えたのはここらへんのエンドポイントの数や、


使わないエンドポイントをコメントアウトしただけである。

また、プログラムの方は、TD_Initとメインループの部分を変更した。

そもそもTD_pollはいらない。
GotSUDは消さない。

FPGA側は、一部抜粋すると

ちょっとハマったのはFDはinoutなのでその書き方。

波形としてはこのようなものをイメージしている。
f:id:katakanan:20180418001107p:plain

USB Control Centerからファームウェアを書き込んで、
f:id:katakanan:20180418001140p:plain
END point2からデータを送る。

そうすると、EP2の空を示すFLAGAが立ち上がるので(=空ではない)受信が開始できることになる。
スイッチをおして、適当にチャタリング防止して、
STATE1に遷移したときに、LEDにFDiをラッチする。
そのままIDLEステートに戻る。
これを三回繰り返すと、FLAGAは0になった(=空である)

受信bit数は16bitなのでLEDには上の画像のデータを送ると2進数で
(0000_0010_0000_)[0001]

(0000_0100_0000_)[0011]

(0000_0110_0000_)[0101]
と表示が変わる。

Windwos10 マイク 聞こえない

Windows10でマイクを利用するときにハマったこと

前提

  • マイクを持っている
  • ドライバを入れたりした(Windowsデフォルトでもいい)
  • マイクは認識されている

症状

設定→システム→サウンド→サウンドコントロールパネル→録音
でマイクが認識されており、既定のデバイスになっている。

マイクのプロパティでこのデバイスを聞くにチェックボックスを入れているのに聞こえない。
f:id:katakanan:20180415112746p:plain

解決

設定→プライバシー→マイク
にて、「アプリがマイクにアクセスできるようにする」をオン。
マイクがアクセスできるアプリを個別に設定。
f:id:katakanan:20180415112939p:plain

EZ-USB FX2 Slave FIFO①

e-tipsmemo.hatenablog.com
この記事の続き且つSlave FIFO modeで動かす。
上の記事で見落としていたが

Interface Descriptorの中に
利用するエンドポイントの数を指定する場所があった。

;; Interface Descriptor
      .db   DSCR_INTRFC_LEN      ;; Descriptor length
      .db   DSCR_INTRFC         ;; Descriptor type
      .db   0               ;; Zero-based index of this interface
      .db   0               ;; Alternate setting
      .db   2               ;; Number of end points
      .db   0xff            ;; Interface class
      .db   0x00               ;; Interface sub class
      .db   0x00               ;; Interface sub sub class
      .db   0               ;; Interface descriptor string index

これを2(EP2(OUT) EP6(OUT))に設定して
EP4とEP8のディスクリプタコメントアウトすればよかった。

このPDFのp11と
http://www.cypress.com/file/386321/download

この記事を参考にする。
平坂久門ただいま失業中: EZ-USB FX2LP を動かしてみる (26) 転送レート測定のソースコード

とりあえずクロックはチップ内部のクロックを位相を180度回転させて外部へとだすようにしている。
また、Slave FIFOのうちSynchronous Modeを選択肢する。
読み出し時の波形は
http://www.cypress.com/file/126446/download
のp107, p108に書いてあるものを参考にする。

理想としては、以下のような感じ?
f:id:katakanan:20180415235232p:plain

上のクロックがチップ内部のロジックを駆動しており、
下のクロックがFPGAの受信側を駆動する。

二度手間感あるが、データを内部の非同期FIFOに入れる予定。

無変換 Escape 入れ替え

WSL(に限らないが)でVimを使うとescが遠いことが不便に思える。

ググればたくさん出てくるが
それをreg化したもの。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,7B,00,00,00,00,00

3つのキーを入れ替えなどをする時は違う値になる。ので
無変換とESC専用。

ADALM-PLUTO 初期テスト

他のFPGAボードもいじっている途中だが、
格安ボードがあると買ってみたくなるものである。
www.digikey.jp


ただ、これはFPGAが乗っていると言っても、使う側はそこをあまり意識しなくていいとおもわれる。
主にSDRを学習する用の開発ボードという様子。

ドライバーをインストールする

github.com
https://wiki.analog.com/_media/university/tools/pluto/drivers/device_manager_installed.png?cache=

USBケーブルをさす。

OSCを入れてみる

github.com

OSC起動

USB Deviceを選択してから一度だけ更新ボタンを押さないといけないかもしれない。
f:id:katakanan:20180408104223p:plain

このOII Oscilloscopeがよくわからない。
MatlabやPlutoSDRというソフトウェアを使うこともできる。
Matlabは有料なのでPlutoSDRを使っている人が多そうだが、
Supported hardware – Gqrx SDR
に依ると、

PlutoSDR
Very experimental
Support included out-of-the-box in our Ubuntu and other binary packages
Source builds need plutosdr branch from gr-osmosdr-gqrx fork

であるらしい。
代替でPlutoSDRできたらMATLABとかを試してみる。

SSH X11fowarding on WSL

やりたいこと
f:id:katakanan:20180406082104p:plain

WSLのセットアップ

e-tipsmemo.hatenablog.com

shellはfishを利用している。

SSHx11-appsを入れておく

sudo apt-get install x11-apps

Windowsの設定

Xmingが有名だがアプリケーションごとにタスクバー上のアイコンが分かれないのであんまり好きじゃない。

VcXsrvを入れる
https://sourceforge.net/projects/vcxsrv/

まずはこれだけでもWSL上のGUIWindows側に表示されるはず
f:id:katakanan:20180406082859p:plain

サーバー側設定

CentOS 7で行った。

> cat /etc/ssh/ssh_config  | grep X11
#   ForwardX11 no
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
        ForwardX11Trusted yes

試してはないが
XForwarding yes

ssh -Yで接続すればできるかもしれない。。?
qiita.com

サーバー側DISPLAY設定

ssh forwardingで描写をとばす先をexportする必要がある
サーバーで

export DISPLAY=[クライアントのIPアドレス]:0

とすればよいが接続元のIPアドレスは毎回変わる可能性があるので以下を.bashrcや.zshrcに書いた。

export DISPLAY=$(who am i | cut -d '(' -f 2 | sed -e 's/)//g'):0

config.fishの場合は

export DISPLAY=(who am i | cut -d '(' -f 2 | sed -e 's/)//g'):0

この状態で何かを起動すればWSLを起動しているWindowsGUIが表示されるはず
f:id:katakanan:20180406084249p:plain

Rust UTC timestamp

Rustでタイムスタンプがほしい時は多々ある。

time crateじゃもうdepricatedなので
chrono crateを使う。

$ cargo tree | grep chrono
├── chrono v0.4.1
extern crate chrono;

use chrono::prelude::*;

#[test]
fn timestamp(){
let dt = Utc::now();
println!("{:?}", dt.timestamp());
}

たったこれだけだった
https://crates.io/crates/chrono

$date +%s

で得られるものと近い値が出ると思われる。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識