Epson Stylus Color D68 logics board

The A6628SEDT is a PLCC 44 packed dual motor driver, running in my old Epson printer.
The idea is to controll the chip by some Arduino and make it print PCBs, like these guys did.

The datasheet for the chip is absent, but thes is connection diagram on the printer’s Service Manual.
It seems the chip is dual version of some Allegro motor controllers, having two indpendent data channels and dual H-bridges (or kind of).
According to the schemacics, paper feeder is controled via data channel 0 on pins 28, 29 and 30 (CLK, Data, Strobe accordingly). The carriage motor is controlled via data channel 1 on pins 40 (CLK), 38 (Data) and 39 (Strobe).

So i hooked up my logic analyzer ( an el chypo clone of 8 chanell Salea Logic) to the data channel ‘1’ and started measurements.
A6628 Data channel 1: print head motor (DC)
The data is clocked at 6 MHz, so 12 MHz sampling rate is fine. The word seems to contain 16 bits and can be analyzed via SPI protocol.
This is strange, as all the datashhets from the Allegro claims they use either 2× 18-bit words or 4× 16-bit (A3998) words.

The operation of the motor seems strange, it’s possible i’ve done something with the connectors to the enceder strip, as the encoder seems fine.
The motor sequence is:
Left -> Right -> Left – > long pause -> Right -> long run to the left side -> motor is swithed off. I had to removed the timing belt to preserve the carriage from the complete damage right now.

After decoding via ISP protocol:
The init sequence is ‘0x0000 0x8183’. The last recorded sequence is ”0x0000 0x8183′, repeated 4 times. So it seems ‘0x0000 0x8183’ will stop the motor, the sequence is repeated each 0,35 ms, possibly to make sure the receiver got it right.
The next oddity is the first word, which is either ‘0x0000’, or ‘0x3004’. The ‘0x0000’ is allways followed by ‘0x8183’, while ‘0x3004’ is followed by some settings.
According to the analyzed data, the MSB bit of the 2nd word is set to ‘1’ only at the beginning and end of the sequence, so I assume (while reading Allegro datasheets and analyzing data) the MSB bit in the 2nd word is IDLE.
The first bit of every first word is allways ‘0’ and the first bit of every second word is always ‘1’, so I assume they are “Word Select” bits, as stated in all Allegro datasheets.
Let’s make the table:

Word 0
Bits
Value 0 1 2 3 4 5 6 7 8 9 A B C D E F
Word Select=0 – Word0 1 2 3 4 5 6 7 8 9 a b c d e f
Word 1
Bits
 Value 0 1 2 3 4 5 6 7 8 9 A B C D E F
Word Select
=1 – Word1
1 Speed? 5 6 7 8 9 a b c d e IDLE

Day 2

Sequence analysis

Init sequence

Sequence number Word0 Word1 Word1 (bin)
1 0x0000 0x8183 1 0 000 00 11 000001 1

Motor running left

Occured @0,34 s after init sequence

Sequence number Word0 Word1 Word1 (bin)
1 0x3004 0xA448 1 0 100 10 00 100100 0
pause for 75 ms
2 0x3004 0xA050 1 0 100 00 00 101000 0
3 0x3004 0x9C58 1 0 011 10 00 101100 0
4 0x3004 0x9860 1 0 011 00 00 110000 0
5 0x3004 0x9468 1 0 010 10 00 110100 0
6 0x3004 0x9070 1 0 010 00 00 111000 0
7 0x3004 0x8C78 1 0 001 10 00 111100 0
8 0x3004 0x8878 1 0 001 00 00 111100 0
9 0x3004 0x8278 1 0 000 01 00 111100 0
10 0x3004 0x8A78 1 0 001 01 00 111100 0
11 0x3004 0x8E78 1 0 001 11 00 111100 0
12 0x3004 0x9270 1 0 010 01 00 111000 0
13 0x3004 0x9668 1 0 010 11 00 110100 0
14 0x3004 0x9A60 1 0 011 01 00 110000 0
15 0x3004 0x9E58 1 0 011 11 00 101100 0
16 0x3004 0xA250 1 0 100 01 00 101000 0
17 0x3004 0xA648 1 0 100 11 00 100100 0
18 0x3004 0xAA40 1 0 101 01 00 100000 0
19 0x3004 0xAE38 1 0 101 11 00 011100 0
20 0x3004 0xB230 1 0 110 01 00 011000 0
21 0x3004 0xB628 1 0 110 11 00 010100 0
22 0x3004 0xBA20 1 0 111 01 00 010000 0
23 0x3004 0xBE18 1 0 111 11 00 001100 0
24 0x3004 0xBE10 1 0 111 11 00 001000 0
25 0x3004 0xBE04 1 0 111 11 00 000010 0
26 0x3004 0xBE14 1 0 111 11 00 001010 0
27 0x3004 0xBE1C 1 0 111 11 00 001110 0
28 0x3004 0xBA24 1 0 111 01 00 010010 0
29 0x3004 0xB62C 1 0 110 11 00 010110 0
30 0x3004 0xAE3C 1 0 101 11 00 011110 0
31 0x3004 0xA64C 1 0 100 11 00 100110 0
32 0x3004 0xB234 1 0 110 01 00 011010 0

Occured @1,5 s after the first sequence and is repeated 25 times

Sequence number Word0 Word0 (bin) Word1 Word1 (bin)
1 0x3004 0 011000000000100 0xA44C 1 01 0010 00 1001 11 00
2 0x3004 0 011000000000100 0xA448 1 01 0010 00 1001 10 00
3 0x3004 0 011000000000100 0xA648 1 01 0011 00 1001 10 00
4 0x3004 0 011000000000100 0xA64C 1 01 0011 00 1001 11 00

Occured @0,67 s after the second sequence, repeated 25 times

Sequence number Word0 Word0 (bin) Word1 Word1 (bin)
1 0x3004 0 011000000000100 0xA44C 1 01 0010 00 1001 11 00
2 0x3004 0 011000000000100 0xA448 1 01 0010 00 1001 10 00
3 0x3004 0 011000000000100 0xA648 1 01 0011 00 1001 10 00
4 0x3004 0 011000000000100 0xA64C 1 01 0011 00 1001 11 00

Motor running right

The sequence seem identical to the 1st one …

 

Day 3

Actualy, it’s 2016 right now. February. The 17th …

The problem with the crazy motor was on of encoder ribbon. There was a short between two pins when it plugs into the controller’s PCB.

The printer has passed the initialization, moved head assembly forth and back at different speeds.

Now, let’s analyze the stop sequence. Logics attached to the pins, button pushed and …

Just in case: 0x200C in hex is (MSB on the left) 10000000001100.

Sequence
number
Word0 Word0 (bin) Word1 Word1 (bin) Comments
0x3004
0x200C
0 011000000000100
0 010000000001100
Repeated continously
0xA44C
0x3225
1 010010001001100
0 011001000100101
0x3004
0x200C
0 011000000000100
0 010000000001100
0xA448
0x1225
1 010010001001000
0 001001000100101
0x3004
0x200C
0 011000000000100
0 010000000001100
0xA648
0x1265
1 010011001001000
0 001001001100101
0x3004
0x200C
0 011000000000100
0 010000000001100
0xA64C
0x3265
1 010011001001100
0 011001001100101
0x3004

0x200C
0 011000000000100

0 010000000001100
Repeated
100 times
0xA648

0x1265
1 010011001001000

0 001001001100101
0x3004

0x200C
0 011000000000100

0 010000000001100
0xA448

0x1225
1 010010001001000

0 001001000100101
0x3004

0x200C
0 011000000000100

0 010000000001100
0xA44C

0x3225
1 010010001001100

0 011001000100101
0x3004
0x200C
0 011000000000100
0 010000000001100
0xA64C
0x3265
1 01 0011 00 1001 11 00
0 011001001100101
Pause for 0.6031 sec
0x0000 0x8183
0xC181
1 00 0000 11 0000 00 11
1 10 0000 11 0000 00 01
Assuming
“Motor stop”
command
Pause for 0.2626 sec
0x0000 0x8183
0xC181
1 00 0000 11 0000 00 111 10 0000 11 0000 00 01 Assuming
“Motor stop”
command

What I’ve noticed, Vref may be used to transmit signal. Not according to Allegro datasheets of the similar products.

The datasheet of A3972, A3973 claims the LSB comes the first, so I have tried to update the table above.

Well, in this case 0x200C and the Rest of The World (except 0xC181) maps to the Word0, which is kind of stupid. So probably the MSB comes first.

 

The table below shows the possible values, captured on the port.

 

Value (hex) Value (bin) Movement type
0x8183 1 00 0000 11 0000 00 11
 0x3004  0 011000000000100
0xA254 1 01 0001 00 1010 01 00
0x9E5C 1 00 1111 00 1011 11 00
0x9A64 1 00 1101 00 1100 01 00
0x966C 1 00 1011 00 1101 11 00
0x9274  1 00 1001 00 1110 01 00
0xA050 1 01 0000 00 1010 00 00 slow speed, forward
0x9C58 1 00 1110 00 1011 10 00 slow speed, forward
0x9860 1 00 1100 00 1100 00 00 slow speed, forward
0x9468 1 00 1010 00 1101 10 00 slow speed, forward
0x9070 1 00 1000 00 1110 00 00 slow speed, forward
0x8C78 1 00 0110 00 1111 10 00 slow speed, forward
0x8878 1 00 0100 00 1111 10 00 slow speed, forward
0x8278 1 00 0001 00 1111 10 00 slow speed, forward
0x8A78 1 00 0101 00 1111 10 00 slow speed, forward
0x8E78 1 00 0111 00 1111 10 00 slow speed, forward
0x9270 1 00 1001 00 1110 00 00
0x9668 1 00 1011 00 1101 10 00
0x9A60 1 00 1101 00 1100 00 00
0x9E58 1 00 1111 00 1011 10 00
0xA250 1 01 0001 00 1010 00 00
0xA648 1 01 0011 00 1001 10 00
0xAE38 1 01 0111 00 0111 10 00
0xB230 1 01 1001 00 0110 00 00
0xBA20 1 01 1101 00 0100 00 00
0xBE18 1 00 0111 00 0011 10 00
0xA44C 1 01 0010 00 1001 11 00
0xA448 1 01 0010 00 1001 10 00
0xA648 1 01 0011 00 1001 10 00
0xA64C 1 01 0011 00 1001 11 00

Here are some screenshots from the sequences (0xA44C 0xA448 0xA648 0xA64C):

0xA44C, sequence 1

0xA44C, sequence 1

0xA448, sequence 1

0xA448, sequence 1

0xA648, sequence 1

0xA648, sequence 1

0xA64C, sequence 1

0xA64C, sequence 1

0xA648, sequence N

0xA648, sequence N

0xA448, sequence N

0xA448, sequence N

0xA44C, sequence N

0xA44C, sequence N

0xA64C, sequence N

0xA64C, sequence N