2020.08.08

SmartLynqの解析

SmartLynqを分解したら、UARTとJTAGと思われるコネクタにUARTとJTAGを接続しましょう。

Smljtag

今回はTrenzElectronic社のTE0790-03を使いました。TE0790-03はUARTとJTAGの両方が1つのUSBで作れるから便利ですし、MITOUJTAGからも使うことができます。

 

さて、起動してからUARTに表示される文字を見てみると、

なんとベアメタルなアプリケーションで作られているようです。

Linuxではない。U-Bootすら使っていないようです。

それなのに、EthernetもUSBも実装するとは、なかなかやるな。

Uart_20200809052001

起動が速いから、2秒くらいでOLEDに文字が表示されるわけだ。

 

さて、JTAGをつないだらMITOUJTAGをつないで見てみましょう。BGAの端子がViaに出ているので、JTAG信号のピン配置を見つけるのはそれほど苦労しませんでした。

ちゃんと、ZYNQの動作が見える🤔

Mj_slq

ZYNQが起動した直後のMIOの波形を解析したところ、

Mio

UARTの表示からはEMMC BOOTという文字が見えますが、JTAGロジックアナライザの解析結果では、

  • リセット時のMIO[8:2] = 1101000 → QSPIブート。MIO電圧=1.8V
  • MIO[6:1]→QSPI
  • MIO[9:8]→UART1
  • MIO[27:16]→Ether0
  • MIO[39:28]→USB0
  • MIO[45:40]→SD0
  • MIO[53:52]→I2C1 (OLED用か?)

となっていることが分かりました。いずれ、このピン配置でZYNQのデザインを作ってオリジナルのブートファイルに書き換えてみましょう。

なお、詳しくは書きませんがMIOとPLの端子が相互に接続されている箇所(もしかするとプロテクト?)らしき箇所も発見できました。

 

それから、一昨日の記事を訂正します。

USBを差し込んでもドライバのインストールが始まらないと書きましたが、どうやら知らないところでUSBのドライバがインストールされ、このSmartLynqはUSBイーサネットとして認識されていたようです。

だから、LANケーブルをつながなくても、USBだけで使えるのです。

Smj

OLEDに表示されていた「10.0.0.2 U」という表示は、このUSBイーサネットのIPアドレス意味していたようですね。

USBで接続すると、SmartLynqがDHCPサーバになって、ホストPCに対してネットワークアドレスを割り当てるようです。

Dhcp

想像以上にすごいぞ!SmaryLynq!!

そのときのUARTに表示されたログを示します。

Loaded MAC Address from EEPROM
TCF 21:51:52.031: Cannot read config.ini: No such file or directory
TCF 21:51:52.031: property get ip-mac (default)
TCF 21:51:52.031: property get ip-gw-mac (default)
TCF 21:51:52.031: property get ip-address (default)
TCF 21:51:52.032: property get ip-gateway (default)
TCF 21:51:52.032: property get usb-mac (default)
TCF 21:51:52.032: property get usb-gw-mac (default)TCF 21:51:52.032: property get usb-address (default)
Setting up Ethernet link.
ETH MAC address: 00:0a:35:XX:XX:XX
TCF 21:51:52.032: property get jtag-clock-frequency (default)
TCF 21:51:52.032: property get jtag-clock-skew (default)
TCF 21:51:52.083: Cannot create HTTP server: Invalid transport name
USB serial number 8672503XXXXX-XXXXX
USB: set interface: 0 1
USB: set interface: 1 1
USB: link up, DHCP 0
Interface un1 is up, IP address: 10.0.0.2
TCF 21:51:52.595: DHCPS: REQUEST 10.0.0.1
TCF 21:51:52.595: DHCPS: ACK 10.0.0.1

なお、TCFというのは、XILINXのJTAGサーバ(hwserver)のことです。

USBイーサとか、GigabitEtherとか、作りこみが凄すぎます。

| | コメント (0)

XILINXのSmartLynqを分解してみた

SmartLynqの動作が確認できたので、さっそく分解してみます。

Image8

まず、目につくのは大きなZYNQです。XC7Z010のCLG400でしょう。

その下にあるDDR3 SDRAMはMicronのDeviceLookupを使うとMT41K128M16JT-107:Kと出ました。1個あたり256Mバイトでx16のデータ幅。2個で512Mバイトでx32のデータ幅のシステムとなります。DDRの配線も真面目に等長配線しています。

Ddr3_20200808154701

ZYNQの左側にあるMicronの石は、eMMCで8GByteの容量のもののようです。

ただし、Winbondの25Q128FWというQSPI ROMも乗っているようなので、ブートはこのROMから行い、データ用にeMMCを乗せているのかもしれません。

Image7

基板右下にある4ピンのピンヘッダはUART(オシロで見ると115200bps)で、左下にある6ピンのコネクタはJTAGのようです。これは明日、解析することにしましょう。

基板を裏返すと、教科書のようなBGAのパターン設計が出てきました。

 

Image9

ユーザガイドで示されているような、真ん中を1列あけて端にずらすビアの打ち方です。

 

| | コメント (0)

2020.08.06

XILINXのSmartLynqを購入

XILINXのSmartLynq(スマートリンク)を購入しました!

SmartLynqというのは新しいXILINX純正JTAGケーブルで、6万6千円くらいです。

超高速という噂を聞きつけて買ってしまいました。

いざ開封!

Sl1 

まずは、この袋。中にはフライリードケーブルと、14ピンのリボンケーブル、それからGPIO用のケーブルが入っています。

Sl2 

ふむふむ。SmartLynqはJTAG以外にGPIOもついているんですね。

ACアダプタはこれ。ちっ!PSEが付いてやがる。ちゃんとしてるじゃねーか。

Sl3

ただ、12Vというのがおっかなくてしょうがない。

SmartLynqが電源12Vを必要とするわけではなく、5Vでもいいようなので、このACアダプタはお蔵入りですね。

そして、本体。

Sl4 Sl5 Sl6_20200808151401

Powered By ZYNQと書いてあることから、中にはZYNQが入っていて、おそらくXILINX TCF Serverを実装していて、Vivadoからリモートサーバとしてつながるようになっているのでしょう。

裏面にはシリアル番号やMACアドレスが書かれています。これを製造した会社はwhizzsystems.comというところなのでしょう。

Sl8

 

さて、電源を入れています。付属のACアダプタは12Vで怖くて使えないから、USBから給電します。

 

USBをPCに挿してもドライバのインストールは始まりません。何かがおかしいのですが、まぁ、いいでしょう。

最初は下の写真のように10.0.0.2というIPアドレスが表示されていますが、

Sl9

そのうちDHCPでアドレスが取得されます。

Sl10

このアドレスを見て、Vivado(ここでは2018.3)を起動して、Hardware TargetをRemoteにして、IPアドレスを入れると認識されます。

Sl7

最初の接続ではファームウェアを更新しますというメッセージが出て、BOOT_SAFE.BINというのを転送していました。

この転送が終わると本体ディスプレイの表示が2018.3に変わりました。(購入時の状態では2017.3だったはず)

「10.0.0.2 U」という表示は、おそらくDHCPでIPアドレスを取得できない環境のために、SmartLynq自体がDHCPサーバになって書き込み用PCがDHCPクライアントになるというためのものなのでしょう。

実際のターゲットにつないでみると、Remote ServerのTCPのポート3121でちゃんと認識されました。

Sl11

赤や黒のPlatform Cable USBと比較はしていませんが、体感速度的にはめっちゃ高速です。

ディスプレイの表示は

  • 10.0.0.2 U → SmartLynqがDHCPサーバになっている場合のステータス
  • 192.168.1.15 E → SmartLynqがDHCPクライアントになって取得したアドレス
  • VREF NA 1 → VREFの状態。Vivadoを起動するとNA→OFFまたはONに変化する
  • 2018.3 → ファームウェアのバージョン

という感じだと思います。

 

| | コメント (0)

2020.07.16

複数のOPアンプにオフセットを与える回路

マルチチャネルなオフセット付きアンプを設計しています。

0V~2Vの振幅の信号を-1V~1Vにレベルシフトする回路なのですが、オペアンプの+側入力にDC1Vのオフセットを与えるというものです。

単純に書けば下の図のような回路になります。

Op_shift

(この回路は出力にもオフセットが乗ってしまうので結局のところオフセットは除去されないのですが、話を単純化するためにこのまま進めます。)

これをマルチチャネルにしたい場合、OPアンプの+側に基準電源を共通につなぐことになりますが、お互いのチャネルで干渉しないでしょうか?

Op_shift2_20200716153301

結論を言うと、干渉します。

なぜならば、OPアンプの+入力とー入力間のインピーダンスは意外と低いからです。

OPアンプの入力インピーダンスが極めて高いというのはGNDに対してであって、現実のOPアンプでは+入力とー入力の間はつつぬけなのです。

下の表はOPA211のものですが20kΩしかありません。

Op_shift3

+入力を固定しているつもりでも、-入力から回り込んだ電圧によってわずかに揺さぶられ、それがもうひとつの回路に伝わります。

入力抵抗を調整すれば減らすことはできますが、-50dBくらいまで回り込んできます。

Op_shift4

基準電圧源を別のOPアンプなどで作っている場合、電圧源のインピーダンスは0にはならないので、出力から-入力に回り込んだものが+入力に回り込み、それがもう片方のチャネルに乗ります。

実際の回路は完全差動アンプを使って作ることになりますが、オフセット電圧源を共通のOPアンプから取ってしまうと、

Op_shift9_20200716154101

下の図のように激しく漏れてしまいます。

Op_shift7

別々のOPアンプから取るようにすると、

Op_shift5

当然ながら全く漏れません。

Op_shift6

完全差動アンプの場合、+入力もー入力も帰還がかかっているので、さらに激しく漏れてしまいます。

 

結論を言えば、オフセットを与える回路はチャネルごとに分離しなければ、互いに信号が漏れてしまいます。

オフセットを与えるOPアンプは安物ではだめで、ノイズ特性は効いてくるし、周波数特性が低いと広域のゲインが下がってしまうのです。コストは高くなりますが、仕方がないですね。

 

| | コメント (0)

2020.07.15

Trenz社のTEI0009-02-055-8CAを入荷しました

TrenzElectronic社のTEI0009-02-055-8CAを入荷しました!!

https://www.trenz.jp/product/TEI0009-02-055-8CA

TEI0009は、IntelのCyclone10を搭載した評価ボードで10CL055YU484C8Gを搭載しています。

Tei0009020558ca_2

特徴としては、

  • Arduino互換のピンヘッダー
  • 6個のPmod互換ピンヘッダー
  • 1個のGroveコネクタ
  • VGA用のD-SUBコネクタ
  • 256 MBit SDRAM
  • 128 MBit ユーザーQSPIフラッシュメモリ
  • 64 MBit HyperRAM
  • 2個のイーサネットPHY(10/100 MBit/s)
  • 内蔵リファレンスを備えた8チャネル、12ビット ADC/DAC

を備えたボードです。

気になるJTAGは、ArrowのUSB Blaster互換のものが搭載されていると推測されます。そのため、Qualtusからそのまま書き込みができるはずです。

製品箱の内容物はこんな感じです。

Tei0009_1

お客様からのリクエストで取り寄せた際に、せっかくなので1個多めに入荷しています。

1個なら即納可能です。

ご興味おありの方はぜひともご購入ください。

https://www.trenz.jp/product/TEI0009-02-055-8CA

数がまとまれば再び入荷します。数がまとまらなくても適宜入荷しますので、Intel FPGA好きの方はぜひどうぞ!

| | コメント (0)

2020.07.14

Cosmo-Z Miniのソースを公開しました

お待たせいたしました。

Cosmo-Z MiniのFPGAのソースコードを公開します。

再ビルドを行うにはVivado 2018.3を使います。異なるバージョンのVivadoの場合はご相談ください。

まず、下記のページからソースコードをダウンロードします。

https://www.tokudenkairo.co.jp/login2/download.php

Downloadable

https://www.tokudenkairo.co.jp/login2/getfile.php?target=CosmozFPGA2019

Cosmo-Z Miniのソースコードがダウンロード可能にならない場合は、ライセンスページからライセンス番号を登録します。

ダウンロードすると下の図のようなフォルダが現れます。

Cosmo-Z/Cosmo-Z MiniのソースコードにはVivadoのプロジェクトは含まれていません。Vivadoプロジェクトはサイズが大きくなるので、最小限のテキストファイルとプロジェクトを生成するためのTclが入っています。

Cszm_src1

これを利用してプロジェクトを再生成するには専用のTCLスクリプトを使います。

このフォルダの中にあるSETTINGS.CMDをメモ帳か何かテキストエディタで開きます。

@SET VIVADO_PATH=D:\Xilinx\Vivado\
@SET VIVADO_VERSION=2018.3

1行目はVivadoをインストールしたパス、2行目はVivadoのバージョンです。

そうしたらopen_project_gui.cmdを実行します。

すると、ソースからプロジェクトが作られ、ブロックデザインが再現されるというしくみになっています。

Cszm_src2

ビルドする際にGenerate BitStreamをやってもいいのですが、TCLコンソールにNahiRunと入力してENTERを押したほうがいいでしょう。

NahiRunコマンドを使うと、コメントからのIPのパラメータ設定が反映されるほか、BitStreamファイルがvivadoプロジェクトの一つ上のフォルダにコピーされるので探しやすいでしょう。

最初の1回目のビルドはIPの生成を行うので時間がかかります。2回目からは早くなります。

ビルドが終了したらmkbootフォルダを開き、mkboot.binを実行します。

Cszm_src4

これでboot.binが出来上がります。

 

そうしたらCosmo-Z MiniとホストPC(Windows)をLANで接続し、エクスプローラで\\cszmini を開いてそこにboot.binをコピーします。

Cosmo-Z Miniにログインしたら、rootで

cp /home/share/boot.bin /mnt

と入力します。これで

 

 

 

 

 

 

| | コメント (0)

USBテストプログラムのDLLにVCランタイムが入っていなかったので修正しました

5月12日に公開したC#版、USBテストプログラムを更新しました。

あるお客様からDLLの読み込みでエラーが発生するとのご連絡をいただきましたが、調べていくと、DLLの中でvcruntime140.dll等を要求しており、それがDLLに含まれていなかったので、Visual Cのランタイムが入っていないPCで動作させると下の図のようなエラーが出てしまうようでした。

Usbddr_err

Visual C++でEXEやDLLにランタイムを埋め込むには、構成プロパティ→C/C++→コード生成の中のランタイムライブラリを「マルチスレッド(/MT)」にすればよいようです。

Vc_runtime_include

DLLのサイズは153kB→776kBに増えました。

C#のアプリケーションのほうは.NETで動いているので別途ランタイムDLLが必要ということは特になかったのですが、DLLのほうはC++で作っていたためDLLにランタイムを入れておかなければいけなかったようです。

 

| | コメント (0)

2020.07.12

JTAGチャレンジ基板を発売開始しました

大変お待たせいたしました。

JTAGチャレンジ基板を発売開始しました。

JTAGチャレンジ基板というのは、XILINXとALTERAのFPGA/CPLDがJTAGチェーンにつながっていて相互に接続されている評価ボードなのですが、回路設計者・基板設計者が陥りがちなミスが故意に仕込んであるため、出荷時の状態では正常に動作しないようになっています。

このハードウェアの設計ミスをJTAGツールを使って1つ1つ発見し、解決することにより、回路設計や基板設計スキルが身につくというボードです。

Jcha_20200714183801

この基板は2018年度のセキュリティ・キャンプ全国大会でのJTAGセミナーや、その後に2018年9月に弊社で行われたプライベート・セミナーで使用されたもので、その時の講演内容をベースに取扱説明書を作成しました。

コロナ禍により顔を合わせてのセミナーはしばらくは実施できそうにありませんが、この基板をご購入いただくことで、当時のテキスト等をベースにJTAGの実践的なテクニックが学べます。ご不明点は弊社までメールにてお問合せいただければ丁寧に解説します。

Jcha_contents

詳しいことは

http://www.tokudenkairo.co.jp/jtag/jcha.html

のページをご覧ください。

なお、計7台の在庫があったのですが先週に2台出荷したため、残りは5台となっています。

在庫がなくなったら新しいロットを製造しますが、弊社はシャッチョ一人体制で運営しているためマンパワーが慢性的に足りません。次の製造まで1か月以上かかると思います。

どうかお早めに。

| | コメント (0)

«Visual C#に対応したUSBテストプログラムを公開しました