B101E & U0028 on an HMI: the “VIN Not Programmed” Fault

GM scan tool displaying DTC B101E, VIN not programmed, on an HMI module

DTC B101E is a General Motors diagnostic trouble code in the “Electronic Control Unit Software” family. On its own it only tells you that a module is reporting a software, calibration, configuration, or programming condition — it does not, by itself, mean the module is defective. The two-digit symptom byte after the code (for example B101E-47) defines the actual condition, and some scan tools shorten that to a plain “module not programmed” description. This Tech Note breaks down every symptom byte, explains why “not programmed” is a generic descriptor shared by many GM modules, and details why B101E “VIN Not Programmed” — especially alongside a U0028 MOST bus code — on a freshly installed HMI points to the vehicle’s communication bus rather than the module.

The short answer

  • B101E = “Electronic Control Unit Software.” It is a family of conditions, not a single fault, and many different GM modules can set it.
  • The symptom byte defines the condition. “Not programmed” variants (41, 45, 46, 47, etc.) describe a programming/learn state — they are generic descriptors, not automatic proof of a bad part.
  • Some scan tools shorten B101E to “module not programmed” or “control module not programmed,” without showing the symptom byte. It is the same condition reported with less detail.
  • On an HMI, the relevant condition is typically B101E-47, “VIN Not Programmed,” which often displays on screen as “NO VIN.”
  • The HMI learns the VIN from the MOST communication bus at first power-up. If the bus is not communicating, the module has nothing to read and lock to, so it correctly reports the VIN as not programmed.
  • A U0028 MOST bus code reported with B101E-47 confirms the bus is down. That pairing is the signature of a ring fault — the HMI has no data source to learn the VIN from.
  • In that case the module is reporting the fault, not causing it. Diagnosis runs through the bus and the other nodes on the ring — not through replacing the HMI.

What is DTC B101E?

B101E is a GM “B” (body) code with the descriptor “Electronic Control Unit Software.” Per GM Service Information it is a generic software/programming code that a wide range of control modules can set — for example body control modules, instrument clusters, restraint/sensor modules, immobilizer/theft systems, and infotainment modules such as the HMI.

Because so many modules share this code, two pieces of information matter every time you read it:

  • Which module reported it. A scan tool shows the reporting module next to the code. B101E from the BCM, the cluster, a sensor, or the HMI are very different situations.
  • The symptom byte. The two digits after the dash (the “Sym” value) specify exactly what the module is reporting — a missing calibration is not the same as a missing VIN or a checksum failure.

Reading “B101E – Not Programmed” without those two details is the single most common reason good modules get condemned by mistake.

B101E symptom byte chart

The following symptom bytes are documented in GM service information for B101E. Wording can vary slightly by model year and module, but the meanings are consistent.

CodeSymptom byte meaningWhat it generally indicates
B101E-00Electronic Control Unit Software – general malfunctionGeneric software fault
B101E-31Internal checksum errorPossible module/software integrity issue
B101E-32General memory malfunctionPossible module memory issue
B101E-41Software not programmedModule software has not been loaded
B101E-42Calibration not programmedCalibration has not been loaded
B101E-43EEPROM incorrect programmingProgramming/memory mismatch
B101E-44Security access not activatedSecurity access step not completed
B101E-45Variant / software version not programmedVariant or version not set
B101E-46Configuration not programmedModule configuration not set
B101E-47VIN not programmedModule has no VIN — see the HMI case below
B101E-48Security code not programmedTheft/security code not set (common in key programming)
B101E-4AProgramming checksum errorProgramming integrity issue
B101E-4BCalibration not learned / not setCalibration learn step not completed
B101E-4CDTC memory fullModule fault memory is full

Why “not programmed” is a generic descriptor — not a bad part

Several B101E symptom bytes use the words “not programmed.” That phrasing describes a state — the module does not currently hold a particular piece of software, calibration, configuration, security code, or VIN. It does not, on its own, mean the module is faulty. The same descriptor appears across very different repairs:

  • A body control module can report B101E-48 (security code not programmed) during key or immobilizer programming.
  • A sensor or restraint module can report B101E-42 (calibration not programmed) when its calibration has not been loaded.
  • An instrument cluster can report a “not programmed” condition tied to theft/security data.
  • An infotainment HMI can report B101E-47 (VIN not programmed) when it does not have a VIN.

In some of those cases the fix is to program the module. In others — including the HMI VIN case — the module is designed to acquire the missing data automatically from the vehicle, and a persistent “not programmed” reading means something is blocking that automatic process. That is why the descriptor alone is never a diagnosis. You have to know which module set it, which symptom byte is present, and how that specific module is supposed to obtain the missing item.

“Module not programmed” — why your scan tool’s wording may differ

Not every scan tool displays the symptom byte. Higher-end and GM-specific tools will show the full B101E-47 “VIN Not Programmed” detail, but many generic or aftermarket scanners collapse the same code down to a shorter description such as “module not programmed” or “control module not programmed.” That wording is not a different fault — it is the same B101E condition reported with less detail. It is also easy to misread: “module not programmed” sounds like the module itself is the problem, when on an HMI it usually means the module has no VIN to learn because the bus is down. If your tool only shows the short description, read it alongside any U-codes present (such as U0028) and, where possible, pull the symptom byte before concluding anything about the module.

B101E-47 and the HMI: why a new module shows “NO VIN”

An HMI (the infotainment Human-Machine Interface module) does not have its VIN written in at the bench. There are two distinct steps:

  • Software and content are programmed to the unit before it ships, based on the VIN provided — calibrations, options, and configuration for that specific vehicle.
  • The VIN itself is learned from the vehicle at first power-up. The HMI reads the VIN from the MOST communication bus and locks to it.

On a vehicle with a healthy bus, a brief “NO VIN” message at install is normal — it clears on its own, usually within moments, once the module reads and locks the VIN from the ring, and it does not return.

If that message stays, or a scan tool reports B101E-47 (VIN Not Programmed) — or simply “module not programmed” — against the HMI, the cause is generally upstream of the module: the MOST bus is not delivering a VIN for the HMI to read. When the ring is open or not communicating, the module has nothing to lock to, so it reports exactly that. The on-screen “NO VIN” and the scan-tool code are two views of the same condition. The module is reporting the fault, not causing it. A functioning HMI on an inoperable bus reports “VIN not programmed” because it genuinely cannot see a VIN — and a different module installed on the same bus reports the same thing, because it also has nothing to learn from.

The companion code: U0028 and the MOST bus

This is the detail that confirms the diagnosis. U0028-00 is the GM MOST bus communication code — a network/ring-break fault. The MOST bus is a closed ring, and the radio acts as the master node. When a node stops receiving data from the node ahead of it, the radio runs a wake-up sequence; if there is still no data after its retries, it sets U0028-00 through its Ring Break Diagnosis. Related codes such as U0029-00 (MOST bus) and U0184-00 (lost communication with the radio/receiver) may appear alongside it.

So when a scan of a newly installed HMI shows B101E-47 “VIN Not Programmed” (or “module not programmed”) together with U0028, the two codes tell one consistent story: the MOST bus is not communicating (U0028), and because of that the HMI has no data on the ring to learn the VIN from, so it reports the VIN as not programmed (B101E-47). The bus fault is the cause; the “NO VIN” reading is the effect. This is the opposite of a defective module — it is a healthy module accurately reporting that the network it depends on is down.

Why “reprogram, then replace” can mislead on an HMI

The generic GM service flow for B101E is, in effect: if the code is set, program the module; if it resets, replace the module. That logic assumes the module can communicate and that the missing item can be written into it directly. For an HMI VIN condition paired with U0028, both assumptions fail:

  • The VIN is learned from the bus, not written in by a typical programming event — so there is nothing to “reprogram” into the module to satisfy B101E-47 if the bus is the problem.
  • If the bus is down (U0028), the module cannot complete the learn no matter how many times it is reprogrammed or replaced — each new module sees the same broken ring.

Following the generic flow to its end here means replacing a good module, watching the codes return, and being no closer to the real fault. The decision point the generic flow skips is: can the module actually see the bus? A U0028 in the same scan answers that — it cannot.

How to diagnose B101E-47 + U0028 on an HMI

The MOST bus is a closed ring. Every node — for example the radio/receiver (the master), amplifier, telematics unit, and HMI — passes communication to the next node, so a single break, short, or unseated connector anywhere can drop the entire loop. When B101E-47 / “NO VIN” persists with a U0028, the path runs through the vehicle:

  1. Read the full fault set. Note which module reported B101E, the symptom byte (or the tool’s short description), and every U-code present (U0028, U0029, U0184 and similar). A U0028 alongside B101E-47 points firmly at the network.
  2. Look for multiple offline nodes. A ring break commonly takes more than one module offline at once. Several modules reporting lost communication confirms a bus problem rather than a single bad unit.
  3. Use Ring Break Diagnosis data. The radio (MOST master) tracks ring status; a scan tool with manufacturer data and a MOST bypass loop tool (GM EL-51578) isolates which node or segment has broken the ring.
  4. Inspect the ring physically. Confirm every node connector is fully seated — including any harness disturbed during the install — and check for damage, corrosion, water intrusion, or a missing power/ground at a node.
  5. Restore the ring, then recheck. Once the bus communicates again, a healthy HMI typically reads and locks the VIN, “NO VIN” clears, and B101E-47 and U0028 stop resetting.

When B101E does indicate a module or programming problem

A bus fault is the common cause of a persistent B101E-47 on a new HMI, but B101E is not always a bus issue and is not always innocent. Treat the following as genuine module/programming concerns rather than communication faults:

  • Hardware/integrity bytes — B101E-31 (internal checksum), -32 (general memory), -43 (EEPROM), or -4A (programming checksum) — can indicate an actual software-integrity or hardware condition in the reporting module.
  • B101E-41 (software not programmed) on a module that should ship pre-loaded suggests a programming/build problem with that unit.
  • B101E-45/-46 (variant/configuration not programmed) can indicate a module built or configured for a different application or RPO set than the vehicle or in the case of some modules a secondary setup procedure has not been completed such as an SDM Key relearn on a BCM.
  • A persistent VIN condition with no U-codes and a confirmed-healthy ring is the point to verify the part matches the platform and that the module has clean power and ground.

In short: the symptom byte, the presence or absence of a U0028-type bus code, and the health of the ring together tell you whether you are looking at the module or at the vehicle.

Quick reference

  • B101E = GM “Electronic Control Unit Software”; the symptom byte defines the meaning.
  • “Not programmed” bytes describe a state and apply to many modules; they are not automatic proof of a defective part.
  • “Module not programmed” on a generic tool = the same B101E condition shown without the symptom byte.
  • B101E-47 = VIN not programmed; on an HMI this commonly displays as “NO VIN.”
  • U0028 = MOST bus communication / ring-break fault, reported by the radio (the MOST master).
  • B101E-47 + U0028 together = the bus is down and the HMI has no VIN to learn from — diagnose the ring, not the module.
  • Hardware/checksum/variant bytes are the cases that point back at the module or its programming.

Documented before you buy

Because this question comes up during installs, the VIN-learning behavior — and the meaning of a “NO VIN,” not-programmed, or B101E reading when the MOST bus is inoperable — is published in the product description and FAQ for these modules, which customers confirm reading at checkout. If you are working through one of these conditions and want a second set of eyes, send us your VIN and a photo of the scan data, and we will help point you toward the actual fault.

Frequently asked questions

What is GM code B101E?
B101E is a General Motors “Electronic Control Unit Software” trouble code. It is a family of software, calibration, configuration, and programming conditions identified by a two-digit symptom byte, and it can be set by many different modules.

What does the number after B101E mean?
The two digits after B101E are the symptom byte, and they define the exact condition. For example, B101E-42 is calibration not programmed, B101E-47 is VIN not programmed, and B101E-48 is security code not programmed.

What is B101E-47?
B101E-47 means “VIN not programmed” – the reporting module does not currently have a VIN. On an infotainment HMI this often appears on screen as “NO VIN”.

Does “module not programmed” mean the part is defective?
Not by itself. “Not programmed” describes a state, not a defect, and the same descriptor appears across many modules and repairs. Whether it indicates a bad part depends on which module set it, the symptom byte, and how that module is supposed to obtain the missing item.

My scan tool just says “module not programmed” — is that the same as B101E?
Often yes. Some scan tools display B101E with the full symptom byte (for example B101E-47, “VIN not programmed”), while others show a shorter description such as “module not programmed” or “control module not programmed.” It is the same condition reported with less detail. On an HMI it typically means the module has no VIN to learn because the MOST bus is not communicating, not that the module itself is faulty.

Why does my new HMI set B101E-47 or show “NO VIN” after install?
An HMI learns its VIN from the vehicle MOST communication bus at first power-up. If the bus is not communicating, the module has nothing to read and lock to, so it correctly reports the VIN as not programmed. The condition usually reflects a bus fault rather than a defective module.

What does U0028 mean, and why do I see it with B101E-47?
U0028 is a GM MOST bus communication code – a network or ring-break fault reported by the radio, which acts as the MOST master node. Seen together with B101E-47, it confirms the bus is down, which is why the HMI cannot find a VIN to learn. The bus fault is the cause and the VIN reading is the effect.

Can reprogramming or replacing the HMI fix B101E-47?
Usually not, if the bus is the problem. The VIN is learned from the bus rather than written in, so a module on an inoperable ring keeps reporting the condition, and a replacement module on the same ring reports it too. The bus has to be restored first.

What is the MOST bus?
MOST is the communication ring that links infotainment modules such as the radio or receiver, amplifier, telematics unit, and HMI. It is a closed loop, so a single break or unseated connector anywhere on the ring can drop communication for every node on it.

Is B101E ever an actual module fault?
Yes. Hardware and integrity symptom bytes such as B101E-31, 32, 43, and 4A can indicate a genuine software-integrity or hardware condition, and variant or configuration bytes can indicate a module built for a different application. The symptom byte, any bus codes present, and the health of the ring together indicate whether the module or the vehicle is at fault.