2018年12月15日

JMS578/JMS567 USB3-SATAブリッジ

JMS578/JMS567 という USB3-SATAブリッジチップがある。USBディスクなんかでよく採用されてて有名なもの。まともなデーターシートなど入手できないが、回路図はあるのである。JMS578 は、ODROID-HC1/HC2 で採用されていて、その回路図に載っている。(QFN48) 。JMS567 は、NanoPi NEO/NEO2 用の NAS キット (QFP-48)。

どうやらこれも SPI-FLASH が必要で やはり 64KB (512kb) 。採用されているのは、Pm25LV512, MX25L512E 。ODROID-HC1/HC2 採用の JMS578 は、アップデート・ファームウェア(ROMファイル)と Linux の書き換えツールがある。JMS567 は分からない。ファームウェアのアップデートはあり、PC に一回接続すれば、PC のツールが使えるようだ。

さて、JMS578/JMS567 は単体で入手できる。要するに USB3-SATAブリッジを自作することは可能である。

    JMS578/JMS567 48pin は、ピンアサインがほぼ同じである。ただし、2つの回路図で、MODE0,1 が違い 水晶が 25MHz/30MHz という違いがある。USB2 専用/USB3 という違いもあり MODE が水晶選択だけかどうかは未確定。なお、JMS578 は、0.4mm ピッチ QFN しかない。ハンダ付けが無理。

安価に売っているものをなぜわざわざ作りたいのか? というと ちょっと変わったものを作れないかなと。




USB3.0 は、USB3 の通信と USB2 の通信の 2系統の通信経路がある。 USB2 のほうをちょいと切り替えて、他の SBC で使えないかな?とふと思ったのである。無茶な話だと思うのだが、調べてみないことには。

ブロック図を見てみると・・・USB3 と USB2 の PHY が独立でバスに接続されている。まさか、独立して操作できるとも思えないが・・・ファームウェアの実装次第なのかも。

もしできるとすれば、面白い。SAS ディスクでしかできないようなことが、一応できるのである。

最初の疑問 -- ひょっとして USB 2 のポートを接続しなくとも、デバイスが認識されるのか?

USB 3 のポートしか使用しないのであれば、はなから配線しない。USB 2 のポートは、別のコネクタに配線することが可能ではないか。(まぁ、もしそうだとしても、USB 2 を物理的に切り離すことを考えておかないといけないだろう。)

USB 3.0 specification を眺めれば、完全に経路は別。HOST 側は、最初に USB 3 のポートへの接続を試みて、Link 出来たら、それだけ使うような気がする。

次の疑問。そうだとして、USB 3 のポートを使用している間も USB 2 のポートは使えるのだろうか? 出来ないようにも思うが、わざわざ出来ないようにするのも・・・という気もする。



別にできなくとも・・・という気もする。遅いパスを積極的に使わなくても良いではないか。活躍するのは、なんらかの理由で、USB 3 のポートに接続している SBC が動かなくなったときである。そのときに、USB 2 のポートが利用できれば良い。

いやいや。是非とも同時アクセスが可能であって欲しい。どう利用するかなぞ後の問題である。高級機にしかない機能を安価に作る。それが出来れば満足である。

    本来ならば、SATA のポート・セレクタを使うべきところである。しかしそんなものは、一般のニーズがなく流通していない。JMB572 とか 1-2 ポート・マルチプライヤ だが、2-1 ポート・セレクタの機能もある。2.5 インチ HDD サイズに msata x2 を載せるとか、M.2 x2 載せるとかするボードに使われてたりして安価そうな気がするが、ポート・セレクタと使われている製品はあるのかどうか?

    とにかく、2 つのホストからアクセス可能な製品は、ハイエンドしかないのである。安価に実現できるものならば、是非とも試してみたいのであった。




ところで、BUS スイッチについて。USB 2.0 を切り替える アナログスイッチは購入できる。それどころか、SATA や、PCIe の速度にも対応している製品がある。それなりに高価だったと思うが、それ以上に問題なのは、小さくてハンダ付けできない・・・ということである。これに比べれば、0.5mm ピッチの QFN など楽勝に思えるのである。

普通のアナログスイッチで、USB 2.0 ぐらいは通せないだろうか?例えば、74VHC4053 。スペックを見れば無理そうなのだが、ひょっとしたらいけるかも知れない。

ハンダ付けできなければ、構想倒れになってしまうので、重要な要素、先に実験してみたい。

・・・とか思い込んでいたのだが、USB2.0 ならば TSSOP14,16 のパッケージがある!。

 ・TC7USB42FT,TC7USB40FT,TC7USB221FT(EOL), FUSB22(16pin)

このうち、今だけ送料無料の RS-online で買えるのは、EOL(End Of Life) の TC7USB221FT であった。

とりあえず、TC7USB221FTで考えてみよう。

    電源電圧は、3.6V までだが、最大定格は 4.6V 。TC7USB42FT,TC7USB40FT は、4.3V までで、最大定格は 4.6V 。

    -3 db バンド幅は、TC7USB42FT,TC7USB40FT が 1.5GHz , TC7USB221FT は 750 MHz 。使えないかと書いた 74VHC4053 は、4.5V 時 280MHz 。ダメそうにも思うが -3db 落ちるだけである。デジタル信号だし、実は使えるんじゃないの?という気もする。

USB3 を Aポート、USB2 専用を Bポートとする。S が L になったら、Bポートを選択。S を L にする条件は、1) Aポートの VBUS が来ていない。2) Bポート側 SBC の GPIO が L 。

Aポートを選択と書いたが、Aポートは USB に接続しなくても良いかも知れない。パターンカットできるように考えておこう。

    いや違う。望ましいのは、Aポートを無接続、Bポートのみ配線で、A側から Bポートの使用を禁止できるという制御。保険として、ジャンパすれば 禁止したときAポートに接続できる。

    たから S をプルアップしておいて、A側の GPIO を L にすれば切り替えで良い。

VCC は、どうするのか?悩ましい。ダイオードで、0.6V 落ちるとすれば、4.4V 。LDO はちょっと厳しいが、なしだとちょっとまずそう。ここは、DC/DC コンバータにするか。duty 100% までサポートするタイプなら、ぎりぎりまでいけそう。

12V 電源ということにして、A と B の電源を ダイオードを通して使うのはどうか? 3.5inch DISK に使えるし、モーター用なら ダイオードの電圧降下などどうということはない。別に2電源にせず、専用でも良い。USB コネクタの VBUS は、電源が入っているかどうかのチェックにだけ使う。

BUS スイッチは、買ってしまった TC7USB221FT を3.3V で。裏面に 74VHC4053 のパターン。これを 5V でつかう。

コネクタだが、USB3 の方、Type C にしたいところだが、無理。基板が作れない。どうするかというと、USB3.0 micro-B 。丁度 micro usb が2つ連なったような形状のもの。



DP_USB_SATA.png

だいぶ形になってきた。しかし・・・
USB-SATA-cheap.jpg

自作というのは、随分とお金がかかる。このボードなど明らかに JMS567/578 だが、$3 前後。ケーブルだけで $1 ぐらいなので、実質 $2 。うーん、ひとつサンプルに買ってみるか。

    このボード良く見ると、安物の巻き線インダクタではなく、チップインダクタを使ってる。バッタ品だから安いのであって、元は少し高いのかも。
    あと、USB3 の内側の配線にのみ、コンデンサが。コネクタの信号名は TXP/TXN で PCIe のルールだと送信側にのみコンデンサを入れる。しかし TXP/TXN は、デバイス側から見た信号名なのだろうか?・・・というとそのようだ。PCIe のルールと同じようである。
    他にも参考になることがある。REG_IN -- 内蔵DC/DC コンバータへの入力だが、VBUS を直接入力しているようだ。参考回路では ダイオードを通して入力したりしてたので。
    また、MODE1 は明らかに GND で、MODE0 は明らかに GND ではない。01 とうことで Nas-DOCK と同じ。水晶は 25MHz 。
    パターンを見ると NC がすくない。このことからも JMS567 だと判断できる。

USB-SATA-cheap2.jpg

ところで、この昔からあるアルミのケース。ケースだけ使いたい。入らなくて当然なのだが、コネクタ位置とか、基板幅を合わせておきたい。ちなみに、値段は、$3.2 。国内でも、(あれば)500 円以下じゃないかと思うが、青が欲しい。

基板幅は、HDD よりわずかに大きい 70mm 幅にしている。SATA コネクタは、中心が 4.8mm 上にずれる。そうしたつもりが、明らかに間違っている。



DP_USB_SATA-v1.2a.png

発注した後にすこし変更した最新版 v1.2a
回路的には、USB3 のコンデンサを修正。発注後は、コネクタ類とかシルクとか。

HDD に直接取り付けを考えてのレイアウトだが、一応 7pin コネクタを付けられるようにしてある。
ASM1061 で使ったもの(スルーホール)でも多分付く。あと垂直タイプとか。

TX と RX が逆になっている可能性があって自信がない。その場合、7pin を裏側に付ければ良いかと。

とにかく、7pin コネクタを付けた場合電源ケーブルを出したい。15 pin のパターンから直接ハンダ付けすれば良いのだが、4 pin タイプが付くように変更した。後、DCジャックのところ。5mm のターミナルブロックも付くように。どちらの修正も必要ではないが、もし・・というか間違えていて再発注が必要になったときのベースにしようかと。

usb3-state.png

ところでこれ、USB 3.0 の状態遷移(の一部)。これを見る限り USB 2.0 は、全く使わない。USB 2.0 を使おうとするのは、接続できなかったりした時だけのようだ。また、USB 2.0 モードになってしまうと、USB 2.0 をリセットしない限り戻ってこない。それはともかく、使っていない間 USB 2.0 デバイスがどういう挙動をするのか? USB 2.0 の仕様どおりに動くべきなのであれば、やはりちゃんと動くのではないか?という気がしてきた。USB 3.0 の仕様書は USB 2.0 の動作に関してノータッチのようなのである。だったら、設計する側は、dual port として動作するようにするしかないではないか。

・・・と甘い期待が膨らむのであった。

USB-DP.png

しかし、もし思ったとおりだとすれば、こんなので良いのではないか? USB 3.0 Type を付けて、ただ配線して終わり。電源だけは、ちょっと考えたいが。

VBUS から電源を取っても良いんだが、ダイオードをつけるとなると Vf 分の電圧降下が心配。上記の格安アダプタなんか HDD への電源にダイオード入れてるし 2段になってしまう。2.5inch HDD だと スピンアップに 1A は必要みたいだし。1A で 0.3V 程度の 低Vf 品となると、NSR0320 とか RB161MM-20 とか。こういうのを mouser で買うとかなり高く・・・ aliexpress では品がなく、やっぱり高い。mouser の 1/5 ぐらいだが、100 個 $6 とか。これが ただの SS12 (1N5817) だと 100 個 $1 。

こうしておくと、任意の SuperSpeed デバイスでの動作を試すことが出来る。・・・もし実験が成功したら作ってみるかな。




(めも)
ちょっと ググってみる。

USB3.0のデバドラを書いてみた
http://raphine.hatenablog.com/entry/2017/11/14/224410

uio_pci_generic という API を使って USB3 コントローラ (xHCI) を直接操作するそうだ。
posted by すz at 15:41| Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/185200709
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック