2022年07月02日

FPGA入門に最適なicestudio

今回はFPGA入門に最適なicestudioを紹介します。FPGAの開発をする場合、一般的にはメーカ提供のFPGAの開発環境をインストールしますが、開発環境のディスク容量が大きく、パッケージの追加等、インストール作業自体もなかなかハードルが高いのが現状です。

今回紹介するicestudioはメーカが提供する開発環境ではなく、OSSのプロジェクトの1つとしてFPGAの開発環境が開発、提供されています。対応しているFPGAは主にLattite社のiCE40系列、ECP5系列となっていますが、様々なiCE40系列の開発ボードに対応しています。今回はAliexpressで購入したIcesugar-nano開発ボードでicestudioを使ってみました。Icesugar-nano開発ボードはボード上にFPGA書き込みアダプタ、USBシリアル変換機能のマイコンが実装されているため、別に書き込みアダプタ等を購入せずに単体で書き込みや動作確認、デバッグ等を行うことが可能です。

話をIcesugar-nanoから戻して、icestudioの特徴は下記の通りです。
・一言でArduino IDEのFPGA版というイメージ
・Linuxはもちろんのこと、Windows、Macでも動作
・icestudioだけで論理合成、書き込みに対応
・インストールサイズが0.5GB前後と小さい
・評価ボードのサンプルが充実
・ブロックでの記述に対応、Verilogにも対応
・Verilogが分からなくとも、インストール後、すぐにLチカできる
・RISC-V等のブロック等もあり、様々な拡張が可能

今回はicestudio 0.9.0を利用してみました。


ice_studio9.jpg



0.9.0時点で対応しているボードは下記のようです。

ice_studio7.jpgice_studio8.jpg


様々なサンプルプロジェクトが準備されています。

ice_studio2.jpg

ice_studio4.jpg

ice_studio3.jpg

ice_studio5.jpg

ice_studio6.jpg


実際にLチカのサンプルプロジェクトを実行してみました。SelectからIcesugar-nanoを選択し、Examples→04.Muxes内の「01.Blinking Fixed LED」を選択します。

ice_studio1.jpg

右下のUploadボタンを押すと自動的に論理合成が行われ、合成が成功するとIcesugar-nanoに書き込みが行われます。

9zco1-uovw5.gif

上記のようにLEDが点滅したら成功です。デフォルトのブロックの他に有志でRISC-V等の様々なブロックが開発されているため、ブロックだけでちょっとしたFPGAの機能を実現できそうです。icestudioはまだ0.9.0ですが非常に完成度が高いと思いました。icestudioはもともとLinux環境でのFPGA開発環境のOSS、APIO等を開発してきたプロジェクトの1つで、以前からも注目していたため、今後のプロジェクトの発展が楽しみだと思いました。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2021年09月18日

USBカメラ接続

今回は昨年から試行錯誤しながら取り組んでいるプロジェクトを少し紹介します。組込系でカメラ機能を利用する場合、昨今ではOpenMVやM5Camera、ESP32-Cam等を利用することが多いと思いますが、いまいち継続的な入手性や汎用性に欠けます。


そこで汎用的なUSBカメラから取り込むことで汎用性高く実装することを検討しています。ただ、USBカメラはUVC(USB Video Class)という規格があるものの、非常に帯域を要するため、組込系では処理がギリギリです。また、USBカメラの機種やメーカによっても細かい挙動が異なるため、なかなか苦戦中です。

まだ動作に改善の余地がありますが、LCDに表示させてみました。


uvc1.jpeg


uvc2.jpeg

もともとはSTM32マイコンで実装予定でしたが、Isochronous転送が安定しないことと、、昨今の半導体不足で入手困難であるため、断念しました。FTDIのVinculum2ではRTOSのオーバーヘッドが無視できず、SPIの転送速度が遅すぎて断念しました。現状はPIC32マイコンで実装しています。

紆余曲折あって、苦戦していますが、もう少しファームの作りこみや動作確認を継続して、検討中のプロジェクトに組込たいと思います。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2021年06月26日

トランジスタテスタ

今回は先日、Aliexpressで購入したトランジスタテスタを紹介します。画面の大きさや表示画面の違い等でいくつか種類がありますが、今回購入したものはLCR-TC1です。

トランジスタテスタという名称ですが、MOSFetやダイオードや抵抗、コンデンサ等の特性をボタン1つで測定することが可能な万能テスタです。

img1.jpg

測定可能は範囲は下記の通りです。

トランジスタ電圧範囲0.01V~4.5V
ツェナーダイオード範囲0.01V~30V
コンデンサ25pF~100mF
抵抗0.01~50Mohm
インダクタ0.01mH~20H
電圧0.1~4.5V



折角なので内部を開けてみるとAtmega 324PAと電源系ICが乗った非常にシンプルな構成でした。電池は350mAhのリチウムポリマー電池を搭載していました。

img2.jpg

img3.jpg

FETではRds(オン抵抗)等も確認できるため、製品のバラつき等の確認できます。ピンアサインを忘れたFETやトランジスタのチェック、FETの故障有無の確認やコンデンサの容量チェック等、1台で多目的に使用できるため、電子工作に1台あると非常に便利です。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2021年05月29日

PIC32MX2XX RB5ポート注意点

先日、PIC32MX2XXシリーズを使用していて、RB5ポートの出力が意図通りに動かない問題に遭遇しました。今回はその原因と解決方法を紹介したいと思います。PIC32MX250F128BをターゲットにMPLAB X v5.45+Harmony3+XC32 v2.50を使用しています。


RB5ポートをHarmony3のPin SettingsでFunctionをGPIO、DirectionをOutに設定し、コード上でONにしましたが、RB5のみ2.2V付近の中途半端な電圧が出力されるのみで意図したIO変化をさせることができませんでした。

PinSetting.jpg


一般的なPICのGPIOポート設定でよくあるミスとして
・アナログ入力がONになっている(ANSELXが0でない)
・JTAGポートがONになっている(JTAGEN=ON)
・入力専用のポートだった
・OpenDrain設定だった(ODCXが0でない) or OpenDrain専用ポートだった
ということが多々あります。

今回は上記でもなく、MPUのエラッタと思い調べてみましたが、「I2C2モジュールが有効の場合にRB5、RB6がうまく動かない」というエラー以外はなく、I2C2を使用していないため、エラッタでもなさそうです。


データシートのピンアサインを調べてみるとRB5はUSBID用のポートとなっており、USBID関連の設定を見るとHarmony3のデフォルト設定が
USB USBID Selection bitがONとなっており、USBを使用していないにも関わらずデフォルト設定がONになっていることが分かりました。USB USBID Selection bit(FUSBIDIO) をOFFに設定すると意図通りにRB5のON、OFFができるようになりました。


USB_ID_DISABLE.jpg

USB機能があるPIC32MX2XXシリーズ固有の問題ですが、初期設定でUSB USBID Selection bitがUSB側になっているのは不親切だと思いました。ポートが意図した動作をしない場合はポートに割り当て可能な機能について設定状況を一折調べることが大切です。特にUSBやJTAG系の設定はGPIO設定とは設定項目が異なるため、見落としがちなので注意が必要です。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2021年03月06日

Nuclei StudioとGD32FV103試食

Sipeed Longan Nanoの開発環境の構築と試食としてUARTの出力について紹介します。Sipeed Longan NanoはRISC-VベースのマイコンGD32VF103CBT6を搭載した評価基板です。マイコン以外にLED、OLEDディスプレイやSDカードスロットが搭載されて1000円弱とお手頃です。

longannano.jpg

Sipeed Longan Nanoの開発環境として、VisualStudioCode+PlatformIOの組み合わせで使用する場合がほとんどだと思います。一方で開発環境のバージョン差による影響を抑えたい場合や社内利用で追加パッケージを入れずらい、入れられないといった場合があると思います。そのような場合におすすめなのがNuclei Studioです。GD32VFマイコンのアーキテクチャを開発しているNuclei社が無償で提供しています。Eclipseベースの開発環境でWindowsやLinux向けのインストーラが準備されています。STM32マイコンのSW4STM32やSTM32CubeStudioを使用したことがある方ならそのまま同じような感覚で利用することができます。

nuclei_studio.jpg

Nuclei Studioはこちらの公式サイトからダウンロードしてください。Zipを解凍してNucleiStudio内のeclipse.exeをクリックするとNucleiStudioが起動します。開発環境にサンプルプログラムが含まれているため、今回はサンプルプログラムベースにGD32FV103を試食します。まず、File→New→C/C++ Projectを選択します。


nuclei_studio_1.jpg


C Managed Buildを選択します。

nuclei_studio_2.jpg



適当なProject名を設定します。ProjectTypeにはNuclei SDK Project For GD32VF103 Socを選択しました。

nuclei_studio_3.jpg


 Board選択はgd32vf103v_evalを選択しました。

nuclei_studio_4.jpg

いくつかサンプルが準備されていますが、baremetal_helloworldを選択しました。他の設定は必要に応じて選択します。例えば、printfでfloat出力する場合は下記の様に対応するNEWLIBを選択します。

nuclei_studio_5.jpg

以降の設定はデフォルトのまま、次に進め、Finishをクリックします。

nuclei_studio_6.jpg

nuclei_studio_7.jpg


今回のbaremetal_helloworldはMISA情報をprintf出力します。今回はprintfの出力先をuart0に出力させます。プロジェクトフォルダ内のnuclei_sdk→SoC→gd32vf103v_rvstar→Includeのnuclei_sdk_hal.hをクリックし、下記を書き換えます。

GD32_COM0
から
USART0
に設定します。

また、main.cのグローバル関数に下記を追加します。
void usart_init(void) {
 rcu_periph_clock_enable(RCU_USART0);
 rcu_periph_clock_enable(RCU_GPIOA);
 gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
 gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
 USART_BAUD(USART0) = (58 << 4) | (10 << 0); //115200bps@108MHz
 USART_CTL0(USART0) = USART_CTL0_TEN | USART_CTL0_REN;
 USART_CTL0(USART0) |= USART_CTL0_UEN;
}

main関数頭に
usart_init();
を追加します。

書き換えたコードを保存して、Ctrl+bでプロジェクトをビルドします。Debugフォルダ内にプロジェクト名.hexファイルができているはずです。

書き込みツールは「GD32 MCU Dfu Tool_vXXXX」をダウンロードします。ファイルを7Zip等で解凍し、フォルダ内のドライバGD32 MCU Dfu Drivers_vXXXX.exeをクリックし、ドライバをインストールします。

nuclei_studio_8.jpg

GD32 MCU Dfu Tool_vXXXフォルダ内のGD32 MCU Dfu Tool.exeをクリックし、書き込みツールを起動させます。アップデート有無を聞いてきますが、いいえを押して無視します。Sipeed Longan NanoとPCをUSBで接続し、BOOTボタンを押しながらリセットを1秒程度押してから離すと書き込みモードになります。スイッチのチャタリングなのか、書き込みモードに入っても書き込みに3回に1度ほど失敗します。そのような場合は再度、Resetボタンでリセットさせてから、書き込みモードにして書き込みを行います。認識するとDFU Deviceにデバイスが自動で「GD DFU Device1」といった表示がされます。

nuclei_studio_9.jpg

Download to Deviceにチェックを入れて、Openで先ほどのプロジェクトフォルダ内のDebugフォルダ、***.hexファイルを選択し、画面下のOKボタンを押すと書き込みが開始されます。100% Download successfully!が表示されれば書き込み完了です。Resetボタンを押すとコードが実行されます。

USBシリアル変換アダプタ等をSipeed Longan NanoのT0、GNDを配線してTeraterm等で開くと出力結果を確認できます。サンプルプログラムをベースに簡単にprintf出力することができました。J-tagのデバッガなしでも本体のみでUSB経由で書き込めるのは非常に楽だと思いました。今後はデバッガーを使ったデバッグ方法やSPI、I2C等のペリフェラル機能を使ってみたいと思います。

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