TI-83+ Link Protocol Guide - Flash Transfers

##

Flash Transfers

Beware: in the worst case, a FLASH operation can completely lock up your calculator and there is no way than returning the calcultator to Texas Instruments in this case. We (Tim. Singer and Romain Liévin) can not be responsible of this.
Personnaly, Romain has crashed a FLASH OS several times (10) without crashing the calculator but you have been warned !
A last remark: the link cables which are the more reliable and efficient for these operations (especially OS flashing) are RS232 cables such as Grey TIGL, fastAVRlink (even at 4x = 38400 bauds) or PIClink (not tested but should work). The SilverLink cable works fine, too.

There are 2 kinds of FLASH transfers:
- (free) FLASH applications which are variables stored in the FLASH memory of the calculator.
- AMS (Advanced Mathematic Software) which is the Operating System of the calculator.
A Flash transfer is a one (large) transmission containing data (up to 2 MB for AMS). The file format that the TI-83+ Graph Link software uses can be found in the file formats section of this documentation.

A FLASH OS must be transferred silently whereas FLASH apps can be transferred manually or silently. Silent transfers can only be done between a computer and a calculator, and require that the computer make the request or request-to-send.

#### Checking FLASH

The protocol for checking whether the calculator AMS has been upgraded is described below.

Step | Direction | Packet
--- | --- | ---
1 |  |  |  | REQ special: 00 68 00 00.
2 |  | ACK: either 73 56 00 00 (not upgraded), either 73 56 ?? ?? (upgraded).

Example:

PC: | `00 68 00 00` | Check whether the calc has been FLASHed
TI: | `73 56 00 00` | TI83+ with AMS v1.14

PC: | `00 68 00 00` | Check whether the calc has been FLASHed
TI: | `73 56 ?? ??` | TI83+ with AMS v?.??

#### Requesting ID list

Indeed, the request is as if the TI requested the 'IDLIST' variable: Ty=26 and Nl=00.
This request works only with upgraded calculator (check if TI has been upgraded before).

The protocol for silently receiving the ID list is shown below:

Step | Direction | Packet
--- | --- | ---
1 |  |  |  | REQ with just type ID
2 |  | ACK (see note below)
3 |  | VAR (specifing the size without the extra four bytes) with IDLIST as varname
4 |  | ACK
5 |  | CTS
6 |  | ACK
7 |  | DATA with an extra four bytes at the beginning of the packet
8 |  | ACK
10 |  | ACK

Example (PC receiving IDlist from TI):

PC: | `73 A2 0B 00 00 00 26 00 00 00 00 00 00 00 00 26 00` | Request the ID list
TI: | `73 56 00 00` | Acknowledgement of request
| `73 06 0B 00 0B 00 26 00 00 00 00 00 00 00 00 31 00` | Variable Header
PC: | `73 56 00 00` | Acknowledgement of variable header
| `73 09 00 00` | Clear to send variable
TI: | `73 56 00 00` | Acknowledgement of CTS
| `73 15 0B 00 01 00 00 80 0A 32 CC E3 01 21 18 A6 00` | Variable data: "0A32C-CE301-1821"
PC: | `73 56 00 00` | Acknowledgement of variable data

If the calculator does not have an IDLIST, it replies as following:

PC: | `73 A2 0B 00 00 00 26 00 00 00 00 00 00 00 00 26 00` | Request the ID list
TI: | `73 36 05 00` `00 00 00 00 03 03 00` | Skip/Exit

#### Sending FLASH

Warning: We (Tim. Singer and Romain Liévin) could not be responsible if your calculator has been locked or damaged with a FLASH OS.
If an FLASH OS has been sent and the operation has crashed, you can wait that the TI83+ display 'Turn unit off and on'. Then, try again the transfer.
If the calculator is really locked, remove batteries, wait some time and put them again. Next, press I for 'Install code' and retry transfer.
Note: the TI83+ SE (Silver Edition) will reject any OS upgrade older than the currently installed.
In the case of a FLASH OS (AMS), the name is 'basecode'.

The protocol for silently sending a FLASH file is shown below:

Step | Direction | Packet
--- | --- | ---
1 |  |  |  | VAR with expected header including the FLASH application name and size.
2 |  | ACK
3 |  | CTS
4 |  | ACK
5 |  | DATA with an extra four bytes at the beginning of the packet
6 |  | ACK/ERR (*)
|  | (Repeat steps 1-6 for as many pages as there are in the file)
7 |  | EOT
8 |  | ACK

(*) TI83+ SE will send an error packet if OS upgrade is older than the one currently installed.

Given that the TI83+ is a paged memory calculator, the protocol follows this scheme (see the TI83+ SDK guide for hardware informations). You have to send this page according to the protocol.

The size of the data part depends on the transfer type:
- os: 256 bytes (100h)
- app: 128 bytes (80h)

Example (PC sending an OS to TI):

PC: | `23 06 0A 00 00 01 23 00 00 80 00 00 00 00 7D 02` | send the first page(header informations for OS)
TI: | `73 56 00 00` | Acknowledgement of request
| `73 09 0A 00` | Clear to send variable
PC: | `23 56 00 00` | Acknowledgement of variable header
| `23 15 00 01 <... 256/128 bytes of data ...> CHK` | Data block: 128 or 256 bytes
TI: | `73 56 00 00` | Acknowledgement of CTS
. . . | . . . | . . .
PC: | `23 06 0A 00 00 01 23 00 00 00 00 40 00 00 7D 02` | send the second page
TI: | `73 56 00 00` | Acknowledgement of request
| `73 09 0A 00` | Clear to send variable
PC: | `23 56 00 00` | Acknowledgement of variable header
| `23 15 00 01 <... 256/128 bytes of data ...> CHK` | Data block: 128 or 256 bytes
TI: | `73 56 00 00` | Acknowledgement of CTS
. . . | . . . | . . .
PC: | `23 92 00 00` | End of Transmission
| `73 56 00 00` | Acknowledgement of EOT

Important remark: for FLASH OS and TI73/83+, a pause must be inserted:
- just after the first page (1 second),
- and just before sending the last page (which is the 'digital signature') else the entire operation will not be validated. TI's soft seems to use a very long pause (2..3s). Practically, a pause of 1 second seems to be enough.
This pause is not needed for TI84+ (it will make transfer fail in fact).

Receiving FLASH

The protocol for silently receiving a FLASH file is shown below:

Step | Direction | Packet
--- | --- | ---
1 |  |  |  | REQ with request-style backup header.
2 |  | ACK
3 |  | VAR with flash-style header.
4 |  | ACK
5 |  | CTS
6 |  | ACK
7 |  | DATA (a 1-kilobyte backup block, with four extra bytes at the beginning)
8 |  | ACK
|  | (Repeat steps 3-8 for as many pages as there are)

Note: the TI84+ has a slightly different VAR header: it's the same as flash-style header.

Example (PC receiving an application from TI):

PC: | `23 A2 0B 00 00 00 24 C B L E x p m t CHK` | Request the 'CBLExpmt' app.
TI: | `73 56 00 00` | Acknowledgement of request
. . . | . . . | . . .
| `73 06 0A 00` `LL HH 24 C B L Ol Oh Pl Ph CHK``` | TI reply a shorted name (CBL), block size, page offset and page number
PC: | `23 56 00 00` | Acknowledgement of variable header
| `23 09 00 00` | Acknowledgement of request
TI: | `73 56 00 00` | Acknowledgement of CTS
| `73 15 LL HH` `<... HHLL bytes of data ...>``CHK` | Data block: HHLL bytes
PC: | `23 56 00 00` | Acknowledgement of variable header
. . . | . . . | . . .
| `73 06 0A 00` `LL HH 24 C B L Ol Oh Pl Ph CHK``` | TI reply a shorted name (CBL), block size, page offset and page number
PC: | `23 56 00 00` | Acknowledgement of variable header
| `23 09 00 00` | Acknowledgement of request
TI: | `73 56 00 00` | Acknowledgement of CTS
| `73 15 LL HH` `<... HHLL bytes of data ...>``CHK` | Data block: HHLL bytes
PC: | `23 56 00 00` | Acknowledgement of variable header
. . . | . . . | . . .
| `73 06 0A 00` `LL HH 24 C B L Ol Oh Pl Ph CHK``` | TI reply a shorted name (CBL), block size, page offset and page number
PC: | `23 56 00 00` | Acknowledgement of variable header
| `23 09 00 00` | Acknowledgement of request
TI: | `73 56 00 00` | Acknowledgement of CTS
| `73 15 LL HH` `<... HHLL bytes of data ...>``CHK` | Data block: HHLL bytes
PC: | `23 56 00 00` | Acknowledgement of variable header
PC: | `23 56 00 00` | Acknowledgement

Receiving Certificate

The protocol for silently receiving a certificate is very similar to requesting a FLASH app (ID = 0x27 and name is "") but the VAR answer (step 3) has no data part.

Step | Direction | Packet
--- | --- | ---
1 |  |  |  | REQ with request-style idlist header.
2 |  | ACK
3 |  | VAR with no header
4 |  | ACK
5 |  | CTS
6 |  | ACK
7 |  | XDP (a 256 bytes block) or EOT
8 |  | ACK
|  | (Repeat steps 5-8 for as many pages as there are)

Example (PC receiving a certificate from TI):

PC: | `23 A2 0B 00 00 00 27 00 00 00 00 00 00 00 00 27 00` | Request certificate.
TI: | `73 56 00 00` | Acknowledgement of request
| `73 06 00 00` | TI reply with void VAR
PC: | `23 56 00 00` | Acknowledgement of variable header
| `23 09 00 00` | Acknowledgement of request
TI: | `73 56 00 00` | Acknowledgement of CTS
| `73 15 01 00` `<... 0100h bytes of data ...>``CHK` | Data block: 256 bytes
PC: | `23 56 00 00` | Acknowledgement of variable header
... |  |
... |  |
PC: | `23 09 00 00` | Acknowledgement of request
TI: | `73 56 00 00` | Acknowledgement of CTS
TI: | `73 92 00 00` | End Of Transmission
PC: | `23 56 00 00` | Acknowledgement of EOT

Sending a Certificate

The protocol for silently sending a certificate is very similar to sending a FLASH app (ID = 0x25 and name is "") but the VAR answer (step 3) has no data part.

Step | Direction | Packet
--- | --- | ---
1 |  |  |  | VAR with request-style flash header (offset = 4000h, page = 00h).
2 |  | ACK
3 |  | CTS
4 |  | ACK
5 |  | XDP
6 |  | ACK or nothing if EOT
7 |  | CTS
8 |  | ACK
9 |  | EOT
1 |  | (Repeat steps 5-8 for as many pages as there are and finish with step 9)

Example (PC sending a certificate to TI):

PC: | `23 06 0A 00 E8 00 25 00 00 04 00 40 00 00 51 01` | Request certificate.
TI: | `73 56 00 00` | Acknowledgement of request
| `73 09 0A 00` | Clear To Send
PC: | `23 56 00 00` | Acknowledgement of CTS
PC: | `23 15 00 E8``<... 0100h bytes of data ...>``CHK` | Data block : 232 bytes
TI: | `73 56 00 00` | Acknowledgement of request
| `73 09 E8 00` | TI reply with void VAR
PC: | `23 56 00 00` | Acknowledgement of variable header
... | ... | ...
PC: | `23 15 00 E8``<... 0100h bytes of data ...>``CHK` | Data block : 232 bytes
TI: | `73 56 00 00` | Acknowledgement of data
TI: | `73 09 E8 00` | Clear To Send
PC: | `23 56 00 00` | Acknowledgement of CTS
... | ... | ...
PC: | `23 92 00 00` | End Of Transmission

Silent transfers | Table of Contents | Clock

Site maintained by Romain Liévin (roms@lpg.ticalc.org) and Tim Singer (tsinger@gladstone.uoregon.edu)