Skip to content

Problem flashing Sea Micro (atmega32u4) using DFU #33

@gbThreepwood

Description

@gbThreepwood

I just received a hillside48 with a Sea Micro atmega32u4 USB-C microcontroller (ordered on beekeeb), and I experienced some challenges uploading the QMK firmware using DFU. I think I have solved the problem (or at least found a workaround), but I still have not gotten around to solder the keys to my keyboard and tested it, so I will have to write a update once that is completed.

Tldr: use avrdude to flash the MCU

I think this issue is with QMK or the microcontroller, but for now I wanted to add it here. Perhaps something could be written about it in the documentation.

My problem was when running the qmk flash command.

~ qmk flash
Ψ Compiling keymap with make -r -R -f builddefs/build_keyboard.mk -s flash KEYBOARD=hillside/48/0_1 KEYMAP=gbthreepwood KEYBOARD_FILESAFE=hillside_48_0_1 TARGET=hillside_48_0_1_gbthreepwood INTERMEDIATE_OUTPUT=.build/obj_hillside_48_0_1_gbthreepwood VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"


avr-gcc (GCC) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
   text	   data	    bss	    dec	    hex	filename
      0	  18082	      0	  18082	   46a2	hillside_48_0_1_gbthreepwood.hex

Copying hillside_48_0_1_gbthreepwood.hex to qmk_firmware folder                                     [OK]
Checking file size of hillside_48_0_1_gbthreepwood.hex                                              [OK]
 * The firmware size is fine - 18082/28672 (63%, 10590 bytes free)
Flashing for bootloader: atmel-dfu
Bootloader Version: 0x00 (0)
Checking memory from 0x0 to 0x6FFF...  Empty.
Chip already blank, to force erase use --force.
Checking memory from 0x0 to 0x46FF...  Empty.
0%                            100%  Programming 0x4700 bytes...
[ X  ERROR
Memory write error, use debug for more info.
make: *** [platforms/avr/flash.mk:173: flash] Error 254

Directly calling the dfu-programmer software gives the same error:

dfu-programmer atmega32u4 flash hillside_48_0_1_gbthreepwood.hex --debug 2
     target: atmega32u4
    chip_id: 0x2ff4
  vendor_id: 0x03eb
    command: flash
      quiet: false
      debug: 2
device_type: AVR
------ command specific below ------
   validate: true
   hex file: hillside_48_0_1_gbthreepwood.hex

Checking memory from 0x0 to 0x46FF...  Empty.
0%                            100%  Programming 0x4700 bytes...
[ X  ERROR
Memory write error, use debug for more info.

The following works, and afterwards it seems that the qmk flash also started working:

avrdude -p atmega32u4 -c flip1 -U flash:w:hillside_48_0_1_gbthreepwood.hex

Output is:

avrdude warning: USB bDeviceClass = 255 (expected 254)
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e9587 (probably m32u4)
avrdude: Note: flash memory has been specified, an erase cycle will be performed.
         To disable this feature, specify the -D option.
avrdude: erasing chip

avrdude: processing -U flash:w:hillside_48_0_1_gbthreepwood.hex:i
avrdude: reading input file hillside_48_0_1_gbthreepwood.hex for flash
         with 18082 bytes in 1 section within [0, 0x46a1]
         using 142 pages and 94 pad bytes
avrdude: writing 18082 bytes flash ...
Writing | ################################################## | 100% 1.12 s 
avrdude: 18082 bytes of flash written
avrdude: verifying flash memory against hillside_48_0_1_gbthreepwood.hex
Reading | ################################################## | 100% 0.44 s 
avrdude: 18082 bytes of flash verified

avrdude done.  Thank you.

I now get the following upon issuing qmk flash:

Ψ Compiling keymap with make -r -R -f builddefs/build_keyboard.mk -s flash KEYBOARD=hillside/48/0_1 KEYMAP=gbthreepwood KEYBOARD_FILESAFE=hillside_48_0_1 TARGET=hillside_48_0_1_gbthreepwood INTERMEDIATE_OUTPUT=.build/obj_hillside_48_0_1_gbthreepwood VERBOSE=false COLOR=true SILENT=false QMK_BIN="qmk"


avr-gcc (GCC) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Size before:
   text	   data	    bss	    dec	    hex	filename
      0	  18082	      0	  18082	   46a2	hillside_48_0_1_gbthreepwood.hex

Copying hillside_48_0_1_gbthreepwood.hex to qmk_firmware folder                                     [OK]
Checking file size of hillside_48_0_1_gbthreepwood.hex                                              [OK]
 * The firmware size is fine - 18082/28672 (63%, 10590 bytes free)
Flashing for bootloader: atmel-dfu
Bootloader Version: 0x00 (0)
Checking memory from 0x0 to 0x6FFF...  Not blank at 0x1.
Erasing flash...  Success
Checking memory from 0x0 to 0x6FFF...  Empty.
Checking memory from 0x0 to 0x46FF...  Empty.
0%                            100%  Programming 0x4700 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
0%                            100%  Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]  Success
Validating...  Success
0x4700 bytes written into 0x7000 bytes memory (63.39%).
make: *** [platforms/avr/flash.mk:173: flash] Error 254

There is still a error 254 message, but at least it seems like some uploading did happen.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions