0と1の反復横跳び

仕事や趣味のメモ。コンピュータ、旅、音楽、本など

Raspberry Pi Pico2(RP2350)のDhrystoneを回す

表題の通り、RP2350でDhrystoneを回してみたので、メモ。

pptengineer.hateblo.jp

以前にArduino R4 Minimaでも同様の測定をしたので、合わせて確認してみたい。

実行環境

Raspberry Pi Picoでは色々な開発環境が使用できるが、ここでは最も簡便なArduino IDEを使用した。 この時、各ボードに対応するライブラリ(Board Manager)が必要となるが、公式(?)で展開されている"Arduino Mbed OS RP2040 Boards"というのではダメだったので、下記リンクよりライブラリを流用する。 github.com

設定方法は

  1. File -> Preferences -> Additional boards manager URLs:に下記リンクを追加
  2. Board managerよりRaspberry Pi Pico/RP2040/RP2350....をInstall
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

図でも示しておく。

Board Manager設定1
Board Manager設定2
Board Manager設定3

追加できたら、Toolsより下記の通りにボードを選択する。

Toolsの設定
このプルダウンからは、下記のような設定も可能。

  • CPU Architecture (ARM(CM33), RISC-V(Hazard3)の切り替え)

  • Flash size

  • CPU clock(Downclock, Overclockが可能)

ソースコード

R4 Minimaの時も使用したDhrystoneをお借りした。 なお、ヘッダーファイルも必要なので注意すること。 github.com

この時、L52で

#define Too_Small_TIme 2000000

となっているが、うまく流れない場合は修正する。(0.5~1 sec分程度にする。本当は良くないが、参考値ということで...)

<追記: 2024/11/14> 上手くいかなかった要因は、単に実行回数が少なかったためだと推測する。 (クロック周波数が高く、指定した実行回数ではすぐに走り切ってしまうため。)

//  Number_Of_Runs = 300000; //orig(30万回)
    Number_Of_Runs = 1000000; //100万回

のように、実行回数を増やす。 (稚拙すぎて泣ける...)

結果

測定結果を下記する。

| | RP2350(CM33, 150MHz) | RP2350(CM33, 50MHz) | RP2350(Hazard3, 150MHz) | UNO R4 Minima (CM4, 48MHz) | | :--- | :---: | :---: | :---: | :---: | | Microseconds for one run through dhrystone | 3.61 | 10.88 | 2.90 | 16.08 | | Dhrystones per second | 277382.25 | 91879.25 | 344401.64 | 62172.34 | | Vax mips rating (DMIPS) | 157.87 | 52.29 | 196.02 | 35.39 |

<追記: 2024/11/14> Dhrystoneのプログラム修正に伴い、結果を更新した。 また参考として、UNO R3に関しても実行回数を1,000,000回で実行したものを示す。

RP2350(CM33, 150MHz) RP2350(CM33, 50MHz) RP2350(Hazard3, 150MHz) UNO R4 Minima (CM4, 48MHz) UNO R3 (Atmega328P,16MHz)
Microseconds for one run through dhrystone 3.62 10.92 2.90 16.04 57.78
Dhrystones per second 277382.25 91550.40 344476.53 62329.92 17306.88
Vax mips rating (DMIPS) 157.87 52.11 196.06 35.48 9.85

まず、RP2350のCM33(ARM)とHazard3(RISC-V)を比較した際、Harard3の方がMIPSが高く出ていることに驚いた。

(ちゃんとドキュメントを読んでないのだけど)要はバスにぶら下がっているマスタのCPUがスイッチできるようになっているだけで、CPU以降の経路(BUS、memoryなど)は同じではないか?と推測するので純粋にアーキテクチャの差なのだろう。

またR4 Minima(CM4, 48 MHz)とRP2350(CM33, 50 MHz)を比較すると、RP2350の方がスコアが高いことがわかる。

この2つのIPの大きな差は

  • CM33 : Arm v8

  • CM4 : Arm v7 とアーキテクチャバージョンが変わっていることで、この進化分と考えられる。

wikiで”コアの性能と採用実績”より2者の性能を見てみても、v8のCM33の方がDMIPS/MHzが高くなっているため、これはアーキテクチャ進化分とみてよいだろう) ja.wikipedia.org

まとめ

適当にRP2350およびRaspberry Pi Pico2でDhrystoneを回してみた。

今回はArduino IDEベースで測定を行ったが、VScode上のC環境などで試した場合の差異など気になるため、そのうち確認したい。

またRP2350のドキュメントをもう少し読み進めたいと思う。

自作キーボードを作ってみた

以前より分割式キーボードに興味があり、せっかくなら自作してみようと思い基板からスクラッチで起こしてみることにした。 今はOSSの回路エディタも充実しており、またファームウェアOSSで質の良いものが揃っている。

今回は私の大好きなHHKBの配列をベースとし、Type-Cでコンピュータと接続できるような設計とした。 (世の中にはそれなりにHHKB配列の分割式キーボードが出回っているのだが、(こういった分野の)車輪の再発明は自分自身にとって健全な行為であると考えたため、自作することにした。)

概要

設計したキーボードの仕様および設計メモ。

キーボードの仕様

  • 名称: HH_splitter
  • 配列: US配列61キー左右分割(某HHKB風配列)
  • キースイッチ: mx互換(ホットスワップ対応)
  • インターフェース: USB Type-C(左右1か所ずつ)、TRRS(TRS)ケーブル(左右接続用)
    HH_splitter

部品一覧

  • 基板: 2枚(左右1枚ずつ)
  • カバー: スイッチプレート、ボトムプレート、カバープレートの計6枚(左右1枚ずつ。今回はPCB基板を各プレートに採用したが、正直アクリル板で良いと思う)
  • キーキャップ: 任意(1u=51個,1.5u=4個, 1.75u=2個, 2.25u=2個, 3u=2個)(HHKB Studio純正品+市販の3uキーキャップ) DSA PBT ブランク キーキャップ (1個/Space 3U/ブラック/グレー/ホワ...
  • キースイッチ: mx互換品×61個(今回はGateron G Pro 3.0 Redを使用)
  • ダイオード: 1n4148 or 1n4148w × 61個
  • kailh PCBソケット: 61個(ホットスワップに対応するための部品。ホットスワップしない場合は不要)
  • 3.5mm4極ミニジャック: MJ-4PP-9×2個
  • TRRSケーブル: 1本
  • Type-Cケーブル: 1本(データ通信可能なもの)
  • タクトスイッチ: 2個(2本足のタイプ)
  • Pro Micro: 2個(今回はATmega32U4 Type-Cタイプを使用。Arduino R4互換品(Renesas製RA4M1使用版)は未検証だが、使用可能と推測される)
  • MAC8コンスルー(12ピン2mm): 2セット4本(Pro Microと基板の接続に使用。本来は取り外しを可能にするためのアイテムなのだが、基板設計不良により半田付けをすることで対処(本来は半田付けを想定した製品ではないので、取り付けは自己責任で。また2.5mm品を使用すれば、クリアランスが確保されるので半田付けが不要と思われる)
  • ゴム脚: 片側4個(任意の高さのもので可。傾斜をつけるために高さ別で2種類を推薦。例: 手前4mm, 奥10mm)
  • M2*8mmネジ: 16個
  • M2*5mmネジ; 16個
  • M2丸形中空スペーサ(2~4mm): 16個
  • M2 6角スペーサ(8mm以上): 16個(ASB-2000Eを使用)

キー配列デザイン検討

キー配列
まず、キー配列デザインの検討には下記サイト(keyboard-layout-editor, 通称KLE)を使用した。自作キーボード界隈では有名なサイトのようで、キートップのデザインやキー設定の出力にも使用する。 keyboard-layout-editor.com 今回のキーボードだが、基本的には某HHKBの配列を踏襲している。変更箇所としては分割にする都合上、スペースキーを左右に配置している。

強いて言えば、3uのキーキャップ(とスタビライザ)は入手性に難があるため、1.5u*2としてもよいだろう。(色々調査をしたところ、7sProMaxというキーボードはスペースキーを複数個搭載して回避している模様。)

基板設計

基板設計にはKiCadを使用した。オープンソースソフトウェアで、回路図エディタ、PCBエディタなどが備わっている。またPCBの3D表示なども可能で、基板製造依頼前にイメージをつかむことが可能。 www.kicad.org

回路設計

下記に左右の回路図を示す。 ポイントとしてはマイコンボードのI/Oポートの関係上、キーマトリクスを使用してポート数を節約する。 また左右基板の判別のために、空きポートをVCC(左側)、GND(右側)に接続する。

左側回路図
右側回路図

PCB&プレートデザイン

設計した回路を基に、PCB設計を行う。まずはキースイッチの配列を決めてしまう。次にコントローラやリセットスイッチ、3.5mmジャックの位置を決める。 最後に各部品が収まるように基板外形をデザインする。 この時、基板接合用のネジ穴などが、半田付けするランドやパッドに干渉しないようにする。打鍵感の担保のために、ある程度剛性を出す必要があるので、上下左右、中央部など適宜に穴をあけておくとよい。

PCBデザインの例

またPCBの配線には、簡略化のために自動配線ツール"freerouting"を使用した。KiCadで設計したデータを食わせることで、各種配線を自動で処理してくれる。 自動配線後にエディタ内で配線の微調整を行うだけで済むので、積極的に活用すると良いだろう。 github.com

PCBが設計出来たら3D Viewを使用し、完成後イメージを掴むとよい。この時点で部品が揃っていれば、軽く当ててみて干渉などを見ることをオススメする。

3D viewの例

スイッチやカバープレートは設計したPCBの外形をそのまま流用し、微調整を加える。

プレート設計の例

ファームウェア設計

今回はQMK firmwareを使用した。これは自作キーボード界隈では定番のファームウェアのようで、各種有名キーボードのデータが散見される。

HH_splitterのファームウェアは下記githubより入手可能。 github.com

この時、keyboard.json内に"layout"を記述する必要があるのだが、下記のように、KLEを使用する。回路図で設定したcol, rowの数字を各キーに割り当てて、"Raw data"の内容を下記ウェブサイトにコピペして生成する。

layoutの設定
qmk.fm

この時、

"label":"0,0"

のような記述を

"matrix":[0,0]

に置き換えること。

実際の設計時のメモとしては、キー入力の整合を取るために左右間のlayoutを1行分空けている。 (キーマトリクスの設計がイマイチだったようで、出力データのlayoutアサインを使うと、右側が意図しないキーコード出力となったため)

基板発注

基板(およびプレート)の発注はJLCPCBを使用した。 jlcpcb.com

基本的には2層基板を発注することになると思うので、特にデフォルトの発注設定からは変えず、kicadで生成されたガーバーデータをそのまま食わせればよい。 基板色を変更したい場合は下図の項目から任意の色を選択する。

JLCPCBでの基板色変更

発送方法は複数選択可能であるが、DHLは高いが、早く届くのでオススメ。

土日に発注->木曜に出荷->翌土日着といったスケジュール感。

組み立て

半田付け

基本的にはこまごまとした部品をひたすら半田する。

完全に個々人の技量次第だが、ポイントとしてはヤニ入りはんだを使用し、さらにフラックスを適宜塗布することで比較的うまく半田が乗ると思われる。

またC型半田ごてがあると表面実装部品でも比較的容易に半田付けできる。

部品をつける際は高さの低い部品から接着していく。 (ダイオード->PCBソケット->ピンヘッダ)_

www.youtube.com (半田付けの解説動画:イチケン氏。分かりやすいのでオススメ)

またホットスワップ対応する場合、kailhのPCBソケットを使用することになると思うが、 この場合

  1. 基板の左右どちらかのパッドに予備半田を行う
  2. ピンセットで上からPCBソケットを押さえながら、予備半田を溶かし、仮止め
  3. 反対側のパッドを完全に半田付け
  4. 予備半田した側のパッドに追加の半田を供給 という流れで綺麗に部品を接合できる。
    kailh PCBソケットの半田付け例

<追記: 24/12/15> 新しい環境でコンパイル&書き込みを行う際、やり方がわからなくなったのでメモ。 docs.qmk.fm 上記公式HPを参考にする。 自分でcloneしたHH_splitterのファームウェアをgitからpullしたのち、 "3.Run QMK Setup"を参考に、qmk_firmwareディレクトリ内で

qmk setup

を実行する。 コンソールの指示にしたがい'y'を選択し、

qmk compile -kb hh_splitter -km default

コンパイル

qmk flash -kb hh_splitter -km default

でフラッシュ。

<ここまで>

仕上げ

基板が完成したら、仕上げを行う。 (ホットスワップで組み立てる場合)スイッチプレートと基板を接合する際は、プレート側に数個(上下左右、中央で5~6個ほど)キースイッチをはめ込んでおく。 そのうえでPCBソケットにスイッチをはめ込み、残りをはめ込むことで楽に組み立てが行える。

<追記: 24/12/15> ネジに関して。 表面(キートップ側)は、M25mmを使用。 また裏側はM28mmを使用して固定すること。

<ここまで> ファームウェアをコントローラに書き込む際はlinuxを使用すると良い。 (Ubuntu22.04で確認済。WSL2は未確認。Windowsで実行する場合は docs.qmk.fm

Windowsを使用する場合はQMK MSYSを使用する。 msys.qmk.fm

hh_splitterの場合は、コンピュータにコントローラを接続した状態で下記コマンドを実行することで、書き込み可能。

$ qmk flash -kb hh_splitter -km default

途中でリセットスイッチを押下するように指示が出るので、何回か押してみて書き込みが完了することを確認。

以上手順で一通り設計~組み立てが行える。

作成したキーボードに対する所感

完成品

まず剛性が高いと感じた。フレームがしっかりしていることと、赤軸スイッチのスムーズな感触が相まって、打ち心地は良好。

次に、キーボードに傾斜をつけた方がよいと感じた。 60%キーボードなのだが、フラットになっている関係上、奥側(数字)キーが押しにくく、腱鞘炎になりそうな感触を抱いた。 これはカバープレートを短くし、奥が高くなる様にした方がよい。

キーボードの高さ

基板の改善点としては、 基板上コントローラ端子(Type-C)の逃がしの設計が不十分で、干渉しないように外形を削ったほうが良い。

Type-C干渉箇所

またリセットスイッチの位置も微妙で、こちらについても改善したい。

参考文献&URL

  • 『自作キーボード設計ガイド Vol1 設計入門編』Salicylic_acid3氏著 (各種ツールの使用法、設計時のポイントが書かれており、大変有用な書籍。スクラッチで設計する場合には是非一読することを推薦。) booth.pm

  • KiCad回路図シンボル及びPCBフットプリントデータ Salicylic_acid3氏 (本キーボード設計時に使用したKiCad回路図シンボル、PCBフットプリントデータ。上記書物にもリンクあり。) https://github.com/Salicylic-acid3/PCB_Data

  • 特集 - 自作キーボードの作り方(QMK Firmware編) 株式会社ケレスソフト websiteLinux上でのQMK Firmware設定方法、書き込み方法などが書かれている。) https://www.ceressoft.co.jp/special_keyboard_qmk.html

  • QMK Firmware公式サイト (各種Firmwareの書き方、設定方法が書かれている。キーコード、split、レイヤー設定については必ず読むこと。) https://docs.qmk.fm/

八丈島に行ってきた

10月中旬、有給を取得し東京都島嶼部(通称伊豆諸島)の八丈島に行ってきた。

富士箱根伊豆国立公園 八丈島

八丈島は行政区分上、東京都八丈町に属することになっている島で、走っている車のナンバーが"品川"になっている不思議なところだ。 また富士箱根伊豆国立公園にも指定されている。

僕が伊豆諸島に行くのは2度目。大学生の頃に新島と式根島に訪問して以来なので、2年ぶりになる。 今回改めて感じたが、やはり島は良い。いつか仕事を辞めたら移住したいなと思うくらいには好きだ。

<アクセスについて>

八丈島への交通手段としては2種類に分けられる。羽田空港よりANAが運航する飛行機に乗るか、竹芝ふ頭より東海汽船の客船が選べる。

飛行機はとにかく早く着くことが特徴である。なんと1時間前後の搭乗時間なので、下手したら東京都心から中央線で高尾山に行くより早いかもしれない。 また1日に3便出ており、旅程を組みやすいのも魅力的だ。

船は遅いのだが、飛行機よりは運賃が(比較的)安く、また非日常感を味わえるという意味ではオススメである。 竹芝から八丈島までは約10時間で、夜22:30発-翌朝9:00着といった具合である。 また等級制度を採用しており、いわゆる雑魚寝の2等客室から、ホテル並みの1等客室まで存在する。

今回は往路を船、復路は飛行機とした。いずれの手段でもインターネットより予約が可能で、早い時期の予約だと割引が効く。

竹芝ふ頭に停泊する橘丸

ここでは往路の船について書いておく。

八丈島行きの船舶は橘丸という真っ黄色な船体なのだが、比較的新しい船で綺麗である。

今回は特2等客室を選択した。イメージとしてはカプセルホテルのような広さの2段ベッドの部屋である。

特2等客室の様子1
特2等客室の様子2

個人的な船の醍醐味。それは出航後にデッキでやるビールである。

東京の摩天楼を尻目にビールを

100万ドルの夜景を観ながら飲むビールは最高に美味い。ぜひ試してみてほしい。

八丈行の船は途中で三宅島、御蔵島に停泊するのだが、この近辺に差し掛かってくるととにかく揺れる。

海上から見る八丈島(南側)
今回は酒を3杯飲んでも途中で起きてしまうほどの揺れで、とてもきつかった。

初めて乗る人や乗り物が得意ではない人は必ず酔い止めを服用した方がよい。もしくは睡眠導入剤などを使ってぐっすり眠るという選択肢もよいだろう。

<島での交通手段について>

さて、島での交通手段について書いておく。

まず前提として大抵の場合、島では予約した宿の方が送迎に来てくれる。事前に確認は必須だが。 手慣れたもので、到着時間や港に合わせて迎えに来ていただけるので、初めての方でも心配しなくて良いと思う。

またレンタカーを借りる場合にも、オフィスまで送迎してくれたり、もしくは港(飛行場)で車を引き渡してくれる。

その上で島での交通手段としては、上記したようにレンタカーが代表的と思うが、レンタサイクルやバイクもある。またタクシー(台数が少ないらしい)やバス(ほとんど見なかった)もある。

個人的には、運転に抵抗がないのであれば、レンタカーをオススメする。 理由としては八丈島はかなり広い島で(一周約45km)アップダウンが激しい。 また観光スポットは結構点在しているので、色々見て回るなら車が便利と思う。(夜酒を飲みに行くときはタクシーを呼びましょう)

僕は今回レンタカー(N-BOX)を借りた。業者にもよるが、1泊2日で1万円前後と思う。

お借りしたレンタカー
どうでもいいが、八丈は比較的新しい車が多くてびっくりした。ついでに書いておくと、スポーツカーがかなり走っていて軽いカルチャーショックを受けた。

*観光についてダイジェストで紹介

ざっくりと今回回った八丈の観光名所を紹介してみる。

  1. 八丈ビジターセンター 広い公園になっており、南の島の植物園や、八丈の文化や地理に関する展示、あとキョンが飼育されている。 とりあえず行ってみると良いと思う。

    キョン

  2. 裏見ヶ滝 中之郷という南側のエリアにあるスポットで、かなり人気な模様。足元が滑りやすいので注意。また近くに裏見ヶ滝温泉というのがあり、これがまた秘境感たっぷりで良かった。

  3. 古民家喫茶中之郷 いわゆる古民家カフェなのだが、昭和、いや明治を感じるほどの趣があり、またお茶やお菓子も大変美味しくいただけた。 (写真はあえて載せないでおく)

  4. 大潟浦園地 海岸沿の公園(?)で、八丈富士と小島が一遍に見渡せるスポット。 夕暮れ時に行くと丁度いい景色になると思う。 時を忘れてのんびりするのにピッタリ。

    八丈小島と夕日

  5. 八丈富士&牧場 八丈島を代表するかのような立派な山で、標高854mとのこと。頂上付近に牧場があり、牛が放し飼いになっている。 またお鉢巡りという八丈富士の中心部への登山も人気らしく、次回やってみたいなと思った。

    八丈富士からの風景

  6. 温泉 八丈は(恐らく)伊豆諸島の中でも有数の温泉地で、現時点で入浴可能な温浴施設が全6か所あり、ほとんどが南側にある。 スマホで券を買うと2日間入り放題というのがあり、オススメ。 全体的に塩分濃度が高めで、個人的には好きな泉質。 八丈にきたら絶対に温泉は行った方がよい。

島のご飯
  1. 島寿司 伊豆諸島といえば、の一品。 醤油漬になっており、からしをつけて食べる。カンパチとかキンメを使うらしい。 ネタが新鮮で、大変美味だった。

    島寿司

  2. 明日葉 これも伊豆諸島ならではの食材。セリ科の植物で、天ぷらとかおひたしにするのが一般的らしい。 僕はこれが大好きで、独特の風味がたまらない。 土産で買って帰り、ペペロンチーノにしてみたが、これもうまかった。

    明日葉天のそば
    (天ぷらの左の葉っぱが明日葉)

最後に

八丈島は本当に良かった。 自然豊かでご飯もおいしく、また出会った人々も大変親切でよい思い出、よい旅になった。

つくづく、なぜ今まで行ったことがなかったのか、自分を責めたくなる。 また近いうち(ただし夏以外)に訪問したいなと思った。いや。いつか住みたい。 (To:関係者)本当にありがとうございました。

*参考文献 『J14 地球の歩き方 東京の島々 伊豆大島・利島・新島・式根島神津島・三宅島・御蔵島八丈島青ヶ島・小笠原―父島・母島―: 永久保存版 (地球の歩き方J) 』 https://amzn.to/3Uo3s9Q (アソシエイトリンクで恐縮ですが。)