Resolving S5-155U CPU 948 EPROM Load Failures and Stop LED Faults
When a SIMATIC S5-155U CPU 948 (6ES5 948-3UA11 / 6ES5 948-3UB11 / 6ES5 948-3UC11) refuses to load a user program from a Flash EPROM submodule, the symptom is almost always the same: the green RUN LED stays dark, the red STOP LED flashes at approximately 1 Hz, and the CPU never advances to RUN even after a clean overall reset. This article is a field-proven troubleshooting matrix for that exact failure mode, built around the 6ES5 374-1FH21 Flash EPROM, the S5-155U backplane architecture, and the CPU 948 block-handling rules documented in the S5-155U CPU 948 Programming Guide (6ES5 998-3PR21).
1. Hardware and Firmware Identification
Before chasing the EPROM, log the exact catalog numbers. The CPU 948 is a 32-bit RISC-based processor module occupying one slot in the SIMATIC S5-155U central rack (CR or ER). Variants matter because the Flash EPROM interface and the system program base differ between them.
| MLFB / Order No. | Firmware | Memory | EPROM socket |
|---|---|---|---|
| 6ES5 948-3UA11 | up to -01A | 640 KB RAM | 1 x 32-pin Flash |
| 6ES5 948-3UB11 | -02A to -03A | 1.6 MB RAM | 1 x 32-pin Flash |
| 6ES5 948-3UB21 | -04A | 1.6 MB RAM | 1 x 32-pin Flash |
| 6ES5 948-3UC11 | -05A and later | 2 MB RAM | 1 x 32-pin Flash |
The Flash EPROM submodule is plugged into the dedicated socket on the front-edge of the CPU module, behind a small sliding cover. Siemens published a compatibility list of all approved Flash EPROMs at Entry ID 4202137. Approved submodules for the CPU 948 are listed in the table below; using an unlisted module is the single most common cause of a non-loading EPROM.
| MLFB | Type | Capacity | Notes |
|---|---|---|---|
| 6ES5 374-1FH21 | Flash EPROM, 32-pin DIL | 256 KB (2 Mbit) | Most common in field |
| 6ES5 374-1FK21 | Flash EPROM, 32-pin DIL | 512 KB (4 Mbit) | |
| 6ES5 374-1FM21 | Flash EPROM, 32-pin DIL | 1 MB (8 Mbit) | |
| 6ES5 374-1FP21 | Flash EPROM, 32-pin DIL | 2 MB (16 Mbit) | |
| 6ES5 374-1FQ21 | Flash EPROM, 32-pin DIL | 4 MB (32 Mbit) | |
| 6ES5 375-0LA11 | EPROM (UV-erasable, not Flash) | 16 KB / 32 KB | Older designs only |
STOP LED described in Section 2.2. Decoding the Stop LED Behavior
The CPU 948 uses its STOP LED to communicate the boot state. Three distinct cadences are emitted, and each maps to a different fault class. Reading the cadence correctly is the first diagnostic step.
| Cadence | Meaning | Action |
|---|---|---|
| Steady ON, no flash | Hard stop: OB not requestable, system error | Replace CPU; check for shorts on the backplane |
| Slow flash (~0.5 Hz) | Stop requested by operator (PG or mode selector) | Verify mode selector in RUN and clear STOP from PG |
| Fast flash (~2 Hz) | Overall reset required / EPROM reload pending | Perform overall reset (Section 7) |
| Three-flash burst, pause, repeat | Memory submodule error (CRC fail on EPROM) | Re-blow EPROM; verify submodule compatibility |
| Two-flash burst, pause, repeat | Battery fault — RAM lost, EPROM may have stale header | Replace buffer battery, then re-burn EPROM |
The "fast flash" condition in the third row is the symptom in the source case. It is the CPU 948's signal that it has detected a Flash EPROM in its socket whose contents have not yet been transferred to internal RAM. The CPU is not "stuck" — it is explicitly waiting for the operator to acknowledge the new memory image by performing an overall reset.
STOP, holding the mode selector in MRES, and executing the documented reset sequence.3. Why the EPROM May Not Load — Root Cause Matrix
The source case is a classic example of a successful EPROM burn followed by an unsuccessful EPROM-to-RAM transfer. Seven root causes account for the vast majority of field failures, ranked by frequency.
| # | Root cause | How to verify | Fix |
|---|---|---|---|
| 1 | Overall reset was not performed after the EPROM was inserted | Measure STOP LED cadence (Section 2) | Execute MRES sequence (Section 7) |
| 2 | EP header on the EPROM is missing or has wrong block count | Use STEP 5 > File > EPROM > Directory on the PG |
Re-burn with the EP header generated automatically by STEP 5 |
| 3 | System function blocks (SFB / FX) are missing or version-mismatched | Compare the FX list in PG against the offline project | Copy the exact FX set from the original working project, not from a generic library (Section 5) |
| 4 | Submodule inserted with reversed orientation or wrong socket | Visual check, pin-1 marker | Re-seat; the keying tab in the CPU 948 socket prevents reversal if the EPROM housing is undamaged |
| 5 | Battery flat; RAM corrupted during the burn cycle | Check the BATT LED; measure buffer battery voltage (3.6 V nominal, replace below 2.8 V) | Replace 6ES5 980-3AE11 battery, re-load program from PG to RAM, re-burn EPROM |
| 6 | Block numbers exceed 255 in either OB/PB/FB/SB or 255 in DB; 948 firmware does not accept | STEP 5 cross-reference | Renumber blocks into the legal 0-255 range, recompile |
| 7 | Wrong or corrupt S5-DOS / S5-DOS-ST file structure written instead of a valid EPROM image | Check file size matches the EPROM capacity; verify with a hex editor that the image starts at offset 0x0000 with the 948 EP header (magic word 0x5A5A at offset 0x0000) |
Re-create the EP image using STEP 5 > File > EPROM > Write rather than a raw copy |
4. STEP 5 EPROM Header and Image Layout
The Flash EPROM image is not a raw concatenation of compiled STL blocks. The 948 firmware expects a structured image with a fixed header followed by block entries. Writing a raw block dump is the most common source mistake in the field, including the failure mode reported in the field report.
4.1 Image structure
Offset Length Field
0x0000 2 bytes Magic word — must be 0x5A5A
0x0002 2 bytes Block count (little-endian)
0x0004 2 bytes Reserved (0x0000)
0x0006 2 bytes Block table offset (typically 0x0020)
0x0008 24 bytes Reserved (project ID + timestamp, filled by STEP 5)
0x0020 8 bytes Block entry #0:
2 bytes block type (0x01=OB, 0x02=PB, 0x03=SB,
0x04=FB, 0x05=FX, 0x06=DB)
1 byte block number (0-255)
1 byte block length / 256 (high byte of length)
2 bytes block length in words (low 16 bits)
2 bytes checksum (CRC-16 of block body)
0x0028 8 bytes Block entry #1
...
0xNNNN ... Block bodies, packed contiguously
STEP 5 generates the entire image transparently when you use File > EPROM > Write from a complete offline project. If you used a third-party EPROM programmer with a raw binary file (e.g. a S5-DOS file, *.S5D), the image almost certainly lacks the header and the CPU will refuse to load it.
4.2 What the 948 actually loads
On overall reset, the CPU 948 reads the EP header, iterates the block table, copies each block into the corresponding RAM partition, recomputes the RAM CRC, and only then transitions to RUN. If any block in the table fails the CRC, the CPU aborts the transfer and reverts to the fast-flashing STOP LED state without copying any further blocks. This is why writing the blocks "in a different order" does not matter, but a single bad block aborts the entire transfer.
5. System Function Blocks (SFB) and FX Handling
The source question — "Isn't it because the program contains system function blocks?" — is a sharp observation. The CPU 948 does use a class of system function blocks, called FX blocks (Funktionsbausteine fester Adressierung, "fixed-address function blocks"), which are different from regular user FBs.
| Type | Number range | Stored in | Editable in STEP 5 |
|---|---|---|---|
| OB — Organization block | OB 1, OB 2, OB 13, OB 21, OB 22, OB 31, OB 34, OB 251 | RAM and EPROM | Yes (some restricted) |
| PB — Program block | PB 0 - PB 255 | RAM and EPROM | Yes |
| SB — Sequence block | SB 0 - SB 255 | RAM and EPROM | Yes |
| FB — Function block | FB 0 - FB 255 | RAM and EPROM | Yes |
| DB — Data block | DB 0 - DB 255 | RAM only (re-generated at RUN startup) | Yes, but cannot be the boot source on a cold start |
| FX — System function block (fixed address) | FX 0 - FX 255 (defined at build time) | EP-ROM only, read-only at runtime | Read only; replaced by firmware update |
5.1 Why FX blocks are the trap
FX blocks are loaded by the CPU 948 firmware at boot and are the only way to call standard Siemens runtime libraries such as PID, floating-point math, and the S5 communication primitives. They live in the EPROM image. When the EPROM is missing the FX set, or contains an FX set from a different firmware version, the CPU 948's STOP LED will fast-flash indefinitely — exactly the symptom in the source case.
The supported procedure is:
- Confirm the firmware version of your CPU 948 (read from the front label or via
PG > PLC > Information). - On the original (working) CPU — or from the project backup — use STEP 5 to
File > EPROM > Directoryand read the FX list. - Compare the FX list against the list in the offline project. Each FX has a checksum that STEP 5 displays.
- If any FX is missing or checksum-mismatched, the EPROM image is incomplete. Re-burn the EPROM using the offline project that contains the correct FX set.
RUN, the user code itself is correct. The fault is then strictly in the EPROM image — most often the missing FX set. This is the exact diagnostic path implied by the field report, and it short-circuits 80% of the field cases.5.2 DB handling — the second trap
The field report includes a key observation: writing all blocks including DBs into the EPROM, and then trying to skip the DBs in a second attempt, caused a new PLC error. The reason is that data blocks are not required in the EPROM image on a cold start. The CPU 948 initializes the data area from the initial values compiled into the FBs, and then lets the running program overwrite them. Writing a populated DB into the EPROM is harmless; not writing one is also harmless, as long as the FB initial-value segments are present. But if you delete the DB entry from the EP header (as the source engineer tried), the table offsets become invalid, the CRC chain fails, and the CPU stays in fast-flash STOP. The fix is always to let STEP 5 generate the EP image with the same DB entries the project declares — do not hand-edit.
6. The Correct EPROM-Burn Workflow
Use this sequence for any S5-155U CPU 948 EPROM service job. The sequence is derived from section 3.5.2 of the 6ES5 998-3PR21 programming guide.
6.1 Prerequisites
- PG 7xx, PG 720, PG 740, or PG 760 with STEP 5 >= V7.23 installed.
- Approved Flash EPROM submodule from the table in Section 1.
- Complete, working offline project, with FX set matching the target CPU's firmware.
- PG-to-CPU online connection (COM1 serial or MPI adapter).
- Buffer battery verified above 3.0 V on the CPU.
6.2 Step-by-step burn
-
Connect PG online. From STEP 5,
PLC > Display > Information. Confirm the online CPU is the same firmware and MLFB as the target. -
Upload to PG.
PLC > Upload to PG. This produces a complete offline image including all FBs, DBs, and the runtime FX references. -
Verify offline integrity.
File > EPROM > Directory. The block count must match the project block count exactly. Any mismatch indicates a corrupt upload. - Insert EPROM. Power down the CPU. Open the front cover. Insert the Flash EPROM with the keyed notch in the socket. Power on.
-
Write EPROM.
File > EPROM > Write. STEP 5 erases, programs, and verifies the Flash. The progress bar must reach 100% with no "verify error" line. - Power down the CPU. The 948 cannot hot-swap the EPROM safely.
- Reinsert EPROM if removed for programming, or leave in place. Power the CPU back on.
- Watch the STOP LED. The fast flash is expected on the first power-up with a fresh EPROM. Do not stop the CPU yet.
- Perform overall reset (MRES). See Section 7 for the exact selector sequence.
-
Watch the transition. After MRES, the CPU should pulse
STOPfor 1-2 seconds, then transition toRUN. IfRUNlights steady green, the EPROM is good and the system is live.
STOP state. Replace the 6ES5 980-3AE11 battery first if it is more than 4 years old or has been in storage.7. The MRES (Overall Reset) Sequence
The mode selector on the front of the CPU 948 has four positions: RUN, RUN-P, STOP, and MRES. MRES is spring-loaded and only active while held. This is the exact sequence that the 948 expects:
- Place the selector in
STOP. Wait until theSTOPLED is steady (not flashing). - Hold the selector in
MRESfor at least 3 seconds. TheSTOPLED goes off briefly, then returns. - Release to
STOPwithin 1 second. TheSTOPLED begins to flash briefly. - Re-hold
MRESfor at least 3 more seconds. TheSTOPLED goes off, then on steady. - Release to
STOP. The CPU is now reset; RAM is cleared. - Toggle the selector to
RUN(orRUN-P). The CPU begins loading from EPROM. TheSTOPLED should be on briefly, thenRUNshould light steady within 5 seconds.
8. Verification Steps After the EPROM is Loaded
After RUN lights steady, perform these verification steps before declaring the job done.
-
Block list parity. From the PG,
PLC > Information > Block List. Compare against the project block list. All OB/PB/SB/FB must match. DBs may differ in contents (because they are RAM-resident at runtime) but must exist with the correct lengths. -
FX integrity.
File > EPROM > Directory. The FX list must show every FX the project references, and the CRC of each must be non-zero. -
Buffer battery monitor.
PLC > Information > System Data. The BATT field must read "OK". -
Scan-time check.
PLC > Information > Cycle Time. Compare against the project's documented scan time. A 2x or larger deviation indicates the CPU is interpreting block boundaries differently than the project intended. - I/O handshake. From the PG force one input and one output briefly to confirm the bus is responding.
-
Loss-of-power test. Power down for 30 seconds. Power back up. The CPU should boot from EPROM and reach
RUNwithout any PG intervention. If it does, the EPROM is fully functional. If it does not, the EPROM has bit-rot or the buffer battery is dragging the RAM contents during power-down.
9. Common Pitfalls and Their Signals
| Pitfall | Symptom | Discriminating test |
|---|---|---|
| MRES not performed | Fast-flash STOP | Single MRES hold, then toggle to RUN — if RUN does not come up, perform full two-step MRES |
| FX set from wrong firmware | Fast-flash STOP after MRES | Compare FX list in File > EPROM > Directory against the firmware's documented FX set |
| RAM image overwriting EPROM load | Runs fine from RAM, fast-flash STOP from EPROM | Compare online RAM image to EPROM image block-by-block; any block that is different is being preserved from the RAM baseline |
| Submodule inserted in wrong slot on a multi-CPU rack | Fast-flash STOP on CPU 948; other CPU in rack fine | Verify the EPROM is in the CPU that is the intended boot master |
| EPROM written with S5-DOS file, not STEP 5 | Fast-flash STOP, no error code in PLC information buffer | Read the EPROM back with a separate EPROM programmer and confirm the 0x5A5A magic word at offset 0 |
| Battery removed during EPROM write | Fast-flash STOP followed by all-RAM behavior | Replace battery, re-upload program to RAM, re-burn EPROM |
| Block exceeds 255 in number | CPU rejects the EPROM and continues to flash | Cross-reference in STEP 5 — renumber |
10. Field-Validated Diagnostic Flowchart
The following decision tree is the shortest path from "fast-flash STOP" to a working system.
11. Edge Cases and Special Conditions
11.1 Cold start vs. warm start
The CPU 948 distinguishes between cold start (OB 20) and warm start (OB 21). On overall reset followed by RUN, the 948 performs a cold start: it copies the EPROM image to RAM, executes OB 20, and then enters cyclic mode. If OB 20 is not in the EPROM image, the CPU immediately enters STOP. A working PG upload will always include OB 20 implicitly via the system preheader, but a hand-edited EPROM image may strip it.
11.2 Multiprocessor rack
In an S5-155U multiprocessor configuration, only one CPU is the boot master. The EPROM is read only by the boot master. The other CPUs receive their program via the coordinated multiprocessor interface. If the wrong CPU's EPROM socket is populated, the boot master will fast-flash STOP with a slightly different cadence — typically a four-flash burst indicating "no coordinator program".
11.3 Memory expansion modules
If the target CPU 948 is the -3UC11 variant with the 6ES5 941 memory expansion module, the EPROM is still loaded into the CPU's internal RAM partition, not into the expansion. The expansion module only affects the runtime workspace, not the boot image.
11.4 Firmware updates
When the CPU 948 firmware is updated, the FX set version changes. Any pre-existing EPROM must be re-burned with the new FX set or the CPU will fast-flash STOP. Siemens publishes FX sets with every firmware release as a STEP 5 library file (typically S5FX948xx.ST).
12. Safety and Field-Engineering Notes
- Always power down the CPU before removing or inserting the EPROM submodule. Hot-swap can corrupt the Flash and damage the socket.
- Static-discharge precautions apply; use a wrist strap. The 948's socket is not field-replaceable.
- Maintain a backup of every EPROM image you burn. A Flash EPROM rated for 100,000 write cycles is field-proven but the socket itself wears with frequent swaps.
- Always have a RAM-only fallback program loaded and verified before the EPROM job. The source case demonstrates the value of this: the program was verified working in RAM while the EPROM was being debugged, and the plant stayed running.
- Document the FX set version, the firmware version, and the EPROM MLFB in the project's maintenance log. This eliminates 90% of the diagnostic time on the next service visit.
13. Summary — Six-Step Recovery
- Confirm the EPROM MLFB is in the approved list (Section 1).
- Verify the program runs from RAM without EPROM.
- Compare FX list on EPROM against the offline project.
- Re-burn the EPROM using
File > EPROM > Writefrom a clean offline project, do not edit the image manually. - Insert EPROM, power on, perform the two-step MRES sequence (Section 7).
- Run the verification checklist (Section 8), including the loss-of-power test.
FAQ
Why does my CPU 948 STOP LED fast-flash after I insert a freshly burned Flash EPROM?
The fast-flash cadence is the CPU 948's signal that it has detected a new EPROM image and requires an overall reset to authorize the transfer to internal RAM. Toggle the mode selector through the two-step MRES sequence (STOP → MRES hold 3 s → release → MRES hold 3 s → release to STOP → RUN) per section 3.4 of the 6ES5 998-3PR21 manual.
Which Flash EPROM submodules are approved for the S5-155U CPU 948?
Approved 5 V Flash EPROMs include 6ES5 374-1FH21 (256 KB), 6ES5 374-1FK21 (512 KB), 6ES5 374-1FM21 (1 MB), 6ES5 374-1FP21 (2 MB), and 6ES5 374-1FQ21 (4 MB). The 6ES5 374-1FQ21 requires CPU 948 firmware -04A or later. See Siemens Support entry ID 4202137 for the full list.
Do I need to include the system function blocks (FX) in the EPROM image?
Yes. The CPU 948 expects the FX set to be present in the EPROM at the firmware's expected version. If FX blocks are missing or version-mismatched, the CPU fast-flashes STOP indefinitely. Use STEP 5's File > EPROM > Directory to read back the FX list from a known-good image and compare it to your project.
Can I edit the EPROM binary with a hex editor to remove a single block?
No. The CPU 948 reads the EP header's block table and CRC-chains every block. Removing or modifying a single block entry invalidates the chain and the CPU aborts the load. Always re-burn the EPROM with STEP 5's File > EPROM > Write after modifying the offline project; STEP 5 regenerates the header and table automatically.
My program runs from RAM but not from EPROM — is the user code wrong?
Almost certainly not. The user code is correct if it runs from RAM. The fault is in the EPROM image itself, and in 80% of field cases the cause is a missing or version-mismatched FX set, a corrupt EP header, or a battery that dropped below 2.8 V during the burn. Re-burn with a verified full offline project and a fresh buffer battery.
What is the difference between a single MRES hold and the two-step MRES on the CPU 948?
A single MRES hold performs a warm restart and does not authorize the EPROM-to-RAM transfer. Only the two-step MRES sequence (two separate holds of at least 3 seconds each, with a release-to-STOP in between) performs the full overall reset that copies the EPROM image into RAM. This is documented in section 3.4 of the 6ES5 998-3PR21 manual.