OpenOCD小ネタ28 -もうすぐ0.12.0になりそう-

8月の終わりに入ってから残業規制出向規制すべて解禁となったおかげで
鬼シフtじゃなくてガンガン仕事入れまくったおかげでぶろぐのネタが全く
すすんでません…

特にCodeLiteを使ったGDBデバッグ手順の公開を待ってる方もいるかも
しれませんが今やってる副業(本業は二次裏メイド)の案件がもう少しで
片付くので10月中くらいには何とかしますので耐えてください…

ということでOpenOCDが0.12.0になったなりそうなのでちょっとめぼしい点を
2,3点かいつまんでお茶を濁します…



●SWDマルチドロップのサポート…がまだできてねぇ!
RaspberryPiPicoの復旧でOpenOCDでPicoをデバッグしたいという需要も増え、
つい最近SWDマルチドロップのサポートが強化されておりました!私もさっそく
手持ちのRaspiPicoで試してみました!



ファ〇ック!!!!!111!1


だめだぁ〜〜ぜんぜんまともに動いてないじゃん…


皆様ご存じとは思いますがRaspi公式のgithubで公開されているRaspiPico用の
ブランチはすでに昨年初めの時点でSWDマルチドロップられるし普通にデバッグ
できるしフラッシュも余裕で書き込み出来ちゃいます・・
OpenOCDの本家さん頑張ってくださいよ〜ねむいさん多忙すぎて最近OpenOCDの
ソースから離れちゃったからねむいさん以外の人ががむばってほしい
(☝他人任せ)


しかもRaspi公式のブランチは一昔前の0.11系のやつで最悪なことにftdiなどの
interfaceの設定に使用するcfgファイルが現在の0.12系の奴と互換性がありません
かつてはPi用のOpenOCDも同梱してたのですが現在は分離しております。
ねむいさんが公開しているOpenOCDは現在本家最新のコミットとRaspiPico専用
SWDマルチドロップ対応の物の二つを紹介しております。

・本家最新コミットのビルド
・RaspiPico専用ブランチのビルド

何とか両者が統合してくれることを願うばかりですね〜…ほかにもnuvotonや
ESP32などのブランチも宙ぶらりんになってるのでESP32のほうはだいぶシンクロ
してきてるようですが頑張っていただきたいですね…(他人任せ



●OSなしでデバッグ時にエラーメッセージが延々と流れるのが治ってた
読んで字のごとくです

デバッグ続行自体は可能な動作に致命的なもはないのですがステップ実行のたび
延々と"No RTOS could be auto-detected!"とエラーが垂れ流され続けるので、
ねむいさんも業を煮やして結構苦しい修正をしてました。

diff -urN b/src/rtos/rtos.c a/src/rtos/rtos.c
--- b/src/rtos/rtos.c 2018-09-09 21:28:02 +0900
+++ a/src/rtos/rtos.c 2018-09-09 21:19:18 +0900
@@ -245,6 +245,7 @@
/* Autodetecting RTOS - try next RTOS */
if (!rtos_try_next(target)) {
LOG_WARNING("No RTOS could be auto-detected!");
+ os->symbols = NULL;
goto done;
}


公式の修正はもうちょっとスマートですがもちろん問題も修正されスムーズに
デバッグできたので満足しております。9月末までの修正を盛り込んだOpenOCD
バイナリ
は上でも紹介しましたがおきぱにて公開しておりますので皆さまガンガン
お使いください!





いろいろ試す52

●CodeLite+GDBを使ったARMデバッグ環境移行加速す!


oh...myコンブ・・・とうとうこの日がやってきた…
InsightだとGCC12からサポートされたdwarf5フォーマットのelfが読めない…
ARM-GCCのバグのせいかdwarf4形式のリンカオプションつけてもdwarf5・・・

orz



というわけでねむいさんのぶろぐ旗揚げから13年間続けてきたInsightによる
デバッグ法
に別れを告げ、かねてより評価中のCodeLiteによるGDBデバッグ
環境移行と同手順書作成に本腰を入れております!



移行で一番の障壁はworkspaceの概念でしたが…幸いにもディレクトリを遡る
相対アクセスが問題なくできたのでmain.elfを相対参照するようにしたら
デバッグするたびいちいち設定しなおす必要もなく同一のworkspaceファイル
の使いまわしができそうです!



CodeLite.exeはなんでかgnumake3.81から直接召喚できなかったのでwindowsの
CMDでの機能で代用しました。ちゃんと引数付きで呼び出しもできたので
ここで上で説明したworkspaceファイルを相対アクセスで開きます。


実際のデバッグ画面です。
ソースレベルでステップ実行とかの基本は当たり前の余裕ですね。


InsightではWin10では即堕ちして使いものにならなかったCPUレジスタ参照は
バリバリできています。


F7,H7の浮動小数点レジスタも楽勝です♨

…なのですがなんでかこれらレジスタ表記は10進数(一部は16進数)固定で、
進数の切り替えができません。Insightでは柔軟にできてたのでここに
ついては要改善ポインツですね。


また、周辺I/Oのレジスタ値を直接参照するIOView機能とかも一応使えます。
IOViewは周辺レジスタをconst宣言しているせいか、変数参照ウインドウから
直接値を変えられませんでした。
constでも値を自由に変えられちゃうInsightのほうが逆にダメだったのかも。


回避策としてOutputウインドウからコマンド直接入力で値を変えられます。
Outputウインドウと銘打ってますがGDBのコマンド入力も受け付けています。


そして特筆すべきはInsightとは違いGDBから完全に独立したGUIとして働くので
ARMだけではなく他のCPUコアでもそれ用のGDBさえあてがえば普通に使えます!
先月紹介したSTM8Lもご覧の通りばりばりデバッグ可能です!
ていうかSTM8Lの記事ぶん投げっぱなしですが来月がんばります!!!!


となるとESP32とAVRのデバッグ環境もCodeLiteで一括化できそうなので、特に
5年くらい放置してるESP32とかはやる気出てまた活動再開できそうな感じです☆
ARMマイコンビルド/デバッグ環境構築手順もCodeLite+GDBデバッグを主眼にした
2022年版に書き替えている最中ですのでこうご期待!


また、待ちきれない方に先んじてWin10環境下でCodeLite+GDBのデバッグ環境
対応のプロジェクトに更新しております。現在以下のものが対象です!
STM32H7-Disco
STM32F7-Disco
STM32F4-Discovery
STM32G0ベアメタル


●ARM-GCCがまたアップデートしていた。
まず、前回のいろいろ試すでアップデートされたGCCでビルドすると…

前回記事にしていたにかかわらずこれ気づかんかった…
ちゃんと検証してなかったのバレバレの私orz
これかなり致命的なバグでしたね…私のおきぱのプロジェクトがほぼビルド
不可能状態でした…すみません。
これ前回のいろいろ試すにも警告書いときます。

現行のGCC11.3ものは緊急修正が加わってちゃんとビルドできるようになってます。
が、冒頭のdwarf5の問題でInsightデバッグができなくなってますので要注意!


●AVRDUDEにパッチを投げたお話
これも9年越しの話なのですがねむいさんはJTAGKEY等のFT2232系のISP/JTAG
書き込みで、1セクタサイズ以下のサイズのバイナリを書こうとしたら正常に
書き込めないバグを見つけておりました。しかし、そんな超限定された条件、
例えば128kByteの容量を持つatmega1284p(フラッシュセクタサイズ256Byte)に
たった202バイトの容量のLチカプログラムを書き込むやつがいるだろうか?
という原因からか9年放置されていました。


が、オワコン化したかと思われたavrdudeがgithubに移行したとたんバリバリ
更新がかかりまくるようになり、9年前の問題が再び目に留まったのでわたしも
この問題に決着をつけるべく参戦を果たしました!!!
(☝お前AVR辞めたんちゃうんかいという突っ込みは一切なしで)

その後、管理者の人のコードレビューと別の修正が合体して正式にコミット
されています。


リンク先の議論にもありますがねむいさん的には符号付整数で比較を
行うと符号拡張で符号なし整数では思わぬでかい数字が入ってしまって
思ったような評価ができないのを危惧したのですが最終的に符号なし
整数同士の評価で終わるようにしてくれて実際に問題なく書き込みが
できるようになったのでよしとしましょう。

STM8Lはぢめました(まだはぢまってすらいない)

●STマイクロの8bitマイコンSTM8L



少し前に偽ATXMEGA128A1Uを掴まされた店から物のついでと同時に8Pinと
64PinのSTM8Lシリーズマイコンを購入しておりました。

かつてはVersaloonへの改造のため燃えないゴミと称してSTM8の部分は即廃棄して
いましたが、2022年の現在はまともな開発環境とかそろってそうだったので
手を出してみた次第でございます・・・しかし…


●STM8ライタ復活への道

しかし!ねむいさんはVersaloonへの改造のためにSTM8-discoveryのSTLinkの
部分をつぶしてしまっておりました!!!
STM8に書き込みデバッグするために
SWIMプロトコルを持つSTLink系デバッガハードが必要です!
さすが私!やらかした!だめだこりゃ!

でも私はSTM32系のDiscovery持ってるじゃないか、あれのSTLinkの部分使えば
SWIMを引き出せられるんじゃないかと思い出し手持ちのDiscovery基板やNucleo
基板を引っ張り出して調べてみました。


改造できる条件として、STLinkのファームがSTM8用のSWIMプロトコルが実際に
使用できること、そして基板上にパタンが出て改造しやすいことです。
NUCLEO系や最近のDiscvoeryではSTLink/V2-1のファームが動いており、それらは
ファームからも回路もオミットされているためこの時点でアウチです。


選んだのはSTM32F0Discoveryです(SWIM引き出し改造済み後の撮影ですが)
こいつはSWIM用の外部端子や構成回路こそはありませんが有り難いことに
SWIM向けに内部パタンは接続されており、最小限の配線をしてやればSWIMを
復活できるはず…!



そして根性の配線…ッ!
STM8S-DiscoveryのSWIM回路の真似して受動部品も装着です。
OpenOCDはすでにSTM8へのフラッシュ書き込みやデバッグ機能を持っているため、
ねむいさんの環境においてもたやすくできるはずです!
いざ勝負!



(注:STM32G0のプロジェクトになってますがmakefileをいじり、OpenOCDから
   STM8Lに書き込むようにしています。)

まぁ簡単にできるわけないよね。STM32F0DiscoveryのSTLink/V2のファームは
STM32のSWDに特化していてSWIMがファーム的に機能していませんorz
"STLINK V2J39S0"ってなっていますが"V2J39S0"の部分、J39がSWJのv39でS0は
SWIM機能ありませんって意味と解釈してください。

これ普通にSTLinkのアップデータでファームをあげてもJ39の部分が上がるだけ
なのでどう頑張ってもSWIMできません…


しかし…おそロシアの力を借りるとあら不思議(意味深)
STM8にも対応したデバッガーファームウエアが書き込まれてしまったでは
ありませんか!!しかもこの状態で最新ファームにもアップデート可能です!


おおっ!書き込み出来た!素晴らしい!V2J39S7となってSWIMが可能です!
もちろん従来のSTM32F0も書き込み可能!
流石モラルを真っ先に投擲機で投げ放つロシア!!おまえらのそういうとこだぞ!!
でもありがとう!!!!!


というわけで十数年前投げ捨ててしまったSTM8の書き込み機能を取り戻すため
かなりの労力を使ってしまったので肝心のSTM8ビルド環境については次回に
解説させていただきます…

XMEGAを使ってみる6 -どうしても外付けSRAMつけたかったので-

●XMEGAよ、やはりお前を救いたい
今から約10年前、ねむいさんはXMEGAをいじっておりましたがFatFsを実装し、SPIの
DMA化で力尽きました。ほんとは256kByteくらいのSRAMを外付けしたりしてやりた
かったのですが残念ながら当時購入したATXMEGA128A1ではチップ単体ではEBIを4PORT
SRAMモードで動作させてもアドレスバスに当たる一部のピンが外部に出ておらず、
SRAMを動作せしめることができませんでした(アドレスが1つだけでよいTFT-LCDとか
ならなんの問題もない)。

その後USB機能が付いたATXMEGA128A1Uが登場し、アドレスバスを別のポートに割り当て
できるようになっているとのことで手に入れようと試みて失敗したのが前回です

この半導体不足で何とか手に入れられないものかと思案した結果、部品がだめなら
製品を買えばよい!と至って久々にAliexpressでお買い物をしました。




MCUZONE製のATXMEGA128A1Uボード。USBブートローダはちゃんと動いたので本物です!


慎重にはがして載せ替えてみました。


ちなみにATXMEGA128A1のドアップ写真を。


オリジナルATXMEGA128A1


謎の縦じまがあるぱちもん。
ATXMEGA128A1UではなくATXMEGA128A1をリマークしたもの。


本物のATXMEGA128A1U!



●外付けSRAM

今回使用する外付けのSRAMは8bitバス,2Mbit(256kByte)のCY7C1010DV33-10ZSXIです。
10年以上前にデジキでかって塩漬けにして以来の活躍です。製造メーカのCypressは
すでにInfineonに食べられてしまっていますね。



SRAMも付けたXMEGA基板の表裏はこんな感じです…
二度とバスの配線とかやりませんよもう!



●回路とコード


すみません回路図めんどくさくて10年前から書いてませんが割り振り表はあるので
まねされる方はそれを参考にしてください。
TFT-LCD駆動用にCS0をつかってしまっているのでSRAMはCS1とします。


外付けSRAM用4Port-EBIの設定です。実行する関数はmain関数より早く実行した方が
良いので".init5"セクションに配置します。


EBIの設定のほかにheap領域は外部RAMで行えるようにheapの初期設定も行います。
__malloc_heap_start__malloc_heap_endにheap領域を示すアドレスを代入します。
__malloc_heap_endってなんで固定値0xFFFFなのかについては最後に解説します


また、上記のコードで書いてあった変数"__extram_end"はリンカスクリプト内で
定義します。コード内で値の設定を行うときは&を忘れずに。


以上で外付けSRAMを使う準備ができました。


●動いた!…しかし


載せ替えたXEGAにプログラムを書き込みFatfsの動作を確認です。
チップリビジョンはATXMEGAA1Uを示す'L'になってますね。


mallocで領域確保したりちゃんとできてますね★



特筆する点はFatFsの転送スピードです!
内蔵RAMは8kByteしかないので転送用のバッファも少ししか取れずDMAの恩恵に
預かれなかったのですが、外付けで32kByteとってやると断然違います!
これだけでもわざわざATXMEGA128A1Uを手に入れた甲斐がありました!

しかし…

●立ちはだかる16bitの壁

さて、上でさらっと述べましたが何も考えないで内蔵RAMのように気軽に使用できる
のはメモリのアドレスが0xFFFFまでです。つまり最大でも64kByteまでしかだめです。
今回の作例ではメモリアドレス0x005000から開始しているので0xFFFF-0x5000=0xAFFF
で、10進数に治すと45055Byte分しか楽に使えません。

そこから先の世界に踏み出そうとすると10年以上前に頭を抱えた24bitアドレス問題
直面することとなります。私の作例では一応24bitアドレスアクセスルーチンもテスト
の一部として入れております。DMAに関しては最初っから24bit分レジスタが用意されて
いるので心配はありません。

というわけでがんむばって256kByteのSRAMくっつけてたのがつけてから64KByte分
くらいしか得しないことを気づいてしまいましたが10年来心に抱え続けていたものに
決着をつけることができました。

世間はUPDIなAVR-DBシリーズに移行している中で盛大な寄り道をしてしまいましたが
今回頭を唸らせた経験はきっと役に立つでしょう(やばい思想にはまっている目で)。


今回の成果を反映したものをおきぱにおいておきます。忘れたころにXMEGA触る人に
少しくらい役に立つと期待しております。

いろいろ試す51

今回は8bitマイコン中心のネタになります。


●AVRDUDEの整備

新世代のupdiに対応したavrdudeはgithubに戦場を移してかつてとは比べ物にならない
速度でビシバシ修正が入りまくっております。

私もそれに対応すべくなるべく最新のコミットを常にpullしてビルドしたバイナリ
OpenOCDと同じく皆様に提供しております。

前回の記事の通り、USBシリアル変換でUPDIがお手軽にできてしまったのでavrdudeの
需要がかなり増加しておりavrdude目当てでぶろぐに来られるかたも増えておりうれしい
限りでございます。

宣伝ですがSTM32系のCortex-M系マイコンのねむいさん特製書き込みスクリプト付きの
OpenOCDバイナリも公開しておりますのでこちらもご利用ください☆


●ATXMEGA128A1"U"を使ってみるつもりだったが…

今年の春、思うことあってXMEGAを再び使う気持ちになり、ATXMEGA128A1の進化系である
ATXMEGA128A1"U"を入手して使用してみました…


ATXMEGA128A1"U"はU無しの物にUSB機能やその他修正を加えたものです。多分USB付き
だからUなのでしょうね…



デバイスIDはなんとATXMEGA128A1と同一です…間際らしい…


A1UのリビジョンはHか〜…A1と全く同じじゃん(←まだ気づいてない



しかし、その後いろいろいじって気づいたがねむいさんが本当に使いたかった4-Port
EBIのSRAMが使用できなかった…。具体的に言うとA1UはEBIがPORTFに割り振られており
A8~A15のアドレスバスが使用できるはずなのですができない!!!!!

唸ること1週間、AVRFREAKSの記事にATXMEGA128A1Uのチップリビジョンは'L'である
というコメントが…そしてもう一回入手したA1UのリビジョンIDを見直すと…


↑A1UはRev:LのはずなのにRev:H
あああAAあああああ!!!これA1UではなくてA1なのでは!?
もう一度チップ表面を見てみる


あれ…私がaliexpressで買ったA1UはA1の奴と見比べるとよく見ると真ん中あたり
削ってるような形跡…

リマーク品でしたー!クソァ1!!!1!!!

まぁこんな半導体不足のご時世でデジキもMOUSERもA1Uの在庫0なのにAliexpressから
すんなり買えるはずはないと思ったのですよぅ…

このネタは次回のA1U入手作戦に続きます…


●arm-gccがアップデート
今年の春先にarm-gccがgccバージョン11.2になってアップデートしています


今回からファイルサイズがメタクソにでかくなってるのでダウンロードの際は十分
ご注意下さい。スタティクライブラリを各コアごとにすべて用意しているのが原因の
ようです。ちなみにCortex-M系だけではなくLPC2388等のARM7TDMI等もビルド可能です。


●avr-gccもアップデート
avr-gccも12.1.0にアップデートしております。

こちらについては次回予定のATXMEGA128A1Uの記事で合わせて紹介させてたいだきます。


●STM8Lはぢめてます


ATXMEGA128A1U購入のついでに8pinSTM8LシリーズのSTM8L050J3M3も試用してます。
こちらもうまいこと使いこなせるようになったら紹介したいと思います。

ATTINY202(とその他)を使ってみる3 -UPDI難民問題解決の件-

●私の中でUPDI難民問題に終止符が!!
新しい世代のAVRシリーズは以前使用してきたISP,JTAG,PDI,TPI,dWireとは全く別の
プログラミング・デバッグインターフェース(UPDI)となっているのはご存じの通り
かと思います。ねむいさんもPDI,TPIまでは手持ちのデバッガ・ライタハードウエアで
で何とかしのげていたのですがUPDIに関しては市販の評価基板から線を引き出して
それに対応した特別なavrdudeを使用して茶を濁しておりました


そしてその後にpyUPDIというCOMポートの通信だけでUPDIのプログラミングをお手軽に
できる代物が世に広まり、嗚呼…これがavrdudeにも実装されたらなぁ…
…とずっと願っておりましたが今年に入ってついに!ついに!それが実現しました!!


●ハードウエアを用意する
avrdudeはsvnからgitに移行した時から鬼のような勢いでfixが入りまくり日々成長を
広げております。ねむいさんもgitからクローンしたやつからビルドして試してみました。
なお今回紹介するお手軽COMポートUPDIはavrdude内ではserialupdiと呼ばれているので
以下それに倣います。


使用するCOMポートについてはUSBシリアル変換チップが勿論使用できます。安物中華
チップでもそれなりに動きますが5Vトレラント高いボーレートが保証されてるFTDI系の
ものがやはり安心です(注:後述しますがFTDIに関してはドライバの設定必須)。

ねむいさんは写真の秋月製のFT23xモジュールを愛用しています。



そしてUPDI実現のための追加ハードウエアはたったこれだけ!
AVR側の電源は別口からとることを想定しております。また、FT234xなら+5V信号を
受けられるので、3.3~5Vの範囲ならば電圧レベル変換などの考慮も不要です。


こんな感じでユニバーサル基板のきれっぱを使用してコネクタと部品を実装して
脱着可能アダプター形式にしてみました。



●実際に使ってみよう

まずは私も使っているATTINY202を使用しましょう。ちなみに昨年夏位にpyUPDIが公表
されてからUPDIのハードルが一気に下がったせいか秋月で一瞬で売り切れてしましたが
半導体不足の波も超え今では安定して入手可能となっていますがたくさん買いすぎるなよ!

avrdudeはねむいさん特製ビルドのものを使用してください。最新のコミットのほかに
avrftdiのバグの修正やLUFAのAVRISP2エミュの不具合修正パッチもあてています。


avrdudeに与えるハードウエア名は"serialupdi"、使用するポートはCOM+ポート番号と
ボーレートを指定してください。



とその前に!
FTDI系のチップを使用する際はドライバの設定(デバイスマネージャからCOMポートのプロ
パティ->詳細設定)でBMオプションの待ち時間を1mSecにしないと本来のスピードが出ません。
これ何かというとFTDI系は送信バッファがそれぞれのデバイスの上限に達したらUSB転送
開始もしくは上記待ち時間(latency_timerという)の時間が過ぎたらとりあえずUSB転送
する仕様となっており、最小の1mSecにすればUSBフルスピードの1フレーム間隔(1mSec)で
とにかく隙間なく転送されることになりCPUパワーは食いますが少量のバイト数の転送の
場合に効率が良くなります。

jtag2updiのサイトに深い記述があるのでこちらも熟読してください。

> "C:¥Devz¥Coreutils¥bin¥make.exe" program
C:/Devz/AVR/avrdude/avrdude -v -p attiny202 -P com3 -b230400 -c serialupdi -U flash:w:main.hex

avrdude: Version 6.99-20211218
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch

System wide configuration file is "C:/Devz/AVR/avrdude/avrdude.conf"

Using Port : com3
Using Programmer : serialupdi
Overriding Baud Rate : 230400
avrdude: serial_baud_lookup(): Using non-standard baud rate: 230400 AVR Part : ATtiny202
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Memory Detail :

Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
prodsig 0 0 0 0 no 61 61 0 0 0 0x00 0x00
sernum 0 0 0 0 no 10 1 0 0 0 0x00 0x00
osccal16 0 0 0 0 no 2 1 0 0 0 0x00 0x00
osccal20 0 0 0 0 no 2 1 0 0 0 0x00 0x00
tempsense 0 0 0 0 no 2 1 0 0 0 0x00 0x00
osc16err 0 0 0 0 no 2 1 0 0 0 0x00 0x00
osc20err 0 0 0 0 no 2 1 0 0 0 0x00 0x00
fuses 0 0 0 0 no 9 10 0 0 0 0x00 0x00
fuse0 wdtcfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse1 bodcfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse2 osccfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse4 tcd0cfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse5 syscfg0 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse6 syscfg1 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse7 append 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse8 bootend 0 0 0 0 no 1 1 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 1 0 0 0 0x00 0x00
data 0 0 0 0 no 0 1 0 0 0 0x00 0x00
userrow usersig 0 0 0 0 no 32 32 0 0 0 0x00 0x00
flash 0 0 0 0 no 2048 64 0 0 0 0x00 0x00
eeprom 0 0 0 0 no 64 32 0 0 0 0x00 0x00

Programmer Type : serialupdi
Description : SerialUPDI

avrdude: UPDI link initialization OK
avrdude: NVM type 0: 16-bit, page oriented write
avrdude: Entering NVM programming mode
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% -0.00s

avrdude: Device signature = 0x1e9123 (probably t202)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (1592 bytes):

Writing | ################################################## | 100% 0.36s

avrdude: 1592 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: input file main.hex auto detected as Intel Hex

Reading | ################################################## | 100% 0.14s

avrdude: 1592 bytes of flash verified
avrdude: Leaving NVM programming mode

avrdude done. Thank you.


> Process Exit Code: 0
> Time Taken: 00:02

脱線しましたが書き込みはこんな感じです。
ATTINY202はROM容量が少ないので早いのか遅いのかよくわかりませんが…



ではAVR128DB28で12kByteくらいのバイナリを書き込んで確かめてみた
curiocity nanoのmDBG
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
C:/Devz/AVR/avrdude/avrdude -v -p avr128db28 -P usb -c pkobn_updi -U flash:w:main.hex

avrdude: Version 6.99-20211218
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch

System wide configuration file is "C:/Devz/AVR/avrdude/avrdude.conf"

Using Port : usb
Using Programmer : pkobn_updi
avrdude: Found CMSIS-DAP compliant device, using EDBG protocol
AVR Part : AVR128DB28
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Memory Detail :

Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
prodsig 0 0 0 0 no 125 125 0 0 0 0x00 0x00
tempsense 0 0 0 0 no 2 1 0 0 0 0x00 0x00
sernum 0 0 0 0 no 16 1 0 0 0 0x00 0x00
fuses 0 0 0 0 no 9 16 0 0 0 0x00 0x00
fuse0 wdtcfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse1 bodcfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse2 osccfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse4 tcd0cfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse5 syscfg0 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse6 syscfg1 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse7 codesize 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse8 bootsize 0 0 0 0 no 1 1 0 0 0 0x00 0x00
lock 0 0 0 0 no 4 1 0 0 0 0x00 0x00
userrow usersig 0 0 0 0 no 32 32 0 0 0 0x00 0x00
data 0 0 0 0 no 0 1 0 0 0 0x00 0x00
flash 0 0 0 0 no 131072 512 0 0 0 0x00 0x00
eeprom 0 0 0 0 no 512 1 0 0 0 0x00 0x00

Programmer Type : JTAGICE3_UPDI
Description : Curiosity nano (nEDBG) in UPDI mode
ICE HW version : 0
ICE FW version : 1.21 (rel. 37)
Serial number : MCHP3280031800001375
Vtarget : 3.31 V
PDI/UPDI clock Xmega/megaAVR : 100 kHz

avrdude: Partial Family_ID returned: "AVR "
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% -0.00s

avrdude: Device signature = 0x1e970e (probably avr128db28)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (12076 bytes):

Writing | ################################################## | 100% 3.75s

avrdude: 12076 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: input file main.hex auto detected as Intel Hex

Reading | ################################################## | 100% 2.06s

avrdude: 12076 bytes of flash verified

avrdude done. Thank you.


> Process Exit Code: 0
> Time Taken: 00:07

serialupdi
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
C:/Devz/AVR/avrdude/avrdude -v -p avr128db28 -P com3 -b230400 -c serialupdi -U flash:w:main.hex

avrdude: Version 6.99-20211218
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch

System wide configuration file is "C:/Devz/AVR/avrdude/avrdude.conf"

Using Port : com3
Using Programmer : serialupdi
Overriding Baud Rate : 230400
avrdude: serial_baud_lookup(): Using non-standard baud rate: 230400 AVR Part : AVR128DB28
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Memory Detail :

Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 1 0 0 0 0x00 0x00
prodsig 0 0 0 0 no 125 125 0 0 0 0x00 0x00
tempsense 0 0 0 0 no 2 1 0 0 0 0x00 0x00
sernum 0 0 0 0 no 16 1 0 0 0 0x00 0x00
fuses 0 0 0 0 no 9 16 0 0 0 0x00 0x00
fuse0 wdtcfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse1 bodcfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse2 osccfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse4 tcd0cfg 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse5 syscfg0 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse6 syscfg1 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse7 codesize 0 0 0 0 no 1 1 0 0 0 0x00 0x00
fuse8 bootsize 0 0 0 0 no 1 1 0 0 0 0x00 0x00
lock 0 0 0 0 no 4 1 0 0 0 0x00 0x00
userrow usersig 0 0 0 0 no 32 32 0 0 0 0x00 0x00
data 0 0 0 0 no 0 1 0 0 0 0x00 0x00
flash 0 0 0 0 no 131072 512 0 0 0 0x00 0x00
eeprom 0 0 0 0 no 512 1 0 0 0 0x00 0x00

Programmer Type : serialupdi
Description : SerialUPDI

avrdude: serial_baud_lookup(): Using non-standard baud rate: 230400avrdude: UPDI link initialization OK
avrdude: NVM type 2: 24-bit, word oriented write
avrdude: Entering NVM programming mode
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% -0.00s

avrdude: Device signature = 0x1e970e (probably avr128db28)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (12076 bytes):

Writing | ################################################## | 100% 0.85s

avrdude: 12076 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: input file main.hex auto detected as Intel Hex

Reading | ################################################## | 100% 0.78s

avrdude: 12076 bytes of flash verified
avrdude: Leaving NVM programming mode

avrdude done. Thank you.


> Process Exit Code: 0
> Time Taken: 00:05


>curiocity nanoのmDBG
計7秒
>serialupdi
計5秒
あれ…イケてるじゃないですか…☆
しかも純粋な書き込み時間だけ見たら3.75sec対0.85Secで圧勝ですね…!

というわけで実践でも結構使えるUSBシリアルとavrdudeを使ったお手軽UPDIはこれから
爆発的に流行ってくるとおもいます!ねむいさんが記事にしたせいでATTINY202の在庫
また切れてしまうかもしれないので何度も言いますが一人で買い占めちゃダメだゾ!


☆serialupdi対応のavrdude-windows32bitバイナリはこちら☆

Go to top of page