This repository documents the SPI communication between the Main Assembly and the Display Assembly of the Pioneer DJ CDJ-1000MK1.
I do not need the main VDF display or Jog wheel VFD display, and therefore their control parameters are not logged here.
The communication between the CDJ main assy and the dislay assy is over SPI running at 1Mhz, MODE3, LSB First There is no CS line between the master and the salve, but rather a Busy signal from the slave to the master - it's Active Low - and you need to wait until it goes high to send data.
Data signals can be found here:
Each data sequence contains 12 frames.
Each frame contains 12 bytes, where the 1st byte of each frame indicates the frame number in the sequence, and the last byte is a CRC.
CRC = (Byte0+Byte1+...Byte9+Byte10)%256
For each frame sent to the display assy, a 12 byte response is sent back The response back is a single 12 byte frame and is repeated for every message sent to the display control unit - regarless of index.
Timing is crucial. At least 50μs
between each byte is required - I've found 200μs
to be the stable number
And at least 2300μs
between each frame, I personally use 3000μs
In the /examples
folder you will find a test sketch for a Teensy 4.x using the standard SPI library and pins to control/read the display assy and will turn all the LEDs on, as well as print out frames of button statuses.
NOTE #1 - The display assy uses 5 volt logic, and therefore a 5v to 3.3v logic level shifter is required!!
NOTE #2 - The display assy and LEDs need to be powered by 5v and 12v respectivly - see the pins in the 1st image above
NOTE #3 - The image above is MK1 PCBs with an MK2 case - I cannot guarentee that this will work on an MK2. And if you're after an MK3 then look here
Frame | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Byte 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0x1 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
2 | 0x2 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
3 | 0x3 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
4 | 0x4 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
5 | 0x5 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
6 | 0x6 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
7 | 0x7 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
8 | 0x8 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
9 | 0x9 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | LED CTRL | ?? | CRC |
10 | 0xA | LED CTRL | LED CTRL | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
11 | 0xB | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
12 | 0xC | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | CRC |
Item | Frame | Byte | Bit | Bit Mask |
---|---|---|---|---|
Jog mode CDJ LED | 9 | 9 | 7 | 0x80 |
Master Tempo LED | 9 | 9 | 5 | 0x20 |
Tempo Reset LED | 9 | 9 | 4 | 0x10 |
SD CARD LED | 9 | 9 | 3 | 0x08 |
CUE LED | 9 | 9 | 2 | 0x04 |
PLAY LED | 9 | 9 | 1 | 0x02 |
Direction LED | 9 | 9 | 0 | 0x01 |
Loop OUT LED | 10 | 1 | 7 | 0x80 |
Loop IN LED | 10 | 1 | 6 | 0x40 |
CUE C LED GREEN | 10 | 1 | 5 | 0x20 |
CUE C LED RED | 10 | 1 | 4 | 0x10 |
CUE B LED GREEN | 10 | 1 | 3 | 0x08 |
CUE B LED RED | 10 | 1 | 2 | 0x04 |
CUE A LED GREEN | 10 | 1 | 1 | 0x02 |
CUE A LED RED | 10 | 1 | 0 | 0x01 |
Jog mode CDJ LED | 10 | 2 | 0 | 0x01 |
For every frame that is sent from the main assy, a response is sent back indicating the state of each button and potentiomenters. The Jog wheen data and the Tempo pitch control data are not sent here, as they are wired directly to the main assy
Frame | Byte 0 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Byte 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ?? | ?? | ?? | ?? | ?? | ?? | ?? | ?? | TOUCH/BREAK | RELEAE/START | ?? | CRC |
Item | Byte | Bit | Bit Mask |
---|---|---|---|
PLAY | 0x00 | ||
Track FWD | 0x00 | ||
Track BWD | 0x00 | ||
Track Search FWD | 0x00 | ||
Track Search BWD | 2 | 4 | 0x10 |
CUE | 3 | 6 | 0x40 |
CUE A | 4 | 7 | 0x80 |
CUE B | 4 | 6 | 0x40 |
CUE C | 4 | 5 | 0x20 |
CUE Rec | 4 | 4 | 0x10 |
Time mode | 4 | 3 | 0x08 |
CD Text/Wave | 0x00 | ||
Loop IN | 5 | 7 | 0x80 |
Loop OUT | 5 | 6 | 0x40 |
Loop Reloop/Exit | 5 | 5 | 0x20 |
Wave Search BWD | 5 | 4 | 0x10 |
Call Search BWD | 5 | 3 | 0x08 |
Memory | 5 | 2 | 0x04 |
Delete | 5 | 1 | 0x02 |
Wave Search FWD | 6 | 1 | 0x02 |
Call Search FWD | 6 | 0 | 0x01 |
Tempo Range | 6 | 7 | 0x80 |
Master Tempo | 6 | 6 | 0x40 |
Tempo Reset | 6 | 5 | 0x20 |
Eject | 6 | 4 | 0x10 |
Jog Mode | 6 | 2 | 0x04 |
Play Direction | 7 | 0 | 0x01 |
Lock | 7 | 1 | 0x02 |
TOUCH/BREAK | 8 | -- | 0-254 |
RELEASE/START | 9 | -- | 0-254 |