Since I had cracked open a black serial TI-Graph Link cable to salvage its 2.5mm 3-conductor jack, I thought it would be interesting to see how its circuit worked. The black serial Graph-Link cable was the later revision with a female DB-9 connector and is only intended to work with Windows PCs. There is an earlier version of the TI-Graph Link cable which is grey and uses DB-25 and works with Windows and Macintosh computers. Some basic info on both of these from Merthsoft's Link Cables page

Black TI-Graph Link Cable (or "Black Link")
The black TI Graph-Link cable uses the control lines of the serial port to both power the circuitry and communicate with the TI graphing calculators link port. DTR (pin 4) and RTS (pin 7) are used to supply power and as outputs from the computer to the graph link. DSR (pin 6) and CTS (pin 8) are used as inputs from the graph link port to the computer.

Each of the graph-link pins use a pair of serial port I/O which is used on the inputs of LM339 (PDF) quad comparator:

  • tip: RTS/CTS
  • ring: DTR/DSR

RTS and DTR are passed through diodes CR3 and CR4 to create the supply voltage for the comparators and pull-up circuitry. Since the computer controls these and separate pins are used to send data from the graph link to the computer, at least one of these will remain high. RS-232 logic levels are +3V to +15V for asserted and -3V to -15V for deasserted. Diodes CR1 and CR2 keep the inputs at most ground level to the comparator. The voltage levels used will vary a lot between computer serial ports. USB-serial adapters often use lower +5/-5V or lower.

The KiCad schematics are included in a repository for preservation. https://github.com/queueRAM/ti_graph_link



This is very interesting and a great way to preserve this cable's specs.
I decided to attempt to reverse engineer the TI Graph Link serial grey cable. Due to the number of components and difficulty of finding datasheets from that era, the circuits are more complicated than the USB or black link cables. Despite this, I think I've managed to make enough educated guesses for what the parts do.

Gray TI-Graph Link Cable (or "GrayLink")
The gray Graph-Link cable uses a DB-25 connector for RS232 serial communication running at 9600 baud through the TX/RX pins. It includes adapters to connect to DB-9 RS232 connector on a PC and a DIN adapter to connect to RS-422 serial port on a Mac. Similar to its successor, the gray Graph-Link cable uses two control lines to provide power to its circuitry, using DTR, DSR, and RTS.

The control of the cable is provided with a PIC16C54 which receives requests on TX, sends responses back on RX, and manages the graph link communication on the tip/ring of the 2.5mm cable through two pairs of pins.
There are three distinct power supplies:

  • 5V LDO regulator which takes DSR and RTS as input and generates 5V to power the PIC
  • RS232 positive voltage, derived from the 5V LDO
  • RS232 negative voltage provided with a Schmitt trigger inverter oscillator and capacitor coupling


Given this was likely designed in early to mid 1990s, many of the parts are now obsolete and this has made it difficult to track down datasheets to confirm the part markings. What I am finding is some of the part vendors themselves may not exist anymore. Looking through old electronic catalogs, there were many semiconductor vendors: National, Fairchild, Harris, TelCom, Toshiba, most of which have been acquired by other vendors and product line has moved on. For most of the ICs (VR1, U2, U3, U4, U5, U6, Q1, Q2), I was not able to determine a precise vendor and part number, so I’ve left the part markings in the schematic.

The KiCad schematics are included in a repository for preservation. https://github.com/queueRAM/ti_graph_link .





Next, I will remove the PIC microcontroller and try to dump the ROM inside of it, but I'm not certain this can be performed easily. This PIC likely has a mask ROM and doesn't contain the usual in circuit programming pins of more modern PIC family of devices. I'll report back if I find anything.
I find it rather interesting to notice that most of the apparent complexity comes from TI giving the level-shifting and power supply circuits at lot of buffering, whereas both the $4.00 serial link and the DIY PIClink seem to depend on resistive voltage dividers and Zener diodes for the same purposes. Those greatly reduce the number of components, but I suppose increase the power draw and make it a little less likely to work on systems where things are noisy or the power supply is marginal.
Do you still need the SilverLink cable? I have one and can take it apart for you for pictures, if you like.
Tari wrote:
I find it rather interesting to notice that most of the apparent complexity comes from TI giving the level-shifting and power supply circuits at lot of buffering, whereas both the $4.00 serial link and the DIY PIClink seem to depend on resistive voltage dividers and Zener diodes for the same purposes. Those greatly reduce the number of components, but I suppose increase the power draw and make it a little less likely to work on systems where things are noisy or the power supply is marginal.

These are certainly very clever, stripped down versions of the TI Graph Link serial cables. The zener diodes are definitely doing a lot of heavy lifting, especially when powering a PIC from +15V at the high end of the RS232 from RTS and DSR. TI's isn't necessarily power efficient either, using an LDO to derive the 5V in the gray serial link and using diodes to clamp the TX voltage instead of translating it to TTL levels (and inverting).

HydrideGS wrote:
Do you still need the SilverLink cable? I have one and can take it apart for you for pictures, if you like.

Sorry, I don't quite follow. This thread is for the serial Graph-Link cables. There is another thread for Reverse Engineering the TI USB Graph Silver Link
queueRAM wrote:
HydrideGS wrote:
Do you still need the SilverLink cable? I have one and can take it apart for you for pictures, if you like.

Sorry, I don't quite follow. This thread is for the serial Graph-Link cables. There is another thread for Reverse Engineering the TI USB Graph Silver Link


Gotcha. I thought it had some serial-to-USB interface stuff going on, so I wasn't sure.
I was able to successfully remove the PIC from one of the gray serial graph link boards and remount on a DIP adapter to dump the ROM. I disassembled it and nothing too surprising stands out, just some option setting, PORTA and PORTB initialization, and communication.




Hex dump for now, but will post the disassembly once I have decoded more and have it rebuilding:

Code:
:020000040000FA
:1000000005064507060AE106E70A000AA706E50A0B
:100010006705080C2B000F0C2C00E106E70A4507CA
:10002000360A05060D0A4507160B2A03EA0465057C
:100030001C0C2C00E106E70A05071A0A6504250CCA
:100040002C00E106E70A4507210AEB020B0A0E0223
:10005000F00D24000A022000AE02AD028D06A705B5
:1000600087046704000C2C000400E50A0507160B42
:100070002A03EA0525053F0C2C00E106E70A45079F
:100080003D0A2504480C2C00E106E70A0507440A4E
:10009000EB020B0A0E02F00D24000A022000AE0251
:1000A000AD028D06A70587046704000C2C00040030
:1000B000E50A8706F60A6705080C2B000F02F00D0B
:1000C000240000022A00AF02ED0043068705A704C2
:1000D0000D020F0F4306710A0D020E0F43060707AC
:1000E00046042A0303068B0A2505790C2C00E10639
:1000F000F80A4506770A2504800C2C00E106F80A68
:100100000507160B45077E0AEB02710A6704590CB6
:100110002C000400F60A6505900C2C00E106F80A94
:1001200005068E0A6504970C2C00E106F80A4507BF
:10013000160B0507950AEB02710A6704590C2C008F
:100140000400F60A07051E0C2100080C29000D0208
:100150000E0E0E0F430646050C0222002803E8048B
:100160000607E8050C02E90222000E02F00D240049
:1001700008022000AE02AD028D06A7058704070421
:1001800004000C022200270526050F02F00D2400B2
:1001900000022800AF02ED0043068705A704080C03
:1001A00029000C0222004706DF0A28030306260462
:1001B000030726050C02E902220047052200260457
:1001C0002704470404000C022200E107E50A810726
:1001D000E70A2E0C21002706D30A8707C30A0C0260
:1001E0006706220005064507060A090BE107F60A1D
:1001F0008107F80A2E0C21000706AE0A660C2100C2
:100200000606A20A0C02670622000C028707590A9A
:10021000090B0400590C2C00E6050606A20A060C80
:100220002C00E60405064507060A090B46052605C7
:10023000040045060507180B270B050C0500010CEB
:100240000600590C2C000E0C02002E0C2100400060
:100250002300110C2700680069006A006B00100C75
:100260002E002F006D002504650426044604090BAA
:10027000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F0E
:10028000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FFE
:10029000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FEE
:1002A000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FDE
:1002B000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FCE
:1002C000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FBE
:1002D000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FAE
:1002E000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F9E
:1002F000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F8E
:10030000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F7D
:10031000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F6D
:10032000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F5D
:10033000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F4D
:10034000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F3D
:10035000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F2D
:10036000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F1D
:10037000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F0D
:10038000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FFD
:10039000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FED
:1003A000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FDD
:1003B000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FCD
:1003C000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FBD
:1003D000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0FAD
:1003E000FF0FFF0FFF0FFF0FFF0FFF0FFF0FFF0F9D
:1003F000FF0FFF0FFF0FFF0FFF0FFF0FFF0F1D0B73
:021FFE00FD0FD5
:080400000C00080003000000DD
:00000001FF
I completed the disassembly and annotation of the TI Graph-Link serial gray PIC and added it to the git repo as ti_graph_link_serial_gray.asm. The included Makefile can rebuild it using GNU PIC Utilities (gputils) assembler.

The PIC16C54 used does not have hardware blocks for a USART or GPIO interrupts, so the entire communication is firmware driven. It has a hardware timer that is used to delay timing on the RS232 and Graph Link communication pins and also detect timeouts, but this is all firmware based logic.

One interesting find in the PIC code is that GPIO PORTB[7] (RB7) is used as an output, but the PCB does not wire this to anything. While powered and idle, this pin toggles between 5V and 0 at about 71.4kHz, during transfer from PC→Calc is held at 5V, and during transfer from Calc→PC and is held at 0V. This could either be a debug pin for development and triage or it could potentially have been intended as a status LED. If you add an LED and current limiting resistor from 5V to this pin, it would be dim while idle (effectively 50% DC PWM), while PC→Calc, and on while Calc→PC.


Code:
    BSF DebugPin         ; PORTB[7] = 1

    BTFSC Ser_TX         ; if TX == 1:
      GOTO LADR_0x00A2   ;   GOTO LADR_0x00A2

    MOVLW LADR_0x0006    ; JumpBack = 0x06
    MOVWF JumpBack

    BCF DebugPin         ; PORTB[7] = 0




I put together a proof of concept of the status LED theory, wiring a green LED to the 5V regulator for power status and red LED to RB7, the unconnected pin which firmware was toggling high and low. The below video shows this in operation when transferring a picture to the calculator using the official TI Connect tools. It's a little difficult to see in the video, but it captures times when the red (status) LED is on, when it dim, and when it is barely flickering.



This is fantastic work! I like the LED theory, sounds like something that definitely could have been in development.
  
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

 

Advertisement