Close

Discovering ccTalk

A project log for Un-Inhibiting my Microcoin QL

Let me describe how I got my Microcoin QL coin acceptor to work.

mikeMike 02/15/2024 at 23:120 Comments

Bottom Line Up Front

ccTalk is an open specification for communication between hosts like vending machines, your PC or perhaps even my pinball machine (someday!) AND coin acceptors and bill validators. Connect a data line between the ccTalk port and your serial port and talk to your coin acceptor. There's a command to completely disable a coin acceptor. How cool is that! But darn, it's not the answer I'm looking for.

TL;DR

Now I am getting frustrated. My coin acceptor doesn’t work (Actually, I don’t know how to make it work.) When I spot a faded “ccTalk” on left corner of my coin acceptor. The image has been enhanced for greater clarification:

What the heck is that. A Google moment later: I discover it’s a protocol. Remember, I’m a beginner. So, ccTalk is an (open) specification for communication with my coin mech. It’s based on RS-232. The command structure (data bytes) are meant to be easy: a destination, data length, source, command byte, the data (of specified data-length, if applicable), and a checksum byte. Simply, send a command. Get a response back. For example, the five byte sequence:

Destination Address

Data Length

Source Address

Command

Data

Checksum

0x02

0x00

0x01

0xFE

0xFF

2

0

1

254

255

Represents a “poll” command. If you are familiar with TCP/IP, this poll command is like “ping”, but much simpler; if sent, the coin acceptor will only acknowledge (ACK) back. Here’s the response:

Destination Address

Data Length

Source Address

Command

Data

Checksum

0x01

0x00

0x02

0x00

0xFD

1

0

2

0

253

Simply, if you send: 0x02 0x00 0x01 0xFE 0xFF then you will get back: 0x01 0x00 0x02 0x00 0xFD.

Note, when sending the first 0x02, it is the destination address (the coin acceptor) for the poll command. The pollis from you (ok, your PC) with source address, 0x01. The response message, sent by the coin acceptor, flips those addresses. Note that neither message sent any data; the data column is empty and the data-length is zero.

As for the checksum, it computed as the inverted sum  of your bytes Modulo 255. I like using the Python’s shell. I can type my equation and press return. To calculate the checksum of the poll command, that is… figure out its 0xFF (255 in decimal). Below, I add 2+0+1+254, invert, and then take the mod 256. Easy peasy:

So time to grab a USB serial adaptor. Not so fast. Caveat Emptor, please know what you’re doing before actually hooking up your Tx and Rx lines… The story continues.

The ccTalk specification is divided into four parts. And readily available on-line. Most of the commands set a parameter within a coin acceptor or get the current setting (again, mostly). I do not wish to re-iterate commands here. Instead, let me refer you to a very good tutorial the [ccTalk Tutorial]

That said, I discover a command, number 228. The command enables or disables the coin acceptor. Holly cow this has got to be my answer (!):

And another command, 231 that inhibits individual coins:

Clearly that’s may answer!!! It’s got to be it. Some casino operator clearly “inhibited” its operation before surplus’ing the thing, right?   Spoiler alert… the commands are not the answer. I'll explain why shortly as The story continues.

Discussions