Based on the technical data sheet (page 3) and the avrdude reference sheet the protocol AVR911 should be used, which avrdude does when you give it the -c avr911 switch. Currently it’s invoked with the -c stk500 flag for standard arduino programming.
You should try
upload_protocol = avr911
upload_port = /dev/cu.SLAB_USBtoUART
And do a verbose upload. For me this results in the call
avrdude -v -p atmega328p -C C:\Users\Maxi\.platformio\packages\tool-avrdude\avrdude.conf -c avr911 -b 115200 -D -P "/dev/cu.SLAB_USBtoUART" -U flash:w:.pio\build\uno3\firmware.hex:i
… Which is OK except for the -P option… this should use only the USB interface and not a COM port. But lets see what happens first.
Maybe then a -Pusb might help? (Atmel AVR — PlatformIO latest documentation)