I have taken apart my TI-Keyboard from circa 2002, and have made a little Imgur album:


The case and PCB are significantly different that the other teardown that exists, even though they share the same part number.


Notably, on my keyboard, there are no longer provisions for the second link port within the case mold, but there are still unpopulated pieces for a second port on the PCB. The serial number format is different as well. The PCB sports the work Silitek on the silkscreen, a division of Lite-On according to the Deskthority Wiki https://deskthority.net/wiki/Silitek. The main chip on the PCB seems to be a very similar part, EM78P451A0 vs EM78p451SA0S. This seems to be a low-power one-time-programmable general 8-bit microprocessor. http://www.datasheet-pdf.com/PDF/EM78P451-Datasheet-ELANMicroelectronics-546102

I have also mapped out the matrix of the keys formed by the membrane, with the plan to replace the membrane with a PCB to support mechanical key switches.

Really neat! I'm not entirely sure what this is in aid of, but it sure could be helpful to have this information on hand for some hypothetical future project. Good job!
Did we ever hypothesize on the potential purpose of the second link port/do you have any hypotheses?
My hypothesis is as a pass-through, or transparent pass-through. Such that the keystrokes are only sent to one of the calculators, but the two calculators (or other peripheral) can talk to eachother through the keyboard.

I'll do some probing around and report back.
NoahK wrote:
The main chip on the PCB seems to be a very similar part, EM78P451A0 vs EM78p451SA0S

The chip names are EM78P451 (PDF) and EM78P451S (PDF) and looking at the datasheets, I cannot tell an spec differences other than the S is newer, still listed on ELAN's website, and supports one more package type. The two PCBs appear to have the same schematic, but wildly different layouts.

I opened up a TI Keyboard and it also has a "Silitek" branded PCB. Teardown images captured in https://imgur.com/a/0urInMr . The code on my board has 0315 and looking at your teardown, 0242. My assumption is that these are <year><week> date codes.

NoahK wrote:
My hypothesis is as a pass-through, or transparent pass-through.

I agree with this hypothesis. I traced out the layers and identified that the non-populated J1 Graph Link connection is routed to the microcontroller pins 43/44. The diodes, transistors, and L/C filter are the same as used in the TI USB Silverlink cable. We could wire up some external diodes and transistors and see if the microcontroller firmware still does anything with these lines. The largest pads connected are the lower pads of R1/R2 for ring/tip, the upper pad of R1/R2 for VDD (4.5V), and lower pad of L5 for GND. I'll let you know if I have any success with this.

I captured the schematic for "Silitek" branded PCB and made it available in a repository https://github.com/queueRAM/ti_keyboard . The EM78P451 uses proprietary 8-bit microcontroller architecture where each instruction is 13-bits length. There are tools for assembler and C compiler, and ICE HW for testing and programming. However, I haven't been able to see if there is a way to read out the contents of the OTP to inspect the firmware. I probably won't look much more into the firmware side of this.

I confirmed the 2nd graph link port acts as a relay between the two ports so one could have the keyboard connected to to a calculator and then either another calculator or computer Graph Link cable plugged into the 2nd port and the two calculators can communicate with each other.

To do this, I soldered to the points identified in my previous post and wired them out to a breadboard:
R2 lower pad = Tip
R1 lower pad = Ring
R1 upper pad = VDD (≈4.5V)
L5 lower pad = GND

On the breadboard, I build the transistor/diode circuit from the breadboard version of the USB graph link using PN2222A NPN transistors, MBR160 Schottky diodes, and 10kΩ pull up resistors. I also soldered to the tip/ring of the already present graph link port to probe. I wired this into two TI-89 graphing calculators and transferred files between them using the Var-Link menu.

The keyboard will ACK every bit on one side of the transfer until a full byte is received. It then transmits the byte out the other port at the same time the next bit is waiting to come in. It doesn't ACK the first bit of the next byte until after sending out the previous byte, stalling the bus until it completes.

Full album of solder points, breadboard, and results: https://imgur.com/a/DspmJXg

Great job!
With this passthrough confirmed, I wonder if multiple keyboards can be chained together? And further, if a similar passthrough circuit/firmware can be used on other community-made peripherals?
Excellent investigative experiment, queueRAM! It's great to know that that functionality is there, and that folks with a steady hand could even populate those pads to properly expose it if desired.
NoahK wrote:
I wonder if multiple keyboards can be chained together? And further, if a similar passthrough circuit/firmware can be used on other community-made peripherals?

Interesting question, hadn't thought about that. With what we know now, I don't see a reason it wouldn't work. However, I don't have another keyboard to test with. I think one could emulate the keyboard signals with some microcontroller to test out the theory. With how simple the protocol is (just refusing to ACK the next data bit transition until the current byte is relayed on the 2nd port) I think the functionality could be pulled into other peripherals. One area that might be tricky and I haven't tested yet on the keyboard, is what happens during a relay transmission if a key is pressed on the keyboard. I'll follow up if I find a good way to test this.

KermMartian wrote:
It's great to know that that functionality is there, and that folks with a steady hand could even populate those pads to properly expose it if desired.

I was pleasantly surprised to find the functionality still there. While certainly not as easy as soldering through-hole components, soldering to these pads was easier than I expected. The PCB has a nice solder mask and I applied a little flux and tinned the pads and wires. The flux made every reflow nicely and mask kept it from bridging between adjacent pads.

However, my next experiment was much more difficult solder. I realize that I had some spare component from the USB Silver Link "A" board that I extracted the Cypress microcontroller from in my attempts to reverse engineer the FW (spoiler: haven't yet found a way to dump the Cypress FW). The diode/transistor circuit and components were identical to what is used on the keyboard PCB. I desoldered the diodes, transistors, pull-up resistors, and even the R/L filter parts and repopulated them on the TI keyboard. There was not the "L3" inductor connecting sleeve to GND, so I just shorted that with a jumper. First try didn't work, but realized one of the transistor pads wasn't fully connected so a simple solder reflow fixed that. Not a pretty solder job, but it is functional and no longer need the breadboard! I just need to find a new 2.5mm jack that fits the footprint and carve a hole in the keyboard enclosure to make this better than some jumper wires. I looked but couldn't find anything which exactly matches, so anyone knows of a jack with this footprint please let me know Smile

I found that the serial TI-Graph Link for Windows has a link jack that fits the footprint of the ones inside the keyboard, so I desoldered it and moved it to J1 of the Keyboard. I also replaced the L1 jumper with a 0Ω resistors from the USB SilverLink that was spare. I cut a hole in the keyboard enclosure to make room for the 2nd relay port and connected the keyboard matrix and tested it all again. Everything is running well with the 2nd port. Full album: https://imgur.com/a/Fo7HIdw

Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 1
» All times are UTC - 5 Hours
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum