Half a megabyte and a hundred pins is a combination that appears in exactly one place in this family, and the GD32F303VE is it. The array stops precisely at the bank-zero limit, so there is no seam, no four-kilobyte page and no second controller to unlock, while the package offers eighty general-purpose pins and a full external memory interface. It is the simplest memory layout in the line wrapped in the most complex package, which makes it a good part to explain what actually varies across these devices and what does not.
The controller provides eight chip-select regions with independent timing, and on this part it is often used for a small SRAM or a display controller rather than for bulk storage, because half a megabyte of internal flash is enough for most of the code. The practical effect is a device that behaves like a conventional microcontroller until the moment you look at the address decode and find half the interesting data living at 0x60000000 rather than at 0x08000000. Recognising that boundary in a recovered image is what separates a usable report from a dump.
The rest of the package is familiar: 64 KB of SRAM, three converter units across sixteen channels, two advanced-control timers, four general-purpose sixteen-bit timers with two basic timers, three SPI ports of which two can act as I2S, two I2C ports, one CAN 2.0B controller, a full-speed USB device port and two twelve-bit DACs. Ten timers and two advanced units is the configuration that high-density members share, regardless of pin count. The the STM32F100RE job report covers a 64-pin part with a comparable peripheral mix.
Because 512 KB exactly fills bank zero, the flash controller behaves like the one on a quarter-megabyte device with twice the pages. Two hundred and fifty-six pages of two kilobytes, one lock bit, one pair of magic keys, one mass erase bit. There is no scenario in which the operator has to decide which bank to erase, and no page above the seam whose size differs from the rest. For a recovery, that is a real advantage: the page table is arithmetic, the erase routine has one branch, and a partial read can stop anywhere without leaving an odd-sized page behind.
The security mechanism is the family standard. At 0x1FFFF800, a value of 0xA5 means no protection; anything else means the array is closed, the first four kilobytes are additionally protected against erase and program, and accesses through the debug port fail at the bus. The option block stays writable in every boot mode, which is the design decision that makes recovery possible at all: writing the byte back to 0xA5 is permitted while the array is closed, and the controller responds by mass erasing the array before releasing it. There is no route that reads first and erases second.
The package is generous, so mechanical access is rarely the problem. What catches people on boards of this shape is that the external bus lines are shared with ordinary port pins, and holding one of those pins in the wrong state during a read can make the firmware believe a peripheral is present. Powering from the fixture and holding the external chip selects inactive is the standard precaution. If the product firmware reconfigures the bus early in startup, keep the device in reset while the fixture settles, then release and read immediately.
Two reads with a power cycle between them, compared page by page, remain the evidence standard. At this size the whole array fits comfortably in memory, so a word-by-word comparison is cheap and produces an exact list of differing addresses. Any difference should be re-read before it is interpreted, and the re-read should be logged with its timestamp, because a mismatch that disappears is a fixture symptom and one that persists is a page at the end of its life.
The rebuild step is where an external-bus product differs from the rest of the family. Writing the recovered image into a blank device reproduces the internal behaviour exactly and the external behaviour not at all, so the comparison has to be done with the same external parts attached, or with the bus accesses traced instead. A trace of the first few hundred cycles after reset tells you whether the firmware found what it expected; that trace, not the hash, is the real acceptance test for this part. unlocking an STM32F100R8 shows a smaller device where the same method was applied and STM32F100V8 cracking a case where the external device had failed as well.
The package contains the binary, a 256-entry page map, per-block checksums, the option block decoded, the protection mask translated into 16 KB slices, the density signature, and a short list of external regions referenced by the code. IC reverse engineering describes the reverse-engineering side and reverse engineering a chip the verification discipline behind the two-pass rule.
Of the ten densities in this family, the VE is the easiest to reason about and among the most awkward to reproduce, precisely because half of what makes the product work may not be on the die at all.