Analyzing Märklin Mobile Station 60652

The Mobile Station 60652 is a very old MFX and MM station from Märklin available for around 20-40€ at eBay.

Normally this is not the intended use case, but I had the idea to disable the internal micro controller by holding it in reset and drive the whole station by srcpd via a Raspberry PI. With using a modified srcpd implementation of siggsoftware.ch also MFX is possible (http://siggsoftware.ch/wordpress/srcpd-mit-mfx-und-anderen-erweiterungen/)

For sure the idea using RaspberryPI as controller is not new and also not a replacement for a Märklin Central Station, offering a lot more possibilities in programming and controlling a whole system.

My intention for adding Raspberry PI was to use with MobileStation and also to get the MFX UID of my Mandarinli, so I can use it with my project putting a central into a Märklin Waggon: http://blog.io-expert.com/maerklin-4316-central

I already bought a mSD controller and speaker for Mandarinli at Märklin for more than 100€ capable to use the more common NRMA DCC protocol, but currently I can’t get it managed to program it correctly for Mandarinli. My new BR100 is already based on mSD, but unfortunately the CV settings for BR100 does not work with a mSD with Mandarinli. I already contacted the Märklin support, but it seems to be not that easy to use a mSD decoder with a standardised connector with Mandarinli using the same standardised connector but some proprietary protocol for light and Telex. Sound and driving is working, but the light behaviour is strange and Telex is not working. So as long I have to wait for a sufficient answer by the Märklin support (discussing now since 2 months), I have to help myself and make use the old decoder with MFX without sound and for that I need the MFX UID…

So opening the Mobile Station offers the PCB:

PCB Back:

PCB front:

After checking with a multimeter and logic analyser, I found out the pins needed for:

…the booster differential inputs (IN1 and IN2) and the enable pin (EN_IN) and the EN_OUT giving the information about a short cut (EN_OUT = low).

…the MFX RDS communication connected to QUAL, RDDA, RDCL and MFX RDS Signal Detect. (see Schema MFX RDS Rückmeldung at siggsoftware.ch)

… holding the MCU in reset state (RESET connected to ground), so the Raspberry PI can control the necessary pins.

 

 

The connection between Mobile Station and Raspberry PI looks like that:

 

Put together, so Digispark Mini is inside and just the Raspberry PI Zero W is outside:

C-Code of Arduino compatible Digispark Mini:

//needs installation of library https://github.com/NicoHood/PinChangeInterrupt
#include "PinChangeInterrupt.h"



volatile int Count = 1001;
bool bLastState = false;

//setup of GPIOs
//P0 DCC IN
//P1 Enable Input of driver stage
//P2 Input 1 of driver stage
//P4 Input 2 of driver stage
const int DccInPin = 0;
const int DccInPCINT = 0;
const int DccEnablePin = 1;
const int DccOut1Pin = 2;
const int DccOut2Pin = 4;



void setup() {
  //setup of GPIOs
  pinMode(DccInPin, INPUT);
  pinMode(DccEnablePin, OUTPUT);
  digitalWrite(DccEnablePin,LOW);
  pinMode(DccOut1Pin,OUTPUT);
  pinMode(DccOut2Pin,OUTPUT);

  //setup ISR
  attachPCINT(DccInPCINT, DccInChanged, CHANGE);
}

//ISR called at DCC IN Pin change
void DccInChanged(void)
{
  //toggle DCC pins
  bLastState = !bLastState;
  digitalWrite(DccOut1Pin,bLastState);
  digitalWrite(DccOut2Pin,!bLastState);
 
  //reset timeout counter
  Count = 0;
}

void loop() {
  for(;;)
  {
      //check timeout happened
      if (Count > 1000) 
      {
        digitalWrite(DccEnablePin,LOW); //timeout - disable driver stage
      } else
      {
        Count++;
        digitalWrite(DccEnablePin,HIGH); //no timeout - enable driver stage
      }
  }
}