2

I want to upload the device firmware to a file using dfu-util. How can I determine the correct size of flash memory?

After booting the device into DFU it can be found using:

dfu-util -l

For which I receive the following information:

Found DFU: [0483:df11] ver=2200, devnum=8, cfg=1, intf=0, alt=1, name="@Option Bytes  /0x1FFFF800/01*016 e", serial="FFFFFFFEFFFF"
Found DFU: [0483:df11] ver=2200, devnum=8, cfg=1, intf=0, alt=0, name="@Internal Flash  /0x08000000/064*0002Kg", serial="FFFFFFFEFFFF"

To upload the flash configuration to a file I need to determine the size of flash memory. Based on this article the size would be 64 x 1kB of flash memory.

What is the meaning of 'Kg' in 0002Kg?
The instructions I am following (elsewhere, for a different device, see above) is using 128 x 1kB, instead which I believe is incorrect.
How can I calculate the size of flash memory and what will happen if I set the memory size too large to download an image?

The command is:

dfu-util -a 0 -s 0x08000000:131072 -U ./original.bin

I think it should be

dfu-util -a 0 -s 0x08000000:65536 -U ./original.bin
linuxUser123
  • 529
  • 3
  • 17

1 Answers1

2

Please see UM0290 in which we find:

Each Alternate setting string descriptor must follow this memory mapping else the PC Host Software would be able to decode the right mapping for the selected device:

  • @: To detect that this is a special mapping descriptor (to avoid decoding standard descriptor)
  • /: for separator between zones
  • Maximum 8 digits per address starting by “0x”
  • /: for separator between zones
  • Maximum of 2 digits for the number of sectors
  • * : For separator between number of sectors and sector size
  • Maximum 3 digits for sector size between 0 and 999
  • 1 digit for the sector size multiplier. Valid entries are: B (byte), K (Kilo), M (Mega)
  • 1 digit for the sector type as follows:
    • a (0x41): Readable
    • b (0x42): Erasable
    • c (0x43): Readable and Erasable
    • d (0x44): Writeable
    • e (0x45): Readable and Writeable
    • f (0x46): Erasable and Writeable
    • g (0x47): Readable, Erasable and Writeable

So your string really does mean that the internal flash is 64 sectors of 2 KB, and that they are "readable, erasable and writable" (i.e. flash). Are you sure about your expectations of the device's flash layout?

unwind
  • 391,730
  • 64
  • 469
  • 606
  • The OP's example has, `name="@Internal Flash /0x08000000/064*0002Kg"` has space for what appears to be a 3 digits for the number of sectors and 4 digits for sector size. Is there an updated version of `UM0290` to address the extra digits? – Zak Mar 24 '23 at 20:27