Blackberry Joystick / Navigation Key Hack

Bump - hoping someone may have some info on this? Looking for any thoughts on pinouts, supported protocols etc. When I get my order, I plan on tracing the connections and trying to power it then putting a scope on the other pins to see what sort of output signals are generated. It would be great if this unit output similar signals that a scroll wheel or Apple MightlyMouse trackball put out (since I have one these to hack apart).

I imagine this would be considerably more difficult to use than a blackberry trackball, and possibly outside of the capabilities of the arduino, as this is basically a low-res camera. The process of reading in data from the cam, comparing the images, and determining motion likely happens on a chip on the blackberry motherboard, and not inside this sensor (camera) .

Admittedly, I agree. However, I'm stubborn, so I'm not giving up yet! I pulled off something similar a while back on my EEE 901 using an Apple MightyMouse (Asus EEE 901 MightyMouse Hack | PlastiBots) - which is my backup plan for this project (already on order). I have 2 of the BB trackpads on order and will attempt to see what makes them tic. I think you are right though, I suspect the unit consists of an IR LED, some IR receivers and just transmits data to the BB mainboard for processing. My hope is that the data that is being generated may be able to be interpreted somehow - possibly by the Arduino. In my case I only care about scrolling up and down.

There's been a hack of the sensors from optical mice used with Arduino, which are essentially the same thing, upside down (I would think). Do a search in the forums for it, it's even been used via Processing as a really rough scanner.

I can't imagine the thing is anything more complex than a variation on the optical mouse theme...but I could be wrong and frequently am..

The trackpad does all the processing onboard as per the research I did. And hence it can definitely be integrated with arduino as it outputs x,y. The statement made by one of the earlier members that it requires image processing to be done by the host controller is a misconception. Will keep you updated about this.

Blackberry 8520 trackpad works much like the Agilent ADNS-3060 sensor, so in fact, using the data sheet that sensor could read offset information (delta_x and delta_y).

Sorry for my bad english.

Did anyone get any further with this?

Id love to get it working for a tongue control for a paraplegic.


Thats a cool video but literally has no how to or information at all.
ive emailed the guy, lets hope hes a friendly type.

Gladly share the information .. but I am from pic, not Arduino ... so you do the translation to arduino.
Greetings ...

The information is referred to the trackpad of blackberry 8520.
First of all, the pinout of the trackpad is this:

(The white triangle indicates the pin 1)


Note1: signals "sig0, sig1, sig2 and sig3" should be ignored because it is not used in this trackpad)
Note2: The signals with "*", they are connected through a 220K resistor to 2.85V and GND.
Note3: The MOTION signal functions as an interrupt signal is set to 0 when there is data to read and set to 1 when already read all the data. Data are reading MOTION, delta_x and delta_y records.


Communication with the trackpad is made using the 4-wire SPI protocol.
The SHTDWN and RESET signals must be at logic 0.

According to my research, the records you need to read are:
Product ID (0x00) - Always returns the value 0x0D. Useful in our application to see if the device is present.

Motion (0x02) - Indicates whether there was a tap on the trackpad. Bit 7 of this register should be inspected, if it is 1 no data to read, if it is 0, no data.

Delta_x (0x03) - Indicates the offset in the x axis.
Delta_y (0x04) - Indicates the offset in the y axis.

Delta_y delta_x and 8-bit registers are signed.

There are many more records .. and as I have observed, are similar to the motion sensor Agilent ADNS-3060. Read the datasheet for more information.

To read the records of the trackpad, we first indicate the direction of the record we want to read and then perform the reading, for example, to read the PRODUCT ID, we should do something like:

spi_write (0x00); / / address PRODUCT ID 
data = spi_read(); / / Reads the value of PRODUCT ID

Delta_x and delta_y to read:

spi_write (0x02); / / address delta_x 
del_x  = spi_read(); / / Value delta_x 
spi_write (0x03); / / address delta_y 
del_y = spi_read(); / / Value delta_y

I hope you find it useful.

@duende_azul In case no one else has thanked you for this information yet, THANK YOU!

Anybody has images with pins and schematics saved elsewhere?

I have fantasized about a very small low power bluetooth mouse wedding band style ring with one of these sensors as the trackpad.

Someone, please tell me there is an idiot's guide on how to make this thing work?

Obviously, I just have to buckle down, try to build it, and learn along the way.

But if someone else knows of a previously built project that will help me learn, that would be great!

Thank you all, for everything here!

Many thanks duende_azul for posting this stuff. Looks great.
Those connectors are really tiny to use by hand- any tips?

Ok. I have pinout for 9800 trackpad. It have i2c interface. Who now how to read data? i will trying.

Is it legal ti use the this trackpad in own projects/devices


This is not legal advice, I'm not qualified and the exact circumstances are going to depend where you are.

However, I think I'd be happy personally to make something with this (if I felt I could make those tiny connections!). After all, even IF you didn't have an implicit licence in the purchased part to use its IP, the "damages" done to whoever owns that IP from your use in a homebrew project would be minimal. They'd have to show that somehow they lost revenue because you made this yourself!

I am reverse engineering a Blackberry Bold 9650 for a certain game that is only available on this phone. I would like to separate the trackpad into an up, down, left, right, and enter button. Can someone steer me in the right direction please? I have looked at the schematics, but I am still having a hard time. Thank you!