2020年07月11日

iCE40HX8K RISC-V導入

今更な感じもしますが、命令セットアーキテクチャ (ISA)がオープンとなっている RISC-Vを試食してみました。ターゲットはiCE40-HX8Kを用いて、こちらのサイトの手順を参考に試食してみました。

手順についてはサイトに詳細に書かれているため省略しますが、hx8kdemoを実装した際のビルド結果を下記に記します。

=== hx8kdemo ===
Number of wires: 4536
Number of wire bits: 9050
Number of public wires: 4536
Number of public wire bits: 9050
Number of memories: 0
Number of memory bits: 0
Number of processes: 0
Number of cells: 7053
SB_CARRY 961
SB_DFF 175
SB_DFFE 651
SB_DFFESR 538
SB_DFFESS 58
SB_DFFNSR 4
SB_DFFSR 216
SB_DFFSS 6
SB_IO 4
SB_LUT4 4434
SB_RAM40_4K 6

サンプルコードでは約7000セル、LUTは約4500個の使用率でした。


RISCV.jpg

iCE40-HX8KのUart機能を使用してTeratermから動作確認ができました。picorv32/picosoc内のfirmware.cがデモのソースコードとなっています。

ファームのみのビルドする場合は下記のコマンドでビルドできます。
make hx8kdemo_fw.elf

ファームのみの書き込みする場合は下記のコマンドで書き込みできます。
sudo make hx8kprog_fw

iCE40-HX8Kで試食する前にMACHXO3でRISC-Vの実装を検討しましたが、そのままではRAM容量やクロックが確保できず諦めていました。海外等では工夫してMACHXO3でRISC-Vを実装した例がありましたが、コードが公開されていませんでした。最近、MACHXO3の新シリーズのMACHXO3DでLatticeが公式にRISC-VのIP Coreを公開されました。3.3Vで駆動可能なMACHXO3はiCE40-HX8Kよりも魅力が大きいため、今後、MACHXO3Dの評価ボードで試食してみたいと思います。

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

2020年07月04日

ライブラリ追加方法

今回はEclipseベースの開発環境(SW4STM32、STM32CubeIDEなど)でリンカライブラリ(*.lib)ファイルや静的ライブラリ(*.a)ファイル等のライブラリを追加する方法について紹介します。

すべてのコードが公開されている場合はリンカライブラリ(*.lib)ファイルや静的ライブラリ(*.a)ファイル等を読み込む必要はありませんが、コードが公開されていない場合にメーカ等からリンカライブラリ(*.lib)ファイルや静的ライブラリ(*.a)ファイル等のみ提供される場合があります。このような場合にライブラリを追加してリンカ生成時にユーザー側のコード内の関数と結合させてバイナリファイルを生成します。


@ライブラリ配置
 今回はプロジェクトフォルダの直下にライブラリファイルを置きます。

Aライブラリ追加設定
 プロジェクトファイルのプロパティを開き(Alt+Enter)、「C/C++Build」の「Settings」、「Tool Settings」「MCU GCC Linker」内のLibrariesから追加します。

img1.jpg


 まず、「Library search path」の設定を下記のように設定し、プロジェクトフォルダ直下を見に行く設定にします。

"${workspace_loc:/${ProjName}}"

 また、追加したライブラリを「Libraries」に追加します。ここでポイントはライブラリ名の前に「:」を追加する点です。

:***.LIB

img2.jpg

Bヘッダファイル追加
 ライブラリファイル内の関数を定義しているヘッダファイルを必要に応じて追加します。プロジェクトフォルダ内のIncフォルダに追加します。

Cその他
 ライブラリファイルが特定のArmコアに依存している場合、下記のようなビルドエラーが発生する場合があります。下記のエラーの場合はライブラリファイルがFPUなしのMPUをターゲットにしているため、FPU有のMPUでビルドしようとして発生するエラーです。このような場合はライブラリをFPU対応に書き換えることは難しいため、FPUなしとしてビルドします。

/bin/ld.exe: error: *.elf uses VFP register arguments *.o does not
/bin/ld.exe: failed to merge target specific data of file *.o

 プロジェクトファイルのプロパティを開き(Alt+Enter)、「C/C++Build」の「Settings」、「MPU Settings」内の「Floating-point ABI」を「hard」から「soft」に切り替えます。

img3.jpg


メーカからすべてのコードや情報が公開されている状態が理想的ですが、様々な制約で公開されていない場合はこのような方法で組み込むことができます。

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

2020年06月27日

Nucleo144 Memory Shield

大容量のデータをマイコンで扱う場合、一時的なデータ保存に揮発性のSRAMやSDRAM、バックアップデータに不揮発性のNAND FlashメモリやNOR Flashメモリを使うことが多いと思います。不揮発性のデータの場合、仕様によってはSDカードを使うこともあるかもしれません。また、昨今はSPI接続の大容量PSRAMも増えています。そのような中でメモリを選択する場合、容量拡張性や部品供給安定性を考慮するとパラレル接続のメモリを選択することが多くなります。一方でSTM32マイコン等でもパラレルメモリを搭載した評価ボードは一部のEvalボードにSDRAMが搭載されるくらいでSRAM、NOR Flash、2つのSDRAM、2つのSRAMといった評価まで対応したボードがありませんでした。

そこでNucleo144のメモリシールドを設計してみました。一般的なパラレル接続のメモリに対応しており、SDRAM x2、SRAM x2、NAND Flash x1、NOR Flash x1を搭載しています。STM32H743Zをターゲットに設計しましたが、他のSTM32F743といったボードでも利用できると思います。なお、Nucleo144の外側のCN11とCN12のみ使用しています。内側のCN7、CN8、CN9、CN10はボードのレビジョンによってピンアサインが異なるため使用していません。

ターゲットとしているフットプリントとメモリは下記の通りです。

SDRAMx2TSSOP-U 54ピンMT48LC16M16A2P
SRAMx2TSSOP-U 44ピンCY62157EV30LL
NOR Flashx1TSSOP-T 56ピンMT28EW512A
NAND Flashx1TSSOP-T 48ピンMT29F8G08A

SDRAMやNAND Flashはピンアサインやフットプリントがほぼ統一されているため、他のメモリでも動作すると思いますが、SRAMやNOR Flashはメーカによってパッケージが様々でピンアサインも異なる場合があり注意が必要です。ただ、多くはデータやアドレスピンの順番が互い違いになっているだけのことが多く、フットプリントが同じで一部の順番が互い違いあれば、異なるメモリの場所に互い違いに保存されるだけで動作上は問題ありません。


ns.jpg

実際に基板に実装してSDRAM x2とNAND Flash x1の動作確認ができました。

mem-shield.JPG

必要な配線はNucleo144の外側のCN11とCN12のみ使用しています。内側のCN7、CN8、CN9、CN10にピンを立てる必要はありません。また、CN11、CN12の片側のGNDはピンがデフォルトで立っているため、当該箇所のソケットを除いて実装しました。

今後、SRAM x2 NOR Flashの動作確認を行い、問題なければこちらで基板のデータの他にCubeMXのプロジェクトファイル、コードを合わせて公開したいと思います。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2020年06月13日

オーディオADコンバータCS53L30

以前に紹介したUSB-I2S変換IC CP2615に接続するオーディオ用のADコンバータ、Cirrus Logic製CS53L30について紹介します。

CS53L30はTDM or I2S接続のオーディオ用ADCです。24bit 48kHzのサンプリングレートに対応しています。また、最大4つのアナログマイクorPDM出力のデジタルマイクを接続可能です。なお、4つのマイクを同時に使用するためにはTDM接続か、2チャンネルのI2S接続が必要です。I2S変換ICのCP2615は1つのI2S入出力を備えるため、CS53L30とCP2615の組み合わせでは左右2つのマイク接続となります。

デジタル入力、アナログ入力の切り替え、アンプ増幅ゲイン、サンプリングレート等の設定はI2Cを介して設定します。CS53L30のI2Cを介した設定の注意点として、各レジスタの値書き換え、値読み込みは1byte毎に行う点です。連続でレジスタの値書き換え、値読み込みはできません。よくあるI2Cデバイスの場合、デバイスアドレス、レジスタアドレス、データの順にデータを送った後にそのままデータを送ると、自動的にレジスタアドレス+1されて値の書き換えや読み込みが可能です。CS53L30の場合、自動的にレジスタアドレスがインクリメントされません。最後の値が適用されます。この仕様に気づくまで意図した設定が有効にならず、苦戦してしまいました。


ブレッドボード上でCS53L30とCP2615を組み合わせてPDMデジタルマイク、SPH0641LU4H-1を2つ接続し、USBステレオオーディオとして音を取り込むことを確認することができました。PDMデジタルマイクの評価検討用の基板としてCS53L30とCP2615を組み合わせてUSB-PDM変換基板を設計してみました。CP2615を利用することで接続すると自動的にUSB標準オーディオデバイスとして認識されます。PDMマイクを接続することで簡単にPCやMac等のオーディオ入力に変換することができます。CP2615のパラメータを書き換えることでアナログマイクを接続したり、ゲインやフィルタを設定することもできます。


usb_pdm.jpg

USB-PDM変換基板の検証が問題なければ、諸情報を公開したいと思います。
posted by Crescent at 00:00| Comment(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2020年06月06日

高感度磁界センサDRV425

今回はTI製高感度磁界センサDRV425について紹介します。通常のホール素子やホールスイッチよりも非常に高感度で±2mT、帯域最大47kHzで磁界をアナログ出力を得ることができます。また、DRV425に接続するシャント抵抗を変更することで感度を調整して、より高感度(データシート上では±0.1mT)に設定することができます。

用途としては電流センサや磁石検出、位置センサの用途を想定しているようです。今回はDRV425の評価ボード、DRV425EVMを使用して簡単な実験をしてみました。

DRV425.JPG


DRV425EVMはデフォルトの感度設定は±0.5mTとなっています。±0.5mTの場合、1mT/3.3V=0.3mT/Vとなります。一方、日本の地磁気は45uTとなるため、0.33Vの範囲で出力されると予想されます。DRV425EVMを回転させてオシロで観察してみました。

rotate-range.jpg

ほぼ0.33Vのレンジで出力されており、地磁気も検出できる感度であることが分かりました。



続いて、ネオジム磁石NE099(表面磁束140mT)を近づけて検出範囲を調べてみると70mm前後の離れた10mm前後動かすと100mV程度の変化を捉えることができました。

osc-range.jpg

DRV425は非常に高感度で感度調整が可能な使いやすい磁界センサだと思いました。ただ、電流センサとして使用する場合はデータシートにも記載されていますが、2つDRV425を使用して地磁気をキャンセルさせるように差動で構成しないと、設置向きによって地磁気の影響を受けてしまいます。

cs.jpg

DRV425を使いやすく固定穴をつけたボートを作成してみました。設計したボードで評価を行い、問題なければ、諸情報を公開したいと思います。

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