Go Down

Topic: Blackberry Joystick / Navigation Key Hack (Read 25015 times) previous topic - next topic


Looking to use a Blackberry Navigation Key / Joystick (from the 9800)  as a mouse input device tied to USB.  Anyone figured out the pinouts and/or signal protocols of this thing?   reference:  http://www.dealextreme.com/p/genuine-replacement-joystick-navigation-key-for-blackberry-9800-81000



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 (http://www.plastibots.com/?p=37) - 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.



Jun 04, 2014, 01:27 pm Last Edit: Jun 04, 2014, 01:30 pm by vahakn Reason: 1
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 ...


Jun 06, 2014, 01:46 am Last Edit: Apr 01, 2018, 12:04 am by duende_azul
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:

Code: [Select]
spi_write (0x00); / / address PRODUCT ID
data = spi_read(); / / Reads the value of PRODUCT ID

Delta_x and delta_y to read:
Code: [Select]

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?

Go Up