Skip to content
This repository
Newer
Older
100644 196 lines (141 sloc) 4.646 kb
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
1 = Keepon Reverse Engineering Document =
dc991f20 »
2011-11-06 Put in some personal information since the re doc is getting linked.
2
3 == Author Info
4
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
5 Kyle Machulis <kyle@nonpolynomial.com>
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
6 v1.1, Nov 14, 2011
dc991f20 »
2011-11-06 Put in some personal information since the re doc is getting linked.
7
8 == Description ==
9
10 Keepoff is a project to reverse engineer with BeatBots/WowToys
11 MyKeepon Dancing robot.
12
13 http://mykeepon.com/
14
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
15 == Hardware ==
16
8ac95ceb »
2011-11-06 Added links to images of circuit boards
17 === Board Image ===
18
19 An annotated image of the circuit board is available at
20
21 http://www.flickr.com/photos/qdot76367/6296272375/in/photostream
22
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
23 === Sensors ===
24
25 * Microphone
26 * Buttons
27 * Servos (encoders?)
28
29 === Processors and Components ===
30
31 * Padauk P234CS24 - http://www.jaolen.com/UploadFile/Content/2010091911223399.pdf
32 * Padauk P232CS14 - http://www.padauk.com.tw/admin/includes/getfile.php?file_name=ZmlsZTEuUDIzMl9EUzAyMUUucGRm
33 * APW7145 - http://www.lierda.com/upload/editor/20081212/1229063275.pdf
34
436d9b25 »
2011-11-02 Added pinouts for I2C
35 Pinouts:
36
37 P232CS14:
04d1b6b5 »
2011-11-07 Oops. Wrong pin.
38 * PIN1 - I2C CLK
436d9b25 »
2011-11-02 Added pinouts for I2C
39 * PIN14 - I2C DATA
40
41 P234CS24:
42 * PIN11 - I2C CLK
43 * PIN24 - I2C DATA
44
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
45 === Buttons ===
46
47 * Front (Touch/Music)
48 * Body (Head, Sides)
49
50 == Line Protocols ==
51
52 The two processors in the Keepon robot communicate with each other via
53 the I2C protocol. A set of pads to watch communication between the
54 chips is available on the circuit board, in the corner near the happy
55 face.
56
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
57 The communication is 0V (GND) Low, +3.3V High. However, the internal
58 microcontrollers are 5v tolerant.
59
60 To be able to control the system using the commands listed below, the
61 microcontroller that works as the master node must be put into slave
62 mode. This is done by pulling the I2C data and clock lines to ground
63 for 1 second while the keepon is powering up or coming out of sleep.
64 After this, the bus can be controlled by outside systems.
69cc5164 »
2011-11-01 Added voltage info
65
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
66 == Devices and Commands ==
67
68 The following device addresses are available:
69
81170b6b »
2011-11-01 More rev eng doc updates
70 * 0x52 - Sound bank access/playing
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
71 * 0x55 - Servos for turning whole unit?
72
73 === Device Sleep ===
74
75 Assuming no interaction takes place for 3 minutes, the robot will put
76 itself to sleep. This will cause the data/clock lines on the I2C bus
77 to both drop to ground.
78
79 === Device Wakeup ===
80
81 To wake up the device from sleep mode, pull the V line on the exposed
82 I2C pads to ground.
83
63c54f36 »
2011-11-01 Added some motor info
84 === Servos ===
3ab24890 »
2011-11-01 Added asciidoc for reversing notes
85
63c54f36 »
2011-11-01 Added some motor info
86 * Device Address: 0x55
87
88 Keepon has 4 servos: The main base rotation, right/left body bend,
89 forward/back body bend, and up/down "squat".
90
d3be6760 »
2011-11-05 More documentation of events. Not really concrete, but it's there.
91 Messages written to the motors are as follows:
63c54f36 »
2011-11-01 Added some motor info
92
93 ------
94 0x55 0xAA 0xBB 0xCC
95 ------
96
97 * 0xAA - servo index.
98 * 0xBB - current servo position
99 * 0xCC - unknown? Seems to be only 255 or single bit values (powers of 2)?
100
101 ==== Main Rotation Base ====
102
103 * Motor Index: 0x04
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
104 * Servo Position: 0xBB
105 * Movement Speed: 0xCC
63c54f36 »
2011-11-01 Added some motor info
106
107 ==== Forward/Back Bend ====
108
109 * Motor Index: 0x02
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
110 * Servo Position: 0xBB
111 * Movement Speed: 0xCC
63c54f36 »
2011-11-01 Added some motor info
112
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
113 ==== Up/Down Squat and Right/Left Bend ====
63c54f36 »
2011-11-01 Added some motor info
114
7590d935 »
2011-11-01 Sound Bank information
115 * Motor Index: 0x00
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
116 * Bend: 0xBB < 0x80
117 * Squat: 0xBB > 0x80
118 * Speed: 0xCC
63c54f36 »
2011-11-01 Added some motor info
119
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
120 === Motor Macros ===
7590d935 »
2011-11-01 Sound Bank information
121
3ca570c0 »
2011-11-14 More documentation of motor status, motor macros, sound banks.
122 Unlike the 0x00/2/4 device addresses for motors, the 0x6 address takes
123 a single byte. It seems to have certain motor "macros" programmed into
124 these values. The valid values for this byte are:
125
126 * Motor Index: 0x06
127 * 0x20
128 * 0x21
129 * 0x22
130 * 0x23
131 * 0x24
132 * 0xA0
133 * 0xA1
134 * 0xA2
135 * 0xA3
136
137 ==== Motor Status ====
138
139 Status about the position of motors (rotation and front/back only, the
140 up/down and side to side swaying motors do not seem to have encoders?)
141 is retreived by requesting 13 bytes from the 0x55 device.
142
143 * Byte 0x00 - Unknown
144 * Byte 0x01 - Unknown
145 * Byte 0x02 - Unknown
146 * Byte 0x03 - Unknown
147 * Byte 0x04 - Unknown
148 * Byte 0x05 - &'d against the following bits
149 ** 0x0X - Up/Down Position (for Up/Down motor) - Range Unknown? (2-bit?)
150 ** 0xE0 - Leaning Left (for Left/Right sway) - Boolean?
151 ** 0xF0 - Leaning Right (for Left/Right sway) - Boolean?
152 * Byte 0x06 - Unknown
153 * Byte 0x07 - Unknown
154 * Byte 0x08 - Unknown
155 * Byte 0x09 - Unknown
156 * Byte 0x0A - Unknown
157 * Byte 0x0B - Front/Back Encoder
158 * Byte 0x0C - Base Rotation Encoder
63c54f36 »
2011-11-01 Added some motor info
159
d3be6760 »
2011-11-05 More documentation of events. Not really concrete, but it's there.
160
7590d935 »
2011-11-01 Sound Bank information
161 === Sound Banks ===
162
163 * Device Index: 0x52
164 * Message Format: 0x52 0x01 0xAA
3ca570c0 »
2011-11-14 More documentation of motor status, motor macros, sound banks.
165 ** 0x91 - Up Wakeup Sound
166 ** 0x92 - Down Wakeup Sound
167 ** 0x95 - Yawn Down
168 ** 0x96 - Initial Boot Sound?
169 ** 0x97 - Sigh
170 ** 0x9A - Yawn Up
171 ** 0x9B - Sleep (Sound played before turning off)
172 ** 0x9C - Chirp
173 ** 0xAC - Whine
174 ** 0xBC - Beep noise when head hit
175 ** 0xBD - Up/Down noise when squatting
176 ** 0xBF - Sneeze Up
177 ** 0xC0 - Sneeze Down
81170b6b »
2011-11-01 More rev eng doc updates
178
179 === Buttons - Front/Base ===
180
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
181 Button status is found from reading a single byte from Device 0x50.
81170b6b »
2011-11-01 More rev eng doc updates
182
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
183 * Device Index: 0x50
184 * Button Indexes:
185 ** 0x01 - Music Mode Front Button
186 ** 0x02 - Unused?
187 ** 0x04 - Top of Head
188 ** 0x08 - Touch Mode Front Button
189 ** 0x10 - Left Body (Facing toward user)
190 ** 0x20 - Front Body
191 ** 0x40 - Right Body (Facing toward user)
192 ** 0x80 - Back Body
81170b6b »
2011-11-01 More rev eng doc updates
193
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
194 === Microphone ===
81170b6b »
2011-11-01 More rev eng doc updates
195
093d3570 »
2011-11-14 Added information to RE doc on bus grounding tactics, as well as butt…
196 Microphone information is not sent over the I2C bus.
Something went wrong with that request. Please try again.