diff --git a/boards/msb-430/doc.txt b/boards/msb-430/doc.txt
index 3e844aa999..b49607e099 100644
--- a/boards/msb-430/doc.txt
+++ b/boards/msb-430/doc.txt
@@ -1,5 +1,109 @@
/**
@defgroup boards_msb430 MSB-430
@ingroup boards
-@brief Support for the ScatterWeb MSB-430 board
+@brief Support for the ScatterWeb Modular Sensor Board 430
+
+
+
+## MCU
+
+| MCU | TI MSP430F1612 |
+|:----------------- |:------------------------------------------------------------- |
+| Family | MSP430 |
+| Vendor | Texas Instruments |
+| Package | 64 QFN |
+| RAM | 5 KiB |
+| Flash | 55 KiB |
+| Frequency | up to 8 MHz |
+| FPU | no |
+| Timers | 2 (2x 16bit) |
+| ADCs | 1x 8 channel 12-bit |
+| UARTs | 2 |
+| SPIs | 2 |
+| I2Cs | 1 |
+| Vcc | 1.8 V - 3.6 V (battery holder board provides 3.0 V) |
+| Datasheet MCU | [Datasheet](https://www.ti.com/lit/ds/symlink/msp430f1612.pdf)|
+| User Guide MCU | [User Guide](https://www.ti.com/lit/ug/slau049f/slau049f.pdf) |
+| Website | [MSB-430](https://www.mi.fu-berlin.de/inf/groups/ag-tech/projects/ScatterWeb/modules/mod_MSB-430.html) |
+
+@warning While programming, the minimum supply voltage is 2.7 V instead of
+ 1.8 V.
+@warning When the supply voltage supervisor (SVS) (a.k.a. brownout detection)
+ is used, the supply voltage must initially be at least 2.0 V due to
+ the hysteresis of the SVS circuitry. Afterwards the MCU remains
+ operational with VCC >= 1.8 V.
+
+## Schematics
+
+
+
+
+
+## Pinout
+
+### Pinout of the Main MSB 430 Board
+
+
+
+### Pinout of the Battery Holder Board
+
+The pins above the JTAG header with the pin closest to the power supply switch
+being denoted as Pin 1, the signals are as follows:
+
+| Pin | 1 | 2 | 3 | 4 | 5 | 6 |
+|:--------- | -----:| -----:| -----:| -----:| -----:| -----:|
+| Signal | GND | NC | 5V | RXD | TXD | NC |
+
+The battery holder board contains a 3V power regular that powers the MSB-430
+board via 3V pin (pin 1 on JP2). The switch at the bottom can be used to select
+the input voltage of that power regulator: If the switch is in the position
+towards the daughter board, it will use the 5V pin of the header above the
+JTAG header as power supply, otherwise the batteries are used as power supply.
+
+## Flashing RIOT
+
+Place the MSB-430 board into the batter holder board with the SD card socket
+facing towards the battery holder board and the (likely unpopulated) antenna
+connector facing away from the switch and JTAG-connector of the battery holder
+board. (As shown in the picture at the top of the page.)
+
+Afterwards, connect a JTAG debugger supported by
+[mspdebug](https://dlbeer.co.nz/mspdebug/); by default the
+Olimex MSP430-JTAG-Tiny is assumed, which is among the less expensive options.
+
+@note If you are not using the Olimex MSP430-JTAG-Tiny (or a compatible
+ programmer), set `MSPDEBUG_PROGRAMMER` to the correct value via
+ an environment variable or as parameter to make. E.g. use
+ `make BOARD=msb-430 MSPDEBUG_PROGRAMMER=bus-pirate` to
+ flash using the bus pirate.
+@warning It is recommended to use the external power supply via the 5V pin
+ instead of the battery while flashing.
+
+Once the board is firmly connected in the battery holder and the JTAG cable is
+connected, just run
+
+```
+make BOARD=msb-430 flash
+```
+
+in the application's directory.
+
+## Using the shell
+
+stdio is available via the UART interface with `RXD = P3.7`
+(pin 35 on the header) and `TXD = P3.6` (pin 34 on the header) at 115,200 Baud.
+
+The easiest way is to connect an USB TTL adapter (such as the cheap `cp210x`
+or `ch341` based adapters) to the battery holder board as follows:
+
+```
+TTL adapter MSB-430 Battery Holder Board
+----------- ----------------------------
+
+ GND --- 1 (GND)
+ TXD --- 4 (RXD / P3.7)
+ RXD --- 5 (TXD / P3.6)
+ 5V --- 3 (5V)
+```
+
*/
diff --git a/makefiles/pseudomodules.inc.mk b/makefiles/pseudomodules.inc.mk
index 639e804fbb..24f3228f02 100644
--- a/makefiles/pseudomodules.inc.mk
+++ b/makefiles/pseudomodules.inc.mk
@@ -448,6 +448,7 @@ PSEUDOMODULES += shell_cmd_benchmark_udp
PSEUDOMODULES += shell_cmd_ccn-lite-utils
PSEUDOMODULES += shell_cmd_conn_can
PSEUDOMODULES += shell_cmd_cord_ep
+PSEUDOMODULES += shell_cmd_coreclk
PSEUDOMODULES += shell_cmd_cryptoauthlib
PSEUDOMODULES += shell_cmd_dfplayer
PSEUDOMODULES += shell_cmd_fib
diff --git a/sys/shell/cmds/Kconfig b/sys/shell/cmds/Kconfig
index e43852bdc4..794bca53d0 100644
--- a/sys/shell/cmds/Kconfig
+++ b/sys/shell/cmds/Kconfig
@@ -308,6 +308,11 @@ config MODULE_SHELL_CMD_SYS
default y if MODULE_SHELL_CMDS_DEFAULT
depends on MODULE_SHELL_CMDS
+config MODULE_SHELL_CMD_CORECLK
+ bool "Shell command printing the CPU frequency"
+ default n
+ depends on MODULE_SHELL_CMDS
+
config MODULE_SHELL_CMD_VFS
bool "Commands for the VFS module (ls, vfs)"
default y if MODULE_SHELL_CMDS_DEFAULT
diff --git a/sys/shell/cmds/coreclk.c b/sys/shell/cmds/coreclk.c
new file mode 100644
index 0000000000..cc9c563341
--- /dev/null
+++ b/sys/shell/cmds/coreclk.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2023 Otto-von-Guericke Universität Magdeburg
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @ingroup sys_shell_commands
+ * @{
+ *
+ * @file
+ * @brief Shell command printing the CPU frequency
+ *
+ * @author Marian Buschsieweke
+ *
+ * @}
+ */
+
+#include
+#include
+#include
+
+#include "clk.h"
+#include "shell.h"
+
+static int _coreclk(int argc, char **argv)
+{
+ (void)argc;
+ (void)argv;
+ printf("core clock: %" PRIu32 " Hz\n", coreclk());
+ return 0;
+}
+
+SHELL_COMMAND(coreclk, "Print the CPU frequency", _coreclk);