⭐ Short version
Buy a DPH-151 or a DPH-153. Do not buy a DPH-154 expecting to use it. The 151 is the one we drove end to end. The 153 has the better published route. The 154 is a teardown, and every wall on it has been measured rather than assumed.
This guide says ip.access a lot, because that is whose femtocell software stack is running inside — the components, the management model, the config layout, the sibling nano3G hardware.
But when you go to identify a unit, everything in front of you will say Cisco:
the sticker Cisco Systems
an OUI lookup on the MAC Cisco SPVTG <- for every OUI these units use
the on-device paths a mix: both vendors appear
⇒ ip.access designed the platform; Cisco shipped, badged and OUI-registered these units. Both names are correct and they are not in competition. Where this guide helps you identify hardware — a sticker, a MAC, a DHCP client name — it means the Cisco layer. Where it talks about the software stack, it means ip.access.
⚠️ If you look up an OUI and get “Cisco”, that is not the guide being wrong.
| DPH-151 | DPH-153 | DPH-154 | |
|---|---|---|---|
| Board code | 205F |
224F |
unknown |
| Radio SoC | picoChip PC7205, ARM926EJ-S — measured off the live unit | picoChip PC312/PC302 — from a JTAG guide | ⚠️ unsettled — see below |
| Gateway SoC | Ralink RT-series, MIPS 24K — measured | Ralink, same family — from a dump | inferred |
| Software train | 563.21.8 — measured | 579.11.x | 🔴 unknown; “later than the others” is inference from a 2013 grant date, not a read |
| Bands | B2 / B5 — measured on air on B2 | B2 / B5 | B2 / B5 — measured from the FCC grant |
| Public firmware dump | ✅ exists | ✅ exists | 🔴 none, and no way to make one |
| GPS antenna port | ✅ MCX | ✅ MCX | 🔴 deleted |
| Root | ✅ achieved on both SoCs | ✅ published route (needs JTAG) | 🔴 never, by anyone |
All three are UMTS Band 2 (1900) and Band 5 (850). Band is not a discriminator among
these three — unlike the nano3G, where it is the expensive mistake (see
ALTERNATIVES.md).
⚠️ You cannot cross-flash. The image loader gates on PCB number and refuses a mismatch — “did not match any PCB number found in the .SDP file.” A 151 or 153 image will not load on a 154. These are three different boards.
This is the only one of the three that this write-up drove end to end on hardware in hand: unauthenticated root, Iuh established, cell keyed, four handsets served, and unattended recovery from a power cut.
Measured throughput: about 2.3 Mbit/s down, 0.28 Mbit/s up. ⚠️ The uplink asymmetry is the absence of HSUPA, not a misconfiguration — verified three ways, including the AP rejecting the relevant attribute name outright and a handset independently reporting its data classes as UMTS and HSDPA with HSUPA absent. Do not go looking for a setting to fix it.
Someone else published a working route to this model first, and it is the one to follow if you are working from public documentation rather than this repo.
⚠️ But the published route is 153-specific at the hardware layer
Its author is explicit: the procedure needs contact with a point on the underside of the board that does not exist on the 151 and is different on the 154. The software half transfers between models; the JTAG/hardware half does not.
⇒ Following the 153 route on a 151 will strand you at the hardware step.
Extra kit for this route: a JTAG adapter (a J-Link clone is enough, around $21) plus a USB↔UART adapter.
🔴 READ THIS BEFORE YOU UNSCREW ANYTHING
Opening the case is how the radio gets lost. The jumper pattern inside guards a one-way tamper latch in flash, the pattern is one-hot — one real jumper among blanks, six candidates, and a unit with the latch tripped will provision, accept configuration, and refuse to transmit:
X_00000C_Tampered = 1 FAPService.Enabled -> REFUSED, FAULT 9003 / 9007⇒ ⭐ Every other instrument reads healthy. It looks exactly like a configuration mistake and it is not one, and it is not undoable. ✅ Leaving jumpers off is safe; restoring a pattern from memory is not. 📌 Trap 41. ⇒ 🎯 Buy one that has never been opened, and keep it that way — the working route needs no case access at all.
⚠️ An earlier version of this heading said “buy it to take apart, not to use.” That advice is withdrawn: it recommended the one action that permanently costs you the radio, and it was written before the access route below existed.
✅ ACCESS IS SOLVED — by standing up the management server the unit is already looking for and
letting its own software-download path do the work. No exploit, no JTAG, no serial console, no
case opening. → BRINGUP-DPH154.md
The walls below are why that indirect route is the one that works. Every one was measured:
wizard UDP backdoor is gone. Port 14677 measured closed. This was the open
question about the 154 and it now has a negative answer.X_00000C_LogUpload.Tuning is written into nv_env.sh with no escaping.
⇒ It rides the device’s own OUTBOUND session, so the 154’s total inbound REJECT is irrelevant
to it. 📌 Full route: BRINGUP-DPH154.md Phases 1–3.
⚠️ The RADIO is separately gated by a per-unit tamper bit, and on the unit measured here that
gate is closed — so “access” and “a working cell” are different claims, and only the first is
proven.✅ SETTLED 2026-09-16 — IT IS picoChip, AND THE DEVICE SAID SO ITSELF
“The 154’s SoC identity is genuinely unsettled, and this repo is not going to settle it.”its serial boot log Image Name: Linux-3.0.0-ip30xxff-xc-245.0 its own NAND rootfs ip30xxff-xc-239.0⇒
ip30xxis ip.access’s platform name for the picoChip PC30xx. Two surfaces on the device, agreeing — which beats any number of third-party teardown attributions. ⭐ The old reconciliation was RIGHT and stopped one step short: the AD9365 is the RF transceiver, the PC30xx is the SoC/baseband — different components, both present. 🔴 And it is ONE SoC, not two: the 151 is Ralink + PC202; the 154 has NO RALINK, so every Ralink-side route is structurally dead on it.The 154 is still the wrong buy — but for the measured reasons above, not for this one.
You are not being told to buy one. It costs $180–200 against the MicroCell’s $10, and
ALTERNATIVES.md covers when that premium is worth paying (and the
part-number band trap that makes buying one risky anyway). It is here because several findings
in this repo were measured on one, and you are entitled to know which, and how far they carry.
What it is: ip.access’s own product — the thing Cisco badged. The MicroCell is a rebadged sibling, not a separate design. That is the structural bet this whole repo rests on, and it is the reason the effort was tractable at all: the DPH is not a new device to reverse, it is a relative of one that was already solved and publicly documented.
| DPH-151 | ip.access nano3G S8 | |
|---|---|---|
| Software train | 563.21.8 |
563.16.0 — ⭐ same 563 family |
| Processors | two SoCs, radio + an added gateway | 🔴 one address, no gateway SoC in front of it — measured |
| Root filesystem | — | cramfs, read-only; a separate jffs2 partition is the only writable storage |
| Documented by | this repo, and fail0verflow 2012 | ⭐ Osmocom’s own wiki — an independent, maintained source |
| Price | ~$10 | $180–200 |
| Bands | B2 / B5 on all three | ⚠️ depends on the part-number suffix — see ALTERNATIVES.md |
⭐ The architectural difference explains one of this repo’s own traps
Trap 3 — the AP advertises an address it cannot be reached at is a consequence of the MicroCell’s second SoC, which sits in front of the radio half and NATs it. The nano3G is a single-address device and does not exhibit it.
⇒ So when a nano3G-measured finding in this repo concerns addressing or reachability, treat it as the simple case and assume your DPH adds a layer. When it concerns the ip.access software stack — attributes, config banks, the boot order, the management model — it is the same code and it transfers much more readily.
Traps in TRAPS.md state what they were measured on, and a substantial minority
name a specific model — several of them this one. (The rest name a source instead, and that
file’s header says which, and says not to assume an unattributed trap applies to your unit. An
earlier version of this sentence claimed every trap named a device; it does not — and a later
one gave an exact count, which went stale as soon as more entries were added. That file now
carries the command instead of the number.) Two of them are opposites across the two devices,
which is the best possible argument for reading the scope line rather than the instruction:
⚠️ It cuts the other way too. A nano3G finding is not a DPH finding, and this repo tries to say so every time. Where a nano3G result is all there is, that is stated in the entry rather than quietly generalised — because the two devices have already been shown to differ on the one setting most likely to brick a bring-up.
⛔ One thing the nano3G does not give you: a cheaper route in
It is the better-documented device and it is the one Osmocom’s wiki describes, so it is the reference for the software side. It is not a cheaper or easier device to get a shell on, and nothing in this repo suggests buying one to practise on. If the $10 unit is what you have, the $10 unit is what this repo is about.
Two hardware facts that are not discoverable from a shell, both from the vendor’s own installation manual. They are stated here per-model on purpose, because the manual revisions disagree with each other — see trap 59.
Antennas. The 2012 manual carries a CAUTION, verbatim:
“Do not attempt to fit an external antenna or antenna cabling to the nano3G S8 AP.”
⇒ On the S8 there is nothing to attach and nothing that can have fallen off. ⚠️ The E8 is the model with removable covers and SMA connectors under the screw-on antennas — if you are reading an older revision of the same manual, that is the section you will find, and it is not about your unit.
The Service LED. Every other reading you can take is the device reporting on itself. The LED is driven hardware-side, and it discriminates the one failure that looks healthiest from a shell — a cell that is configured, acknowledged, and administratively locked:
| Service LED | meaning |
|---|---|
| Off | not provisioned, no IP address |
| Green | provisioned and unlocked — connected and providing service |
| Flashing green, evenly, slowly | provisioned, but lost connection to the controller |
| Flashing green, evenly, fast | reinitialised (short button press) |
| Off, with a short green blink every 3 s | ⛔ administratively LOCKED |
| Off, with short green blinks on | factory reset in progress |
| On, with short green blinks off | software download in progress |
⭐ Why that fifth row is worth walking to the device for
An unlock can be acknowledged and not applied — trap 5, measured on a DPH-151. A carrier that reads correct, a state that reads unlocked, and a cell nobody can see is what that produces, and the 3-second blink tells you so from across the room, without trusting any attribute you just wrote.
⛔ Do not carry trap 5’s mechanism to a nano3G. On the nano3G the numeric unlock does dispatch — measured in a working unit’s own bring-up log, two runs,
1216by number declined on attempt 1 and confirmed on attempt 2. ⇒ There, a decline is not a broken call; it is the device telling you it is not ready yet, and it is the most informative signal you have. ⚠️ Forcing the attribute past it removes the signal and leaves the underlying stall in place — which is why this row is worth reading off the LED rather than off the value you just wrote. ⚠️ The same LED table repeats the vendor’s “more than 5 seconds” figure for the reset button. That number is wrong — measured at 3 s, trap 49. Read the patterns; do not read the hold times.
⛔ This repository distributes no firmware, no extracted binaries, and no vendor
archives — and it never will.
Owning a device does not carry a right to republish its firmware, and no vendor source release covers the parts that matter here. Do not ask us for an image; we would be wrong to send one.
You do not need one. The bytes are already on the device in front of you. What you need is to know which bytes are the right ones, and that is a version string you can read yourself:
ls /opt/ipaccess/ # the ip.access components carry the train in their filenames
Known trains, for comparison against your own unit:
| model | train seen here |
|---|---|
| DPH-151 | 563.21.8 (an alternate bank on the same unit held a much older build) |
| DPH-153 | 579.11.x |
| ip.access nano3G (sibling hardware) | 563.16.0 |
⭐ The DPH-151 and that nano3G are the same 563 train. That is the structural finding
this whole effort rests on: the MicroCell is not a new device to reverse, it is a rebadged
sibling of one that was already solved. ⚠️ The DPH-153’s 579 is a different train, so its
findings do not automatically transfer — and neither transfers to the DPH-154, whose train
is unknown.
⚠️ We are not publishing hashes of these images, because we have not computed them over a clean reference we could stand behind — a hash you cannot trace to a known-good source is worse than none. If you build such a reference, that is a genuinely useful thing to publish.
Two public binwalk extractions of DPH-151 and DPH-153 firmware exist on GitHub (search
dph151-binwalk / dph153-binwalk) and are the basis of most published analysis, including
much of what informed this repo.
☠️ If you use them, know this: those public dumps contain a real device private key
belonging to somebody else’s unit.
Do not use it, do not copy it into your own work, and do not treat it as a shortcut. It is noted here only so nobody mistakes it for a supplied credential. Generate your own.
⚠️ And do not cross-flash from them. See the PCB-number gate above.
These take a barrel-jack brick and are frequently listed “no cables”.
⛔ Read the voltage and polarity off the unit’s own label. Do not guess and do not substitute “close enough” — wrong polarity or voltage kills the board instantly. This is much better discovered at unboxing than at power-on.
Buy a part that physically cannot do 5 V, so the mistake is impossible rather than merely avoidable. Cheap adapters are often 5 V or unmarked.
⭐ The best single piece of advice in this whole repo: **make your first serial session
receive-only.**
Wire device TX → adapter RX, and GND → GND. Do not connect the adapter’s TX at all, and do not connect VCC.
The 5 V hazard lives entirely on the line running from the adapter to the device. With TX unconnected, even a 5 V adapter cannot damage the SoC — so you can start capturing the boot log before you have proved anything about your adapter or about the picoChip’s logic level. It also sidesteps a historically flaky serial input path on these boards (the author of the 153 route went to JTAG precisely because serial input never worked).
Header and pinout (151, from fail0verflow): header JP1 — pin 1 RX, pin 2 TX, pin 3 GND.
Baud: the widely-quoted 56700 is almost certainly a transposed digit — 56700 is not a
standard rate and 57600 is. Try 57600, then 115200, then the literal 56700, then
38400, 9600. ⚠️ A one-digit transposition produces garbage that reads exactly like
wrong pins or a dead UART, so do not conclude anything about your wiring until you have swept
the rates.
0.1” female Dupont jumpers plus test hooks or pogo probes, so the first attempt needs no soldering and can be abandoned cleanly.
Not a purchase, but do not skip it. See BRINGUP.md.
✅ Verify the isolation with dig and ping. Do not trust the config.
The internet will tell you these devices are hard-gated on a GPS fix. That is true of the interlock’s existence and false about whether it will stop you.
MEASURED, DPH-151: registered, keyed its cell, and served four handsets
with GPS.Current.Locked = 0 and SatellitesLocked = 0
THROUGHOUT. 210 samples. The cell has never had a fix.
Why both things are true at once:
| claim | status |
|---|---|
| A GPS interlock exists in the vendor’s userspace code (2 of 6 service-disable reasons) | ✅ measured in the binary |
| It is a regulatory location gate, enforced during the carrier’s provisioning | ✅ measured |
| It does not latch — it re-arms and clears | ✅ measured at instruction level |
| You never complete the carrier’s provisioning, so the check is never submitted to | ✅ and this is why it never fires |
| A DPH-151 serves handsets with no GPS fix, ever | ✅ measured, and decisive |
⭐ And the reason everyone believes otherwise is worth knowing: the management interface
reports "Service disabled: boot", which is literally true — the cell has not completed
parameter selection, so it has not reached the GPS gate or any other gate. The device was
saying “I have not started yet” and three people read it as “something is blocking me.”
⚠️ A passive antenna gives no lock, and no lock looks exactly like “the interlock
cannot be satisfied.”
The receiver supplies bias voltage up the coax and expects the antenna’s amplifier to make up cable loss. Save money here and you get a confident wrong answer to the one question the purchase existed to settle.
Specification: active, MCX male (or an active SMA antenna plus an SMA-female→MCX-male pigtail, usually cheaper and reusable), 3–5 V bias, roughly 26–28 dB gain. ⚠️ The bias voltage is inferred from typical practice — the port was never measured. Most active GPS antennas accept 2.7–5.5 V, so the risk is low, but it is an inference.
⇒ Cheap insurance, not a prerequisite. Do not treat a missing MCX port as disqualifying, and do not sequence a purchase ahead of a bring-up attempt.
⚠️ The one scenario where GPS becomes load-bearing: the assisted-GPS server these units use is dead, and the ephemeris cache is deleted on every shutdown — so every cold boot is a cold start with no assistance. If the gate ever does engage on your unit, an unattended boot would need to get a fix within roughly 20 minutes, cold. That is a sky-view question, and it is the part that would fail quietly.