83Plus:USB

From WikiTI
Revision as of 15:10, 12 August 2013 by Dr. D'nar (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


The USB driver of the TI-84+ line is divided into no fewer than three parts: A low-level physical level controller (PHY), a charge pump for generating the 5 V VBUS rail the calculator must provide in host mode, and a high-level USB controller (called the IP because it is intellectual property licensed from a 3rd party). The IP is known to be the Mentor Graphics MUSBFDRC. There is no readily available datasheet on any of those three parts; however, Mentor Graphics has published an open source Linux driver for a related IP, the MUSBHDRC, which is similar but definitely different. You can download the driver from http://sourceforge.net/projects/musb-driver/ .

All of the ports defined in musbhdrc.h begin in the Z80 port address space starting at 80h, so port 0x01 is Z80 port 81h and so on. Somebody should browse the Linux driver source and use that information to update the Wiki.

The port 4A through 7F are related to the PHY and charge pump. The PHY and IP need a 48 MHz clock signal, provided by an external crystal, which is easily visible on the PCB. (Too bad TI doesn't use this for the CPU clock; a 2x divisor would provide 24 MHz, 3x 16 MHz, and 8x 6 MHz, giving much more stable CPU clock speeds.) Setting bit 1 of port 54 will stop the USB controller parts from getting the 48 MHz, effectively turning all USB activity off. During an emergency shutdown due to battery removal, for good measure, TI also disables all USB interrupts, kills the View Screen screen DMA thingy, and places the controller into a reset state.

The IP has a built-in charge pump, but TI also has the option of using a charge pump external to the IP. BrandonW believes that the low three bits of the GPIO array control that charge pump, if present. So there really aren't two USB driver version, just two charge pump versions. This is probably at least partially dependent on the ASIC version. Disabling the clock to the PHY and IP also disables the clock to the charge pump, effectively disabling it.

It would be super-awesome if somebody wrote a general overview of USB here.