2018年11月03日

MachXO3LFのSPI Flashからのロード方法

今回はLattice製FPGA MachXO3LF Starter Kitについて紹介します。
MachXO3LF Starter KitはLUT規模は小さいものの、
3千円程度とお手頃な価格で入手することができます。
また、開発環境Diamondもフリーライセンスで利用できるため、
気軽に始めることができます。

特に開発環境のDiamondがダウンロードサイズ1GB前後、
インストール後が5GB前後で他社の開発環境に比べて
コンパクトな点も気に入っています。

今回はMachXO3LFのSPI Flashからのロードする設定方法を紹介します。

Starter Kitのちょっとした注意点
MachXO3LFとMachXO3Lの2種類ある点です。

・MachXO3LFはFPGA内にFlashを内蔵しており、
何度も書き換えが可能なタイプ。

・MachXO3LはNVCM(Non-Volatile Configuration Memory、
ワンタイム・プログラマブル)という数回のみ書き換え可能な
メモリを内蔵しているタイプです。

製品実装等ので将来、書き換えることがない場合にMachXO3Lを使用しますが、
一般的なホビー用途や検討では何度も書き換え可能な
MachXO3LFが適切といえます。

最初に詳しく調べもせずに誤ってMachXO3Lを買ってしまいました…
後に改めてMachXO3LFを購入。


■MachXO3LF/MachXO3L Starter Kitについて
両タイプもSPI Flashが実装されています。
購入時にデモプログラムが書き込まれており、
MachXO3LはSPI Flashにデモコードが書き込まれており、
FPGAにはSPI Flashからプログラムをロードするコンフィグが
書き込まれています。
そのため、プログラムの書き換えはSPI Flashに
任意のbitデータを書き込んで使用します。

一方、MachXO3LFはデモプログラムは内蔵Flashに書き込まれています。
そのため、プログラムの書き換えは内蔵Flashを書き換えればよいのですが、
せっかくなので内蔵メモリでなく、外部のSPI Flashから読み込みます。

ただ、どのように外部のSPI Flashから読み込むのか、
情報が少なく、少し苦戦したため、
覚書として今回紹介することにしました。


@MachXO3LF内蔵Flashに外部SPIブートの設定書き込み

プロジェクトを生成する際のグローバル設定は下記のように設定します。


generalsetting.jpg

ポイントは
・MASTER_SPI_PORTをENABLEにする
・CONFIGURATIONをEXTERNALにする
です。

他の設定は任意です。

グローバル設定を保存しプロジェクトを合成します。
そのあと、SPI Flashに書き込むBitstream File
内蔵Flashに書き込むJEDEC Fileの2つを生成します。

続いて、外部SPI Flashから起動するための
設定ファイル(コンフィグレーション)を内蔵Flashも書き込みます。
その際にBitstream File全体でなく、
設定ファイル(コンフィグレーション)のみを書き込むことがポイントです。

書き込む際のOperationに「FLASH CFG〜」を選択します。
設定ファイル(コンフィグレーション)のみの「CFG」がポイントです。

flashcfg.jpg

これでMachXO3LFは外部SPIから起動するようになります。

A外部SPI Flashにプログラム書き込み

Starter Kitに搭載のSPI FlashはSpasion製
SPI-S25FL208Kを搭載しています。

SPI FlashオプションにSPI-S25FL208Kを選択して、
Bit Streamファイルを選択して書き込みます。

flashwrite.jpg

電源再投入でSPI Flashからプログラムを読み込みます。



今回は今回はMachXO3LFのSPI Flashから
ロードする設定方法を紹介しました。

FPGAを扱ったことが少ないため、
SPI Flashから読み込む設定をどのように書き込めばよいのか、
いろいろ探してしまいました。

書き込み時にプログラム全体を書き込むのでなく、
設定ファイル(コンフィグレーション)のみを書き込むことで、
SPI Flashから読み込むことができました。

SPI Flashから読み込めることが確認できたので、
Starter Kitを使っていろいろ実験してみたいと思います。

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年10月27日

2.42インチOLEDモジュール試食

今回は2.42インチOLEDモジュールについて紹介します。

秋月やamazon等で手に入るOLEDは解像度は128x64でそこそこあるものの、
画面サイズが0.96インチで遠くからの視認性があまり良くありません。

日本ではあまり入手性がよくありませんが、
同じ解像度128x64で同じ種類の制御ドライバの

0.96インチの制御ドライバはSSD1306で、
2.42インチの制御ドライバはSSD1309です。
互換はあるようです。

2.42インチOLEDモジュールが届いた状態では
SPIモードとなっており、
裏側のジャンパ抵抗を切り替えてI2Cモードとして動作させます。

このジャンパ抵抗が曲者でした・・・
SPIモードで使用しているジャンパ抵抗は4.7kの抵抗のため、
同じようにI2Cモードも4.7kでジャンパしましたが、
まったく動作せず・・・
I2Cのアドレススキャンにも応答せず・・・

oled-jumper.jpg

ジャンパ抵抗を4.7kでなく、
0Ωにするとアドレススキャンに応答し、
I2Cモードで動作確認できました。


2.42oled.jpg


同じようなOLEDなのに思った以上に動作確認に苦戦しました。

以前、ご紹介したようにRES端子を改造して、
4線のみで簡単に制御できるようにして試食完了です。

posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年10月20日

Kicadのパワーラインの配線方法

電流を多く流すパワーラインの回路設計は
配線幅を広く配線するということが一般的ですが、
それに加えて下記のように意図的に絶縁層(レジスト)をなくして、
ハンダで基板上の配線の厚みを増やす方法があります。
これによってより大電流を流すことができます。

powerline.png
赤枠部分は意図的にレジストが一部ない

Kicadでも意図的に絶縁層(レジスト)をなくすことができるので
その方法を今回は紹介します。

流れとしては
今まで通り配線を行い、
後から絶縁層(レジスト)を「図形ライン」を使用して、
必要な個所を選択して剥がす
という流れです。


@まず、今まで通り配線を行う
A絶縁層(レジスト)をなくすための配線幅を設定する

fig1.png

fig2.png


A描画する層をF.MaskもしくはB.Maskを選択します。
表面のレジストを剥がす場合はF.Mask、
裏面の場合はB.Maskを選択します。
「図形ラインを追加」をクリックします。

fig3.png

B「図形ラインを追加」からレジストを剥がす箇所を描画します。
「図形ラインを追加」した箇所の色が変わっていることが分かります。

fig4.png

今回は意図的に配線よりも剥がす幅を小さくして、
差を分かりやすくしています。

C3Dビューから絶縁層(レジスト)が
無くなっていることが確認できます。

fig5.png


このようにKicadでも大電流を流す基板を
作ることができました。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年10月06日

TinkerboardとRaspberryPIタッチディスプレイ接続

TinkerboardはRaspberryPIとポートの位置や
ピンアサインなどの互換性を謳っています。
CPUが異なるため、OSこそ異なるものの、
RaspberryPIとの互換性をかなり意識しています。

今回はTinkerboardにRaspberryPI純正の
タッチディスプレイを接続して使用する方法について紹介します。
RaspberryPI純正ディスプレイは対応ケースもあるため、
見た目や持ち運びが非常に便利です。
もちろん、対応ケースにディスプレイとTinkerboardがピタッと入ります。


基本的にはそのままRaspberryPI同様にDSI端子にフラットケーブルを接続して、
5V、GNDの配線をすればそのままTinkerOSで動作します。

ただ、ケースに入れるとディスプレイの向きが上下逆転します。
下記のコマンドとスクリプトの修正で直すことができます。

@表示の上下逆転
echo "xrandr -o inverted" >> /home/linaro/.config/lxsession/LXDE/autostart


Aタッチパネルの上下逆転
sudo leafpad /usr/share/X11/xorg.conf.d/40-libinput.conf
4つある中でも Identifier "libinput touchscreen catchall"の
タッチスクリーンを修正します。
Option "TransformationMatrix" "-1 0 1 0 -1 1 0 0 1"で
タッチ座標を変換します。

修正後は下記のようになります。

Section "InputClass"
 Identifier "libinput touchscreen catchall"
 MatchIsTouchscreen "on"
 MatchDevicePath "/dev/input/event*"
 Option "TransformationMatrix" "-1 0 1 0 -1 1 0 0 1"
 Driver "libinput"
EndSection



これで再起動するとケースに入れた場合でも上下逆転せずに使用できます。
上記の修正はRasbianでも通用します。
TinkerboardはRaspberryPIのアクセサリが流用できるので非常に便利です。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2018年09月29日

シングルボードコンピュータへElasticsearch&Kibanaインストール

今回はシングルボードコンピュータへ
ElasticsearchとKibanaをインストールする方法を紹介します。

対象のシングルボードコンピュータはTinkerboardといった
ARMベースのシングルボードです。
頑張ればraspberryPIでも可能です。
また、単にARMベースのシングルボード上で
ElasticsearchとKibanaをアプリケーションとして動かすのではなく、
サービスとして登録して運用する手順を紹介します。


予めJava8をインストールしておいてください。 
Elastic社のサイトから下記のパッケージをダウンロードします。
elasticsearch-6.X.X.deb
kibana-6.X.X-amd64.deb
※XXはバージョンに依る

また、Nodejsも併せてダウンロードしてください。
Linux Binaries (ARM)のARMv7を使用します。




■Elasticsearchインストール
@Elasticsearchインストール
Javaなので環境によらずそのままインストールできます。
sudo dpkg -i elasticsearch-6.X.X.deb

Aフォルダ権限変更
sudo chmod -vR 755 /etc/elasticsearch/
sudo chmod -vR 755 /var/lib/elasticsearch/
sudo chmod -vR 755 /usr/share/elasticsearch/

Belasticsearch.yml設定変更
amd64専用の機能などを無効化しないと起動に失敗します。
少しおまじないを追加します。
sudo leafpad /etc/elasticsearch/elasticsearch.yml

xpack.ml.enabled: false
bootstrap.system_call_filter: false

※必要に応じて下記も追記する。
network.host: "0.0.0.0"
http.port: 9200
transport.host: localhost
transport.tcp.port: 9300


CJava設定
必要に応じてElasticsearchのメモリ割り当てを変更します。
sudo leafpad /etc/elasticsearch/jvm.options

デフォルトは
-Xms1g
-Xmx1g
-server#追記
でメモリ1GをElasticsearchに割り当てる設定です。
Tinkerboardならメモリ2GBなのでデフォルトでも問題ありませんが、
raspberryPIの場合はメモリ1GBなので
システム領域が全く確保できなくなってしまいます。
設定したメモリ領域+200MBが実際のプロセス上で使用するため、
raspberryPIの場合は
-Xms600m
-Xmx600m
-server#追記
が妥当だと思います。

ガシガシ使うのであれば
メモリ2GBかつeMMCなTinkerboard Sしか選択肢はありません。

Dサービス起動設定変更
デフォルトでは自動再起動の設定が無効のため、
下記のファイルに追記します。
sudo /bin/systemctl enable elasticsearch.service#ファイル生成
sudo leafpad /etc/systemd/system/multi-user.target.wants/elasticsearch.service

[Service]
・・・・
Restart=always
↑1行追加する
・・・・

Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo service elasticsearch start

これでElasticsearchがシステム起動時に自動的に起動します。

sudo service elasticsearch statusでサービス状態を確認できます。
http://localhost:9200へアクセスして確認してもよいと思います。

statusで問題なくても9200へアクセスできない場合は
elasticsearch.ymlかjavaの設定に何か問題があることが多いです。


■Kibanaインストール
Kibanaはamd64用にパッケージされているため、
そのままではインストールできません。

@強制的にARM環境にAMD64を追加するために設定を変更する
sudo dpkg --add-architecture amd64
※逆に削除する場合は dpkg --remove-architecture amd64

AAMD64が追加されているか確認する
sudo dpkg --print-foreign-architectures

BKibanaインストール
sudo dpkg -i kibana-6.X.X-amd64.deb

CARM版Nodejs解凍
tar xfv node-v8.XX.X-linux-armv7l.tar.xz

DARM版Nodejsへ置き換え
sudo cp  node-v8.XX.X-linux-armv7l/bin/node /usr/share/kibana/node/bin
sudo cp  node-v8.XX.X-linux-armv7l/bin/npx /usr/share/kibana/node/bin
sudo cp  node-v8.XX.X-linux-armv7l/bin/npm /usr/share/kibana/node/bin

Dkibana.yml設定変更
sudo leafpad /etc/kibana/kibana.yml
下記を追記する
server.host: "0.0.0.0"

Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl enable kibana.service
sudo service kibana start
これでKibanaがシステム起動時に自動的に起動します。
sudo service kibana statusでサービス状態を確認できます。
http://localhost:5601へアクセスして確認してもよいと思います。

必要に応じてKibanaのNode側もメモリ制限をしてもよいと思います。
NODE_OPTIONS="--max_old_space_size=256"


以上の手順でシングルボードコンピュータへ
ElasticsearchとKibanaをインストールすることができます。

正直、高性能なシングルボードコンピュータ、
Tinkerboard Sでもメモリ1.8GB状態が続くため、
Elasticスタックを運用するのは厳しい面もあります。
ただ、クラスタリングやkibanaとelasticsearchの別運用など
Elasticスタックの特徴を生かして色々遊べそうです。


posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする