I'm writing a firmware to a STM32F103RCT6 microcontroller that has a flash of 256KB according to the datasheet.

Because of a mistake of mine, I was writing some data at 0x0807F800 that according to the reference manual is the last page of a high density device. (The ref. manual make no distinction of different sizes of 'high density devices' on the memory layout)

The data that I wrote, was being read with no errors, so I did some tests and read/wrote 512KB of random data and compared the files and they matched!

I did some research I couldn't find similar experiences. Are those extra flash reliable? Is that some kind of industrial maneuver?


2 Answers 2


All MCUs in a family or a family line are made on the very same silicon die. 512KB, and 256KB, and other MCUs are physically the same thing, however when you have 8 million transistors or more, some of them will not work, or will not work reliably, or will not work reliably at a particular temperature, or in the case of flash memory will not retain your information long enough.

Most likely your MCU started its life as a 512KB part, but during manufacturing testing it turned out that only 256KB are reliable across all operating conditions. The manufacturer probably does not have a facility in the chip to disable half of the flash, so only the identification bits are written accordingly and the programmer is expected to obey them.

Another hypothesis: it can be a counterfeit part (512KB) that was rejected from the factory, but someone found that 256KB is "good enough" and relabled it.


All STM32F1 chips use the same silicon die. They can configure various things with one-time-programmable fields, or the position of the bond wires.

For marketing reasons they sell chips with lesser flash/ram against a lower price by reducing testing time, since time is expensive. This this flash will be there, but is untested.
This method also applies to the temperature specifications of the 125C parts.

It would make sense to think the other flash is damaged or unusable, but if the yield* was that low they would require mapping of the sectors on each chip. Since any sector can be damaged, else you'd have a gap in the memory map!
This would mean that there would be no additional flash than tested and mapped, which is not the case.

Despite the flash being there, I do not recommend using it.

I asked this once for the 407.

*yield: amount of working chips per wafer.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.