aboutsummaryrefslogtreecommitdiffstats
path: root/docs/serial_driver.md
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2020-05-21 18:00:21 +0100
committerGitHub <noreply@github.com>2020-05-21 18:00:21 +0100
commit65150984bd1f9c301b080652fe60b181765bb9be (patch)
tree7f714fa864ba58a7c89a97170bad94319c39ff98 /docs/serial_driver.md
parent205321c37740caaffbca69e626a8432fd369d20c (diff)
downloadfirmware-65150984bd1f9c301b080652fe60b181765bb9be.tar.gz
firmware-65150984bd1f9c301b080652fe60b181765bb9be.tar.bz2
firmware-65150984bd1f9c301b080652fe60b181765bb9be.zip
ARM split - Add uart half duplex transport support (#7987)
* ARM split - Add uart half duplex transport support * Fix for f103 * initial full duplex pass * partially remove full duplex * Correct speeds within driver docs Co-authored-by: Nick Brassel <nick@tzarc.org> Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'docs/serial_driver.md')
-rw-r--r--docs/serial_driver.md59
1 files changed, 59 insertions, 0 deletions
diff --git a/docs/serial_driver.md b/docs/serial_driver.md
new file mode 100644
index 000000000..395b3ec3f
--- /dev/null
+++ b/docs/serial_driver.md
@@ -0,0 +1,59 @@
+# 'serial' Driver
+This driver powers the [Split Keyboard](feature_split_keyboard.md) feature.
+
+!> Serial in this context should be read as **sending information one bit at a time**, rather than implementing UART/USART/RS485/RS232 standards.
+
+All drivers in this category have the following characteristics:
+* Provides data and signaling over a single conductor
+* Limited to single master, single slave
+
+## Supported Driver Types
+
+| | AVR | ARM |
+|-------------------|--------------------|--------------------|
+| bit bang | :heavy_check_mark: | Soon™ |
+| USART Half-duplex | | :heavy_check_mark: |
+
+## Driver configuration
+
+### Bitbang
+Default driver, the absence of configuration assumes this driver. To configure it, add this to your rules.mk:
+
+```make
+SERIAL_DRIVER = bitbang
+```
+
+Configure the driver via your config.h:
+```c
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+#define SELECT_SOFT_SERIAL_SPEED 1 // or 0, 2, 3, 4, 5
+ // 0: about 189kbps (Experimental only)
+ // 1: about 137kbps (default)
+ // 2: about 75kbps
+ // 3: about 39kbps
+ // 4: about 26kbps
+ // 5: about 20kbps
+```
+
+### USART Half-duplex
+Targeting STM32 boards where communication is offloaded to a USART hardware device. The advantage is that this provides fast and accurate timings. `SOFT_SERIAL_PIN` for this driver is the configured USART TX pin. **The TX pin must have appropriate pull-up resistors**. To configure it, add this to your rules.mk:
+
+```make
+SERIAL_DRIVER = usart
+```
+
+Configure the hardware via your config.h:
+```c
+#define SOFT_SERIAL_PIN B6 // USART TX pin
+#define SELECT_SOFT_SERIAL_SPEED 1 // or 0, 2, 3, 4, 5
+ // 0: about 460800 baud
+ // 1: about 230400 baud (default)
+ // 2: about 115200 baud
+ // 3: about 57600 baud
+ // 4: about 38400 baud
+ // 5: about 19200 baud
+#define SERIAL_USART_DRIVER SD1 // USART driver of TX pin. default: SD1
+#define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
+```
+
+You must also turn on the SERIAL feature in your halconf.h and mcuconf.h