CH340KでESP32の書き込みをしてみた

激安USB-シリアル変換チップに、中国のWCH(Nanjing Qinheng Microelectronics)社のCH340シリーズというのがあります。激安Arduino互換ボードなどでよく見かけるのですが、そのうちのCH340Kという製品が、最近秋月で買えるようになりました。

・1個70円
・外付け部品がほとんど不要(電源のバイパスコンデンサだけで、水晶も抵抗も不要)
・UARTの制御に使うDTR, RTSなどが出ている

という特徴があって、かなり胸アツな仕様です。ちなみにCH340シリーズのラインナップはこんな感じ。

画像3

Arduinoのリセット制御でよく使うDTR信号に加えて、よく使われるESP32の書き込み制御(いわゆるNodeMCU方式)で使われるRTS信号も出ているので、ヒトクセあるESP32の書き込みにも使えそうです。

先人がいた

ただ、調べてみるとすでに試している方がいて、どうもうまくいかなかったようです。

この記事では、うまくいかなかった理由まではあまり詳しく調べられていなかったので、個人的に興味があって、自分でも試してみました。

まずは製作

このCH340K、ピン間隔が1.0mmというちょっと珍しいパッケージで、秋月では変換基板も売っているのですが、手元になかったので、1.27mm間隔用の変換基板でやってみました。(ちなみにパッケージの裏面にGNDパッドがあるのですが、データシートによればこれはGNDにつながなくてもOKとのことです)

画像2

ちょっと端のピンが基板端子から離れてしまいますが、ぎりぎりなんとかはんだ付けできました。回路図はCH340Kのデータシートに載っていますが、基本的にはUSBの2本の信号線と+電源(5V)とGNDをCH340Kにつなぐだけです。シンプルすぎですね。

電源のバイパスコンデンサは、まあとりあえずはなくても大丈夫だろう・・・と何もつけずにPCにつないでみると、USBの認識プロセスでコケて「不明なデバイス」になってしまいます。おかしいな・・・と、バイパスコンデンサをつけてみると、あっさり認識されました。少なくとも10番ピンのV3(3.3V出力)には0.1uFのコンデンサを接続しないといけないようです。

ドライバのインストールでちょっとハマる(秋月さんちょっと案件)

ところがデバイスマネージャで確認するとCOMポートが現れません。おかっしな、と調べてみると、秋月のCH340Kの商品ページにリンクが張ってあるドライバが古いバージョンで、CH340Kに対応していないことがわかりました(INFファイルに書いてあるベンダIDに、デバイスマネージャで確認できるCH340KのベンダIDが書いてなかった)。

本家からCH340用の新しいドライバをダウンロードして入れ直したところ、無事COMポートとして認識されました。秋月さん、困りますなあ。

ちなみにCH340Kの電源にUSBから直接5Vを供給すると、出力端子のHレベルも5Vになりますが、3.3Vなどの電源電圧が5Vより低いマイコンでも大丈夫なように保護回路(CK340Kに対してだけでなく、マイコン側にも)が入っているようです。至れりつくせりですね。

画像4

いよいよESP32の書き込み

で、CH340KのTX, RX, DTR, RTS端子を、すでに作ってあったESP32がのっているボード(RTS信号を使ったトランジスタ2個の制御回路(NodeMCU方式)つき)につないでみました。

画像2

ArduinoIDから書き込みしてみると、・・・あっさり書き込みできてしまいました。先の方は失敗していたようなのですが、何が違うんだろう・・・

というわけで、ESP32でも使える、外付け部品がほとんどない、激安USB-シリアルチップCH340K、みなさんもいかがですか。

(2021/7/1追記)ちなみに、CH340Kを使った、FTDI Basic互換の6pコネクタ+RTS信号端子があるWCH_BasicKというのを作って販売していますので、よろしければぜひ。

CH340Eというのもある

ところで同じシリーズのCH340Eが載ったUSB-シリアル変換モジュール(FTDI-Basicとピン互換)も秋月で売っています。CH340Eは、DTR端子がなくて、このモジュールの回路図を見るとRTS端子がDTR端子の代わりに6pコネクタの1番ピンにつながっています。あれ?これだとArduinoのリセットはできないんじゃ?と思ったのですが、問題なく書き込みできました。確認してみると、たしかにCOMポートを開くとRTS信号がLレベルになり、Arduinoにリセットをかけられているようです。


この記事が気に入ったらサポートをしてみませんか?