以前製作を考えていた自作SerialUPDIプログラマが完成しました!
Arduinoとの出会いから電子工作を始めたこともあり、そのためか私の場合Arduinoが非常に大好きで、そして何かとAVRマイコンを扱うことが多いと思います。
Arduinoと言えばAtmel(Microchip)のATmega328Pという8ビットAVRマイコンが使われているのはみなさんご存知だと思います。
そしてAVRマイコンではATtinyシリーズも非常に有名ですよね!
ATtinyはフラッシュメモリの容量や使えるI/O端子の数などにより多くのチップがリリースされています。
用途によって使い分けたりと便利に使えるマイコンチップです!
ATtinyはこれまで製作したものでもよく使っています。
例えばATtiny85を使ったミニゲーム機『Tiny Joypad』。
ATtiny85は8ピンしかない小さなマイコンチップですが、多くのミニゲームをプレイする事が出来るのでなかなか面白いですよ!
また使えるI/O端子が多いATtiny84を使ってミニ無線コントローラーも製作しました。
自作のロボットを自作コントローラーで動かす、これも電子工作をやっている身としては非常に楽しいものです!
そんなATmegaやATtinyといったAVRマイコンなんですが、書き込み方式の違いがあります。
ATmega328PやATtiny85といった少し古いタイプのものはICSPでの書き込み方式となっています。
Arduinoではブートローダーを書き込む際などで使いますよね!
そして新しいタイプのAVRチップ、例えばtinyAVR 0-series / tinyAVR 1-series / tinyAVR 2-series / megaAVR 0-seriesといったチップではUPDIでの書き込み方式となっています。
UPDIでの書き込みになったATtinyなども扱う機会が多くなってきたので、その書き込みの際に使える自作のSerial UPDIプログラマを作ってみました。
目次
CH340Eを使った自作Serial UPDIプログラマの製作!
Serial UPDIプログラマ(書き込み装置)とは?
ATtinyシリーズのチップは自作基板の製作などで何かとよく使っているのですが、ATtiny202やATtiny1614、またArduino Nano Everyでも使われているATmega4809といったマイコンでは、以前のICSPの書き込みではなくUPDIの書き込み方式が採用されています。
ICSPとは互換性がないため、これらマイコンを扱う場合は当然対応した書き込み装置が必要となってきます。
UPDIプログラマ(書き込み装置)が必要になるということですね!
従来のICSPでの書き込みではMOSI/MISO/SCK/RESETとさらに電源ライン(VCC/GND)を入れると計6本と書き込みの時に多くの接続が必要でした。
Arduinoにブートローダーを書き込む際に、ICSP端子のMOSI/MISO・・・どっちだったかな?
なんて迷ったことがある方も多いと思います。
対してUPDI(Unified Program and Debug Interface)での書き込みは、単線式となっており信号線1本(UPDI)のみで書き込むことが出来るようになっているので配線が楽で便利です。(VCC/GNDを入れると3本)
tinyAVR 0/1/2シリーズやmegaAVR 0シリーズといったUPDI書き込みに対応したマイコンチップを扱う際はこの書き込み方式となっています。
UPDIでの書き込みについて!
ICSPとUPDIでの書き込み方式は互換性が無いため、使うチップによりそれぞれに対応した書き込み装置を用意する必要があります。
とは言っても非常に簡単です。
Arduinoを書き込み装置として使ったり、またUSB-シリアル変換モジュールがあれば少しパーツを追加するだけで簡単にUPDIプログラマとして機能させることも出来ます。
Arduinoがあればボードに[jtag2updi]スケッチを書き込めばUPDIプログラマとして機能させることが出来ます。
ICSPによる書き込みの際にArduinoに[Arduino as ISP]スケッチを書き込み、ICSP書き込み装置として使うのと同じ要領です。
またUSB-シリアル変換モジュールに少しパーツを追加することにより、同じくUPDI書き込み装置として使うことも出来ます。
jtag2updiやUSB-シリアル変換モジュールを使ったUPDI書き込みに関しては、こちらの記事で詳しく書いているので合わせて見て頂ければと思います。
CH340Eを使ったSerial UPDIプログラマの設計
UPDIに対応したマイコンへのブートローダーやスケッチの書き込みは、Arduinoにjtag2updiを書き込んでUPDI書き込み装置として使ったり、既存のUSB-シリアル変換モジュールに少しパーツを追加(配線する)ことにより簡単にUPDI書き込み装置として使うことが出来ます。
・・・簡単なんですが、テスト回路等を組む際に毎回この作業を行うのは結構面倒なので、ブレッドボードで簡単に使えるミニサイズのUPDIプログラマを作ることにしました。
ブレッドボードに差し込んで使える、これくらいのサイズ感のものがあると便利そうですよね!
UPDIは送信側・受信側を交互にデータ送信することで1本の信号線(UPDI)のみで双方向の通信を行う半二重通信です。
Serial UPDIについての詳しい概要はこちらを参考にして下さい。
参考 SerialUPDIGitHubマイコンを使った電子工作をやられている方なら、USB-シリアル変換モジュールは1つは持っていると思います。
これを使いTX(またはTXD)ラインとRX(RXD)ラインにダイオードを1本追加するだけで簡単にUPDI書き込み装置として使うことが出来ます。
こんな感じですね!
USB-シリアル変換モジュールはこれまでFT232RLやCH340を使ったものなどいくつか自作したことがあるので、これに少し回路を足せばSerial UPDIプログラマとして製作出来そうです。
ブレッドボードでいくつかシリアル変換チップを使ったATtinyへの書き込みテストをしたのですが、Serial UPDIでの書き込みではCH340シリーズのチップを使う方が圧倒的に書き込みスピードは早いようですね!
という事で以前製作したCH340Eを使ったUSB-シリアル変換モジュールをベースに製作することにしました。
全体の回路構成はこのようにしました。
非常にシンプルですね!
基板設計
ブレッドボードに差し込んで使うことを想定して使い勝手が良くなるように、Fusion360を使い基板サイズをまず決めました。
シリアル変換チップにはCH340Nを使い0603サイズのパーツをベースに作る予定でしたが、ボードサイズが結構小さいため配置やパーツ実装のことを考慮してCH340Eに変更して設計しました。
これならこのサイズの基板(20mm×30mm)でもシルクの文字を大きく取って見やすくでき、他のパーツを実装しやすい0805サイズにしてもこの基板サイズに上手く収めることが出来ます。(CH340Eの実装は少し難しいかもしれませんが!)
書き込み用端子(UPDI/VCC/GND)はL型のピンヘッダーを取り付けることを想定していますが、真っ直ぐのピンヘッダーを基板裏に取り付けたり、またピンソケットにするなど使用環境によって使いやすいものを取り付けて使うといいと思います。
ATtinyやmegaAVRといったマイコンを使った自作基板の製作をいくつか考えているので、L型のピンソケットを付けたものをもう1台作っておこうかと思っています。
ポゴピンを差し込んで書き込みで便利に使えるかな・・・?
JLCPCB に基板発注
基板発注は今回もJLCPCB にお願いしました。
基板5枚と送料を合わせて500円ほどで製作することが出来ます。(送料区分はOCS NEPを選択しました)
ほんと便利な時代になったものですね!
今回製作したSerial UPDIプログラマの基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
何かの参考になればと思います!
UPDI Programmer CH340E(Gerber)
基板製造番号は目立たない位置に入るように指定しています。(基板裏の端に入れています)
JLCPCB では発注の際に[Remove Order Number]の項目を[Specify a location]に指定すれば、任意の位置に入ってしまう製造番号を指定位置に入れることが出来ます。(追加料金はかかりません)
また、JLCPCB での基板発注方法に関してはこちらの記事に詳しくまとめているので合わせて見て頂ければと思います。
発注から8日で基板が手元に届きました。
毎回到着がほんと早いですよね、JLCPCB さん!
パーツの実装
0805サイズのパーツをベースにしているので実装はそれほど難しくはないと思いますが、CH340Eはピッチが非常に狭いチップ(0.5mm)なので慣れていないと少し難しいかもしれません!
ここがCH340Nを使うか迷ったポイントでもあるのですが・・・CH340Eは以前何度か使っているので問題なく実装する事が出来ました。
心配な方はステンシルを一緒に発注しておくのもいいかもしれませんね!
パーツの実装はMHP30というリフロー装置を使いました。
ミニサイズで作業スペースの邪魔にもなりにくく、非常に便利なリフロー装置で毎回愛用しています!
綺麗に実装出来ました。
ほんとリフローによるパーツ実装って便利ですね!
導通確認の際にType-C端子部分にブリッジした箇所があったのでコテで修正し問題無く動作させることが出来ました。
Serial UPDIを使った書き込み方法
Serial UPDIの書き込み方法は以下記事で詳しく紹介していますが、ATmega4809を使った書き込み例を簡単に見ていきます。
書き込む対象チップに対応したボードパッケージのインストール方法は記事を参考にして下さい!
UPDI書き込みでの接続は非常に簡単です!
テストで書き込みを行ったATmega4809では30番ピンがUPDI端子/31ピンがVCC/32番ピンがGNDとなっています。
接続はUPDI端子とチップ駆動のための電源(VCC/GND)を接続するだけです。
ATmega4809への書き込みはボーレート230400bpsまでは安定して書き込めるようです!
あとはブートローダーの書き込みは[ブートローダを書き込む]、スケッチの書き込みは[書き込み装置を使って書き込む]から行えます。
無事Lチカも成功しました!
このサイズのチップでもハーフサイズのブレッドボードに一緒に差し込んでテスト出来るので便利ですね!
手持ちの各種ATtinyでも試してみましたが、問題無く書き込むことが出来ました。
この投稿をInstagramで見る
使用パーツ一覧
今回使用したパーツ一覧です。
サイズ等の確認でリンク先ページを参考にして頂ければと思います!
パーツ | 定数 | 入手先 |
抵抗(0805) | R1/R3 5.1kΩ | Amazon / AliExpress |
R2/R4 1kΩ | ↑ | |
R5 470Ω | ↑ | |
コンデンサ(0805) | C1/C2 1μF | Amazon / AliExpress |
C3/C4 0.1μF | ↑ | |
ダイオード | D1 4148(SOD-323) | AliExpress |
ポリヒューズ(0805) | F1 500mA | AliExpress |
LED(0805) | LED1/LED2 | Amazon / AliExpress |
3.3Vレギュレータ | U1 ME6211C3 | AliExpress |
シリアル変換チップ | U2 CH340E | AliExpress / 秋月電子 |
スイッチ | SW1 6P DPDT(2.54mm) | 秋月電子 |
端子 | J1 Type-C端子 | AliExpress / 秋月電子 |
J2 ピンヘッダー(3P) | ーーー |
最後に!
シリアルUPDIプログラマは既存のUSB-シリアル変換モジュールに少しパーツを接続すれば簡単に書き込み装置として使うことが出来るのですが、毎回この作業を行うのが面倒になることもあります。
そんな事から今回私の使用用途に合ったサイズ感のものを自作基板として製作してみました。
このような書き込み装置を1つ作っておくと、今後UPDI書き込みに対応したチップを扱う際に便利に使えると思います。
今回のように専用基板を作りパーツを実装して製作するのはちょっと面倒・・・そんな方は小さなユニバーサル基板に既存のUSB-シリアル変換モジュールとパーツ(ダイオードや抵抗)を追加して製作しておくのもいいかと思います。(私も作りました!)
コメントを残す