コグノスケ


link 未来から過去へ表示  link 過去から未来へ表示(*)

link もっと前
2024年1月12日 >>> 2024年2月11日
link もっと後

2024年1月12日

M5Stamp C3のAD端子

目次: Arduino

M5Stamp C3で遊んでいるとプログラムが妙に遅くなることがあって気になります。AD端子が関わっているようです。原因を調べてメモしておきます。

まず全力を見るためdigitalWrite()でGPIO出力のHIGH <-> LOWを往復させるだけのスケッチ(Arduinoはボードで動かすプログラムのことをスケッチと呼ぶ)を作成し、出力がHIGH区間の幅(=ループ1回の処理に掛かる時間)をオシロスコープで計測したところ約7.6usでした。


M5Stamp C3のピン配置図(M5Stack社のサイトから転載)

M5Stamp C3のピン配置図を見るとA/D変換に対応した端子は0, 1, 4, 5の4つです。先ほどのスケッチにA/D変換対応端子の読み出し(=処理が遅くなる容疑者)を順に追加して、同様にループ1回の処理に掛かる時間を計測します。

  • digitalWrite()のみ: 7.6us
  • analogRead(0): 64.0us
  • analogRead(0), (1): 118.0us
  • analogRead(0), (1), (4): 176.0us
  • analogRead(0), (1), (4), (5): 20.8"ms"

どういう訳かanalogRead(5)だけが異常に遅く、読み出し値も常に0で正常動作していないように見えます。とりあえずこの端子は使わないことにしましょうか……。

もうひとつのA/D変換対応端子の読み出しAPIであるanalogReadMilliVolts()の時間も計測しましょう。読みだした値をmV単位に換算する処理が必要なので、処理時間はanalogRead() < analogReadMilliVolts()になるはずです。

  • analogRead(0): 64.0us
  • analogReadMilliVolts(0): 80.0us

割り算が要るのでそこそこ重い処理だと思いますが、16us(160MHz換算で2560クロック)も掛かるんですね。迂闊に連打しない方が良さそうです。

編集者:すずき(2024/01/13 15:12)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年1月13日

自分のドメインとGmailとDNSのSPFレコード

目次: 自宅サーバー

Gmailのメール受信ポリシーが2024年の2月で変更されるというニュース(Gmailユーザへメールが届かなくなる?Googleが発表した「新しいメール送信者のガイドライン」とDMARC対応を解説! - NRIセキュア ブログ)を思い出しました。

自分のドメインからGmailにメールを送ることはほとんどないですが、全く送れないのも困りそうです。試しにGmailに自分のドメインのメールアドレスからメールを送ったところエラーが返ってきました。もうポリシーが変更されているのでしょうか?

とりあえずDNSの設定を変更してSPF(RFC 7208, Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1)レコードを追加します。送信元がメールサーバーのIPと一致しなければ、全部受信拒否してOKという強気の設定にしました(バリュードメインの設定パネル用の書式で書いています)。

追加したSPFレコード
txt @ v=spf1 ip4:219.94.129.142 -all

設定後しばらく待って(少なくともDNSのTTLに指定した秒数以上)からGmailにメールを送ったところ正しく届いていました。良かった良かった。

設定の意味がわからないときは

SPFレコードの設定を解説してくれているブログ(送信ドメインを認証するためのSPFレコードに詳しくなろう - SendGridブログ)が参考になりました。

活きた設定例を見たいときはプロバイダ各社のSPFレコードを見ると良いと思います。SPFはTXTレコードの一種なので、TXTレコードをDNSに問い合わせます。

WAKWAKのSPFレコード
$ dig wakwak.com TXT
(略)

;; QUESTION SECTION:
;wakwak.com.                    IN      TXT

;; ANSWER SECTION:
wakwak.com.             86400   IN      TXT     "v=spf1 ip4:211.9.226.0/25 ip4:211.9.226.128/26 ip4:211.9.227.0/25 ip4:211.9.227.160/27 ip4:211.9.230.0/23 ip4:211.132.128.0/23 ip4:211.132.130.160/28 ip4:211.132.130.132/31 ip4:211.132.130.208/31 ip4:219.103.130.0/24 ip4:219.103.131.128/26 ~all"

;; AUTHORITY SECTION:
wakwak.com.             73658   IN      NS      ns2.wakwak.com.
wakwak.com.             73658   IN      NS      ns1.wakwak.com.

;; ADDITIONAL SECTION:
ns1.wakwak.com.         37518   IN      A       211.9.226.37
ns2.wakwak.com.         37518   IN      A       211.9.226.101

理由はわからないですが、プロバイダのSPFレコードを見るとディレクティブ(レコードの最後の部分)に~allを使っていることが多いです。

今回はkatsuster.netのSPFレコードのディレクティブを-all(ルールに合致しなければ全部受信拒否)にしましたが、世の中のプロバイダ同様に~all(ルールに合致しなくても受信拒否しない)でも良いのかもしれません。

編集者:すずき(2024/01/31 23:21)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年1月14日

USB Type-C充電器の置き換え

USB Type-Cの充電器を3つほど購入しましたので、メモを残しておきます。

  • Anker A2663113(Nano II 65W、USBポート: Cx1)
  • Anker A2667N11(PowerPort III 3-Port 65W、USBポート: Cx2 + Ax1)
  • ELECOM MPA-ACCP4465BK(USB Power Delivery 65W キューブAC充電器、USBポート: Cx2 + Ax1)

Anker Nano IIはLenovo ThinkPad E480のACアダプターを置き換えるために買いました。ThinkPad E480付属のACアダプタはやや大きいため、Nano IIのようなコンパクトな充電器はありがたいです。

Anker PowerPort IIIはスマホやタブレットの充電に長らく使ってきたAUKEY PA-Y12(72W Charging Station、USBポート: Cx1 + Ax2)の置き換えです。出力は負けますがコンパクトでありがたい限りです。時代の進化を感じます。

AUKEY Charging Stationに比べると、Anker PowerPort IIIはType-Aポートが-1でType-Cポートが+1です。以前ならType-Aポートが多い方が嬉しかったのですが、最近は我が家もType-Cでの充電に対応した機器が多くなって、AでもCでもどっちでも問題なくなりました。

ELECOMキューブ充電器は旅行で持っていく用に買いました。3ポートあるのにコンパクトでとても良いです。

ただ1点気になるのは、Type-CポートとType-Aポートの抜き差しを繰り返すとまれに充電制御がおかしくなる?現象です。Type-CポートのUSB-PD出力が5Vに張り付いてしまい、他のポートを空けても戻らなくなることがありました。コンセントから外して再度電源を投入すると直ります。何か条件があるのかな?

編集者:すずき(2024/01/15 22:55)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年1月24日

Windows Updateが0x80070643エラーで失敗し続ける

最近、家で使っているWindows 10 22H2にてWindows UpdateのKB5034441という更新のインストールにずっと失敗していて、毎回0x80070643というエラーが出ます。しばらく無視していましたが鬱陶しいので対策することにしました。

MicrosoftのサイトにあるKB5028997(KB5028997: WinRE更新プログラムをインストールするためにパーティションのサイズを手動で変更する手順)によると、回復パーティションのサイズを250MB増やしなさいとのこと。

やたら手順が多く面倒なので、より簡単そうなKB5034957(KB5034957: CVE-2024-20666 のセキュリティの脆弱性に対処するために、展開されたデバイスの WinRE パーティションを更新する)を試しました。

KB5034957の説明によれば、

  • スクリプトをPatchWinREScript_2004plus.ps1という名前で保存
  • Update用の*.cabファイル(※)をダウンロード
  • PowerShellから実行

だけで良いはずです。

(※)カタログ(Microsoft Updateカタログ)から2024-01 Dynamic Update for Windows 10 Version 22H2 for x64-based Systems (KB5034232)を探します。

実行したけどだめだった

やってみると下記のエラーで怒られますので、設定を変えなければいけないようです。

PowerShellスクリプトを実行したらエラー
PS C:\users\katsuhiro\desktop> .\PatchWinREScript_2004plus.ps1

.\PatchWinREScript_2004plus.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\users\katsuhiro\d
esktop\PatchWinREScript_2004plus.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://g
o.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\PatchWinREScript_2004plus.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

エラーメッセージが示すリンク先(実行ポリシーについて - PowerShell | Microsoft Learn)を見ると、この問題を解決するには管理者権限で実行したPowerShellにて、Set-ExecutionPolicyで設定を変えなされとのこと。なるほど……?とりあえず現在の設定のRestrictedより制限を1つ緩めたRemoteSignedにしました。

実行ポリシーを変更
PS C:\users\katsuhiro\desktop> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y

PS C:\users\katsuhiro\desktop> Get-ExecutionPolicy

RemoteSigned

スクリプトを実行すると色々ログが出たあとに、Delete mount direcotryと出ました。成功したのかな?ちなみにもう1回実行しようとすると、前にもやっただろ?と言われて動作しません。良くできておりますね。

2回目の実行はエラーになる
PS C:\users\katsuhiro\desktop> .\PatchWinREScript_2004plus.ps1

コマンド パイプライン位置 1 のコマンドレット PatchWinREScript_2004plus.ps1
次のパラメーターに値を指定してください:
(ヘルプを表示するには、「!?」と入力してください。)
packagePath: windows10.0-kb5034232-x86_3f9ddcafa903e4dd499193a851ecacbe79d842b3.cab
01/25/2024 03:36:11 - This script was previously run successfully

これで万事解決と言いたいところですが、更新KB5034441のインストールは未だに成功しません。ええー、だめじゃん……!

手動でパーティションを拡大

同じエラーが出ているということは、まだ回復パーティションのサイズが足りないのでしょうか?とはいえ先程使ったPowerShellスクリプトをもう1回実行しても、2回目は何もしません。

スクリプト改造するのもダルいので、観念して手動で回復パーティションのサイズを拡大したところ、あっさりWindows Updateが成功しました。パーティションサイズの拡大の手順は、先ほども挙げたKB5028997(KB5028997: WinRE更新プログラムをインストールするためにパーティションのサイズを手動で変更する手順)の通りです。


KB503441インストール成功

Windows Updateが変なエラーで止まらなくなって、嬉しいは嬉しいですけど、回復パーティションはサイズが増え803MBになってしまいました。1GB近くも何を保存しているんでしょうね??

編集者:すずき(2024/01/26 12:10)

コメント一覧

  • 通りすがりさん(2024/01/27 14:05)
    Powershellで解決しなかったのは、更新履歴のスクショ見ると64bitOSの環境のようですが、PowerShellで適用されようとしているcabファイルは32bit版のようなので、そのせいではないでしょうか?
  • すずきさん(2024/01/28 11:35)
    ご指摘ありがとうございます。確かに間違ってますね。

    しかしエラーっぽいものは出なかった(2回目の実行では適用済みだと言われた)のは、その辺のチェック機構がないんでしょうか……。うーん……。
  • えはらさん(2024/02/12 15:00)
    Powershellのスクリプトは以下のレジストリの値が1かどうか見てるだけなので、エディタで1以外(0とか)にすれば再実行できますよ
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PushButtonReset
    自分もcabファイルをミスってDLして再実行しました。でも上手くいかず。
    大人しく回復パーティション増やします…
  • すずきさん(2024/02/13 11:48)
    ありがとうございます。
    私のPCはもうKB503441のインストールに成功してしまったので試せませんが、別のPCでハマったときに使いたいと思います。
  • KKKさん(2024/02/19 02:25)
    私もエラーで困ってます
    手動での回復パーティションのサイズ拡大は、初心者には無理です
    簡単にできる方法を教えてください。
  • KKKさん(2024/02/19 02:30)
    追伸です。
    ネットで調べたらマイクロソフトさんが修正アップデートを考えているそうですが....。
    待っていたほうがいいのでしょうか?
    そのへんも含めて教えてください。
    お願いします。
  • すずきさん(2024/02/19 18:37)
    簡単にできる方法はPowerShellのスクリプト以外は知らないです。
    Microsoftのアップデートについては知りません。
open/close この記事にコメントする



2024年1月28日

Bluetoothドングル

目次: Arduino

PCとM5Stack/M5StampをBluetooth LEで接続したいと思って、Bluetoothドングルを購入しました。さほど高価ではない&Linuxで動かないドングルがあるかも?と予想して、異なる商品を3つ買いました。Buffalo BSBT5D200(Bluetooth 5.0 + EDR/LE)、Buffalo BSBT4D200(Bluetooth 4.0 + EDR/LE)、Princeton PTM-UBT7X(Bluetooth 4.0 + EDR/LE)です。

一番新しいカーネルが動いているDebian Testing(Linux 6.5.13とBlueZ 5.71)のマシンで試してみましょう。

LinuxとBlueZのバージョン
$ uname -a

Linux blackbird 6.5.0-5-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.13-1 (2023-11-29) x86_64 GNU/Linux

# bluetoothd --version

5.71

購入した3つのドングルそれぞれで、Bluetooth LEデバイスのスキャン(hcitool lescan)と、LEデバイス情報の取得(hcitool leinfo)を行ったところ、Bluetooth 5.0対応の一番新しいと思われるBSBT5D200だけ動きがおかしいです。悪い予想が当たってしまいました。

BSBT5D200だとhcitool leinfoがエラーになる
# hcitool -i hci0 leinfo (MACアドレス)

Requesting information ...
Could not create connection: Input/output error

BSBT5D200だけhcitool lescanが凄まじく遅いし、hcitool leinfo (MACアドレス)を実行するとI/Oエラーになります。あらら……。

幸いなことにBSBT4D200とPTM-UBT7Xは正しく動くので、しばらくこちらを使います。

編集者:すずき(2024/02/10 23:00)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年1月31日

自分のドメインとGmailとDNSのDKIM, DMARC

目次: 自宅サーバー

Gmailのメール受信ポリシーが2024年の2月で変更されるというニュース(Gmailユーザへメールが届かなくなる?Googleが発表した「新しいメール送信者のガイドライン」とDMARC対応を解説! - NRIセキュア ブログ)の対応の続きです。

Gmailに大量にメールを送る人(5000通over)でなければSPFだけでも良いらしいです。が、さくらインターネットがDKIMに対応してくれました(DKIM署名、DMARCを設定したい - さくらのサポート情報)し、せっかくなので使ってみます。

DKIM Keyレコード

DKIM(RFC 5672, RFC 4871, DomainKeys Identified Mail (DKIM) Signatures)はSPFとは異なりメールサーバーの設定が必須です。仕組みとしては、

  • 送信側メールサーバー(さくらインターネット)にRSA秘密鍵を登録
  • DNSサーバーにRSA公開鍵、ドメイン名を登録(DKIM Keyレコード)
  • 送信側メールサーバー(さくらインターネット)はメールヘッダにドメイン名と署名を追加
  • 受信側メールサーバー(Gmail)はDKIM Keyレコードから公開鍵を取得、メールヘッダの署名を検証し改ざんがないことを確認

こんな感じみたいです。間違ってたらごめんなさい。メールサーバーの設定はさくらインターネットの説明通りに設定すれば良いです。ログインしてコントロールパネルからDKIM署名を有効にし、秘密鍵を作成するボタンを押します。簡単でありがたいです。

DNSサーバーのTXTレコードにDKIM Keyレコードを追加します(バリュードメインの設定パネル用の書式で書いています)。"p="タグの値には公開鍵を書きますが、長いので省略します。

追加したDKIMレコード
txt rs20240131._domainkey.katsuster.net v=DKIM1; k=rsa; p=(略)

先頭にあるrs20240131という謎の文字列はセレクタというそうです。RFCだと場所とか時間とか個人を表すものにする例が書かれています。さくらインターネットの場合はDKIM鍵を作成した日になるみたいですね。


DKIMセレクタの確認(さくらインターネットのコントロールパネル)


DKIM署名の確認(メールヘッダの一部から抜粋)

セレクタ文字列自体にあまり意味はなくて、メールサーバーがメールヘッダに追加するDKIM-Signatureの"s="タグの値と一致していることが重要です。

DMARCレコード

最後にDMARC(RFC 7489, Domain-based Message Authentication, Reporting, and Conformance (DMARC))レコードを設定します。

追加したDMARCレコード
txt _dmarc.katsuster.net v=DMARC1; p=quarantine; aspf=r; adkim=r; rua=mailto:(略)

DMARCはメールの送信元の改ざんや詐称を防ぐ仕組みですが、DMARC自体が何かする訳ではなく実際にはSPFとDKIMの合わせ技です。DMARCはポリシー適用の厳密さだったり、違反していたらどうしたら良いか?だったりを宣言しています。なのでSPFレコードとDKIMレコードが正しく設定できている必要があります。

Gmailに送って確認

DMARCの設定をしたらGmailにメールを送り、メールヘッダを確認します。

Gmailの認証結果
Authentication-Results: mx.google.com;
       dkim=pass header.i=@katsuster.net header.s=rs20240131 header.b=uzgJOfTY;
       spf=pass (google.com: domain of (略) designates 219.94.129.142 as permitted sender) smtp.mailfrom=(略);
       dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=katsuster.net

SPF, DKIM, DMARCともに無事passしました。しばらくこれで運用したいと思います。

編集者:すずき(2024/02/02 01:20)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年2月2日

SSLに対応

目次: 自宅サーバー

今更感がありますが、このサイトもSSL対応にしました。ブラウザに「安全ではない接続です!」と怒られなくなりました。まあ、それだけですね……。


SSL対応

SSL証明書は年990円のJPRSドメイン認証型SSLにしました。とてもお安いです。購入も簡単で、さくらインターネットからボタン1つで買えました。買った後にLet's Encryptを使えばタダだったのでは?と気づきましたけど、気にしないことにします。

日記システムも直した

サーバー側の設定以外に日記システム側も改修が必要です。一部のリンクや画像のURL出力などでhttpに決め打ちしていた部分があって、http経由/https経由でアクセスするファイルが混在していました。ブラウザはこのようなサイトを表示させると「完全に安全ではない!」と警告してくれます。良く見てます。ありがたい。

さらに面倒なことに自宅に置いているミラーサーバーはSSL非対応なので、手あたり次第httpを全部httpsに置換するとミラーサーバーの表示が崩壊してしまいます。サイトごとにhttp経由/https経由を設定できるように変更しましょう。

編集者:すずき(2024/02/02 01:54)

コメント一覧

  • hdkさん(2024/02/02 08:54)
    さくらのレンタルサーバの設定でLet's Encryptを有効にしただけでほとんど何もした記憶がない... しかし最近のデスクトップ版Firefoxは http:// と指定しても https:// で開くんですね。Android版Firefoxはプロトコル省略すると未だに黙って http:// なのに。
  • すずきさん(2024/02/02 18:17)
    サーバー側の設定はとても簡単でした。ちょっと苦戦したのはこの日記システムがいまいちなのと、ミラーサーバーを置いているのが原因ですね。

    そういえばテストしていて、ChromeとFirefoxでURLのプロトコル指定の挙動が違うことに気づきました。
    Chrome: httpは表示する、httpsは表示しない
    Firefox: httpは表示しない、httpsは表示する
open/close この記事にコメントする



2024年2月7日

複数の音声ファイルのラウドネスを統一したい

PCやデジタル音楽プレーヤーで音楽を聞いていると、曲によって音量の大小が激しく違っていて鬱陶しいです。片や何も聞こえず、片やリスナーの耳を壊す勢いの爆音で同じ音量で聞き続けるのが困難です。

人が感じる音の大きさをラウドネス(Loudness)と呼びますけども、全ての曲のラウドネスを一定レベルに修正すれば、極端な沈黙や爆音を避け同じくらいの音量で楽しめるはずです。ラウドネスの修正を行うツールはffmpeg-normalizeが簡単でわかりやすかったです。Pythonで実装されていて内部ではffmpegのloudnormフィルターを使っているそうです。

インストール方法はpipを実行するだけで簡単です。ローカルのPython環境に影響が及ぶのが嫌な方はvenv(venv - 仮想環境の作成 - Python 3.12 ドキュメント)を作成し、仮想環境にインストールすると良いです。

ffmpeg-nomalizeのインストール
$ python3 -m venv ./venv
$ source ./venv/bin/activate
$ pip install ffmpeg-normalize

基本的な使い方はffmpeg-normalize (入力ファイル名) -o (出力ファイル名)ですが、デフォルトパラメータがターゲットレベル-23LUFS、サンプリングレート192kHz、Matroska(拡張子.mkv)形式となっています。サンプリングレートとかは好み次第ですけど、ターゲットレベル-23LUFSはすっっっごい音が小さいです……。最初試したときに、音が消えてしまうぞ?おかしいなあ??と悩みました。

これらの設定を変更するときは、-tオプションでターゲットレベルを、-arオプションでサンプリングレートを、-extオプションで出力形式を変更してください。

2パス処理を諦めないで

基本的にffmpeg-normalizeは2パス(1回目でファイル全体を解析、2回目でノーマライズ処理)でノーマライズを試みますが、曲のラウドネスの幅がターゲットLRA(Loudness Range、曲全体のラウドネスの幅、デフォルトは7.0LUFS)を超えると2パスのノーマライズを諦めてしまいます。

LRAを超えたときの警告メッセージ
$ ffmpeg-normalize test.mp3

WARNING: Output directory 'normalized' does not exist, will create

★★↑出力ディレクトリを指定しないとnormalizedというディレクトリを自動的に作る


WARNING: Input file had loudness range of 7.8. This is larger than the loudness range target (7.0). Normalization will revert to dynamic mode. Choose a higher target loudness range if you want linear normalization. Alternatively, use the --keep-loudness-range-target or --keep-lra-above-loudness-range-target option to keep the target loudness range from the input.

★★↑2パスを諦めたよ、というWARNING


WARNING: In dynamic mode, the sample rate will automatically be set to 192 kHz by the loudnorm filter. Specify -ar/--sample-rate to override it.

★★↑2パスを諦めてdynamicモードになると192kHzで再エンコードし始める

WARNINGを見ると、この挙動を回避したければ--keep-lra-above-loudness-range-targetオプションを付けてねと書いてありますが、オプションによる悪影響の有無が良くわかりません。変換後の音楽をいくつか確認した限りでは、破綻やクリッピングが発生している様子はなさそうです、たぶん付けておいて良いのかな……??

複数ファイルの扱い

複数のファイルを処理する際はシェルスクリプトを組んだほうが良いと思います。ffmpeg-normalizeに複数ファイルを渡すと1つのディレクトリ(デフォルトではnormalizedという名前のディレクトリ)に出力するからです。

例えばアルバムごとにディレクトリを分けて音声ファイルを格納している場合に困ります。ノーマライズ後のファイルが1つのディレクトリにまとめられてしまうと、再度アルバムのディレクトリに分配しなければならず面倒です。

複数ファイルを処理するワンライナースクリプト

for i in */*.flac; \
  do echo $i -----; \
  ffmpeg-normalize -t -14 --keep-lra-above-loudness-range-target \
    -ar 48000 -ext wav "$i" \
    -o "`echo $i | sed -e 's/flac\$/wav/g'`"; \
done

全アルバムディレクトリのflacを、ノーマライズしたwavに変換するならこんな感じです。適当スクリプトなので入力と出力を同じファイル名にできません。一度別名を経由して元の名前にリネームするように改造していただければと思います。

編集者:すずき(2024/04/24 02:52)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年2月9日

気難しいM5Stamp C3のAutomatic Bootloader

目次: Arduino

M5Stamp C3の接続を変更したところ、Arduino Sketchが書き込めなくなってしまいました。こんなエラーで怒られます。

M5Stamp C3にてArduino Sketch書き込みエラーのログ
Sketch uses 1003156 bytes (76%) of program storage space. Maximum is 1310720 bytes.
Global variables use 38676 bytes (11%) of dynamic memory, leaving 289004 bytes for local variables. Maximum is 327680 bytes.
esptool.py v4.5.1
Serial port COM3
Connecting......................................

A fatal error occurred: Failed to connect to ESP32-C3: Wrong boot mode detected (0xc)! The chip needs to be in download mode.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
Failed uploading: uploading error: exit status 2

回避策としてはboot modeを変えれば良いです。ジャンパーケーブルなどでGPIO 9をLowにして(隣のGNDと繋ぐと簡単)リセットします。リセットしたらジャンパーケーブルは外しましょう。GPIO 9はPull-upされているので、未接続だと勝手にHighになります。


M5Stamp C3のGPIO 9の位置

リセット後のシリアルに下記のようにROM serial bootloader for esptool Modeに入ったと表示されれば成功で、Arduinoなどから書き込みができる状態です。

ROM serial bootloader for esptool Modeのときのシリアル出力
ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0x1 (POWERON),boot:0x4 (DOWNLOAD(USB/UART0/1))
waiting for download

これでArduino Sketchが書き込みできますが、いちいちジャンパーケーブル挿してリセットなどやっていられません。面倒臭すぎます。そもそも今までそんなことしていませんでした。

Automatic Bootloader

M5Stamp C3が採用しているEspressif ESP32-C3というSoCの書き込みツールesptoolは、Automatic Bootloaderといって先ほど紹介した「GPIO 9をLowにしてリセット」という操作を不要にする機能、つまりDownload Modeに勝手に切り替えてSketchを書き込んで、Normal Bootしてくれる素敵な機能があります(Boot Mode Selection - ESP32-C3 - esptool.py latest documentation)。

とても便利なAutomatic Bootloaderですが、USB接続のトポロジーに敏感で結構気難しいやつだということがわかりました。私の環境ではUSBハブを介して接続すると発動しなくなります。なんでだー。

  • CPU: AMD Ryzen 7 2700
  • マザーボード: ASUS ROG STRIX B450-F GAMING
  • OS: Windows 10 Pro 22H2
  • USBポート: フロントパネル用ポート(オンボードコネクタから引き出すタイプ)

Automatic Bootloaderがうまく行くパターンはRootハブに直接接続したときです。接続例を示します。


Rootハブに直接M5Stamp C3を接続

うまく行くとログはこんな感じになります。

Automatic Bootloaderが正常動作したログ
Sketch uses 1003156 bytes (76%) of program storage space. Maximum is 1310720 bytes.
Global variables use 38676 bytes (11%) of dynamic memory, leaving 289004 bytes for local variables. Maximum is 327680 bytes.
esptool.py v4.5.1
Serial port COM3
Connecting....
Chip is ESP32-C3 (revision v0.3)
Features: WiFi, BLE
Crystal is 40MHz
MAC: 84:f7:03:27:f8:14
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
(...以下略...)

うまく行かないパターンはUSBハブを介して接続したときです。接続例を示します。


USBハブを経由してM5Stamp C3を接続

ハブに依存するかもしれないと思い、USBハブはUSB 2.0とUSB 3.0のものを試しましたがどちらもダメでした。嫌な感じの挙動です。バグっぽいなー。

複数台接続はOK

もう一つの可能性として、M5Stamp C3を複数台繋ぐこと自体がだめな可能性を考えました。が、こちらは特に問題ありませんでした。せめてもの救いですね。

1台でも2台でも、USBハブを入れるとAutomatic Bootloaderが無効になってしまうようです。接続したい台数は3台なんですが、フロントポートは2つしかありません。困ったね……。

編集者:すずき(2024/02/10 23:00)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2024年1月12日 >>> 2024年2月11日
link もっと後

管理用メニュー

link 記事を新規作成

<2024>
<<<01>>>
-123456
78910111213
14151617181920
21222324252627
28293031---

最近のコメント5件

  • link 24年6月17日
    すずきさん (06/23 00:12)
    「ありがとうございます。バルコニーではない...」
  • link 24年6月17日
    hdkさん (06/22 22:08)
    「GPSの最初の同期を取る時は見晴らしのい...」
  • link 24年5月16日
    すずきさん (05/21 11:41)
    「あー、確かにdpkg-reconfigu...」
  • link 24年5月16日
    hdkさん (05/21 08:55)
    「システム全体のlocale設定はDebi...」
  • link 24年5月17日
    すずきさん (05/20 13:16)
    「そうですねえ、普通はStandardなの...」

最近の記事3件

  • link 24年6月27日
    すずき (06/30 15:39)
    「[何もない組み込み環境でDOOMを動かす - その4 - 自作OSの組み込み環境へ移植] 目次: RISC-V目次: 独自OS...」
  • link 22年12月13日
    すずき (06/30 15:38)
    「[独自OS - まとめリンク] 目次: 独自OS一覧が欲しくなったので作りました。自作OSの紹介その1 - 概要自作OSの紹介...」
  • link 21年6月18日
    すずき (06/29 22:28)
    「[RISC-V - まとめリンク] 目次: RISC-VSiFive社ボードの話、CoreMarkの話のまとめ。RISC-V ...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 06/30 15:39