You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
12 KiB

  1. # Converters
  2. Since many drop-in replacement controllers now exist, we've done our best to make them easy to use in existing designs.
  3. This page documents the handy automated process for converting keyboards.
  4. ### Supported Converters
  5. Currently the following converters are available:
  6. | From | To |
  7. |------------|-------------------|
  8. | `promicro` | `proton_c` |
  9. | `promicro` | `kb2040` |
  10. | `promicro` | `promicro_rp2040` |
  11. | `promicro` | `blok` |
  12. | `promicro` | `bit_c_pro` |
  13. | `promicro` | `stemcell` |
  14. | `promicro` | `bonsai_c4` |
  15. | `promicro` | `elite_pi` |
  16. | `promicro` | `rp2040_ce` |
  17. | `promicro` | `elite_pi` |
  18. | `promicro` | `helios` |
  19. | `promicro` | `liatris` |
  20. | `promicro` | `michi` |
  21. | `elite_c` | `stemcell` |
  22. | `elite_c` | `rp2040_ce` |
  23. | `elite_c` | `elite_pi` |
  24. | `elite_c` | `helios` |
  25. | `elite_c` | `liatris` |
  26. See below for more in depth information on each converter.
  27. ## Overview
  28. Each converter category is broken down by its declared `pin compatibility`.
  29. This ensures that only valid combinations are attempted.
  30. You can generate the firmware by appending `-e CONVERT_TO=<target>` to your compile/flash command. For example:
  31. ```sh
  32. qmk flash -c -kb keebio/bdn9/rev1 -km default -e CONVERT_TO=proton_c
  33. ```
  34. You can also add the same `CONVERT_TO=<target>` to your keymap's `rules.mk`, which will accomplish the same thing.
  35. ?> If you get errors about `PORTB/DDRB`, etc not being defined, you'll need to convert the keyboard's code to use the [GPIO Controls](gpio_control.md) that will work for both ARM and AVR. This shouldn't affect the AVR builds at all.
  36. ### Conditional Configuration
  37. Once a converter is enabled, it exposes the `CONVERT_TO_<target_uppercase>` flag that you can use in your code with `#ifdef`s, For example:
  38. ```c
  39. #ifdef CONVERT_TO_PROTON_C
  40. // Proton C code
  41. #else
  42. // Pro Micro code
  43. #endif
  44. ```
  45. ### Pin Compatibility
  46. To ensure compatibility, provide validation, and power future workflows, a keyboard should declare its `pin compatibility`. For legacy reasons, this is currently assumed to be `promicro`.
  47. Currently the following pin compatibility interfaces are defined:
  48. | Pinout | Notes |
  49. |------------|-----------------------------------|
  50. | `promicro` | Includes RX/TX LEDs |
  51. | `elite_c` | Includes bottom row pins, no LEDs |
  52. To declare the base for conversions, add this line to your keyboard's `rules.mk`:
  53. ```makefile
  54. PIN_COMPATIBLE = elite_c
  55. ```
  56. ## Pro Micro
  57. If a board currently supported in QMK uses a [Pro Micro](https://www.sparkfun.com/products/12640) (or compatible board), the supported alternative controllers are:
  58. | Device | Target |
  59. |------------------------------------------------------------------------------------------|-------------------|
  60. | [Proton C](https://qmk.fm/proton-c/) | `proton_c` |
  61. | [Adafruit KB2040](https://learn.adafruit.com/adafruit-kb2040) | `kb2040` |
  62. | [SparkFun Pro Micro - RP2040](https://www.sparkfun.com/products/18288) | `promicro_rp2040` |
  63. | [Blok](https://boardsource.xyz/store/628b95b494dfa308a6581622) | `blok` |
  64. | [Bit-C PRO](https://nullbits.co/bit-c-pro) | `bit_c_pro` |
  65. | [STeMCell](https://github.com/megamind4089/STeMCell) | `stemcell` |
  66. | [customMK Bonsai C4](https://shop.custommk.com/products/bonsai-c4-microcontroller-board) | `bonsai_c4` |
  67. | [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) | `elite_pi` |
  68. | [0xCB Helios](https://keeb.supply/products/0xcb-helios) | `helios` |
  69. | [Liatris](https://splitkb.com/products/liatris) | `liatris` |
  70. | [Michi](https://github.com/ci-bus/michi-promicro-rp2040) | `michi` |
  71. Converter summary:
  72. | Target | Argument | `rules.mk` | Condition |
  73. |-------------------|---------------------------------|------------------------------|-------------------------------------|
  74. | `proton_c` | `-e CONVERT_TO=proton_c` | `CONVERT_TO=proton_c` | `#ifdef CONVERT_TO_PROTON_C` |
  75. | `kb2040` | `-e CONVERT_TO=kb2040` | `CONVERT_TO=kb2040` | `#ifdef CONVERT_TO_KB2040` |
  76. | `promicro_rp2040` | `-e CONVERT_TO=promicro_rp2040` | `CONVERT_TO=promicro_rp2040` | `#ifdef CONVERT_TO_PROMICRO_RP2040` |
  77. | `blok` | `-e CONVERT_TO=blok` | `CONVERT_TO=blok` | `#ifdef CONVERT_TO_BLOK` |
  78. | `bit_c_pro` | `-e CONVERT_TO=bit_c_pro` | `CONVERT_TO=bit_c_pro` | `#ifdef CONVERT_TO_BIT_C_PRO` |
  79. | `stemcell` | `-e CONVERT_TO=stemcell` | `CONVERT_TO=stemcell` | `#ifdef CONVERT_TO_STEMCELL` |
  80. | `bonsai_c4` | `-e CONVERT_TO=bonsai_c4` | `CONVERT_TO=bonsai_c4` | `#ifdef CONVERT_TO_BONSAI_C4` |
  81. | `rp2040_ce` | `-e CONVERT_TO=rp2040_ce` | `CONVERT_TO=rp2040_ce` | `#ifdef CONVERT_TO_RP2040_CE` |
  82. | `elite_pi` | `-e CONVERT_TO=elite_pi` | `CONVERT_TO=elite_pi` | `#ifdef CONVERT_TO_ELITE_PI` |
  83. | `helios` | `-e CONVERT_TO=helios` | `CONVERT_TO=helios` | `#ifdef CONVERT_TO_HELIOS` |
  84. | `liatris` | `-e CONVERT_TO=liatris` | `CONVERT_TO=liatris` | `#ifdef CONVERT_TO_LIATRIS` |
  85. | `michi` | `-e CONVERT_TO=michi` | `CONVERT_TO=michi` | `#ifdef CONVERT_TO_MICHI` |
  86. ### Proton C :id=proton_c
  87. The Proton C only has one on-board LED (C13), and by default, the TXLED (D5) is mapped to it. If you want the RXLED (B0) mapped to it instead, add this line to your `config.h`:
  88. ```c
  89. #define CONVERT_TO_PROTON_C_RXLED
  90. ```
  91. The following defaults are based on what has been implemented for STM32 boards.
  92. | Feature | Notes |
  93. |----------------------------------------------|------------------------------------------------------------------------------------------------------------------|
  94. | [Audio](feature_audio.md) | Enabled |
  95. | [RGB Lighting](feature_rgblight.md) | Disabled |
  96. | [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
  97. | USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
  98. | [Split keyboards](feature_split_keyboard.md) | Partial - heavily dependent on enabled features |
  99. ### Adafruit KB2040 :id=kb2040
  100. The following defaults are based on what has been implemented for [RP2040](platformdev_rp2040.md) boards.
  101. | Feature | Notes |
  102. |----------------------------------------------|------------------------------------------------------------------------------------------------------------------|
  103. | [RGB Lighting](feature_rgblight.md) | Enabled via `PIO` vendor driver |
  104. | [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
  105. | USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
  106. | [Split keyboards](feature_split_keyboard.md) | Partial via `PIO` vendor driver - heavily dependent on enabled features |
  107. ### SparkFun Pro Micro - RP2040, Blok, Bit-C PRO and Michi :id=promicro_rp2040
  108. Currently identical to [Adafruit KB2040](#kb2040).
  109. ### STeMCell :id=stemcell
  110. Feature set currently identical to [Proton C](#proton_c).
  111. There are two versions of STeMCell available, with different pinouts:
  112. - v1.0.0
  113. - v2.0.0 (pre-release v1.0.1, v1.0.2)
  114. Default official firmware only supports v2.0.0 STeMCell.
  115. STeMCell has support to swap UART and I2C pins, to enable single-wire uart communication in STM chips.
  116. The following additional flags has to be used while compiling, based on the pin used for split communication.
  117. | Split Pin | Compile flags |
  118. |-----------|---------------|
  119. | D3 | -e STMC_US=yes|
  120. | D2 | Not needed |
  121. | D1 | -e STMC_IS=yes|
  122. | D0 | Not needed |
  123. ### Bonsai C4 :id=bonsai_c4
  124. The Bonsai C4 only has one on-board LED (B2), and by default, both the Pro Micro TXLED (D5) and RXLED (B0) are mapped to it. If you want only one of them mapped, you can undefine one and redefine it to another pin by adding these line to your `config.h`:
  125. ```c
  126. #undef B0
  127. // If VBUS detection is unused, we can send RXLED to the Vbus detect pin instead
  128. #define B0 PAL_LINE(GPIOA, 9)
  129. ```
  130. ### RP2040 Community Edition - Elite-Pi, Helios, and Liatris :id=rp2040_ce
  131. Feature set currently identical to [Adafruit KB2040](#kb2040).
  132. Enables VBUS detection by default for superior split keyboard support.
  133. For more information, refer to the [RP2040 Community Edition](platformdev_rp2040.md#rp2040_ce) docs.
  134. ## Elite-C
  135. If a board currently supported in QMK uses an [Elite-C](https://keeb.io/products/elite-c-low-profile-version-usb-c-pro-micro-replacement-atmega32u4), the supported alternative controllers are:
  136. | Device | Target |
  137. |----------------------------------------------------------------------------------|-------------------|
  138. | [STeMCell](https://github.com/megamind4089/STeMCell) | `stemcell` |
  139. | [Elite-Pi](https://keeb.io/products/elite-pi-usb-c-pro-micro-replacement-rp2040) | `elite_pi` |
  140. | [0xCB Helios](https://keeb.supply/products/0xcb-helios) | `helios` |
  141. | [Liatris](https://splitkb.com/products/liatris) | `liatris` |
  142. Converter summary:
  143. | Target | Argument | `rules.mk` | Condition |
  144. |-------------------|---------------------------------|------------------------------|-------------------------------------|
  145. | `stemcell` | `-e CONVERT_TO=stemcell` | `CONVERT_TO=stemcell` | `#ifdef CONVERT_TO_STEMCELL` |
  146. | `rp2040_ce` | `-e CONVERT_TO=rp2040_ce` | `CONVERT_TO=rp2040_ce` | `#ifdef CONVERT_TO_RP2040_CE` |
  147. | `elite_pi` | `-e CONVERT_TO=elite_pi` | `CONVERT_TO=elite_pi` | `#ifdef CONVERT_TO_ELITE_PI` |
  148. | `helios` | `-e CONVERT_TO=helios` | `CONVERT_TO=helios` | `#ifdef CONVERT_TO_HELIOS` |
  149. | `liatris` | `-e CONVERT_TO=liatris` | `CONVERT_TO=liatris` | `#ifdef CONVERT_TO_LIATRIS` |
  150. ### STeMCell :id=stemcell_elite
  151. Currently identical to [STeMCell](#stemcell) with support for the additional bottom row of pins.
  152. ### RP2040 Community Edition :id=rp2040_ce_elite
  153. Currently identical to [RP2040 Community Edition](#rp2040_ce), with support for the additional bottom row of pins.