BMW F800 GSA ABS pump 638C, from a 1200€ quote to a 67€ fix
I usually write about PHP, Symfony and dev tooling here, but I’ve spent the past year fighting a 638C “Pressure modulator: pump motor” code on my BMW F 800 GSA (K75, production date 14/05/2014, Bosch ABS 9M block). After about 800€ burned on diagnostic tools, shipping, a “repair” that didn’t repair, and a warranty round-trip that didn’t fix it either, I finally swapped just the electric motor of the ABS pump with one from a salvaged F 850 GS block bought for 49€ + 18.50€ shipping. It worked. This post is the full story, with what I’d do differently and how the swap actually goes on a Bosch 9M block that was crimped from the factory.
January 2025: the dealer visit#
I went to BMW for the usual service. Bike came back with the ABS warning light still on and a diagnostic ticket: 638C — pressure modulator pump motor. Quote to replace the full ABS block: around 1200€ parts + labour. A used Bosch 9M block for my model on the second-hand market sits around 350-400€, which already tells you the part has a reputation.
The failure pattern is well-known on this generation: humidity creeps in past the motor shaft seal, graphite dust from the brushes mixes with it, the brushes “swell” and lock in their guides. Sometimes a few taps with a mallet on the pump motor frees them and the warning light goes off — for a kilometre or two. Then it comes back. The motor is the wear part. The hydraulic body and the electronic board are usually fine.
NitoMotor: the “rebuild” round-trip#
NitoMotor (nitomotor.com) is a Spanish shop in Mérida that rebuilds ABS modulators. I sent them my block. They charged the rebuild, I got it back with a one-year warranty.
There’s a catch I didn’t fully process at the time: after refitting a Bosch 9M, you must bleed the ABS secondary circuit through a diagnostic tool that can activate the pump while you bleed. Without that, air stays trapped in the modulator chambers and the pump motor pulls current trying to push fluid that’s compressible. Even a healthy pump will throw 638C on a botched bleed.
NitoMotor’s invoice notes this in French:
Avant d’installer le modulateur ABS, nous vous suggérons de connecter la partie électronique et de vérifier avec un appareil de diagnostic qu’il n’y a pas de défauts.
Translation: you need a diag tool. I didn’t have one yet.
Topdon: 90€ for the dongle, dead firmware for the bike#
I had a Topdon OBD scanner I’d bought for car work (around 90€). I paid the moto subscription (99€) through the Topdon app to unlock BMW motorcycle protocols. Tried to connect to the bike. Firmware bricked itself. Mass storage corrupted, scanner refused to boot the bike module.
I tried to reach support. Mail bounced around with no answer. WhatsApp on the official Topdon France channel:

I called Topdon France directly. The guy on the phone told me, almost verbatim: “okay but you purchased the license on the app, not on the topdon-france website, can’t do anything for you”. I tried Topdon US by email next. Best they could offer was a 50% coupon on a new scanner. Which is funny, because my current device is bricked and locked to the dead firmware — I can’t even use the coupon on the same model without paying full price again.
I then dropped a message on their Facebook page, asking again for someone technical to look at the firmware:

No technical answer, no replacement, no refund. I left the 99€ moto subscription on the table.
UniCarScan + MotoScan: the actual working setup#
I switched to UniCarScan UCSI-2100 (obdauto.fr listing) paired with the MotoScan iOS app. Dongle is ~55€, MotoScan Premium / Ultimate plan is 49.99€. Total ~105€, a fraction of what Topdon wanted and it actually works. I’ve since used the same UniCarScan dongle to diagnose two cars in the family.
MotoScan reads the ABS module identification cleanly — F Series | K75 | Bosch ABS9 K7x/K29HP, manufacturer Bosch, module produced 2012-07-27 (the bike was assembled in May 2014):

With MotoScan I could run the bleed abs procedure properly — single function in the app, pulses the pump while you crack the caliper bleed nipples. Did the procedure three times, cleared codes, test ride:

638C— pressure modulator: pump motor.
Same code. Mallet trick on the pump motor: works for 30 seconds, code comes back at the first ABS self-test above 5 km/h.
NitoMotor warranty: round two, same result#
I emailed NitoMotor with the diagnostic report. They were polite, agreed to take the unit back under warranty. Shipping back to Spain was on me — another 30€ out of pocket on a warranty claim. Got it back “rechecked”. Refitted, bled, cleared codes.
638C.
I asked them in writing whether the carbon brushes had been replaced:
Yes, all parts that are subject to wear and tear are replaced with new ones.
Maybe they were. Maybe the new brushes swell in their guides too. Either way, after two rounds, I gave up on them.
One thing I noticed when I finally cracked the block open myself: my motor had screws holding the motor housing to the hydraulic body. Bosch crimped these in 2014. So either NitoMotor opened it and refitted with screws (most likely), or my unit was a late-2014 exception. Either way, the swap procedure I describe below was easier because of it.
The plan B I almost took (and why I didn’t)#
At this point I had two options:
- Used
Bosch 9Mblock from a F 700 / F 800 GS (2013-2018), 350-400€, then code the variant + write the VIN withISTA+. I priced a second-handK+DCANcable + a laptop runningISTA+at about 250€ on Leboncoin. - Motor-only swap from a different but mechanically compatible Bosch ABS block — no recoding, because the electronic board stays on the bike.
I’d been watching @Latelier-gsa on YouTube, especially this video on a R 1200 GS ABS replacement. His electronic board was fried — probably the kind of failure a shop like NitoMotor could fix, given their workshop targets the electronic side of these blocks. Seeing him swap the whole block reminded me that on these Bosch units the motor cylinder is a standardised, separable part. He’d done a similar motor swap on his VW Amarok in another video.
I asked Gemini to confirm which BMW models share the motor. The TL;DR after a long back-and-forth:
- The Bosch 9M motor cylinder is shared (with minor variations) across the F 700 / F 800 GS (2013-2018), F 800 R / GT, plus the later F 850 GS / GSA — and the architecture is close enough on the R 1200 GS LC and S 1000 family that the same generic Bosch motor sits inside.
- From 2018 onwards (F 850 GS and the Bosch 9.1 generation), the motor is held by two Torx screws instead of being crimped into the aluminium body. The internal brush carrier and the bayonet contacts to the electronic board are otherwise identical to the 9M.
- Because I only swap the motor cylinder, I keep my own electronic board, which is already paired to the bike’s VIN and
ECU. No coding tool needed. No bleed of the primary circuit needed (the hydraulic body stays sealed and on the bike side of the joint).
That was the green light.
Buying the donor part#
I found a salvaged F 850 GS ABS pump on a parts marketplace:
ABS pump BMW F 850 GS
MPO nr.: 201484749
State: Used part. Normal Use
Subtotal: €49.00
Shipping cost: €18.50
Total: €67.50
Same Bosch motor cylinder, screw-mounted, much later production date. Worst case I lose 67.50€. Best case I save 1100€.
The swap itself#
If you’re attempting this, this is the part you came for. Bike is a F 800 GSA, mid-2014, Bosch 9M block, refitted with screws after the NitoMotor rebuild. Tools used:
- A short
Torxset. - Brake cleaner + lint-free rag.
- Contact cleaner (
WD-40 Specialist Contactor equivalent). - Black silicone sealing paste, neutral cure, high temperature (I used a generic black “silicone sealing paste”;
Loctite 5910orReinzosilare the textbook choices).
1. Drop the ABS block from the bike#
On the GSA the ABS block lives in a tight well between the rear sub-frame and the fuel tank. There’s a small 12V electronics module sitting on top of the well (the voltage regulator) that blocks access — pull it out first to give yourself room to work.
Order of operations for the block itself:
- Lay rags around the well to catch
DOT 4drips — it eats paint on the frame and the tank. - Unplug the main electrical connector.
- Crack the banjos, plug each line immediately with a M10 brake bleed cap or a rubber plug so fluid doesn’t drip.
- There’s a screw on the rear of the ABS pump support bracket — back it out before you try to lift the block.
- Pull the block out.
2. Separate the motor cylinder from the hydraulic body#
On a factory Bosch 9M (mine should have been this — but wasn’t), the motor flange is crimped: the aluminium of the hydraulic body is peened over the motor collar at 3 or 4 points. You pop those peen marks with a small flat chisel or a Dremel cut-off wheel, gently, until the flange is visually clear all around.
On my unit, NitoMotor (or a previous shop) had replaced the crimps with two Torx screws. Two screws out, motor comes off.
Pull the motor perfectly straight. The motor brings its bearing on the shaft and engages the hydraulic body via two bayonet blade contacts that plug into the electronic board. Lever it loose with two thin flat screwdrivers on opposite sides, working alternately. The rubber seal on the flange acts like a suction cup. Don’t tilt the motor — the blade contacts bend or break.
If the bearing stays stuck in the aluminium well (oxidised in place), the classic trick is to warm the surrounding aluminium — alu expands faster than steel and the bearing pops out. I didn’t need to do this on mine.
3. Compare old vs new#
The two motor cylinders should be visually identical: same brush carrier diameter, same bayonet contact spacing, same shaft length, same eccentric bearing at the tip. On my pair:

Old motor on the right: commutator dark, copper saturated with conductive carbon dust — exactly the failure mode. New motor on the left: commutator clean, copper bright, bearing intact on the shaft.
The data-matrix label on each motor is the proof of compatibility: same Bosch part family.
4. Reseat the motor in the hydraulic well#
This is the step that almost cost me the swap. The aluminium well has two small spring-loaded pistons sticking out from the sides. These are the hydraulic pump pistons: the eccentric on the motor shaft is supposed to slide between them, pushing one then the other as it rotates. If you don’t push the pistons all the way back into the body, the eccentric jams against them like a wedge and the motor refuses to seat.
What worked:
- Push each piston back into its bore with a clean flat screwdriver, gently. They’re stiff because they’re sprung. If they fight back too hard, crack the bleeder screws on the calipers to release residual hydraulic pressure — the pistons will then retract without resistance.
- Present the new motor square to the well.
- With one hand pushing the motor in, rotate the armature by hand with the other. The flat part of the eccentric will eventually align between the two pistons and the motor will drop by ~5 mm in one go. That’s the tell that the eccentric has cleared.
- Final 2 mm of resistance is just the bayonet blades sliding into their female sockets on the electronic board. Press home with the heel of your palm. Do not tap with a mallet. If the blades aren’t aligned, you bend them and the board is dead.
When fully seated, the plastic motor flange must be flush against the aluminium body — no visible gap.
5. Seal and refit#
Lay a fine 2 mm bead of neutral-cure black silicone around the outside of the motor flange where it meets the aluminium body. Don’t push silicone into the seam — you want a rampart against rain water that pools in the GSA’s ABS well, not a glob inside the mechanism.
If you have screw holes (later units, or post-NitoMotor like mine), torque the two Torx screws back on. If you’re working on an untouched crimped block, you can either peen the aluminium back over the collar at 3-4 points with a centre punch, or rely on the silicone + interference fit + the support bracket on the bike to hold the motor in place. I’d add a small bracket if it were mine and crimped.
Let the silicone polymerise. 2-4 hours before refitting the block on the bike. 24 hours before pressurising the brake circuit.
6. Refit the block, bleed, clear codes#
Refit the block on the bike, plug the electrical connector. Power the ignition on without starting. You should hear a brief bzzzt from the pump self-test. Connect MotoScan (or GS-911), read codes.
In my case: no 638C. Cleared the historic codes, ran the bleed abs procedure from MotoScan, topped up the reservoir, refitted the side panels. Test ride, hard-ish brake to trigger the ABS once: pulse on the lever, dash clean.
That’s it.
Cost recap#
| Item | Cost |
|---|---|
| BMW dealer quote (rejected) | ~1200€ |
| NitoMotor rebuild + shipping | ~370€ |
| NitoMotor warranty re-ship (on me) | 30€ |
| Topdon scanner (effectively bricked) | 90€ |
| Topdon moto subscription (wasted) | 99€ |
| UniCarScan UCSI-2100 + MotoScan Premium/Ultimate | ~105€ |
ISTA+ rig (bought used, kept “for fun”) |
250€ |
| Donor F 850 GS ABS pump (motor only used) | 67.50€ |
| Total actually spent on the working fix | ~1010€ |
| What the working fix would have cost if I’d known | ~175€ (UniCarScan + MotoScan + donor motor) |
If I’d gone straight from the BMW diagnosis to the F 850 GS donor swap, with MotoScan for the bleed, I’d have saved a year and ~835€. The ISTA+ rig in the table doesn’t really belong there: I bought it second-hand on Leboncoin while sourcing options, it would have unlocked the coded used block path, and I kept it because at 250€ it’s a fun thing to have on the shelf for any future BMW diagnostics. The NitoMotor detour was the expensive lesson: rebuilding the motor in-place doesn’t help if the wear part — the brush + guide assembly — keeps swelling the same way two months later.
Takeaways#
638Cis almost always the motor cylinder, not the electronic board, not the hydraulic body. Treat it as a brushed-DC-motor failure and the fix gets cheap.- The Bosch motor cylinder is interchangeable across a wide swath of the BMW range (F 700/800/850/900 GS family, R 1200/1250 GS LC, S 1000 family). Same architecture, same bayonet contacts, same eccentric. The screw-mounted versions (2018+) are mechanical drop-ins on later units and reasonable adaptations on the crimped 2013-2016 ones.
- Avoid Topdon if you ride a BMW motorcycle. The Bluetooth dongle hardware is fine on cars, but the moto subscription bricked the firmware on the first BMW connection attempt and their support is non-existent.
UniCarScan UCSI-2100+MotoScanis the right combo for diagnosing and bleeding the ABS on these bikes for under 100€.- NitoMotor’s warranty exists but their rebuild didn’t hold on my unit. They’re polite and prompt, but the failure mode came back twice. If you ship them yours, ask explicitly what was replaced and request photos of the new brushes.
- Gemini was actually useful here as a sounding board to identify Bosch part compatibility across the BMW range. I wouldn’t have looked at a F 850 GS donor without that conversation.
If you’re staring at a 638C on a F 800 GSA with no diag tool, this is the order I’d do it today: buy UniCarScan + MotoScan, source any F 700/800/850 GS ABS pump cheaper than 100€ as a donor (the cheaper the better — even a fried electronic board is fine, you only want the motor), then follow the swap above. Long live the second-hand market!