Table of Contents
Introduction
The Texas Instruments MSPM0 series (PDF MSPM0 Product Portfolio) of microcontrollers are low-cost parts containing ARM Cortex-M0+ cores. There are dozens of MSPM0 blog posts on element14 describing various tips and tricks with the MSPM0. They are really nice to use, from either command line or with multiple Interactive Development Environment (IDE) options, across Windows, Mac and Linux, and TI has gone the extra distance to make sure there are plenty of tools and example software apps.
Ordinarily, ARM based microcontrollers can be programmed via an interface called SWD, however many of the TI MSPM0 parts also support a built-in bootloader that allows for programming via UART or even I2C.
In this short blog post, I will describe how to program MSPM0 devices using the UART interface (specifically, using the pins labelled BSL UART on the microcontroller).
I will skip the steps regarding how to write code and build it into a .hex file; check out some of the other blog posts (type MSPM0 in the search bar at the top) for information on those steps.

Obtain a USB-UART Adapter
Although not necessary (any cheap ready-made USB-UART could be used), I used a Pi Pico as a simple USB-UART adapter.
There are several Pi Pico USB-UART emulation implementations online (including a dual USB UART!) however I used my own project, which is based on older code that performs double duty as an I2C adapter too (that’s not required for this of course).
The firmware, including a pre-built binary that can just be drag-and-dropped into the Pi Pico USB Storage drive (when plugged into a PC with the BOOT button pressed down), is available in a E-Z I2C Adapter and UART Bridge repository and then when you plug the USB connection into a PC, you’ll see two COM ports appear; the first one is the I2C adapter (unused) and the second is for the USB-UART function.
Wire It Up!
The diagram shows approximately the bare minimum needed to program the MSPM0 via the BSL UART pins.

For example, this is the miniL1105 schematic, which is a practical implementation of an almost-bare-minimum MSPM0 microcontroller board (PCB Gerber files available here plus all files for a full development board called EasyL1105 explained here: (+) EasyL1105: A Dev Board for the TI ARM Cortex-M0+ L-Series - element14 Community):

As you can see at the lower-left of the schematic, there are a couple of pull-up resistors on the BSL UART connections. They are not strictly always essential, but it may be worth putting them at least as “Do Not Populate” footprints on a PCB initially, in case they are beneficial for any real workflow. For instance, R6 is useful to pull up the BSL UART_RX line to a known state if a USB-UART is not attached until after the boot button has been pressed. R12 may be useful with some USB-UART adapters which may not like the BSL UART_TX connection being high impedance until after the first bootloader instruction is sent from the PC.
Obtain the MSPM0 Programmer Software
Texas Instruments offers a GUI-based tool called UniFlash, but it’s large since it supports thousands of TI parts, has an odd user interface as a result, and takes ages to flash the device.
As another option, one can download the far simpler and easier-to-use mspm0_prog Python software
To use it as discussed in the next section, first pyserial needs to be installed:
pip install pyserial
Procedure
With the USB-UART adapter UART connections wired up to the MSPM0, and the USB cable from the USB-UART adapter plugged in to the PC, this is the command to flash the .hex file into the MSPM0 microcontroller (change the COM port number and path/filename as required):
python ./mspm0_prog.py --port COM3 C:\DEV\projects\myproject\firmware.hex
If all goes well, you’ll be prompted to hold down the BOOT button on the MSPM0 board and then press the RESET button and then release both and hit Enter. With a small microcontroller like the MSPM0L1105, programming will complete within seconds.
Summary
Although the normal (and more capable) way to program up (and debug) ARM chips is via the SWD connections, if all you need is to program up the Flash, then it is also very quick an easy to just use the built-in bootloader capability that many of the parts within the MSPM0 range possess.
Very little is needed, just a USB-UART adapter, and if that’s not available, then a Pi Pico can be repurposed in a pinch, to emulate such a device.
The programming software is Python-based, and should run on Windows/Mac/Linux (not tested on Mac!).
Thanks for reading.