この連載で作る基板の製造と部品実装は、JLCPCB 様の提供によるものです(製造費用に充てるクーポンの提供を受けました)。JLCPCB はこちら。
はじめに
第1回で設計した RP2040 の 16ch ロジックアナライザ基板が、JLCPCB から届きました。今回のゴールは、この基板を壊さずに火を入れ、PulseView で I2C をプロトコルとして読むところまでです。
ただ「動いた」だけでは、測定器としては信用できません。ロジアナは、ほかの回路を疑うときに使う道具です。道具そのものが設計どおりかどうかは、数字で確かめておく必要があります。今回確かめたのは次の5つです。
| 確かめること | 何を測れば「設計どおり」と言えるか |
|---|---|
| 電源が短絡していないか | 通電前に、各レールの対 GND 抵抗 |
| 3.3V の LDO は発振しないか | 3.3V レールの DC 値と、オシロでの AC 成分 |
| RP2040 が正しく起動するか | 水晶の発振周波数、内蔵 LDO の電圧、USB の認識 |
| 入力回路は設計どおりのしきい値か | VREF を切り替えたときに High / Low が切り替わる入力電圧 |
| PulseView で読めるか | 実際の I2C 通信がアドレスとデータに読み下されるか |
- 3.3V レールは 3.303V で、発振を示す波形は確認できず。水晶は 12.01MHz。入力しきい値は VREF に追従し、VREF 3.3V での VT+ は約 2.0V と推定しました
- sigrok-pico と PulseView nightly で、ESP32-S3 センサー基板に載った SEN63C(I2C アドレス 0x6B)との通信をデコードできました
- 途中で VREF 切替スイッチのピン割り当て違いが見つかり、部品側のジャンパで改修しています
- 第1回 設計と発注 — 回路・4層基板・製造データ・JLCPCB PCBA の発注
- 第2回 立ち上げ(この記事) — 開梱と手はんだ、スイッチの改修、電源と発振の確認、入力しきい値の実測、PulseView で最初の I2C
- 第3回 実戦投入 — 手持ちの基板の I2C / SPI をデコードする。オシロとロジアナを同じ信号に当てて見比べる
立ち上げは、壊れたときの被害が小さい順に進めました。各段で何が確定するかを先に並べておきます。
外した部品を付ける"] --> B["② スイッチの導通確認
コモンのピンを確定"] B --> C["③ ショート確認
各レールの対 GND 抵抗"] C --> D["④ 電源と発振
3.3V・1.1V・水晶 12MHz"] D --> E["⑤ ファームと PulseView
COM ポートとチャンネル対応"] E --> F["⑥ 入力しきい値
VREF 3.3V / 5V"] F --> G["⑦ 最初の波形
I2C をデコード"]
📦 届いた基板 — JLCPCB の PCBA 基板に USB-C・スイッチ・ヘッダを手はんだ
届いた 5 枚。RP2040・TXU0104 ×4・フラッシュ・LDO などの SMD 部品は実装済み
5 枚とも同じ状態で届きました。JLCPCB の PCBA の実装対象から外していたのは次の3種類です。
| 部品 | 実装から外した理由 | 対応 |
|---|---|---|
| USB-C(J1) | 注文時に部品が入手できず、実装から外した | 手はんだ |
| スライドスイッチ SW1 | THT 部品なので、設計段階から手はんだの予定 | 手はんだ |
| ピンヘッダ J2(2×16)・J3(1×3) | 同上 | 手はんだ |
届いたままの表面。左上の SW1、上辺の J2、左の J3、右端の J1(USB-C)が空いている
RP2040 は 0.4mm ピッチの QFN-56 です。ルーペで見た範囲では、ブリッジや浮きはありませんでした。
RP2040(QFN-56・0.4mm ピッチ)の拡大。ここを手はんだせずに済ませるのが PCBA に出した理由
周りに並んでいるコンデンサは 0402 です。普段の手はんだ基板では 0603 を使っていますが、今回は PCBA に任せる前提で一段小さくしました(第1回の基板の節)。
USB-C を手で付ける
USB-C の信号パッドは 0.5mm ピッチで、この基板でいちばん細かい手はんだです。受け口のシェルは 4 本の脚をスルーホールに差し込む形なので、先にシェルの脚で位置を決めてから信号ピンをはんだ付けしました。
はんだ付け前。シェルの脚をスルーホールに差して位置を合わせた状態
はんだ付け後。信号ピンの列の奥に残っている黒っぽいものはフラックスの残り
手はんだが終わった状態。上辺がプローブ用の J2、左端が VREF 切替の SW1、その下が外部 VREF 用の J3
🔍 VREF 切替スイッチのピンを実物で確かめる
テスターで位置ごとの導通を当てる
SW1 は、TXU0104 の入力側電源 VREF を「3.3V / EXT / 5V」から選ぶスライドスイッチです(第1回「基準電圧 VREF」の節)。切り替えの途中で隣どうしの接点が一瞬つながる shorting 型なので、3.3V と 5V が隣り合わないよう、接点の並びを「3.3V ― EXT ― 5V」にしてあります。
この並び順の対策は、どのピンがコモン(可動接点)かが合っていて初めて成り立ちます。設計では、データシートの図から「4本並んだうち、孤立して離れているピン 1 がコモン」と読んでいました。
VREF を切り替えて使い始める前に、テスターの導通モードで、スライダの位置ごとにどのピンどうしがつながるかを当てました。結果は次のとおりです。
| スライダ位置(シルク) | つながったピンの組 | ネットで言うと |
|---|---|---|
| 位置 1(3V3) | ピン 1 – ピン 2 | VREF – 3.3V |
| 位置 2(EXT) | ピン 2 – ピン 3 | 3.3V – EXT |
| 位置 3(5V) | ピン 2 – ピン 4 | 3.3V – 5V |
3 つの位置すべてに出てくるのはピン 2 です。コモンはピン 1 ではなく、孤立したピン 1 の隣のピン 2 でした。
改修前の配線だと何が起きるか
設計では pad1 = VREF(コモンのつもり)、pad2 = 3.3V、pad3 = EXT、pad4 = 5V と配線していました。実物のコモンは pad2 なので、スイッチは「3.3V を、どこかへ配る」動きになります。
| スライダ位置 | 設計の想定(ピン 1 がコモン) | 実物の動き(ピン 2 がコモン・改修前) | 改修後の実測 |
|---|---|---|---|
| 3V3 | VREF = 3.3V | VREF = 3.3V(偶然、正しく動く) | 3.303 V |
| EXT | VREF = J3 の外部電圧 | VREF は浮き、J3 に 3.3V が出る | 0 V(J3 未接続) |
| 5V | VREF = USB の 5V | LDO の 3.3V 出力と USB の 5V が直結 | 4.895 V |
注意したいのは、3V3 位置では設計どおりに動いて見えることです。5V 位置に入れると、3.3V レールが 5V に引き上げられます。RP2040 の電源電圧の上限は 3.63V なので、RP2040・フラッシュ・TXU0104 の出力側がまとめて過電圧になるところでした。
スライドスイッチで、スライダと一緒に動いて相手を選ぶ側の端子をコモンと呼びます。3 接点のスイッチなら、コモン 1 本と接点 3 本の計 4 本です。shorting 型(make-before-break)は、次の接点につながってから前の接点が離れるタイプで、切り替えの途中に隣どうしが一瞬つながります。電源を選ぶ用途では、どれがコモンでどの順に並んでいるかが、そのまま短絡するかどうかを決めます。
4層基板ではパターンを切れない — 部品側で改修する
普通なら、pad1 と pad2 の配線を切って入れ替えます。ところがこの基板では、pad2(3.3V)が内層 L3 の電源プレーンに直接つながっています。表にも裏にも切れる配線がありません。4層にしたことで、プレーンに直結したパッドは外から手を入れられなくなっていました。
そこで、基板ではなくスイッチ側で入れ替えました。
- スイッチのピン 1 とピン 2 を、基板のスルーホールから切り離す(浮かせる)
- スイッチのピン 2(本当のコモン)を、ジャンパ線で pad1(VREF) へ
- スイッチのピン 1 を、ジャンパ線で pad2(3.3V) へ
- 交差したジャンパと端子の部分を、グルーで固定する
本当のコモン"] --- Q2a["pad2
3.3V プレーン"] P1a["スイッチ ピン 1
接点"] --- Q1a["pad1
VREF"] end subgraph AFTER["改修後(ジャンパで交差)"] direction LR P2b["スイッチ ピン 2
本当のコモン"] --- Q1b["pad1
VREF"] P1b["スイッチ ピン 1
接点"] --- Q2b["pad2
3.3V プレーン"] end BEFORE ~~~ AFTER
改修後の SW1。スイッチの足から出た 2 本のジャンパで、ピン 2(コモン)を pad1(VREF)へ、ピン 1 を pad2(3.3V)へ交差させた。右は J3 のピンヘッダ
改修後の並びは 3.3V(ピン 1)― コモン(ピン 2)― EXT(ピン 3)― 5V(ピン 4) です。スライダの順で見ると 3.3V → EXT → 5V のままなので、shorting 型でも 3.3V と 5V が隣り合わない設計意図は保たれています。改修後に USB で給電し、J3 には何もつながずに VREF を測った値が、上の表の右端の列です。EXT 位置では VREF が 0V になり、VREF の LED(D2)が消えます。TXU0104 は VCCA が 100mV を下回ると全出力を Hi-Z にするので、これは仕様どおりの動きです。
回路図のシンボルはピン番号を実物に合わせて直し、基板は次の版で pad1 と pad2 の割り当てを入れ替えます。第1回の記事にも訂正を入れました。
⚡ 電源と発振 — 3.3V・1.1V・12MHz を数字で確かめる
ショート確認:対 GND の抵抗
テスターの抵抗レンジで、3 本の電源レールと GND の間を測りました。1 枚目の基板は、USB で一度 RPI-RP2 ドライブが見えるところまで確かめてから測っています。
| レール(対 GND) | 読み値 | 判定 |
|---|---|---|
| 5V(USB VBUS) | 7.26 MΩ | 短絡なし |
| 3.3V(LDO 出力) | 330 Ω | 明確な短絡ではない(下記) |
| VREF | 2.1 MΩ | 短絡なし |
5V–GND の測定。7.26MΩ で、短絡はない
3.3V–GND 間は 330Ω と低めでした。ただし実装状態では、3.3V レールにつながる複数の IC や周辺回路をまとめて測っているため、この値から個々の経路を特定することはできません。1Ω 未満のような明確な短絡ではなく、通電後も 3.3V レールが正常な値(下の 3.303V)だったことから、ショートではないと判断しました。
3.3V レール:発振しているか
第1回で宿題にしたのが、10µF のセラミックコンデンサで LDO が発振しないかの確認です。AMS1117 のデータシートが安定動作の条件として挙げている出力コンデンサ(推奨構成)は 22µF の固体タンタルで、この基板の 10µF セラミックは推奨と違う構成です。データシートの Stability 節には、出力コンデンサは「位相補償の一部」と書かれています。条件が合わないと、LDO そのものが発振することがあります。そこで、USB 給電で RP2040 がブートローダ(RPI-RP2)で待機している状態の 3.3V レールを、オシロ(OWON VDS3102L)で見ました。
| 観測 | 設定 | 結果 |
|---|---|---|
| DC 値 | DC 結合・500mV/div・1ms/div | 3.303 V(Vmax 3.340 V・Vmin 3.280 V)。規格 3.251〜3.349 V の内側 |
| AC 成分 | AC 結合・20mV/div・10µs/div・帯域制限 ON | 約 30 kHz・24.8 mVpp の周期的な揺れ(Vrms 8.0 mV) |
3.3V レールの DC 値。平均 3.303V で、AMS1117-3.3 の出力電圧の規格(3.251〜3.349V)に収まっている
AC 結合で拡大すると、約 30kHz・24.8mVpp の揺れが見える。この波形は基板から来ているのか
30kHz の揺れが見えた時点では、LDO の発振なのか、外から来ているのかは区別できません。そこで2つの切り分けをしました。
- 5V 側(LDO の入力)を同じ設定で見る → 同じ約 30kHz の波形が出た
- プローブを基板から外して見る → それでも同じ波形が出た
基板に触れていないプローブにも出るので、30kHz の揺れは基板の電圧ではなく、測定環境(電源や周辺機器からの放射)から拾ったものと判断しました。少なくとも今回の測定条件(軽負荷・室温・この帯域とプローブ)では、LDO 自身の発振を示す波形は確認できませんでした。これが、データシートの推奨と違う 10µF セラミックについての第1回の宿題への答えです。重い負荷をかけた状態や低温での安定までは、この観測では言えません。
水晶 12MHz と RP2040 の内蔵 LDO
RP2040 のクロックは 12MHz の水晶から作ります。測ったのは、RP2040 の XOUT から 1kΩ のダンピング抵抗 R21 を通った先、水晶側の端子です(XIN 側にプローブを当てると、プローブの容量で発振が止まることがあるため)。
水晶側の発振波形。12.01MHz・1.62Vpp の正弦波(Vmax 2.32V・Vmin 0.70V)
| 項目 | 実測 | 期待値 |
|---|---|---|
| 水晶の発振 | 12.01 MHz・正弦波 1.62 Vpp | 公称 12MHz |
| 内蔵 LDO の出力(VREG_VOUT) | 1.096 V(テスター) | 公称 1.1V(データシートの DVDD 範囲 0.99〜1.21V) |
USB のフルスピード通信に使う 48MHz は、この 12MHz から PLL で作られます。つまり RPI-RP2 ドライブとして PC に見えた時点で、水晶・PLL・USB・電源はひととおり動いていると判断できます。波形と電圧は、その裏付けです。
USB を挿したところ。3.3V の LED(D1)と VREF の LED(D2)が点灯
PC から RPI-RP2 ドライブとして見えた。フラッシュが空の RP2040 は、自動でこの USB ブートローダが起動する
💾 ファームと PulseView — 書き込んで、つないで、チャンネルを確かめる
pico_dig26.uf2 を書き込む
ファームは sigrok-pico の release フォルダにある配布版 pico_dig26.uf2(デジタル 26ch 構成・ファイルの直リンク)です。第1回で書いたとおり、同じ配布物の pico_baseline.uf2 は GP0 を UART の送信ピンとして出力にするので、CH0 の TXU0104 の出力とぶつかります。こちらは書きません。
pico_dig26.uf2(100,352 バイト)を RPI-RP2 ドライブにコピーする- 数秒でドライブが消え、COM ポート(「USB シリアル デバイス」・VID 2E8A / PID 000A)が現れる
- シリアル端末から
iを送ると、識別文字列SRPICO,A001D26,02が返る
SRPICO,A001D26,02 の D26 が、デジタル 26ch 構成で動いている印です。小さなつまずきが1つあって、i は改行つきで、DTR と RTS を立てて送らないと返事がありません。改行なし・DTR だけでは無反応でした。PulseView から使うぶんには気にしなくてよい話ですが、シリアル端末で生存確認をするときは覚えておくと迷いません。
なぜビルドせずに、この基板で動くのか
RP2040 の ROM には、USB メモリと同じ方式(USB マスストレージ)で振る舞うブートローダが焼き込まれています。フラッシュに有効なプログラムが無いとき、または BOOT ボタン(SW2)を押しながらリセットしたとき、PC からは RPI-RP2 というドライブに見え、UF2 形式のファイルをコピーするだけでフラッシュに書き込まれます。UF2 は 512 バイトのブロックごとに書き込み先のアドレスを持つ形式で、RP2040 用のブロックはファミリ ID(0xe48bff56)で見分けられます。
配布の .uf2 は、Pico の既定設定(PICO_BOARD pico)でビルドされた RP2040 用のバイナリです。基板の名前を確かめて動くわけではないので、Pico と同じ前提を満たす基板なら、そのまま動きます。この基板で満たしている前提は次のとおりです。
| 前提 | この基板 |
|---|---|
| マイコン | RP2040 そのもの |
| 水晶 | 12MHz。Pico と同じで、pico-sdk の既定値(XOSC_HZ = 12MHz) |
| QSPI フラッシュ | W25Q128JV(Winbond)。Pico 用の第2段ブートローダ boot2_w25q080 は Winbond W25Q シリーズ向けの設定で、同じ系列 |
| GPIO | sigrok-pico が使う GP0〜22・GP26〜28 の並びに合わせてある(第1回でファームに合わせて決めた) |
| USB・電源 | USB の D+ / D− と、内蔵 LDO(1.1V)まわりの配線は公式の最小構成どおり |
ビルドが必要になるのは、ピン配置や水晶の周波数、フラッシュの種類を変えたときです。
PulseView nightly で接続する
sigrok-pico 用の raspberrypi-pico ドライバは、リリース版の PulseView 0.4.2 には入っていません。sigrok の Downloads ページから nightly 版(Windows 64bit なら pulseview-NIGHTLY-x86_64-release-installer.exe)を入れて、次の手順でつなぎます。
- Connect to Device を開く
- ドライバに RaspberryPI PICO (raspberrypi-pico) を選ぶ
- Serial Port に、書き込みで現れた COM ポートを選ぶ
- Scan for devices → 「Raspberry Pi PICO with 26 channels」が出れば OK
Connect to Device。ドライバ raspberrypi-pico と COM ポートを選んでスキャンすると、26ch のデバイスとして見つかる
接続直後のチャンネル一覧。D0・D1 は無く、D2〜D27 の 26 本が並ぶ
チャンネル名は D2 から始まる
ここで注意が1つあります。PulseView のチャンネル名は D0 ではなく D2 から始まります。sigrok-pico の release フォルダの README にも、「現在の PulseView はデジタルのピン名を常に D2 から付ける」と書かれている仕様です。基板の CH0 に安定化電源の電圧を入れると D2 が反応したので、対応は次のとおりです。
| 基板のシルク | RP2040 のピン | PulseView の表示 |
|---|---|---|
| CH0 | GP0 | D2 |
| CH1 | GP1 | D3 |
| CH n(n = 0〜15) | GPn | D(n+2) |
| CH15 | GP15 | D17 |
| テストパッド(GP16〜22) | GP16〜22 | D18〜D24 |
| (GP26〜28) | GP26〜28 | D25〜D27 |
CH0 = D2 は実測で、CH1 = D3 は後半の I2C の取り込みで確かめました。それ以外の行は、この規則(2 ずれる)を当てはめたものです。「CH n は D(n+2)」とだけ覚えておけば、デコーダにチャンネルを割り当てるときに迷いません。
📏 入力しきい値の実測 — 雑音がヒステリシスを越えると何が起きるか
測りたいもの:VT+ と VT−
TXU0104 の入力はシュミットトリガです。Low から High に変わる電圧 VT+ と、High から Low に戻る電圧 VT− が別々にあり、その差 ΔVT(ヒステリシス) の範囲では出力が前の状態を保ちます。そして、しきい値は入力側の電源 VCCA(この基板では VREF)に応じて変化し、VCCA が高くなると VT+ / VT− も高くなります。データシートの値は次のとおりです(TXU0104 データシート SCES937B・データ入力)。
| VCCA | VT+ | VT− | ΔVT |
|---|---|---|---|
| 3.0 V | 1.48〜1.92 V | 0.89〜1.50 V | 0.46〜0.72 V |
| 4.5 V | 2.19〜2.74 V | 1.51〜1.97 V | 0.58〜0.93 V |
データシートには VCCA = 3.3V や 5.0V ちょうどの行がありません。今回の VREF は 3.303V と 4.895V です。ここでは参考値として、上の行を電圧比で比例換算した値(3.3V なら 3.0V の行の 1.1 倍)を使いました。目安であり、規格値ではありません。
入力が 1 本のしきい値をまたぐたびに出力が変わる回路だと、ゆっくり変化する信号や雑音の乗った信号で、出力が何度もパタパタ切り替わります。シュミットトリガは、上がるときのしきい値(VT+)を下がるときのしきい値(VT−)より高くしておき、一度切り替わったら少し戻ったくらいでは戻らないようにした入力です。その差をヒステリシスと呼びます。
測り方
安定化電源の出力を J2 の CH0 と GND につなぎ、入力電圧は電源の表示ではなくオシロで CH0 のピンを直接読みました。PulseView は 50kHz・50k サンプル(1 回 1 秒)で取り込み、電圧を変えながら D2 が Low のままか、High のままか、その間で揺れるかを見ます。
最初に VREF = 3.3V で電圧をゆっくり上げると、1.8V から 1.9V のあたりで D2 が 0 から 1 に変わりました。ただし、きれいに 1 回切り替わるのではなく、しばらく細かいトグルが続きました。
VREF 3.3V で入力を 1.8V → 1.9V へ上げたときの D2(5kHz・500k サンプル)。切り替わりの前後で細かいトグルが続く
十分に安定した入力なら、シュミット入力でこのような連続トグルは起きにくいはずです。原因は、オシロで入力そのものを見ると分かりました。
入力 2.2V(Vrms 2.200V)の実波形。安定化電源の出力そのものに、Vpp 680mV のスパイク状の雑音が乗っている
入力の DC 電圧に、±0.3V 前後のスパイクが乗っていました。発生源は安定化電源の出力です。
結果:Low・トグル・High の3つの帯
| VREF | 入力(オシロの Vrms) | 雑音の山 / 谷 | D2 の状態 |
|---|---|---|---|
| 3.3 V | 1.693 V | 1.96 V / 1.44 V | ずっと Low |
| 3.3 V | 1.7〜2.2 V の間 | — | トグル |
| 3.3 V | 2.200 V | 2.48 V / 1.80 V | ずっと High |
| 5 V(4.895 V) | 2.606 V | 3.12 V / 2.20 V | ずっと Low |
| 5 V(4.895 V) | 2.6〜3.0 V の間 | — | トグル |
| 5 V(4.895 V) | 3.013 V | 3.40 V / 2.56 V | ずっと High |
VREF 3.3V・入力 1.7V(Vrms 1.693V・Vpp 520mV)。この電圧では D2 は 1 秒間ずっと Low
VREF 3.3V・入力 2.2V では、雑音の谷(1.80V)でも Low に戻らず、D2 は 1 秒間ずっと High(50kHz・50k サンプル)
波形のピーク値と PulseView の状態を突き合わせると、今回の測定条件では、VREF 3.3V で VT+ はおよそ 2.0V 付近、VT− は 1.5〜1.8V 程度と推定できます。オシロとロジアナは同期して取り込んでいるわけではなく、入力にも大きなスパイクがあるため、これは規格値や精密なしきい値測定ではなく目安です。参考に、データシートの 3.0V の行を 1.1 倍した値は VT+ 1.63〜2.11V・VT− 0.98〜1.65V です。
VREF 5V では、2.6V では雑音の山(3.12V)でも High にならず、3.0V では谷(2.56V)でも Low に戻りませんでした。同じ考え方で、VT+ はおよそ 3.0V 付近、VT− は 2.6V 以下程度と推定できます(4.5V の行を 4.895/4.5 倍した VT+ の上限は約 2.98V)。VREF を 3.3V から 5V に上げると、推定した VT+ も約 2.0V から約 3.0V へ上がりました。しきい値が VREF に追従することは、観測結果として確かめられました。
なお、50kHz のサンプリングでは 100ns 級の短いスパイクへの応答を取りこぼすことがあります。帯の端は「おおむね」の値です。
VREF 5V・入力 3.0V(Vrms 3.013V・Vpp 840mV)。D2 はずっと High
VREF 5V・入力 2.6V(Vrms 2.606V・Vpp 920mV)。D2 はずっと Low
シュミット入力でも跳ねる条件
トグルの原因は、雑音の振れ幅がヒステリシスより大きかったためと考えられます。入力の雑音は 0.5〜0.9 Vpp(オシロの測定値)で、上の推定から見たヒステリシスは 0.2〜0.5V 程度です。入力の中心が VT+ と VT− の間にあるとき、雑音の山が VT+ を越えれば High に、谷が VT− を下回れば Low に戻ります。これが雑音のたびに繰り返されます。
ヒステリシスが効くのは、雑音の振れ幅がヒステリシスより小さいときです。雑音が大きければ、シュミット入力でも跳ねます。実際の信号を測るときも、長いジャンパ線で雑音を拾う配線なら同じことが起きます。
1.8V ロジックは VREF 1.8V が必須
この結果は、もう1つのことを示しています。VREF 3.3V での VT+ は、推定でおよそ 2.0V です。1.8V 系のロジックの High は 1.8V 前後なので、VREF 3.3V のままでは 1.8V ロジックの High を安定して読めないと考えられます。実際に 1.7V の入力は、1 秒間ずっと Low でした。1.8V のロジックを測るときは、第1回の設計どおり SW1 を EXT にして、J3 から 1.8V を VREF として与える必要があります。
🎯 最初の波形 — SEN63C の I2C 通信を PulseView でデコード
最後に、実物の I2C を読みます。相手は、以前作った ESP32-S3 センサー基板に載っている Sensirion の空気質センサー SEN63C(I2C アドレス 0x6B)です。バスは 3.3V なので、SW1 は「3.3V」位置です。
| 項目 | 設定 |
|---|---|
| 配線 | SCL → CH0(D2)、SDA → CH1(D3)、GND → J2 の GND 列 |
| サンプリング | 1MHz・10M サンプル |
| デコーダ | I2C(SCL = D2、SDA = D3、アドレスは 7bit 表示=shifted) |
I2C デコーダの設定。CH0 = D2 を SCL、CH1 = D3 を SDA に割り当てる
ESP32-S3 センサー基板の SEN63C(I2C アドレス 0x6B)との通信をデコードした画面。Address read 0x6B → Data read 00, 11, F3, 00, 18 と読み下されている
デコード結果は Address read: 0x6B(Rd・ACK)→ Data read: 00, 11, F3, 00, 18 … です。各ビットと ACK が 1 つずつ読めています。
デコードが正しいかどうかは、データの中身で確かめられます。SEN63C の応答は、2 バイトのデータごとに 8bit の CRC が 1 バイト付く形式です(Sensirion のデータシートの CRC 節。CRC-8、多項式 0x31、初期値 0xFF)。先頭の 00 11 から CRC を計算すると 0xF3 になり、3 バイト目の F3 と一致しました。CRC も一致したため、少なくともこのフレームが正しくデコードできていることを強く裏付けられます。
画面の目盛りで、SCL の 1 周期は約 10µs、つまり約 100kHz です。SEN63C の I2C の最大速度(データシートの規格値)は 100kbit/s(スタンダードモード)で、画面から読んだ値はその上限付近です。1MHz のサンプリングなら、SCL の 1 周期あたり約 10 サンプル取れている計算です。
第1回の冒頭で書いた「I2C をプロトコルとして読んだ画面を出す」が、自分で設計した基板で実現しました。
💭 所感:測ってから信用する
「動いた」ではなく、数字で検収する。 RPI-RP2 が見えた時点で基板は動いていますが、それだけでは測定器として信用できません。3.3V レール 3.303V、水晶 12.01MHz、VREF ごとのしきい値の目安と、立ち上げで測った表は、そのままこの基板の仕様書になります。第3回以降で見慣れない波形が出たときに「基板の側は確かめてある」と言えるのは、この表があるからです。
しきい値は VREF とともに上がり、精度は配線で決まる。 測る相手の電源電圧に VREF を合わせるのが、この基板の使い方の基本です。そのうえで、雑音の振れ幅がヒステリシスを超えると、シュミット入力でも出力は跳ねます。長いジャンパ線や遠い GND は、それだけで測定器側の精度を落とします。入力回路をいくら作り込んでも、プローブの配線が雑なら結果は信用できない、というのが実務での一番の注意点です。
データシートの推奨と違う構成は、条件を絞って測って判断する。 10µF セラミックの AMS1117 は推奨構成ではありませんが、すぐに載せ替えるのではなく、軽負荷・室温という条件をはっきりさせて測り、その範囲で「発振を示す波形は確認できない」と判断しました。重い負荷や低温は分からないまま、と書き残しておくところまでが判断です。最後に一つだけ。スイッチのピン違いは、データシートを読む手間を省かなければ防げたものでした。
⚠️ この基板を使うときの注意(第2回で追加した分)
第1回の「この基板を使うときの注意」に、今回分かったことを足します。
| # | 約束 | 理由 |
|---|---|---|
| 1 | 改修前の基板では SW1 を「5V」にせず、「EXT」で J3 に何もつながない | 改修前の配線では、5V 位置で LDO の 3.3V 出力と USB の 5V が直結し、EXT 位置では J3 に 3.3V が出る |
| 2 | EXT 位置で J3 が未接続なら、全 ch が反応しない | VREF = 0V で TXU0104 の出力が Hi-Z になる。D2 の LED が消えていれば、この状態 |
| 3 | しきい値付近の信号は、雑音でトグルすることがある | 雑音の振れ幅がヒステリシス(今回の推定で 0.2〜0.5V 程度)を超えると跳ねる。配線を短くし、GND をしっかり取る |
| 4 | チャンネル名は CH n = D(n+2) | PulseView の表示は D2 から始まる |
✅ まとめ
- PCBA の実装から外していた USB-C・SW1・ヘッダの3種類は、すべて手はんだで付けた
- VREF 切替スイッチ SW1 はコモンのピンが設計と違っていたため、4層でパターンを切れない代わりにスイッチ側のジャンパで改修した。改修後の VREF は 3.303V / 0V / 4.895V
- 3.3V レールは 3.303V。30kHz の揺れは測定環境のノイズと判断。10µF セラミックでも、LDO の発振を示す波形は確認できなかった(軽負荷・室温)
- 水晶は 12.01MHz、RP2040 のコアは 1.096V。RPI-RP2 が見えた時点で、クロック・USB・電源は動いている
- 入力しきい値は VREF に追従する。VT+ は VREF 3.3V で約 2.0V、5V で約 3.0V(推定の目安)。雑音がヒステリシスを超えると、シュミット入力でも跳ねる
- sigrok-pico と PulseView nightly で、SEN63C(0x6B)の I2C をデコードできた。CRC の一致でもデコード結果を検証できた
基板は、JLCPCB の PCBA で載った部品は、そのまま動きました。第3回は実戦投入です。EXT に 1.8V を入れたときのしきい値、雑音の少ない電源での測り直し、そして手持ちの基板の I2C と SPI を、オシロと並べてこの 1 台でデコードします。
よくある質問(FAQ)
Q: スライドスイッチのコモンは、データシートから読み取れないのですか?
A: 読み取れます。コモンはデータシートの図(SCHEMATIC (SHORTING))で確かめるのが基本で、この基板では、4 本並んだピンのうち孤立した 1 本をコモンだと読み違えていました(実物のコモンはその隣)。電源を切り替える用途なら、加えて実物をテスターの導通モードで、スライダの位置ごとに当てて確かめると確実です。
Q: PulseView で CH0 が D0 ではなく D2 と表示されるのは故障ですか?
A: 故障ではありません。sigrok-pico の release の README に書かれている PulseView 側の仕様で、デジタルのピン名は常に D2 から付きます。この基板では CH n が D(n+2) です。
Q: リリース版の PulseView 0.4.2 では使えませんか?
A: sigrok-pico 用の raspberrypi-pico ドライバが入っていないので、つながりません。sigrok の Downloads ページから nightly 版を入れてください。
Q: AMS1117 の出力に 10µF のセラミックを使っても大丈夫ですか?
A: データシートが安定動作の条件として挙げている推奨構成は 22µF の固体タンタルで、10µF セラミックは推奨と違う構成です。この基板では、軽負荷・室温の条件で、発振を示す波形は確認できませんでした。ただし、これはこの条件での 1 つの観測結果です。重い負荷や低温で使うなら、データシートどおりの構成にするのが安全です。
Q: しきい値付近で波形がパタパタするのは、ロジアナの不具合ですか?
A: 多くの場合、入力に乗った雑音が原因です。雑音の振れ幅がシュミット入力のヒステリシス(この基板での推定で 0.2〜0.5V 程度)を超えると、しきい値付近で出力が跳ねます。オシロで入力を直接見ると、原因を切り分けられます。
Q: RP2040 のロジックアナライザは何 MHz までサンプリングできますか?
A: sigrok-pico 公式の USER_GUIDE の表では、デジタルの上限は PIO で決まる 120 MS/s です(システムクロック 120 MHz)。ただし本体の RAM に貯めて取り込める量に上限があり、16ch(表の 15〜21ch の行)では 5 万サンプルまで、120 MS/s なら約 0.4 ms 分です。公式は、8ch 以上なら 60 MS/s 以下を推奨しています。それより多いサンプル数では USB で流しながら取り込む形になり、上限は 167 kS/s(RLE 圧縮あり)です。この基板での実測はまだで、第3回で測ります。
関連記事
- RP2040で16chロジックアナライザを自作|KiCad 10で設計してJLCPCBのPCBAに発注するまで【自作ロジアナ #1】 — この基板の回路と設計の理由
- ESP-IDFで自作するI2Cセンサードライバ|vTaskDelayの罠【自宅センサー基盤 #2】 — 今回デコードした SEN63C を載せたセンサー基板のファームウェア
- KiCadで作るESP32-S3センサー基板|設計から手はんだ実装まで【自宅センサー基盤 #1】 — 同じセンサー基板の回路と基板
- I2C・SPI・UART の違い|比較表と4つの質問で選べるマイコン通信規格 — I2C のアドレス・ACK の基礎
- 電子工作に使っているオシロスコープ(OWON VDS3102L)|USBオシロの実力と限界・据え置き機(RIGOL DHO804)との機能比較 — 今回の電源・水晶・しきい値の測定に使ったオシロ
参考
- sigrok-pico release フォルダ(GitHub) —
pico_dig26.uf2などの配布 UF2(Pico 既定設定PICO_BOARD picoでビルド) - sigrok-pico release README(GitHub) — 配布 UF2 と、PulseView のチャンネル名が D2 から始まる注記
- sigrok-pico USER_GUIDE(GitHub) — サンプルレートの上限(ch 数とサンプル数ごとの表・8ch 以上は 60 MS/s 以下を推奨)
- sigrok Downloads — PulseView の nightly 版
- TXU0104 データシート(Texas Instruments) — VT+ / VT− / ΔVT、VCCA が 100mV 未満で出力 Hi-Z
- AMS1117 データシート(Advanced Monolithic Systems) — 出力電圧、Stability 節(22µF タンタル)
- RP2040 Datasheet(Raspberry Pi) — 内蔵 LDO と DVDD の範囲、IOVDD の上限、USB マスストレージのブートローダと UF2 の形式(2.8.4 節)
- Hardware design with RP2040(Raspberry Pi) — 対応フラッシュ(2.6 節)と
boot2_w25q080の位置づけ - boot2_w25q080.S(pico-sdk) — Pico 用の第2段ブートローダ
- SEN6x データシート(Sensirion) — SEN63C の I2C アドレス 0x6B(7bit)、最大 100kbit/s、CRC-8 の仕様
- SK13D07VG5(LCSC C393948) — VREF 切替に使ったスライドスイッチ
基板提供:JLCPCB(PCB 製造・部品実装)