CH340を炙って削って解析してみた。(23/02/28追記)
マイコンをPCにつなぐときによく使う「USB-シリアル変換器」というものがあります。Arduinoあたりをよく使う方なら、FTDI Basic(またはその互換品)を使うことが多いかと思います。これらにのっている、USBとシリアル(いわゆるUART)をつなぐICには、いろいろなメーカーがいろいろな製品を出しています。有名どころだとFTDI社のFT232シリーズというのがあったり、そのピン互換のPL2303シリーズというのがあったり、そのニセモノがあったり、みんな大好きM5StackシリーズだとCP210xシリーズが使われていたりと、いろいろとにぎやかな世界なのですが、そんな中に、WCHというマークがついたCH340シリーズと言う製品名の激安なUSB-シリアル変換ICがあります。これは、南京沁恒微电子股份有限公司(Nanjing Qinheng Microelectronics)というメーカーの製品です。一昔前だと、激安Arduino互換機で使われていたり、メーカーのWebサイトで配布されているドライバのインストーラがウイルスチェッカーにひっかかることがあったりと、なかなかアレな製品でした。それでも最近はいろいろと改善されていて、Macだとドライバーが標準で入っていたりするみたいです。そして最近、あの秋月電子でこのCHシリーズの扱いがはじまりました。
いくら秋月電子とはいえ、泣く子も黙る激安ぶりです。ピン数が少ないものなら55円って。
それにくわえて、最近のCH340シリーズは、外付け部品がほとんどいらないという便利さです。ほとんどのもので、こちらのようにUSBコネクタに直結し、電源にバイパスコンデンサをつなぐだけです。水晶振動子もダンピング抵抗もいりません。いやはやこれが55円とは、便利な世の中になったものです。
このCH340シリーズのデータシートをみると、7種類の製品がラインナップされています。シリアル通信のフロー制御などの制御信号線や通信状態を示す信号など、それぞれ用途にあわせて選べそうですね。特にArduinoで便利なDTR#信号や、ESP32シリーズの書き込みでよく使われるRTS#信号が出ているものもあり、なかなか便利そうです。またパッケージも何種類かあり、一番小さいCH340Eだと0.5mmピッチのTSSOP10ピンです。(ちなみにCH340Kを使った、ESP32書き込みに使うRTS#信号も引き出せるFTDI Basicピン互換なUSB-シリアル変換器もつくってみました)
とはいえ、半導体メーカーの立場からすると、中のチップの設計は、それなりに手間もお金もかかるので、あまり種類を増やしたくないところです。そこで、このCH340シリーズの中の半導体チップは、実はぜんぶ同じなのでは?という疑問を持ちました。
というわけで、いつもの方法で、バーナーで炙ってチップを取り出して、観察してみます。今回のターゲットは、秋月で売っている、CH340G/E/K/Nの4種類です。
チップを顕微鏡で観察してみると、どうもCH340N以外の3つは同じチップっぽいです。(計測されたチップサイズは計測誤差の範囲)
念のため、チップ上の何箇所かの特徴的なパターンを比べてみると、たしかに同じパターンで、やはり同じチップのようです。
ちなみにこの3つのうち、CH340Gだけ、外付け水晶振動子が必要ですが、同じチップですので、チップ上に内蔵発振回路があるものの、互換性のために無効にしていると思われます。なおCH340Nは明らかに別チップですが、これはリビジョンが古いものの可能性もありそうです(詳細は追って)。
ちなみにCH340Gを解析している途中で、たまたま、チップサイズが明らかにさきほどのCH340Gより大きい物を見つけました。これがCH340Gしかなかった頃の、水晶振動子が必要な初期版のCH340Gと思われます。
さて、CH340E/G/Kの中身は同じ半導体チップでしたが、3つの製品のパッケージは全く違い、ピン配置も異なります。そこで、(1)電源の位置は同じだろう、(2)USBに直接つながり高速な信号伝送をするUD+/UD-の2つの位置は同じだろう、という2つを仮定し、チップ上のパッド(配線をつなぐぐ端子)と信号・機能との対応を推測してみました。緑の位置がUD+/UD-、赤が電源です。
たぶんこれであってるだろうなー、と思うのですが、やはり実際に観察をして確認したいところです。
ICのパッケージの中では、半導体チップとICパッケージの足につながる端子(リードフレーム)を、ボンディングワイヤという細い金属線(多くは金線)でで接続されています。物理構造上、チップから出るところで少し盛り上がり、そこからリードフレームへ下りていく、という構造になるので、上から少しずつ削っていき、その断面を観察すると、どのようにボンディングワイヤがつながっているか、わかりそうです。
そこで、ICパッケージをヤスリで少しずつ削っていくと、たしかに途中から、ボンディングワイヤの断面が観察できるようです。(ちなみに細目のヤスリを使うと、削った面がなめらかになって観察しやすいです)
しっかりICを固定して、少しずつ削りずつ写真をとっていけば、チップ上パッドとリードフレーム間のボンディングワイヤの接続の様子(ボンディング・ダイアグラムと呼ぶ)がわかりそうです。そこで、顕微鏡に銅板を固定し、そこにICをはんだ付けして固定します。
少しずつ削っていきながら撮影し、終わってからフリーウエアの動画操作ツールffmpegを使って1つの動画ファイルにまとめると、こんな感じになりました。ちなみにCH340E/Kでは、チップは斜めに載っているようです。
ちなみに、上記の固定方法を試す前に、だいたい同じ位置にあわせながらCH340Gを削りながら撮影した動画だと、フレームごとにすこずつブレてしまいました(とはいえ、これはこれでいい味がある気がする)。
これでもボンディングワイヤの様子はわかりそうですが、各断面の画像を比較明合成という方法で合成するときれいにできるよ、と、写真に詳しい、高校のころの物理部時代からの友人から教えてもらいました。調べてみると、天体写真で星が流れる写真の作成などで使われる方法で、フリーウエアのImageMagick(に付属のconvertコマンド)でもできるようです。
そこで早速、撮影してあった画像を、この比較明合成で合成してみました。
予想以上にきれいに、「ほぼボンディング・ダイアグラムそのまんま」ができてしまいました。これにパッケージのピン配置を重ね、チップ上のパッドの位置との対応関係を調べると、このようになります。ちなみにVDDとGNDは2本ずつのボンディングワイヤがつながっているようです。(ちなみにチップ写真をみると、ボンディングワイヤがつながっているパッドは、ワイヤの接続痕があるので、使用されているパッドと未使用パッドが区別できます:下の写真の赤丸がボンディング痕があるパッド、青丸が未使用パッド)
これから、さきほどのチップ写真でのパッドとの対応を整理すると、以下のようになりました。
予想通り、電源とUD+/UD-は共通でしたが、それに加えてシリアル通信のデータ線であるTXD/RXDも共通でした。それ以外のDTR#やRTS#等のシリアル通信の制御線は、中のファームウエアで自由に切り替えができるようで、規則性はよくわかりませんでした。
ちなみに、唯一外付け水晶振動子が必要なCH340Gの水晶振動子をつなぐ端子(XIとXO)のパッドは、水晶が不要なCH340E/Kでは、RTS#やDTR#とつながっていました。この理由は、以上の分析からはわかりませんが、内部ファームウエアでXI端子(発振回路の入力端子)の接続状態で、内蔵発振器の有効・無効を切り替えているんではないかと思われます。
ちなみに、「CH340Gでも、中のチップはE/Kと同じなのだから、実は水晶振動子を外しても動作するのでは?」と考えて試してみたのですが、さすがに動作しませんでした。内部のファームウエアで、内蔵発振回路を無効としているのでしょうね。
今回解析しなかったCH340B/C/Tと、今回唯一別チップだったCH340Nを別ルートでの購入を現在手配中で、届き次第、同じように分析したいと思います。
ところでUSB-シリアル変換ICは、中身はUSB機能付きマイコンなんじゃ?という説があって、実際、USB-シリアル変換のMCP2221は、PICマイコンのPIC16F1445と同じチップということを確認したこともあります。CH340シリーズの製造元のWCH社で、それっぽいマイコンを探すと、激安USB機能つきマイコンとしてCH551・CH552という製品があって、もしや・・・と思われるのですが、これについては、もうちょっと奥が深い世界だったので、もう少し詳しく調べているところです。これについては、また改めて。
(23/02/28追記)CH533の謎
上記の、実は中身はマイコンなんじゃ説について追記です。@ichirow さんさんから、CH533というマイコンの情報をいただきました。WCH社のWebページの中国語版にのみ製品一覧に載っていますが、データシートは3ページの概略版しかなく、詳細は不明ですが8ビットマイコンのようです。命令数53のオリジナルRISCで、ROMは2048ワード(4096バイト)、RAMは256バイト、USBとUARTが内蔵、と書いてあります。
以下のような理由から、どうもCH340の中身はこれなんじゃ、という気がしてきます。
QFN28ピンパッケージがある。つまり最大ピン数は28だが、これはCH340のパッド数と同じ
電源ピンの種類(VCC/GND/V3)、USB信号が独立ピン、XI/XOピンがある
UARTも内蔵
@ichirow さんやいろいろな方と、いろんな方法でCH533の入手を試みました。WCH社に直接、Aliexpress、TaoBao、Alibaba、はては华强北の部品商社まで、いろいろな方法で探しましたが、どこにも見当たりせんでした。せめてCH533が載ったボードでも、と思ったのですが、見当たりあませんでした。ほとんどシッポをつかめていたような気もするのですが、いま一歩で及ばず、無念です。
(23/02/28追記)CH330N、CH340B/S
もう1つ似たシリーズで、CH330Nというのがあります。中国語版のみデータシートがあるようで、ざっとみたところ、CH340と機能はそっくりに見えます。上記の通りCH340Nだけは、他のCH340シリーズとは別チップだった原因もよくわからず(特にCH340Nが高機能というわけでもない)、単なるリビジョンが古いだけだろうか、と思っていたのですが、せっかくなのでこのCH330Nのチップをみてみました。
どうみても他のCH340シリーズと共通(あるいはおそらくCH533)のようです。
ちなみにUSB-パラレル変換のCH340Sというのがラインナップに加わったのですが、これもどうもいつものチップっぽいです。
ちなみにCH340Bというのもあって、これはID保存用のEEPROMがあるなど、他のCH340シリーズよりも機能が多く、たしかに別チップでチップサイズも2倍くらいありました。