ATtiny412 Device ID mismatch

I just purchased a batch of ATtiny412-SSF direct from Microchip.

I have previously purchased 402 and 1604 devices from them with no issues.

When I tried to program one, I got an error message indicating the device returned the incorrect device ID.

Is this a duff batch of devices (I have a support thread started with Microchip)?

My platformio.ini …

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:ATtiny412]
platform = atmelmegaavr
board = ATtiny412
framework = arduino

board_build.f_cpu = 16000000L
upload_speed = 115200
upload_port = /dev/ttyUSB0

monitor_port = /dev/ttyUSB1
monitor_speed = 9600

upload_flags =
    --tool
    uart
    --device
    ATtiny1604
    --uart
    $UPLOAD_PORT
    --clk
    $UPLOAD_SPEED
upload_command = pymcuprog write --erase $UPLOAD_FLAGS --filename $SOURCE

The error code…

Processing ATtiny412 (platform: atmelmegaavr; board: ATtiny412; framework: arduino)
------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelmegaavr/ATtiny412.html
PLATFORM: Atmel megaAVR (1.9.0) > ATtiny412
HARDWARE: ATTINY412 16MHz, 256B RAM, 4KB Flash
PACKAGES: 
 - framework-arduino-megaavr-megatinycore @ 2.6.7 
 - tool-avrdude @ 1.70100.0 (7.1.0) 
 - toolchain-atmelavr @ 3.70300.220127 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 16 compatible libraries
Scanning dependencies...
Dependency Graph
|-- SendOnlySoftwareSerial
Building in release mode
Checking size .pio/build/ATtiny412/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [===       ]  29.7% (used 76 bytes from 256 bytes)
Flash: [=====     ]  47.1% (used 1931 bytes from 4096 bytes)
Configuring upload protocol...
AVAILABLE: jtag2updi
CURRENT: upload_protocol = jtag2updi
Looking for upload port...
Using manually specified: /dev/ttyUSB0
Uploading .pio/build/ATtiny412/firmware.hex
Connecting to SerialUPDI
Pinging device...
pymcuprog.pymcuprog_main - ERROR - Device ID mismatch: read out '1E9223'; expected '1E9425'.
Done.
*** [upload] Error 1

I tested a sample ATtiny3226 I received in the same order and these also returned a device mismatch - but the programmer was expecting thesame value as per ATtiny412, that is 1E9425 - this can’t be correct as these are different devices.

My platformio.ini for ATTiny3226…

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:ATtiny3226]
platform = atmelmegaavr
board = ATtiny3226
framework = arduino

upload_speed = 115200
upload_port = /dev/ttyUSB0
; monitor_port = /dev/ttyUSB0
; monitor_speed = 115200
upload_flags =
    --tool
    uart
    --device
    ATtiny1604
    --uart
    $UPLOAD_PORT
    --clk
    $UPLOAD_SPEED
upload_command = pymcuprog write --erase $UPLOAD_FLAGS --filename $SOURCE

And the error...
Processing ATtiny3226 (platform: atmelmegaavr; board: ATtiny3226; framework: arduino)
------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelmegaavr/ATtiny3226.html
PLATFORM: Atmel megaAVR (1.9.0) > ATtiny3226
HARDWARE: ATTINY3226 16MHz, 3KB RAM, 32KB Flash
PACKAGES: 
 - framework-arduino-megaavr-megatinycore @ 2.6.7 
 - tool-avrdude @ 1.70100.0 (7.1.0) 
 - toolchain-atmelavr @ 3.70300.220127 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 15 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/ATtiny3226/src/main.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/ExtraWiring.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/UART.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/UART0.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/UART1.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/WInterrupts.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/WInterrupts_PA.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/WInterrupts_PB.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/WInterrupts_PC.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/abi.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/api/Common.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/api/IPAddress.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/api/PluggableUSB.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/api/Print.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/api/RingBuffer.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/api/Stream.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/api/String.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/hooks.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/main.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/new.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/wiring.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/wiring_analog.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/wiring_digital.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/wiring_extra.cpp.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/wiring_pulse.S.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/ATtiny3226/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/ATtiny3226/libFrameworkArduino.a
Indexing .pio/build/ATtiny3226/libFrameworkArduino.a
Linking .pio/build/ATtiny3226/firmware.elf
Checking size .pio/build/ATtiny3226/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   0.1% (used 4 bytes from 3072 bytes)
Flash: [          ]   1.0% (used 334 bytes from 32768 bytes)
Building .pio/build/ATtiny3226/firmware.hex
Configuring upload protocol...
AVAILABLE: jtag2updi
CURRENT: upload_protocol = jtag2updi
Looking for upload port...
Using manually specified: /dev/ttyUSB0
Uploading .pio/build/ATtiny3226/firmware.hex
Connecting to SerialUPDI
Pinging device...
pymcuprog.pymcuprog_main - ERROR - Device ID mismatch: read out '1E9527'; expected '1E9425'.
Done.
*** [upload] Error 1

What do you think is going on?

By the way - I just used the same physical programmer to program an ATtiny1604 and this worked fine but…

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:ATtiny1604]
platform = atmelmegaavr
board = ATtiny1604
framework = arduino
; board_build.f_cpu = 16000000L
upload_speed = 115200
upload_port = /dev/ttyUSB0
; monitor_port = /dev/ttyUSB0
; monitor_speed = 115200
upload_flags =
    --tool
    uart
    --device
    ATtiny1604
    --uart
    $UPLOAD_PORT
    --clk
    $UPLOAD_SPEED
upload_command = pymcuprog write --erase $UPLOAD_FLAGS --filename $SOURCE

The output…

Processing ATtiny1604 (platform: atmelmegaavr; board: ATtiny1604; framework: arduino)
------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelmegaavr/ATtiny1604.html
PLATFORM: Atmel megaAVR (1.9.0) > ATtiny1604
HARDWARE: ATTINY1604 16MHz, 1KB RAM, 16KB Flash
PACKAGES: 
 - framework-arduino-megaavr-megatinycore @ 2.6.7 
 - tool-avrdude @ 1.70100.0 (7.1.0) 
 - toolchain-atmelavr @ 3.70300.220127 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 17 compatible libraries
Scanning dependencies...
Dependency Graph
|-- SendOnlySoftwareSerial
Building in release mode
Checking size .pio/build/ATtiny1604/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [          ]   3.0% (used 31 bytes from 1024 bytes)
Flash: [=         ]   8.0% (used 1305 bytes from 16384 bytes)
Configuring upload protocol...
AVAILABLE: jtag2updi
CURRENT: upload_protocol = jtag2updi
Looking for upload port...
Using manually specified: /dev/ttyUSB0
Uploading .pio/build/ATtiny1604/firmware.hex
Connecting to SerialUPDI
Pinging device...
Ping response: 1E9425
Erasing device before writing from hex file...
Writing from hex file...
Writing flash...
Done.

But what I noticed is that the programmer got 1E9425 from the ATTiny1604 - so why was it expecting the same device ID for the ATtiny3226 and ATtiny412.

Is there some config file I need to edit?

What is the definitive device ID for ATtiny3226 and ATtiny412 ?

I think I see my error - pls hold fire on pummeling me.

Doh! forgot to edit the device in the upload flags - there is no problem