Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 179 additions & 0 deletions ChangeToSparkFunRP2040.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
# Keyball61 / SparkFun RP2040 置換設定変更手順書

<div style="font-size: 14px; color: #555; margin-bottom: 20px;">
作成日: 2026年8月27日 | 対象キーボード: Keyball61 (Rev1) | 対象マイコン: SparkFun Pro Micro - RP2040
</div>

本手順書は、Keyball61の標準コントローラー(Pro Micro / ATmega32U4)を、**SparkFun Pro Micro - RP2040**に置き換えるためのQMK Firmware設定手順です。
A4用紙に印刷して手元で確認しながら作業できるように、ファイル単位で「変更前(Before)」と「変更後(After)」をページごとに整理しています。

---

### ■ 物理ピン・GPIO対応表(印刷用リファレンス)
QMKファームウェア内、またはコンバータ(`sparkfun_rp2040` / `rp2040_ce`)によってマッピングされる、主要なPro MicroピンとRP2040(GPIO)の物理対応表です。

| 機能 / 用途 | 元の Pro Micro ピン (AVR) | SparkFun RP2040 物理ピン名 | QMK指定GPIOピン名 |
| :--- | :--- | :--- | :--- |
| **分割シリアル通信** | `D2` | `RX / RXI` | `GP1` |
| **OLED (SDA)** | `D1` | `SDA` | `GP2` (または GP20) |
| **OLED (SCL)** | `D0` | `SCL` | `GP3` (または GP21) |
| **PMW3360 CSピン** | `B0` | `TX / TXO` | `GP0` |
| **PMW3360 SCK** | `B1` | `D15 (SCLK)` | `GP6` |
| **PMW3360 MOSI** | `B2` | `D16 (MOSI)` | `GP7` |
| **PMW3360 MISO** | `B3` | `D17 (MISO)` | `GP4` |

---
<!-- ページ改行 -->
<div style="page-break-after: always;"></div>

## 【ファイル 1】`rules.mk` の変更
* **役割**: コンパイル時にコントローラーのアーキテクチャをAVRからARM(RP2040)へと変換し、不要なAVR用の設定を無効化します。
* **保存場所**: `qmk_firmware/keyboards/keyball/keyball61/rules.mk`

### 変更前 / 変更後

#### ◀ 変更前 (Before - ATmega32U4用)
```make
# MCU options
MCU = atmega32u4
BOOTLOADER = caterina

# AVR-specific configurations
LTO_ENABLE = yes
BOOTLOADER_SIZE = 512
```

#### ▶ 変更後 (After - SparkFun RP2040用)
```make
# SparkFun RP2040への自動ハードウェアコンバート指定
CONVERT_TO = sparkfun_rp2040

# AVR用の容量削減オプションやブートローダサイズ指定は不要なためコメントアウト(または削除)
# LTO_ENABLE = yes
# BOOTLOADER_SIZE = 512

# RP2040(ARM)移行時に必要なChibiOS用の設定追加
# keyballの分割通信用シリアルドライバ
SERIAL_DRIVER = vendor
```

---
<!-- ページ改行 -->
<div style="page-break-after: always;"></div>

## 【ファイル 2】`config.h` の変更
* **役割**: 分割通信用ピン、ブート検知、およびトラックボールセンサー(PMW3360)用SPIピンをRP2040のGPIO仕様に合わせて再定義します。
* **保存場所**: `qmk_firmware/keyboards/keyball/keyball61/config.h` (または `keymaps/` 配下の個別フォルダ内)

### 変更前 / 変更後

#### ◀ 変更前 (Before - ATmega32U4用)
```c
#pragma once

// 分割通信ピン(AVR物理ピン)
#define SOFT_SERIAL_PIN D2

// トラックボール(PMW3360)用のSPI CSピン指定(AVR物理ピン)
#define PMW3360_CS_PIN B0
```

#### ▶ 変更後 (After - SparkFun RP2040用)
```c
#pragma once

// 1. RP2040のシリアルピン配置に変更(Pro Micro D2に対応するGP1を割り当て)
#undef SOFT_SERIAL_PIN
#define SOFT_SERIAL_PIN GP1

// 2. 分割キーボードのブート側自動検出(RP2040必須設定)
#define SPLIT_USB_DETECT

// 3. トラックボール(PMW3360)用CSピン(Pro Micro B0に対応するGP0を割り当て)
#undef PMW3360_CS_PIN
#define PMW3360_CS_PIN GP0

// 4. SparkFun RP2040の標準SPIピン定義(トラックボール通信を安定させるためのピンロック)
#define SPI_DRIVER SPID0
#define SPI_SCK_PIN GP6
#define SPI_MOSI_PIN GP7
#define SPI_MISO_PIN GP4
```

---
<!-- page-break -->
<div style="page-break-after: always;"></div>

## 【新規ファイル 3】`halconf.h` の新規作成
* **役割**: ChibiOS(RP2040を動かすシステム)に対し、I2CやSPI、SERIALなどのハードウェアドライバを有効化する設定です。
* **保存場所**: `qmk_firmware/keyboards/keyball/keyball61/halconf.h` に**新規にファイルを作成**して保存します。

### 新規ファイル記述内容

#### ▶ 記述内容 (After - 新規作成)
```c
#pragma once

// OLED(液晶)、トラックボール、左右通信用の各周辺機能を有効化します
#define HAL_USE_I2C TRUE
#define HAL_USE_SPI TRUE
#define HAL_USE_SERIAL TRUE

#include_next <halconf.h>
```

---
<!-- ページ改行 -->
<div style="page-break-after: always;"></div>

## 【新規ファイル 4】`mcuconf.h` の新規作成
* **役割**: `halconf.h` で有効化した各種ドライバ(SPI, I2C等)が、RP2040の内部ペリフェラル(I2C0, SPI0等)のどれを使用するかを具体的に指定します。
* **保存場所**: `qmk_firmware/keyboards/keyball/keyball61/mcuconf.h` に**新規にファイルを作成**して保存します。

### 新規ファイル記述内容

#### ▶ 記述内容 (After - 新規作成)
```c
#pragma once

// ChibiOSの設定をオーバーライド
#include_next <mcuconf.h>

// 1. OLED表示用:I2C 0番バスを使用可能に設定
#undef RP_I2C_USE_I2C0
#define RP_I2C_USE_I2C0 TRUE

// 2. トラックボール用:SPI 0番バスを使用可能に設定
#undef RP_SPI_USE_SPI0
#define RP_SPI_USE_SPI0 TRUE

// 3. 分割シリアル通信用:UART 0番(PIO/UART)を使用可能に設定
#undef RP_SIO_USE_UART0
#define RP_SIO_USE_UART0 TRUE
```

---
<!-- ページ改行 -->
<div style="page-break-after: always;"></div>

## 【手順 5】コンパイル & ファームウェア書き込み

QMKファームウェアの変更完了後、ビルドを行ってSparkFun RP2040へと書き込みます。

### 1. コンパイルコマンドの実行
QMK CLI環境(QMK MSYS等)で以下のコマンドを実行してビルドを行います。
```bash
qmk compile -kb keyball/keyball61 -km default
```
* **ポイント**: 成功すると、`.hex`(AVR用)ではなく、`.uf2`(RP2040用)という拡張子のファームウェアが生成されます。
* 出力先例: `qmk_firmware/.build/keyball_keyball61_default_sparkfun_rp2040.uf2`

### 2. ファームウェアの書き込み(フラッシュ)
1. 左右のKeyball61を繋ぐTRRSケーブルは**絶対に抜いた状態**にしてください。
2. PCにUSBケーブルで左手側、または右手側のSparkFun RP2040を接続します。
3. SparkFun RP2040ボード上の**「BOOTボタン」を押しながら「RST(リセット)ボタン」をカチッと押し、その後BOOTボタンを離します。**
4. パソコンに **`RPI-RP2`** という名前のUSB外付けドライブ(ストレージ)がマウントされます。
5. 生成された `.uf2` ファイルを、この `RPI-RP2` ドライブのルートにそのままドラッグ&ドロップ(コピー)します。
6. コピーが完了すると自動的にドライブがアンマウントされ、キーボードが再起動して動作可能になります。
7. **もう片方の手側**も同様にPCへ単体接続し、同じ `.uf2` ファイルを書き込みます。
8. 両方の書き込みが完了したら、一度USBを抜き、TRRSケーブルで左右を接続した上で、片方のUSBからPCに接続して動作テストを行ってください。
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
This is the c configuration file for the keymap

Copyright 2022 @Yowkees
Copyright 2022 MURAOKA Taro (aka KoRoN, @kaoriya)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once

#ifdef RGBLIGHT_ENABLE
//# define RGBLIGHT_EFFECT_BREATHING
//# define RGBLIGHT_EFFECT_RAINBOW_MOOD
//# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
//# define RGBLIGHT_EFFECT_SNAKE
//# define RGBLIGHT_EFFECT_KNIGHT
# define RGBLIGHT_EFFECT_CHRISTMAS
//# define RGBLIGHT_EFFECT_STATIC_GRADIENT
//# define RGBLIGHT_EFFECT_RGB_TEST
//# define RGBLIGHT_EFFECT_ALTERNATING
//# define RGBLIGHT_EFFECT_TWINKLE
#endif

#define TAP_CODE_DELAY 5
#define POINTING_DEVICE_AUTO_MOUSE_ENABLE
#define DYNAMIC_KEYMAP_LAYER_COUNT 5
#define AUTO_MOUSE_DEFAULT_LAYER 2
#define TAPPING_TERM 100
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
Copyright 2022 @Yowkees
Copyright 2022 MURAOKA Taro (aka KoRoN, @kaoriya)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

#include QMK_KEYBOARD_H

#include "quantum.h"

// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_universal(
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS ,
KC_DEL , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_INT3 ,
KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , S(KC_7) ,
MO(1) , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_RBRC , KC_NUHS, KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT ,
_______ , KC_LCTL , KC_LALT , KC_LGUI,LT(1,KC_LNG2),LT(2,KC_SPC),LT(3,KC_LNG1), KC_BSPC,LT(2,KC_ENT),LT(1,KC_LNG2),KC_RGUI, _______ , KC_RALT , KC_PSCR
),

[1] = LAYOUT_universal(
S(KC_ESC), S(KC_1) , KC_LBRC , S(KC_3) , S(KC_4) , S(KC_5) , KC_EQL , S(KC_6) ,S(KC_QUOT), S(KC_8) , S(KC_9) ,S(KC_INT1),
S(KC_DEL), S(KC_Q) , S(KC_W) , S(KC_E) , S(KC_R) , S(KC_T) , S(KC_Y) , S(KC_U) , S(KC_I) , S(KC_O) , S(KC_P) ,S(KC_INT3),
S(KC_TAB), S(KC_A) , S(KC_S) , S(KC_D) , S(KC_F) , S(KC_G) , S(KC_H) , S(KC_J) , S(KC_K) , S(KC_L) , KC_QUOT , S(KC_2) ,
_______ , S(KC_Z) , S(KC_X) , S(KC_C) , S(KC_V) , S(KC_B) ,S(KC_RBRC), S(KC_NUHS), S(KC_N) , S(KC_M) ,S(KC_COMM), S(KC_DOT),S(KC_SLSH),S(KC_RSFT),
_______ ,S(KC_LCTL),S(KC_LALT),S(KC_LGUI), _______ , _______ , _______ , _______ , _______ , _______ ,S(KC_RGUI), _______ , S(KC_RALT), _______
),

[2] = LAYOUT_universal(
SSNP_FRE , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
SSNP_VRT , _______ , KC_7 , KC_8 , KC_9 , _______ , _______ , KC_LEFT , KC_UP , KC_RGHT , _______ , KC_F12 ,
SSNP_HOR , _______ , KC_4 , KC_5 , KC_6 ,S(KC_SCLN), KC_PGUP , KC_BTN1 , KC_DOWN , KC_BTN2 , KC_BTN3 , _______ ,
_______ , _______ , KC_1 , KC_2 , KC_3 ,S(KC_MINS), S(KC_8) , S(KC_9) , KC_PGDN , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , KC_0 , KC_DOT , _______ , _______ , _______ , KC_DEL , _______ , _______ , _______ , _______ , _______ , _______
),

[3] = LAYOUT_universal(
RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , _______ , _______ , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW , _______ , _______ ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , _______ , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , KBC_RST ,
_______ , _______ , SCRL_DVD , SCRL_DVI , SCRL_MO , SCRL_TO , EE_CLR , EE_CLR , KC_HOME , KC_PGDN , KC_PGUP , KC_END , _______ , _______ ,
QK_BOOT , _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , _______ , KC_BSPC , _______ , _______ , _______ , _______ , QK_BOOT
),

[4] = LAYOUT_universal(
RGB_TOG , AML_TO , AML_I50 , AML_D50 , _______ , _______ , RGB_M_P , RGB_M_B , RGB_M_R , RGB_M_SW , RGB_M_SN , RGB_M_K ,
RGB_MOD , RGB_HUI , RGB_SAI , RGB_VAI , _______ , _______ , RGB_M_X , RGB_M_G , RGB_M_T , RGB_M_TW , _______ , _______ ,
RGB_RMOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , _______ , CPI_D1K , CPI_D100 , CPI_I100 , CPI_I1K , KBC_SAVE , KBC_RST ,
_______ , _______ , SCRL_DVD , SCRL_DVI , SCRL_MO , SCRL_TO , EE_CLR , EE_CLR , KC_HOME , KC_PGDN , KC_PGUP , KC_END , _______ , _______ ,
QK_BOOT , _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , _______ , KC_BSPC , _______ , _______ , _______ , _______ , QK_BOOT
),
};
// clang-format on

layer_state_t layer_state_set_user(layer_state_t state) {
// Auto enable scroll mode when the highest layer is 3
keyball_set_scroll_mode(get_highest_layer(state) == 3);
return state;
}

#ifdef OLED_ENABLE

# include "lib/oledkit/oledkit.h"

void oledkit_render_info_user(void) {
keyball_oled_render_keyinfo();
keyball_oled_render_ballinfo();
keyball_oled_render_layerinfo();
}
#endif
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
RGBLIGHT_ENABLE = yes

OLED_ENABLE = yes

VIA_ENABLE = yes

EXTRAKEY_ENABLE = yes

CONSOLE_ENABLE = no
17 changes: 11 additions & 6 deletions qmk_firmware/keyboards/keyball/keyball61/rules.mk
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
# MCU name
MCU = atmega32u4
#MCU = atmega32u4

CONVERT_TO = sparkfun_pm2040

# Bootloader selection
BOOTLOADER = caterina
#BOOTLOADER = caterina

#RP2040 chibios設定追加
SERIAL_DRIVER = vendor

# Link Time Optimization required for size.
LTO_ENABLE = yes

# Build Options
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
EXTRAKEY_ENABLE = no # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output

# Duplex matrix.
Expand Down