STM32F747: A Part Number That Does Not Resolve
Requests arrive as a purchase order line, a silkscreen, or a note from a purchaser who was told a part number over the phone. Occasionally the number does not exist. It looks plausible, it sits inside a real family, and every character in it follows the naming convention of the parts around it — but the manufacturer does not list it, no data sheet covers it, and no distributor stocks it.
This part number is one of those. The family it claims to belong to is real and well documented; the member it names is not in the catalogue. That does not mean the board in front of the customer is fictional. It means the number describes an intention rather than a device, and the first task is to find out which device the intention turned into.
The problem stated plainly
A recovery cannot start from a name. It starts from a memory map, a protection state and a flash geometry, and all three are properties of a die, not of a label. When the label does not resolve, every one of those properties is unconfirmed, and proceeding on the assumption that the nearest catalogue neighbour is correct is how a job produces a technically clean image of the wrong address space.
The nearby members are similar enough that the mistake survives a long way. They share a core, a package range, a development ecosystem and most of a reference manual. They differ in exactly the things that matter here: how much flash there is, whether there is a display controller, whether there is a crypto block, and where the RAM regions begin.
What the catalogue actually contains
The family line this number imitates has five documented members on the single-core side, and they form a deliberate ladder.
| member | flash | RAM | display path | crypto | distinguishing feature |
|---|---|---|---|---|---|
| STM32F745 | 1 MB, single bank | 320 KB | no TFT controller | no | the graphics member with the display path removed |
| STM32F746 | 1 MB, single bank | 320 KB | TFT controller plus 2-D accelerator | no | the mainstream graphics part |
| STM32F750 | 64 KB | 320 KB | TFT controller plus 2-D accelerator | yes | value line: tiny internal flash, external memory assumed |
| STM32F756 | 1 MB, single bank | 320 KB | TFT controller plus 2-D accelerator | yes | the 746 with a crypto block |
| STM32F765 | 2 MB | 512 KB | no TFT controller, no JPEG | no | the large-flash member without graphics |
There is no row between 746 and 750 that carries this number, and the ladder explains why: the differentiation in this family is not numerical, it is feature-based. A part one digit away from another is not a slightly faster version of it — it is the same die with a peripheral removed or a block added.
Three readings that settle it
None of these requires removing the lid, and all three are read-only.
| reading | where it comes from | what it answers |
|---|---|---|
| device identification code | the debug identification register, readable over the debug port with the core halted | which die family is present |
| flash capacity register | a 16-bit word in the system memory area, in kilobytes | how large the array is, to the kilobyte |
| peripheral presence probe | reading a register that exists only on some members and checking whether the bus faults | whether the display controller and crypto block are actually there |
The third is the one that resolves the ambiguity a family code cannot. Members of this line share a family code because they share a die; what the code does not tell you is which of the optional blocks were bonded and enabled. A read of a display-controller register that returns a bus fault on a part the customer believes has a display is a decisive answer, and it costs one transaction.
The flash capacity register deserves emphasis because it is the cheapest independent check in the whole job. It answers in kilobytes, it is not affected by protection level, and it disagrees loudly with a wrong assumption. A customer who believes the part has 1 MB and finds a register reporting 64 gets a very different conversation than one who finds 1024.
| what the readings show | the device in practice | consequence |
|---|---|---|
| 1 MB, display controller absent | the non-graphics member of the 1 MB line | no display initialisation in the image, no layer descriptors to decode |
| 1 MB, display controller present | the graphics member | a display pipeline exists and its configuration is part of the image |
| 64 KB, display controller present | the value-line member | the real firmware is largely outside the chip and must be recovered separately |
| 2 MB | the large-flash member | banked flash and a different RAM base map |
Why the distinction changes the job
Two examples show how far the consequences reach.
If the part turns out to be the non-graphics member, then a display initialisation sequence found in the image is evidence that the image came from somewhere else — a development build for a different board, a reference firmware, or a previous hardware revision. That is a finding about the customer’s build process, not about the extraction, and it is worth reporting.
If the part turns out to be the value-line member with 64 KB of internal flash, then the job changes shape entirely. A modern application for this class of device does not fit in 64 KB. The internal array holds a boot stage and the real code sits in external memory, and an extraction that stops at the internal array has recovered a loader. The implications of that split are worked through in STM32F750 flash recovery, which is the member this situation actually describes.
The same reasoning governs protection. Crypto-equipped members can hold a key that never appears in the image, because it is loaded into a register and never written to memory. A member without the crypto block cannot do that, so the presence or absence of the block changes what “the image is complete” can possibly mean. STM32F756 code recovery covers that case.
What to do with a purchase order that says this
| situation | the right move |
|---|---|
| board available and powered | read the three registers, then proceed on the identified device |
| board available but dead | identify from the package, pin count and any accessible test points, then state the identification as provisional |
| no board, only the number | quote against the nearest documented member and say in writing which one, before accepting the job |
| number appears on an internal drawing only | treat it as a project code, not a part number, and ask for the schematic |
The third row is the commercially important one. A quotation written against a name that does not resolve is a quotation for an unknown quantity of work, and the difference between the members is not marginal: one of them requires recovering a second memory device that is not on the die.
What the report should say
The report opens with the identification, states which readings established it, and lists what was ruled out. Only then does it describe the memory. A customer who has been told “the part on your board is this one, here is how we know” can correct their own documentation; a customer handed an image with no identification has been given a result they cannot check.
The adjacent reading of the same family from the perspective of the cache rather than the catalogue is in STM32F746 software recovery. The boot-from-ROM path that makes identification matter even more is in STM32F745 heximal extraction, and the smallest member of the line, where a great deal is defined by what is absent, is in STM32F722 code recovery.
FAQ
Does a number that is not in the catalogue mean the part is counterfeit? No. It usually means the number was assembled from a family pattern, or that it is an internal project code. Counterfeits normally carry a real number on a relabelled package, which is a different problem.
Can the package marking settle it? Partly. Marking gives the family and often the flash code and package, but not the enabled options. The register readings are what close the question.
Is it acceptable to proceed on the nearest documented member? Only with the assumption written down and the customer’s agreement, because the work differs in scope between members.
Conclusion
A designation that does not resolve is not a dead end; it is an instruction to identify before extracting. Three read-only register readings — die identification, flash capacity, and a probe for the optional blocks — turn a name into a device, and everything downstream depends on getting that order right. The recovery is only as good as the map it was performed against, and the map begins with knowing which die is on the bench.