commit 065f3c754a42919e2ea867adfb1aa649f39e4783
parent a2f275be6209a6ef19432394d6188ce8a6455132
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 20 Apr 2023 07:43:15 +0900
update
Diffstat:
3 files changed, 91 insertions(+), 6 deletions(-)
diff --git a/man/draft/rp2040_1.html b/man/draft/rp2040_1.html
@@ -26,7 +26,7 @@ RP2040マイコンボードキット<sup>[2]</sup>というものである。\
<h2>Boot Process</h2>
<p>
RP2040は電源を入れるといくつかの段階(ここでは関係ないので\
-省略。データシートに詳しい[3])を踏んだあと、外部のフラッシュROMの先頭から\
+省略。データシートに詳しい<sup>[3]</sup>)を踏んだあと、外部のフラッシュROMの先頭から\
256バイトを内部のSRAMにコピーして、フラッシュにプログラムが書き込まれているか\
どうか確認する。RP2040はフラッシュの先頭252バイトから計算したCRC32チェックサム\
を、直後の253バイト目から256バイトに記録することになっている。\
@@ -58,8 +58,52 @@ RP2040は電源を入れるといくつかの段階(ここでは関係ないの
入力のビットを一列に並べて、33bitの除数で「割り算」していく。\
この「割り算」が多項式の除算に似ているので、この33bitの除数をCRC多項式というらしい。\
ただし多項式の除算と違い、引き算するところをXORする。説明が下手である。\
-33bitで割ると32bitの余りが残る。この余りがCRC32のチェックサムである。
+33bitで割ると32bitの余りが残る。この余りがCRC32のチェックサムである。\
+除数は色々あるようだが、標準的なものがWikipedia<sup>[5]</sup>に列挙されている。\
+除数<code>1011</code>を使ったCRC3の計算の手順は以下の通り:
</p>
+<pre><code>\
+1110101011011100110101101101111 入力(適当)
+1011 除数(4bit)
+-------------------------------
+ 101101011011100110101101101111 結果(入力と除数のXOR)
+ 1011
+ ------------------------------
+ 00001011011100110101101101111
+ 1011
+ -------------------------
+ 000011100110101101101111
+ 1011
+ --------------------
+ 1010110101101101111
+ 1011
+ -------------------
+ 001110101101101111
+ 1011
+ ----------------
+ 101101101101111
+ 1011
+ ---------------
+ 00001101101111
+ 1011
+ ----------
+ 110101111
+ 1011
+ ---------
+ 11001111
+ 1011
+ --------
+ 1111111
+ 1011
+ -------
+ 100111
+ 1011
+ ------
+ 01011
+ 1011
+ ----
+ 000 CRC3チェックサム
+</code></pre>
<h2>UF2</h2>
diff --git a/pub/draft/rp2040_1.html b/pub/draft/rp2040_1.html
@@ -36,7 +36,7 @@
<h2>Boot Process</h2>
<p>
-RP2040は電源を入れるといくつかの段階(ここでは関係ないので省略。データシートに詳しい[3])を踏んだあと、外部のフラッシュROMの先頭から256バイトを内部のSRAMにコピーして、フラッシュにプログラムが書き込まれているかどうか確認する。RP2040はフラッシュの先頭252バイトから計算したCRC32チェックサムを、直後の253バイト目から256バイトに記録することになっている。起動時にこのチェックサムを確認することで、フラッシュにプログラムが書き込まれているかどうか確かめている。コピーした最後の4バイトと起動時に最初の252バイトから計算したチェックサムが一致していれば、そのままコピーしてきた256バイトの先頭にPCをセットして実行を開始する。一致しなければUSBモード?に切り替わり、パソコンに接続するとストレージとして認識される。このストレージにUF2という形式に変換したプログラムをコピーするとプログラムがフラッシュROMやSRAMに書き込まれる。
+RP2040は電源を入れるといくつかの段階(ここでは関係ないので省略。データシートに詳しい<sup>[3]</sup>)を踏んだあと、外部のフラッシュROMの先頭から256バイトを内部のSRAMにコピーして、フラッシュにプログラムが書き込まれているかどうか確認する。RP2040はフラッシュの先頭252バイトから計算したCRC32チェックサムを、直後の253バイト目から256バイトに記録することになっている。起動時にこのチェックサムを確認することで、フラッシュにプログラムが書き込まれているかどうか確かめている。コピーした最後の4バイトと起動時に最初の252バイトから計算したチェックサムが一致していれば、そのままコピーしてきた256バイトの先頭にPCをセットして実行を開始する。一致しなければUSBモード?に切り替わり、パソコンに接続するとストレージとして認識される。このストレージにUF2という形式に変換したプログラムをコピーするとプログラムがフラッシュROMやSRAMに書き込まれる。
</p>
<p>
以上のことから、プログラムを実行するためにはCRC32を計算し、UF2という形式に変換することが必要である。
@@ -53,8 +53,49 @@ RP2040は電源を入れるといくつかの段階(ここでは関係ないの
らしい。
</p>
<p>
-入力のビットを一列に並べて、33bitの除数で「割り算」していく。この「割り算」が多項式の除算に似ているので、この33bitの除数をCRC多項式というらしい。ただし多項式の除算と違い、引き算するところをXORする。説明が下手である。33bitで割ると32bitの余りが残る。この余りがCRC32のチェックサムである。
+入力のビットを一列に並べて、33bitの除数で「割り算」していく。この「割り算」が多項式の除算に似ているので、この33bitの除数をCRC多項式というらしい。ただし多項式の除算と違い、引き算するところをXORする。説明が下手である。33bitで割ると32bitの余りが残る。この余りがCRC32のチェックサムである。除数は色々あるようだが、標準的なものがWikipedia<sup>[5]</sup>に列挙されている。除数<code>1011</code>を使ったCRC3の計算の手順は以下の通り:
</p>
+<pre><code>1110101011011100110101101101111 入力(適当)
+1011 除数(4bit)
+-------------------------------
+ 101101011011100110101101101111 結果(入力と除数のXOR)
+ 1011
+ ------------------------------
+ 00001011011100110101101101111
+ 1011
+ -------------------------
+ 000011100110101101101111
+ 1011
+ --------------------
+ 1010110101101101111
+ 1011
+ -------------------
+ 001110101101101111
+ 1011
+ ----------------
+ 101101101101111
+ 1011
+ ---------------
+ 00001101101111
+ 1011
+ ----------
+ 110101111
+ 1011
+ ---------
+ 11001111
+ 1011
+ --------
+ 1111111
+ 1011
+ -------
+ 100111
+ 1011
+ ------
+ 01011
+ 1011
+ ----
+ 000 CRC3チェックサム
+</code></pre>
<h2>UF2</h2>
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>Thu, 20 Apr 2023 06:58:30 +0900</lastBuildDate>
-<pubDate>Thu, 20 Apr 2023 06:58:30 +0900</pubDate>
+<lastBuildDate>Thu, 20 Apr 2023 07:43:07 +0900</lastBuildDate>
+<pubDate>Thu, 20 Apr 2023 07:43:07 +0900</pubDate>
<docs>https://www.rssboard.org/rss-specification</docs>
<item>
<title>Xlibで遊んでみる6</title>