commit 6e6ec16fa4944345549b6709d0da53ebff86980f
parent 8580a00f337daee5a0dad1539dd53867406e5a0f
Author: Matsuda Kenji <info@mtkn.jp>
Date: Wed, 19 Apr 2023 19:45:01 +0900
add rp2040 draft
Diffstat:
3 files changed, 137 insertions(+), 2 deletions(-)
diff --git a/man/draft/rp2040_1.html b/man/draft/rp2040_1.html
@@ -0,0 +1,64 @@
+<h1>RP2040 アセンブリでLチカ</h1>
+<time>2023-04-19</time>
+
+<h2>はじめに</h2>
+<p>
+パタヘネのRISC-V<sup>[1]</sup>版を買って一通り読んだらアセンブリ言語\
+で組込のプログラミングがしたくなった。\
+RISC-Vのマイコンボードが欲しかったのだが、安くていい感じ\
+のものが見付からなかった。\
+代わりに秋月電子通商でArmのものがあった。\
+RP2040マイコンボードキット<sup>[2]</sup>というものである。\
+ウェブ上の情報も多く、データシート<sup>[3]</sup>もしっかりしていそうなので、\
+とりあえずこれを買ってみた。\
+</p>
+<p>
+一般的にはSDK<sup>[4]</sup>をダウンロードしてあらかじめ用意された\
+ライブラリを使って開発するようだが、これはビルドシステムとしてcmake\
+というのを使っている。これがOpenBSDでは何かエラーがでて動かなかった。\
+僕はこういう便利ツールが嫌いだ。どうせ使わんからいいんやけど。
+</p>
+<p>
+ということでアセンブリ言語で開発してみる。\
+とりあえず定番のLチカをば。
+</p>
+
+<h2>Boot Process</h2>
+<p>
+RP2040は電源を入れるといくつかの段階(ここでは関係ないので\
+省略。データシートに詳しい[3])を踏んだあと、外部のフラッシュROMの先頭から\
+256バイトを内部のSRAMにコピーして、フラッシュにプログラムが書き込まれているか\
+どうか確認する。RP2040はフラッシュの先頭252バイトから計算したCRC32チェックサム\
+を、直後の253バイト目から256バイトに記録することになっている。\
+起動時にこのチェックサムを確認することで、フラッシュにプログラムが\
+書き込まれているかどうか確かめている。コピーした最後の4バイトと\
+起動時に最初の252バイトから計算したチェックサムが一致していれば、\
+そのままコピーしてきた256バイトの先頭にPCをセットして実行を開始する。\
+一致しなければUSBモード?に切り替わり、パソコンに接続すると\
+ストレージとして認識される。このストレージにUF2という形式に変換した\
+プログラムをコピーするとプログラムがフラッシュROMやSRAMに書き込まれる。
+</p>
+<p>
+以上のことから、プログラムを実行するためにはCRC32を計算し、UF2という形式\
+に変換することが必要である。
+</p>
+
+<h2>CRC32</h2>
+<h2>UF2</h2>
+
+
+
+<ul>
+<li>
+[1] Hennesy, J. L. and Patterson, D. A. 2017. Computer Organization And Design RISC-V Edition.
+</li>
+<li>
+[2] <a href="https://akizukidenshi.com/catalog/g/gK-17542/">RP2040マイコンボードキット</a>
+</li>
+<li>
+[3] <a href="https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf">RP2040 Datasheet</a>
+</li>
+<li>
+[4] <a href="https://github.com/raspberrypi/pico-sdk">pico-sdk</a>
+</li>
+</ul>
diff --git a/pub/draft/rp2040_1.html b/pub/draft/rp2040_1.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="ja">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
+ <link rel="stylesheet" type="text/css" href="/style.css" />
+ <link rel="icon" type="image/x-icon" href="/pics/favicon.ico" />
+ <title>RP2040 アセンブリでLチカ</title>
+</head>
+<body>
+ <header>
+ <a href="/">主頁</a> |
+ <a href="/about.html">自己紹介</a> |
+ <a href="/journal">日記</a> |
+ <a href="/farm">農業</a> |
+ <a href="/kitchen">台所</a> |
+ <a href="/computer">電算機</a> |
+ <a href="/poetry">詩</a> |
+ <a href="/books">本棚</a> |
+ <a href="https://git.mtkn.jp">Git</a>
+ </header>
+ <main>
+ <article>
+<h1>RP2040 アセンブリでLチカ</h1>
+<time>2023-04-19</time>
+
+<h2>はじめに</h2>
+<p>
+パタヘネのRISC-V<sup>[1]</sup>版を買って一通り読んだらアセンブリ言語で組込のプログラミングがしたくなった。RISC-Vのマイコンボードが欲しかったのだが、安くていい感じのものが見付からなかった。代わりに秋月電子通商でArmのものがあった。RP2040マイコンボードキット<sup>[2]</sup>というものである。ウェブ上の情報も多く、データシート<sup>[3]</sup>もしっかりしていそうなので、とりあえずこれを買ってみた。</p>
+<p>
+一般的にはSDK<sup>[4]</sup>をダウンロードしてあらかじめ用意されたライブラリを使って開発するようだが、これはビルドシステムとしてcmakeというのを使っている。これがOpenBSDでは何かエラーがでて動かなかった。僕はこういう便利ツールが嫌いだ。どうせ使わんからいいんやけど。
+</p>
+<p>
+ということでアセンブリ言語で開発してみる。とりあえず定番のLチカをば。
+</p>
+
+<h2>Boot Process</h2>
+<p>
+RP2040は電源を入れるといくつかの段階(ここでは関係ないので省略。データシートに詳しい[3])を踏んだあと、外部のフラッシュROMの先頭から256バイトを内部のSRAMにコピーして、フラッシュにプログラムが書き込まれているかどうか確認する。RP2040はフラッシュの先頭252バイトから計算したCRC32チェックサムを、直後の253バイト目から256バイトに記録することになっている。起動時にこのチェックサムを確認することで、フラッシュにプログラムが書き込まれているかどうか確かめている。コピーした最後の4バイトと起動時に最初の252バイトから計算したチェックサムが一致していれば、そのままコピーしてきた256バイトの先頭にPCをセットして実行を開始する。一致しなければUSBモード?に切り替わり、パソコンに接続するとストレージとして認識される。このストレージにUF2という形式に変換したプログラムをコピーするとプログラムがフラッシュROMやSRAMに書き込まれる。
+</p>
+<p>
+以上のことから、プログラムを実行するためにはCRC32を計算し、UF2という形式に変換することが必要である。
+</p>
+
+<h2>CRC32</h2>
+<h2>UF2</h2>
+
+
+
+<ul>
+<li>
+[1] Hennesy, J. L. and Patterson, D. A. 2017. Computer Organization And Design RISC-V Edition.
+</li>
+<li>
+[2] <a href="https://akizukidenshi.com/catalog/g/gK-17542/">RP2040マイコンボードキット</a>
+</li>
+<li>
+[3] <a href="https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf">RP2040 Datasheet</a>
+</li>
+<li>
+[4] <a href="https://github.com/raspberrypi/pico-sdk">pico-sdk</a>
+</li>
+</ul>
+ </article>
+
+ </main>
+ <footer>
+ <address>info(at)mtkn(dot)jp</address>
+ </footer>
+</body>
+</html>
diff --git a/pub/rss.xml b/pub/rss.xml
@@ -5,8 +5,8 @@
<description>ウェブページの更新履歴</description>
<language>ja-jp</language>
<link>https://www.mtkn.jp</link>
-<lastBuildDate>Tue, 21 Mar 2023 09:33:33 +0900</lastBuildDate>
-<pubDate>Tue, 21 Mar 2023 09:33:33 +0900</pubDate>
+<lastBuildDate>Wed, 19 Apr 2023 19:44:41 +0900</lastBuildDate>
+<pubDate>Wed, 19 Apr 2023 19:44:41 +0900</pubDate>
<docs>https://www.rssboard.org/rss-specification</docs>
<item>
<title>Xlibで遊んでみる6</title>