├── Makefile ├── README.md ├── schematics ├── ti_graph_link_serial_black │ ├── ti_graph_link_serial_black.kicad_pro │ ├── ti_graph_link_serial_black.kicad_sch │ └── ti_graph_link_serial_black_schematic_rev1.pdf ├── ti_silver_link_a │ ├── ti_silver_link_a-cache.lib │ ├── ti_silver_link_a.kicad_prl │ ├── ti_silver_link_a.kicad_pro │ ├── ti_silver_link_a.kicad_sch │ └── ti_silver_link_a_rev1.pdf ├── ti_silver_link_b │ ├── ti_silver_link_b-cache.lib │ ├── ti_silver_link_b.kicad_prl │ ├── ti_silver_link_b.kicad_pro │ ├── ti_silver_link_b.kicad_sch │ ├── ti_silver_link_b_rev1.pdf │ ├── ti_silver_link_b_rev2.pdf │ └── ti_silver_link_b_rev3.pdf └── ti_silver_link_breadboard │ ├── ti_silver_link_okrayo_breadboard-cache.lib │ ├── ti_silver_link_okrayo_breadboard.kicad_pro │ ├── ti_silver_link_okrayo_breadboard.kicad_sch │ ├── ti_silver_link_okrayo_breadboard_rev1.pdf │ ├── ti_silver_link_okrayo_breadboard_rev2.pdf │ └── ti_silver_link_okrayo_breadboard_rev3.pdf ├── ti_graph_link_silver.asm ├── ti_graph_link_silver.sha1 └── tools ├── csv2bin.py └── generate_eeprom.py /Makefile: -------------------------------------------------------------------------------- 1 | AS = sdas8051 2 | CC = sdcc 3 | MAKEBIN = makebin 4 | GENERATE_EEPROM = ./tools/generate_eeprom.py 5 | 6 | LDFLAGS = -mmcs51 --code-size 0x1400 7 | ASFLAGS = -lops 8 | 9 | TARGET = ti_graph_link_silver 10 | 11 | all: $(TARGET).bin $(TARGET).eep 12 | @sha1sum -c $(TARGET).sha1 || echo "Build succeeded, but does not match." 13 | 14 | ASM_FILES = ti_graph_link_silver.asm 15 | REL_FILES = $(ASM_FILES:.asm=.rel) 16 | 17 | %.rel: %.asm 18 | $(AS) $(ASFLAGS) $< 19 | 20 | %.bin: %.hex 21 | $(MAKEBIN) -p $< $@ 22 | 23 | %.eep: %.bin 24 | $(GENERATE_EEPROM) $< $@ 25 | 26 | $(TARGET).hex: $(REL_FILES) 27 | $(CC) $(LDFLAGS) $^ -o $@ 28 | 29 | clean: 30 | $(RM) $(REL_FILES) $(TARGET).bin $(TARGET).hex 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | TI-Graph Link adapters 2 | ---------------------- 3 | This repository contains information about three types of TI-Graph Link adapters: 4 | * [TI-Graph Link serial (grey)](#ti-graph-link-serial-grey) 5 | * [TI-Graph Link serial (black)](#ti-graph-link-serial-black) 6 | * [TI USB Graph Link (silver)](#ti-usb-graph-link-silver) 7 | 8 | TI-Graph Link serial (grey) 9 | --------------------------- 10 | The grey TI-Graph Link cable uses a DB-25 serial connector and works with Windows and Macintosh computers. [Merthsoft's Link Cables page](http://merthsoft.com/linkguide/cable.html#greytigl) contains some basic information about this cable. 11 | ![TI-Graph Link serial grey](https://wiki.tiplanet.org/images/a/a4/TI-Graph_Link_cable_(GreyLink).jpg) 12 | 13 | TI-Graph Link serial (black) 14 | ---------------------------- 15 | 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. 16 | ![TI-Graph Link serial black](https://user-images.githubusercontent.com/129774/258663837-30bb2de5-b0d8-45f1-a7e9-756d80a0ba40.jpeg) 17 | 18 | ![TI-Graph Link serial black annotated PCB](https://user-images.githubusercontent.com/129774/258664112-de2d5867-72d4-42e4-83a5-6124af114b7d.jpg) 19 | 20 | ## Black Link: Schematic 21 | Full schematic is included in the repository as [TI-Graph Link serial (black) PDF](https://raw.githubusercontent.com/queueRAM/ti_graph_link/main/schematics/ti_graph_link_serial_black/ti_graph_link_serial_black_schematic_rev1.pdf) or KiCad. 22 | ![TI-Graph Link serial (black) Schematic](https://user-images.githubusercontent.com/129774/258664047-50a37eb7-7211-4192-ad2b-768f189efd29.png) 23 | 24 | * `CNTR`: connector for serial port control lines 25 | * `CR3`/`CR4`: `M1M` diodes to supply power from RTS/DTR control lines 26 | * `C1`/`C2`: bypass caps 27 | * `U1`: [LM339AM](https://www.ti.com/lit/ds/symlink/lm339.pdf) single supply quad comparator 28 | * `CR6`/`CR7`/`CR8`: diodes for inverting input and pullups 29 | * `R6`/`R10`: pullups for inverting input and link port 30 | * `R1`/`R2`/`R3`/`R4`/`R5`/`R7`/`R8`/`R9`: graph link circuitry around LM339 31 | * `JACK`: 2.5mm 3-conductor graph link jack 32 | 33 | TI USB Graph Link (Silver) 34 | -------------------------- 35 | 36 | There are two hardware models of the Silver Graph Link USB cable: "A" and "B" as denoted by the last character of its production code. Most graph link cables contain a production code on the back label in the following format: `FMMYYH`: 37 | * `F` - Factory: `I` (Taiwan), `S` (China), `P` (China) 38 | * `MM` - Month of manufacture 39 | * `YY` - Year of manufacture 40 | * `H` - Hardware: either "A" or "B" (see description below) 41 | 42 | The "A" version uses a Cypress CY7C64013 chipset and was manufactured from sometime in the early 2000s through March 2003. Starting around April 2003 through 2010, the "B" hardware version using the TI TUSB3410 was manufactured. 43 | 44 | ## Silver Link "A": Cypress CY7C64013 45 | 46 | Some info about the "A" TI Silver Link is documented here: http://merthsoft.com/linkguide/usbdevices/SilverLink%20USB.txt 47 | ![Silver Link "A" CY7C64013](https://user-images.githubusercontent.com/129774/110289584-7d60fa80-7f9e-11eb-8a68-530d083bfea7.png) 48 | 49 | ### Silver Link "A": Schematic 50 | 51 | Full schematic is included in the repository as ["A" Rev 1 PDF](https://raw.githubusercontent.com/queueRAM/ti_graph_link/main/schematics/ti_silver_link_a/ti_silver_link_a_rev1.pdf) or KiCad. 52 | ![Silver Link "A" Schematic](https://user-images.githubusercontent.com/129774/110290338-89998780-7f9f-11eb-9bf9-3d90b9c0d758.png) 53 | 54 | * `D1`: `D3G` Rohm Schottky barrier diode [RB471E (PDF)](http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/diode/schottky_barrier/rb471et148-e.pdf) 55 | * `L4`, `L4`: `2R7` 2.7µH inductor 56 | * `U1`: `DQF` Voltage Regulator, 3.3V [S-812XXSG (PDF)](http://www.sih.com.hk/sih_eng/products/ic/pdf/s812-e.pdf) (81233SGUP) 57 | * `U2`: `H8` Rohm Bias resistor transistor [IMH8A (PDF)](http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/transistor/digital/umh8ntr-e.pdf) 58 | * `U3`: `CY7C64013` Cypress USB [CY7C64013,113 (PDF)](https://media.digikey.com/pdf/Data%20Sheets/Cypress%20PDFs/CY7C64013,113.pdf) 59 | * `X1`: `6.0F2D` 6MHz Crystal 60 | 61 | ### Cypress CY7C64013 62 | 63 | Cypress M8 Series (M8 Core w/ 8K EPROM) 64 | 65 | The CY7C64013 is a Full-Speed USB microcontroller made by Cypress. It uses a 6MHz external clock source. 66 | The CPU uses a proprietary 8-bit RISC M8 architecture and is clocked at 12MHz. 67 | 68 | * [Cypress Website on CY7C64013](https://web.archive.org/web/20010405082135/http://www.cypress.com/cypress/prodgate/usb/cy7c64x13.htm) 69 | * [Cypress Website about USB Programming Tools](https://web.archive.org/web/20010617083043/http://www.cypress.com/design/progprods/usb/usbprog.html) 70 | 71 | ### GPIO connectivity 72 | Graph Link | GPIO | SOIC Pin 73 | -------------|-------|--------- 74 | Tip (red) | P0[0] | 17 75 | Ring (white) | P0[1] | 13 76 | 77 | ## Silver Link "B": TI TUSB3410 78 | 79 | ![Silver Link "B" TUSB3410](https://user-images.githubusercontent.com/129774/110289260-09265700-7f9e-11eb-9754-fe21131d1783.png) 80 | 81 | ### Silver Link "B": Schematic 82 | Full schematic is included in the repository as ["B" Rev 3 PDF](https://raw.githubusercontent.com/queueRAM/ti_graph_link/main/schematics/ti_silver_link_b/ti_silver_link_b_rev3.pdf) or KiCad. 83 | ![TI Silver Graph Link "B" Schematic rev3](https://github.com/queueRAM/ti_graph_link/assets/129774/13d7905a-3d3d-4341-b4ff-d7d78a50d133) 84 | 85 | * `D1`: `D3G` Rohm dual Schottky barrier diode [RB471E (PDF)](http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/diode/schottky_barrier/rb471et148-e.pdf) 86 | * `D2`: `3F` Chenmko Schottky barrier diode [CH461FGP (PDF)](http://www.chenmko.com.tw/assets/uploaded_docs/1310112518k0vqy.pdf) 87 | * `L1`, `L2`: `2R7` 2.7µH inductor 88 | * `U1`: `24LC64` 64kbit EEPROM: Microchip [24LC64 (PDF)](https://ww1.microchip.com/downloads/en/DeviceDoc/21189T.pdf) 89 | * `U2`: `AQI` TI LOD Regulator, 3.3V [TPS715 (PDF)](https://www.ti.com/lit/ds/symlink/tps715.pdf) (TPS71533DCKR) 90 | * `U3`: `TUSB3410` USB TI [TUSB3410 (PDF)](https://www.ti.com/lit/ds/symlink/tusb3410.pdf) 91 | * `U4`: `H8` Rohm Bias resistor transistor [IMH8A (PDF)](http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/transistor/digital/umh8ntr-e.pdf) 92 | * `Y1`: `12.0F4K` 12MHz Crystal 93 | 94 | ### GPIO connectivity 95 | Graph Link | GPIO | VQFN Pin 96 | -------------|------|--------- 97 | Tip (red) | P3.3 | 30 98 | Ring (white) | P3.4 | 29 99 | 100 | ### EEPROM data 101 | 102 | The EEPROM data contains a header which is first read by the bootloader in the TUSB3410 ROM. If the header matches the expected format, the size as is described in the header is read out from the EEPROM into Code RAM. The bootloader then jumps to this code. 103 | 104 | #### Autoexec Binary Firmware: 105 | OFFSET | TYPE | SIZE | VALUE | DESCRIPTION 106 | -------|----------------------|--------|-------|-------------------------- 107 | 0x0000 | Signature0 | 1 | 0x10 | FUNCTION_PID_L 108 | 0x0001 | Signature1 | 1 | 0x34 | FUNCTION_PID_H 109 | 0x0002 | Data Type | 1 | 0x07 | Autoexec binary firmware 110 | 0x0003 | Data Size(low byte) | 1 | 0x00 | 0x1400 bytes of application code 111 | 0x0004 | Data Size(high byte) | 1 | 0x14 | 112 | 0x0005 | Check Sum | 1 | 0x5a | Checksum of the following firmware 113 | 0x0006 | Program | 0x1400 | | Binary application code 114 | 0x1406 | Data Type | 1 | 0x00 | End of header 115 | 116 | ### Silver Link "B": Firmware 117 | TUSB3410 contains an 8052 microprocessor. The application code contained within the EEPROM 118 | is responsible for receiving commands over USB and communicating with the calculator over its 119 | PORT3 GPIO. 120 | 121 | ### Building Firmware 122 | The disassembled firmware can be built using [sdcc](http://sdcc.sourceforge.net) and the included makefile build system. The resulting .eep file should be bit-compatible with the EEPROM contents. Build dependencies are: 123 | * [sdcc](http://sdcc.sourceforge.net): versions 3.8.0 through 4.2.0 have been tested 124 | * [GNU make](https://www.gnu.org/software/make/) 125 | * Python 3: for the script which generates the Autoexec header and checksum 126 | 127 | ```sh 128 | $ make 129 | sdas8051 -lops ti_graph_link_silver.asm 130 | sdcc -mmcs51 --code-size 0x1400 ti_graph_link_silver.rel -o ti_graph_link_silver.hex 131 | makebin -p ti_graph_link_silver.hex ti_graph_link_silver.bin 132 | ./tools/generate_eeprom.py ti_graph_link_silver.bin ti_graph_link_silver.eep 133 | ti_graph_link_silver.bin: OK 134 | ``` 135 | 136 | TI USB Graph Link Breadboard Edition 137 | ------------------------------------ 138 | 139 | User ["okrayo" on the Cemetech forums](https://www.cemetech.net/forum/viewtopic.php?p=302975#302975) recreated the TI USB Graph Link "B" on a breadboard using a TUSB3410 and through-hole alternatives for the power supply, transistors, diodes, and passive components. Since this uses the same USB chipset and firmware as the official Silver USB Graph-Link, this works with existing SW and TI graphing calculators with 2.5mm data port. 140 | 141 | ![TI USB Graph Link Breadboard Edition](https://i.postimg.cc/C5YYbrcC/Breadboard2.jpg) 142 | 143 | ## Component Replacements 144 | 145 | The table below enumerates the part replacements that "okrayo" used in the design relative to the original "B" schematic. In addition to these parts, the following modifications were made: 146 | - Added 0.1µF decoupling capacitor between 1V8 and GND 147 | - Removed the `L2`/`C9` `L1`/`C10` filter on tip and ring connections 148 | - Added LED + 330Ω resistor on 3V3 149 | - Left 24LC256 `WP` pin disconnected to prevent inadvertent writes 150 | 151 | RefDes | Description | "B" Part | Breadboard Part 152 | --------|----------------------|-------------|------------------ 153 | C1/C5 | Xtal caps | 33pF SMT | 22pF through-hole 154 | D2 | Suspend Diode | CH461FGP | [1N4148](https://en.wikipedia.org/wiki/1N4148_signal_diode) 155 | R8/R9 | USB D+/D- Res. | 22Ω | 27Ω 156 | R20/R21 | 1V8 voltage divider | 90.5k/100kΩ | 15k/18kΩ 157 | R24 | VREGEN Resistor | 32.4kΩ | 33kΩ 158 | U2 | 3.3V volt. regulator | TPS71533 | [MCP17003302E](https://www.microchip.com/en-us/product/MCP1700) 159 | U4 | Transistors | IMH8A | 2x [PN2222A](https://www.onsemi.com/pdf/datasheet/p2n2222a-d.pdf) 160 | U1 | EEPROM | 24LC64 | [24LC256](https://www.microchip.com/en-us/product/24LC256) 161 | D1 | Schottky Diodes | RB471E | 2x [MBR150](https://www.onsemi.com/pdf/datasheet/mbr150-d.pdf) 162 | 163 | ## TI USB Graph Link Breadboard Edition: Schematic 164 | 165 | Full schematic is included in the repository as [TI Graph-Link "okrayo" Breadboard PDF](https://raw.githubusercontent.com/queueRAM/ti_graph_link/main/schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard_rev3.pdf) or KiCad. 166 | ![TI Graph Link "okrayo" Breadboard Schematic rev3](https://github.com/queueRAM/ti_graph_link/assets/129774/240750c9-9085-4b24-900c-b12c19afd32b) 167 | -------------------------------------------------------------------------------- /schematics/ti_graph_link_serial_black/ti_graph_link_serial_black.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "board_outline_line_width": 0.1, 7 | "copper_line_width": 0.2, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "other_line_width": 0.15, 12 | "silk_line_width": 0.15, 13 | "silk_text_size_h": 1.0, 14 | "silk_text_size_v": 1.0, 15 | "silk_text_thickness": 0.15 16 | }, 17 | "diff_pair_dimensions": [], 18 | "drc_exclusions": [], 19 | "rules": { 20 | "min_copper_edge_clearance": 0.0, 21 | "solder_mask_clearance": 0.0, 22 | "solder_mask_min_width": 0.0 23 | }, 24 | "track_widths": [], 25 | "via_dimensions": [] 26 | }, 27 | "layer_presets": [], 28 | "viewports": [] 29 | }, 30 | "boards": [], 31 | "cvpcb": { 32 | "equivalence_files": [] 33 | }, 34 | "erc": { 35 | "erc_exclusions": [], 36 | "meta": { 37 | "version": 0 38 | }, 39 | "pin_map": [ 40 | [ 41 | 0, 42 | 0, 43 | 0, 44 | 0, 45 | 0, 46 | 0, 47 | 1, 48 | 0, 49 | 0, 50 | 0, 51 | 0, 52 | 2 53 | ], 54 | [ 55 | 0, 56 | 2, 57 | 0, 58 | 1, 59 | 0, 60 | 0, 61 | 1, 62 | 0, 63 | 2, 64 | 2, 65 | 2, 66 | 2 67 | ], 68 | [ 69 | 0, 70 | 0, 71 | 0, 72 | 0, 73 | 0, 74 | 0, 75 | 1, 76 | 0, 77 | 1, 78 | 0, 79 | 1, 80 | 2 81 | ], 82 | [ 83 | 0, 84 | 1, 85 | 0, 86 | 0, 87 | 0, 88 | 0, 89 | 1, 90 | 1, 91 | 2, 92 | 1, 93 | 1, 94 | 2 95 | ], 96 | [ 97 | 0, 98 | 0, 99 | 0, 100 | 0, 101 | 0, 102 | 0, 103 | 1, 104 | 0, 105 | 0, 106 | 0, 107 | 0, 108 | 2 109 | ], 110 | [ 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 0, 116 | 0, 117 | 0, 118 | 0, 119 | 0, 120 | 0, 121 | 0, 122 | 2 123 | ], 124 | [ 125 | 1, 126 | 1, 127 | 1, 128 | 1, 129 | 1, 130 | 0, 131 | 1, 132 | 1, 133 | 1, 134 | 1, 135 | 1, 136 | 2 137 | ], 138 | [ 139 | 0, 140 | 0, 141 | 0, 142 | 1, 143 | 0, 144 | 0, 145 | 1, 146 | 0, 147 | 0, 148 | 0, 149 | 0, 150 | 2 151 | ], 152 | [ 153 | 0, 154 | 2, 155 | 1, 156 | 2, 157 | 0, 158 | 0, 159 | 1, 160 | 0, 161 | 2, 162 | 2, 163 | 2, 164 | 2 165 | ], 166 | [ 167 | 0, 168 | 2, 169 | 0, 170 | 1, 171 | 0, 172 | 0, 173 | 1, 174 | 0, 175 | 2, 176 | 0, 177 | 0, 178 | 2 179 | ], 180 | [ 181 | 0, 182 | 2, 183 | 1, 184 | 1, 185 | 0, 186 | 0, 187 | 1, 188 | 0, 189 | 2, 190 | 0, 191 | 0, 192 | 2 193 | ], 194 | [ 195 | 2, 196 | 2, 197 | 2, 198 | 2, 199 | 2, 200 | 2, 201 | 2, 202 | 2, 203 | 2, 204 | 2, 205 | 2, 206 | 2 207 | ] 208 | ], 209 | "rule_severities": { 210 | "bus_definition_conflict": "error", 211 | "bus_entry_needed": "error", 212 | "bus_to_bus_conflict": "error", 213 | "bus_to_net_conflict": "error", 214 | "conflicting_netclasses": "error", 215 | "different_unit_footprint": "error", 216 | "different_unit_net": "error", 217 | "duplicate_reference": "error", 218 | "duplicate_sheet_names": "error", 219 | "endpoint_off_grid": "warning", 220 | "extra_units": "error", 221 | "global_label_dangling": "warning", 222 | "hier_label_mismatch": "error", 223 | "label_dangling": "error", 224 | "lib_symbol_issues": "warning", 225 | "missing_bidi_pin": "warning", 226 | "missing_input_pin": "warning", 227 | "missing_power_pin": "error", 228 | "missing_unit": "warning", 229 | "multiple_net_names": "warning", 230 | "net_not_bus_member": "warning", 231 | "no_connect_connected": "warning", 232 | "no_connect_dangling": "warning", 233 | "pin_not_connected": "error", 234 | "pin_not_driven": "error", 235 | "pin_to_pin": "warning", 236 | "power_pin_not_driven": "error", 237 | "similar_labels": "warning", 238 | "simulation_model_issue": "ignore", 239 | "unannotated": "error", 240 | "unit_value_mismatch": "error", 241 | "unresolved_variable": "error", 242 | "wire_dangling": "error" 243 | } 244 | }, 245 | "libraries": { 246 | "pinned_footprint_libs": [], 247 | "pinned_symbol_libs": [] 248 | }, 249 | "meta": { 250 | "filename": "ti_graph_link_serial_black.kicad_pro", 251 | "version": 1 252 | }, 253 | "net_settings": { 254 | "classes": [ 255 | { 256 | "bus_width": 12, 257 | "clearance": 0.2, 258 | "diff_pair_gap": 0.25, 259 | "diff_pair_via_gap": 0.25, 260 | "diff_pair_width": 0.2, 261 | "line_style": 0, 262 | "microvia_diameter": 0.3, 263 | "microvia_drill": 0.1, 264 | "name": "Default", 265 | "pcb_color": "rgba(0, 0, 0, 0.000)", 266 | "schematic_color": "rgba(0, 0, 0, 0.000)", 267 | "track_width": 0.25, 268 | "via_diameter": 0.8, 269 | "via_drill": 0.4, 270 | "wire_width": 6 271 | } 272 | ], 273 | "meta": { 274 | "version": 3 275 | }, 276 | "net_colors": null, 277 | "netclass_assignments": null, 278 | "netclass_patterns": [] 279 | }, 280 | "pcbnew": { 281 | "last_paths": { 282 | "gencad": "", 283 | "idf": "", 284 | "netlist": "", 285 | "specctra_dsn": "", 286 | "step": "", 287 | "vrml": "" 288 | }, 289 | "page_layout_descr_file": "" 290 | }, 291 | "schematic": { 292 | "annotate_start_num": 0, 293 | "drawing": { 294 | "dashed_lines_dash_length_ratio": 12.0, 295 | "dashed_lines_gap_length_ratio": 3.0, 296 | "default_line_thickness": 6.0, 297 | "default_text_size": 50.0, 298 | "field_names": [], 299 | "intersheets_ref_own_page": false, 300 | "intersheets_ref_prefix": "", 301 | "intersheets_ref_short": false, 302 | "intersheets_ref_show": false, 303 | "intersheets_ref_suffix": "", 304 | "junction_size_choice": 3, 305 | "label_size_ratio": 0.375, 306 | "pin_symbol_size": 25.0, 307 | "text_offset_ratio": 0.15 308 | }, 309 | "legacy_lib_dir": "", 310 | "legacy_lib_list": [], 311 | "meta": { 312 | "version": 1 313 | }, 314 | "net_format_name": "", 315 | "page_layout_descr_file": "", 316 | "plot_directory": "../photos/", 317 | "spice_current_sheet_as_root": false, 318 | "spice_external_command": "spice \"%I\"", 319 | "spice_model_current_sheet_as_root": true, 320 | "spice_save_all_currents": false, 321 | "spice_save_all_voltages": false, 322 | "subpart_first_id": 65, 323 | "subpart_id_separator": 0 324 | }, 325 | "sheets": [ 326 | [ 327 | "cd1a6944-caab-4414-885d-2018d536b092", 328 | "" 329 | ] 330 | ], 331 | "text_variables": {} 332 | } 333 | -------------------------------------------------------------------------------- /schematics/ti_graph_link_serial_black/ti_graph_link_serial_black_schematic_rev1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_graph_link_serial_black/ti_graph_link_serial_black_schematic_rev1.pdf -------------------------------------------------------------------------------- /schematics/ti_silver_link_a/ti_silver_link_a-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Connector_Conn_01x03_Female 5 | # 6 | DEF Connector_Conn_01x03_Female J 0 40 Y N 1 F N 7 | F0 "J" 0 200 50 H V C CNN 8 | F1 "Connector_Conn_01x03_Female" 0 -200 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | $FPLIST 12 | Connector*:*_1x??_* 13 | $ENDFPLIST 14 | DRAW 15 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 16 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 17 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 18 | P 2 1 1 6 -50 -100 -20 -100 N 19 | P 2 1 1 6 -50 0 -20 0 N 20 | P 2 1 1 6 -50 100 -20 100 N 21 | X Pin_1 1 -200 100 150 R 50 50 1 1 P 22 | X Pin_2 2 -200 0 150 R 50 50 1 1 P 23 | X Pin_3 3 -200 -100 150 R 50 50 1 1 P 24 | ENDDRAW 25 | ENDDEF 26 | # 27 | # Connector_Conn_01x05_Female 28 | # 29 | DEF Connector_Conn_01x05_Female J 0 40 Y N 1 F N 30 | F0 "J" 0 300 50 H V C CNN 31 | F1 "Connector_Conn_01x05_Female" 0 -300 50 H V C CNN 32 | F2 "" 0 0 50 H I C CNN 33 | F3 "" 0 0 50 H I C CNN 34 | $FPLIST 35 | Connector*:*_1x??_* 36 | $ENDFPLIST 37 | DRAW 38 | A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 39 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 40 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 41 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 42 | A 0 200 20 901 -901 1 1 6 N 0 220 0 180 43 | P 2 1 1 6 -50 -200 -20 -200 N 44 | P 2 1 1 6 -50 -100 -20 -100 N 45 | P 2 1 1 6 -50 0 -20 0 N 46 | P 2 1 1 6 -50 100 -20 100 N 47 | P 2 1 1 6 -50 200 -20 200 N 48 | X Pin_1 1 -200 200 150 R 50 50 1 1 P 49 | X Pin_2 2 -200 100 150 R 50 50 1 1 P 50 | X Pin_3 3 -200 0 150 R 50 50 1 1 P 51 | X Pin_4 4 -200 -100 150 R 50 50 1 1 P 52 | X Pin_5 5 -200 -200 150 R 50 50 1 1 P 53 | ENDDRAW 54 | ENDDEF 55 | # 56 | # Device_C 57 | # 58 | DEF Device_C C 0 10 N Y 1 F N 59 | F0 "C" 25 100 50 H V L CNN 60 | F1 "Device_C" 25 -100 50 H V L CNN 61 | F2 "" 38 -150 50 H I C CNN 62 | F3 "" 0 0 50 H I C CNN 63 | $FPLIST 64 | C_* 65 | $ENDFPLIST 66 | DRAW 67 | P 2 0 1 20 -80 -30 80 -30 N 68 | P 2 0 1 20 -80 30 80 30 N 69 | X ~ 1 0 150 110 D 50 50 1 1 P 70 | X ~ 2 0 -150 110 U 50 50 1 1 P 71 | ENDDRAW 72 | ENDDEF 73 | # 74 | # Device_Crystal 75 | # 76 | DEF Device_Crystal Y 0 40 N N 1 F N 77 | F0 "Y" 0 150 50 H V C CNN 78 | F1 "Device_Crystal" 0 -150 50 H V C CNN 79 | F2 "" 0 0 50 H I C CNN 80 | F3 "" 0 0 50 H I C CNN 81 | $FPLIST 82 | Crystal* 83 | $ENDFPLIST 84 | DRAW 85 | S -45 100 45 -100 0 1 12 N 86 | P 2 0 1 0 -100 0 -75 0 N 87 | P 2 0 1 20 -75 -50 -75 50 N 88 | P 2 0 1 20 75 -50 75 50 N 89 | P 2 0 1 0 100 0 75 0 N 90 | X 1 1 -150 0 50 R 50 50 1 1 P 91 | X 2 2 150 0 50 L 50 50 1 1 P 92 | ENDDRAW 93 | ENDDEF 94 | # 95 | # Device_IMH8A 96 | # 97 | DEF Device_IMH8A U 0 20 Y N 2 F N 98 | F0 "U" 150 50 50 H V L CNN 99 | F1 "Device_IMH8A" 150 -50 50 H V L CNN 100 | F2 "" 0 0 50 H I C CNN 101 | F3 "" 0 0 50 H I C CNN 102 | $FPLIST 103 | SC?70* 104 | SC?88* 105 | SOT*363* 106 | $ENDFPLIST 107 | DRAW 108 | C 0 0 111 1 1 10 N 109 | C 0 0 111 2 1 10 N 110 | P 2 0 1 0 -30 0 -170 0 N 111 | P 2 0 1 20 -25 60 -25 -60 N 112 | P 9 0 1 0 -250 0 -240 -20 -230 20 -220 -20 -210 20 -200 -20 -190 20 -180 -20 -170 0 N 113 | P 2 1 1 0 -25 25 50 100 N 114 | P 3 1 1 0 -25 -25 50 -100 50 -100 N 115 | P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F 116 | P 2 2 1 0 -25 25 50 100 N 117 | P 3 2 1 0 -25 -25 50 -100 50 -100 N 118 | P 5 2 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F 119 | X C1 3 50 200 100 D 50 50 1 1 P 120 | X B1 4 -350 0 100 R 50 50 1 1 I 121 | X E1 5 50 -200 100 U 50 50 1 1 P 122 | X C1 1 50 200 100 D 50 50 2 1 P 123 | X B1 2 -350 0 100 R 50 50 2 1 I 124 | X E1 6 50 -200 100 U 50 50 2 1 P 125 | ENDDRAW 126 | ENDDEF 127 | # 128 | # Device_L 129 | # 130 | DEF Device_L L 0 40 N N 1 F N 131 | F0 "L" -50 0 50 V V C CNN 132 | F1 "Device_L" 75 0 50 V V C CNN 133 | F2 "" 0 0 50 H I C CNN 134 | F3 "" 0 0 50 H I C CNN 135 | $FPLIST 136 | Choke_* 137 | *Coil* 138 | Inductor_* 139 | L_* 140 | $ENDFPLIST 141 | DRAW 142 | A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50 143 | A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0 144 | A 0 25 25 -899 899 0 1 0 N 0 0 0 50 145 | A 0 75 25 -899 899 0 1 0 N 0 50 0 100 146 | X 1 1 0 150 50 D 50 50 1 1 P 147 | X 2 2 0 -150 50 U 50 50 1 1 P 148 | ENDDRAW 149 | ENDDEF 150 | # 151 | # Device_R_US 152 | # 153 | DEF Device_R_US R 0 0 N Y 1 F N 154 | F0 "R" 100 0 50 V V C CNN 155 | F1 "Device_R_US" -100 0 50 V V C CNN 156 | F2 "" 40 -10 50 V I C CNN 157 | F3 "" 0 0 50 H I C CNN 158 | $FPLIST 159 | R_* 160 | $ENDFPLIST 161 | DRAW 162 | P 2 0 1 0 0 -90 0 -100 N 163 | P 2 0 1 0 0 90 0 100 N 164 | P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N 165 | P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N 166 | P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N 167 | X ~ 1 0 150 50 D 50 50 1 1 P 168 | X ~ 2 0 -150 50 U 50 50 1 1 P 169 | ENDDRAW 170 | ENDDEF 171 | # 172 | # Diode_RB417E 173 | # 174 | DEF Diode_RB417E D 0 40 Y Y 2 F N 175 | F0 "D" 0 0 50 H V C CNN 176 | F1 "Diode_RB417E" 0 0 50 H V C CNN 177 | F2 "" 0 0 50 H I C CNN 178 | F3 "" 0 0 50 H I C CNN 179 | DRAW 180 | P 2 0 1 10 -50 -150 -50 -50 N 181 | P 2 0 1 0 -50 -100 50 -100 N 182 | P 4 0 1 10 -50 -100 50 -150 50 -50 -50 -100 N 183 | X ~ 1 -150 -100 100 R 50 50 1 1 P 184 | X ~ 5 150 -100 100 L 50 50 1 1 P 185 | X ~ 2 -150 -100 100 R 50 50 2 1 P 186 | X ~ 3 150 -100 100 L 50 50 2 1 P 187 | ENDDRAW 188 | ENDDEF 189 | # 190 | # Interface_USB_CY7C64013 191 | # 192 | DEF Interface_USB_CY7C64013 U 0 40 Y Y 1 F N 193 | F0 "U" 0 0 50 H V C CNN 194 | F1 "Interface_USB_CY7C64013" 0 -100 50 H V C CNN 195 | F2 "" 0 0 50 H I C CNN 196 | F3 "" 0 0 50 H I C CNN 197 | DRAW 198 | S -550 450 600 -1000 0 1 0 f 199 | X XTALOUT 1 -650 350 100 R 50 50 1 1 O 200 | X P0[7] 10 -650 -900 100 R 50 50 1 1 B 201 | X P0[5] 11 -650 -700 100 R 50 50 1 1 B 202 | X P0[3] 12 -650 -500 100 R 50 50 1 1 B 203 | X P0[1] 13 -650 -300 100 R 50 50 1 1 B 204 | X P0[6] 14 -650 -800 100 R 50 50 1 1 B 205 | X P0[4] 15 -650 -600 100 R 50 50 1 1 B 206 | X P0[2] 16 -650 -400 100 R 50 50 1 1 B 207 | X P0[0] 17 -650 -200 100 R 50 50 1 1 B 208 | X VPP 18 100 550 100 D 50 50 1 1 W 209 | X P2[6] 19 700 -500 100 L 50 50 1 1 B 210 | X XTALIN 2 -650 250 100 R 50 50 1 1 P 211 | X P2[4] 20 700 -300 100 L 50 50 1 1 B 212 | X P2[2] 21 700 -100 100 L 50 50 1 1 B 213 | X GND 22 50 -1100 100 U 50 50 1 1 W 214 | X P3[2] 23 700 -900 100 L 50 50 1 1 B 215 | X P3[0] 24 700 -700 100 L 50 50 1 1 B 216 | X P1[2] 25 700 100 100 L 50 50 1 1 B 217 | X P1[0] 26 700 300 100 L 50 50 1 1 B 218 | X P1[1] 27 700 200 100 L 50 50 1 1 B 219 | X VCC 28 0 550 100 D 50 50 1 1 W 220 | X VREF 3 -100 550 100 D 50 50 1 1 W 221 | X GND 4 -50 -1100 100 U 50 50 1 1 W 222 | X P3[1] 5 700 -800 100 L 50 50 1 1 B 223 | X D+ 6 -650 100 100 R 50 50 1 1 B 224 | X D- 7 -650 0 100 R 50 50 1 1 B 225 | X P2[3] 8 700 -200 100 L 50 50 1 1 B 226 | X P2[5] 9 700 -400 100 L 50 50 1 1 B 227 | ENDDRAW 228 | ENDDEF 229 | # 230 | # Regulator_Linear_S-812XXSG 231 | # 232 | DEF Regulator_Linear_S-812XXSG U 0 40 Y Y 1 F N 233 | F0 "U" -200 350 50 H V C CNN 234 | F1 "Regulator_Linear_S-812XXSG" 0 250 50 H V C CNN 235 | F2 "" -200 350 50 H I C CNN 236 | F3 "" -200 350 50 H I C CNN 237 | DRAW 238 | S -250 -150 250 200 0 1 0 f 239 | X GND 1 0 -250 100 U 50 50 1 1 W 240 | X VIN 2 -350 100 100 R 50 50 1 1 W 241 | X VOUT 3 350 100 100 L 50 50 1 1 w 242 | ENDDRAW 243 | ENDDEF 244 | # 245 | # power_+3V3 246 | # 247 | DEF power_+3V3 #PWR 0 0 Y Y 1 F P 248 | F0 "#PWR" 0 -150 50 H I C CNN 249 | F1 "power_+3V3" 0 140 50 H V C CNN 250 | F2 "" 0 0 50 H I C CNN 251 | F3 "" 0 0 50 H I C CNN 252 | ALIAS +3.3V 253 | DRAW 254 | P 2 0 1 0 -30 50 0 100 N 255 | P 2 0 1 0 0 0 0 100 N 256 | P 2 0 1 0 0 100 30 50 N 257 | X +3V3 1 0 0 0 U 50 50 1 1 W N 258 | ENDDRAW 259 | ENDDEF 260 | # 261 | # power_GND 262 | # 263 | DEF power_GND #PWR 0 0 Y Y 1 F P 264 | F0 "#PWR" 0 -250 50 H I C CNN 265 | F1 "power_GND" 0 -150 50 H V C CNN 266 | F2 "" 0 0 50 H I C CNN 267 | F3 "" 0 0 50 H I C CNN 268 | DRAW 269 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 270 | X GND 1 0 0 0 D 50 50 1 1 W N 271 | ENDDRAW 272 | ENDDEF 273 | # 274 | # power_VCC 275 | # 276 | DEF power_VCC #PWR 0 0 Y Y 1 F P 277 | F0 "#PWR" 0 -150 50 H I C CNN 278 | F1 "power_VCC" 0 150 50 H V C CNN 279 | F2 "" 0 0 50 H I C CNN 280 | F3 "" 0 0 50 H I C CNN 281 | DRAW 282 | P 2 0 1 0 -30 50 0 100 N 283 | P 2 0 1 0 0 0 0 100 N 284 | P 2 0 1 0 0 100 30 50 N 285 | X VCC 1 0 0 0 U 50 50 1 1 W N 286 | ENDDRAW 287 | ENDDEF 288 | # 289 | #End Library 290 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_a/ti_silver_link_a.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 11, 41 | 12, 42 | 13, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36, 64 | 39, 65 | 40 66 | ], 67 | "visible_layers": "fffffff_ffffffff", 68 | "zone_display_mode": 0 69 | }, 70 | "meta": { 71 | "filename": "ti_silver_link_a.kicad_prl", 72 | "version": 3 73 | }, 74 | "project": { 75 | "files": [] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_a/ti_silver_link_a.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "board_outline_line_width": 0.1, 7 | "copper_line_width": 0.2, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "other_line_width": 0.15, 12 | "silk_line_width": 0.15, 13 | "silk_text_size_h": 1.0, 14 | "silk_text_size_v": 1.0, 15 | "silk_text_thickness": 0.15 16 | }, 17 | "diff_pair_dimensions": [], 18 | "drc_exclusions": [], 19 | "rules": { 20 | "solder_mask_clearance": 0.0, 21 | "solder_mask_min_width": 0.0 22 | }, 23 | "track_widths": [], 24 | "via_dimensions": [] 25 | }, 26 | "layer_presets": [], 27 | "viewports": [] 28 | }, 29 | "boards": [], 30 | "cvpcb": { 31 | "equivalence_files": [] 32 | }, 33 | "erc": { 34 | "erc_exclusions": [], 35 | "meta": { 36 | "version": 0 37 | }, 38 | "pin_map": [ 39 | [ 40 | 0, 41 | 0, 42 | 0, 43 | 0, 44 | 0, 45 | 0, 46 | 1, 47 | 0, 48 | 0, 49 | 0, 50 | 0, 51 | 2 52 | ], 53 | [ 54 | 0, 55 | 2, 56 | 0, 57 | 1, 58 | 0, 59 | 0, 60 | 1, 61 | 0, 62 | 2, 63 | 2, 64 | 2, 65 | 2 66 | ], 67 | [ 68 | 0, 69 | 0, 70 | 0, 71 | 0, 72 | 0, 73 | 0, 74 | 1, 75 | 0, 76 | 1, 77 | 0, 78 | 1, 79 | 2 80 | ], 81 | [ 82 | 0, 83 | 1, 84 | 0, 85 | 0, 86 | 0, 87 | 0, 88 | 1, 89 | 1, 90 | 2, 91 | 1, 92 | 1, 93 | 2 94 | ], 95 | [ 96 | 0, 97 | 0, 98 | 0, 99 | 0, 100 | 0, 101 | 0, 102 | 1, 103 | 0, 104 | 0, 105 | 0, 106 | 0, 107 | 2 108 | ], 109 | [ 110 | 0, 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 0, 116 | 0, 117 | 0, 118 | 0, 119 | 0, 120 | 0, 121 | 2 122 | ], 123 | [ 124 | 1, 125 | 1, 126 | 1, 127 | 1, 128 | 1, 129 | 0, 130 | 1, 131 | 1, 132 | 1, 133 | 1, 134 | 1, 135 | 2 136 | ], 137 | [ 138 | 0, 139 | 0, 140 | 0, 141 | 1, 142 | 0, 143 | 0, 144 | 1, 145 | 0, 146 | 0, 147 | 0, 148 | 0, 149 | 2 150 | ], 151 | [ 152 | 0, 153 | 2, 154 | 1, 155 | 2, 156 | 0, 157 | 0, 158 | 1, 159 | 0, 160 | 2, 161 | 2, 162 | 2, 163 | 2 164 | ], 165 | [ 166 | 0, 167 | 2, 168 | 0, 169 | 1, 170 | 0, 171 | 0, 172 | 1, 173 | 0, 174 | 2, 175 | 0, 176 | 0, 177 | 2 178 | ], 179 | [ 180 | 0, 181 | 2, 182 | 1, 183 | 1, 184 | 0, 185 | 0, 186 | 1, 187 | 0, 188 | 2, 189 | 0, 190 | 0, 191 | 2 192 | ], 193 | [ 194 | 2, 195 | 2, 196 | 2, 197 | 2, 198 | 2, 199 | 2, 200 | 2, 201 | 2, 202 | 2, 203 | 2, 204 | 2, 205 | 2 206 | ] 207 | ], 208 | "rule_severities": { 209 | "bus_definition_conflict": "error", 210 | "bus_entry_needed": "error", 211 | "bus_to_bus_conflict": "error", 212 | "bus_to_net_conflict": "error", 213 | "conflicting_netclasses": "error", 214 | "different_unit_footprint": "error", 215 | "different_unit_net": "error", 216 | "duplicate_reference": "error", 217 | "duplicate_sheet_names": "error", 218 | "endpoint_off_grid": "warning", 219 | "extra_units": "error", 220 | "global_label_dangling": "warning", 221 | "hier_label_mismatch": "error", 222 | "label_dangling": "error", 223 | "lib_symbol_issues": "warning", 224 | "missing_bidi_pin": "warning", 225 | "missing_input_pin": "warning", 226 | "missing_power_pin": "error", 227 | "missing_unit": "warning", 228 | "multiple_net_names": "warning", 229 | "net_not_bus_member": "warning", 230 | "no_connect_connected": "warning", 231 | "no_connect_dangling": "warning", 232 | "pin_not_connected": "error", 233 | "pin_not_driven": "error", 234 | "pin_to_pin": "warning", 235 | "power_pin_not_driven": "error", 236 | "similar_labels": "warning", 237 | "simulation_model_issue": "ignore", 238 | "unannotated": "error", 239 | "unit_value_mismatch": "error", 240 | "unresolved_variable": "error", 241 | "wire_dangling": "error" 242 | } 243 | }, 244 | "libraries": { 245 | "pinned_footprint_libs": [], 246 | "pinned_symbol_libs": [] 247 | }, 248 | "meta": { 249 | "filename": "ti_silver_link_a.kicad_pro", 250 | "version": 1 251 | }, 252 | "net_settings": { 253 | "classes": [ 254 | { 255 | "bus_width": 12, 256 | "clearance": 0.2, 257 | "diff_pair_gap": 0.25, 258 | "diff_pair_via_gap": 0.25, 259 | "diff_pair_width": 0.2, 260 | "line_style": 0, 261 | "microvia_diameter": 0.3, 262 | "microvia_drill": 0.1, 263 | "name": "Default", 264 | "pcb_color": "rgba(0, 0, 0, 0.000)", 265 | "schematic_color": "rgba(0, 0, 0, 0.000)", 266 | "track_width": 0.2, 267 | "via_diameter": 0.6, 268 | "via_drill": 0.3, 269 | "wire_width": 6 270 | } 271 | ], 272 | "meta": { 273 | "version": 3 274 | }, 275 | "net_colors": null, 276 | "netclass_assignments": null, 277 | "netclass_patterns": [] 278 | }, 279 | "pcbnew": { 280 | "last_paths": { 281 | "gencad": "", 282 | "idf": "", 283 | "netlist": "", 284 | "specctra_dsn": "", 285 | "step": "", 286 | "vrml": "" 287 | }, 288 | "page_layout_descr_file": "" 289 | }, 290 | "schematic": { 291 | "annotate_start_num": 0, 292 | "drawing": { 293 | "dashed_lines_dash_length_ratio": 12.0, 294 | "dashed_lines_gap_length_ratio": 3.0, 295 | "default_line_thickness": 6.0, 296 | "default_text_size": 50.0, 297 | "field_names": [], 298 | "intersheets_ref_own_page": false, 299 | "intersheets_ref_prefix": "", 300 | "intersheets_ref_short": false, 301 | "intersheets_ref_show": false, 302 | "intersheets_ref_suffix": "", 303 | "junction_size_choice": 3, 304 | "label_size_ratio": 0.25, 305 | "pin_symbol_size": 0.0, 306 | "text_offset_ratio": 0.08 307 | }, 308 | "legacy_lib_dir": "", 309 | "legacy_lib_list": [], 310 | "meta": { 311 | "version": 1 312 | }, 313 | "net_format_name": "", 314 | "page_layout_descr_file": "", 315 | "plot_directory": "../../../../../Desktop/", 316 | "spice_adjust_passive_values": false, 317 | "spice_current_sheet_as_root": false, 318 | "spice_external_command": "spice \"%I\"", 319 | "spice_model_current_sheet_as_root": true, 320 | "spice_save_all_currents": false, 321 | "spice_save_all_voltages": false, 322 | "subpart_first_id": 65, 323 | "subpart_id_separator": 0 324 | }, 325 | "sheets": [ 326 | [ 327 | "5d4ffd05-f1b7-45dd-951f-fb8ac5b136ac", 328 | "" 329 | ] 330 | ], 331 | "text_variables": {} 332 | } 333 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_a/ti_silver_link_a_rev1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_silver_link_a/ti_silver_link_a_rev1.pdf -------------------------------------------------------------------------------- /schematics/ti_silver_link_b/ti_silver_link_b-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Connector_Conn_01x03_Female 5 | # 6 | DEF Connector_Conn_01x03_Female J 0 40 Y N 1 F N 7 | F0 "J" 0 200 50 H V C CNN 8 | F1 "Connector_Conn_01x03_Female" 0 -200 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | $FPLIST 12 | Connector*:*_1x??_* 13 | $ENDFPLIST 14 | DRAW 15 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 16 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 17 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 18 | P 2 1 1 6 -50 -100 -20 -100 N 19 | P 2 1 1 6 -50 0 -20 0 N 20 | P 2 1 1 6 -50 100 -20 100 N 21 | X Pin_1 1 -200 100 150 R 50 50 1 1 P 22 | X Pin_2 2 -200 0 150 R 50 50 1 1 P 23 | X Pin_3 3 -200 -100 150 R 50 50 1 1 P 24 | ENDDRAW 25 | ENDDEF 26 | # 27 | # Connector_Conn_01x05_Female 28 | # 29 | DEF Connector_Conn_01x05_Female J 0 40 Y N 1 F N 30 | F0 "J" 0 300 50 H V C CNN 31 | F1 "Connector_Conn_01x05_Female" 0 -300 50 H V C CNN 32 | F2 "" 0 0 50 H I C CNN 33 | F3 "" 0 0 50 H I C CNN 34 | $FPLIST 35 | Connector*:*_1x??_* 36 | $ENDFPLIST 37 | DRAW 38 | A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 39 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 40 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 41 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 42 | A 0 200 20 901 -901 1 1 6 N 0 220 0 180 43 | P 2 1 1 6 -50 -200 -20 -200 N 44 | P 2 1 1 6 -50 -100 -20 -100 N 45 | P 2 1 1 6 -50 0 -20 0 N 46 | P 2 1 1 6 -50 100 -20 100 N 47 | P 2 1 1 6 -50 200 -20 200 N 48 | X Pin_1 1 -200 200 150 R 50 50 1 1 P 49 | X Pin_2 2 -200 100 150 R 50 50 1 1 P 50 | X Pin_3 3 -200 0 150 R 50 50 1 1 P 51 | X Pin_4 4 -200 -100 150 R 50 50 1 1 P 52 | X Pin_5 5 -200 -200 150 R 50 50 1 1 P 53 | ENDDRAW 54 | ENDDEF 55 | # 56 | # Connector_TestPoint_Small 57 | # 58 | DEF Connector_TestPoint_Small TP 0 30 N N 1 F N 59 | F0 "TP" 0 150 50 H V C CNN 60 | F1 "Connector_TestPoint_Small" 0 80 50 H V C CNN 61 | F2 "" 200 0 50 H I C CNN 62 | F3 "" 200 0 50 H I C CNN 63 | $FPLIST 64 | Pin* 65 | Test* 66 | $ENDFPLIST 67 | DRAW 68 | C 0 0 20 0 1 0 N 69 | X 1 1 0 0 0 U 50 50 1 1 P 70 | ENDDRAW 71 | ENDDEF 72 | # 73 | # Device_C 74 | # 75 | DEF Device_C C 0 10 N Y 1 F N 76 | F0 "C" 25 100 50 H V L CNN 77 | F1 "Device_C" 25 -100 50 H V L CNN 78 | F2 "" 38 -150 50 H I C CNN 79 | F3 "" 0 0 50 H I C CNN 80 | $FPLIST 81 | C_* 82 | $ENDFPLIST 83 | DRAW 84 | P 2 0 1 20 -80 -30 80 -30 N 85 | P 2 0 1 20 -80 30 80 30 N 86 | X ~ 1 0 150 110 D 50 50 1 1 P 87 | X ~ 2 0 -150 110 U 50 50 1 1 P 88 | ENDDRAW 89 | ENDDEF 90 | # 91 | # Device_Crystal 92 | # 93 | DEF Device_Crystal Y 0 40 N N 1 F N 94 | F0 "Y" 0 150 50 H V C CNN 95 | F1 "Device_Crystal" 0 -150 50 H V C CNN 96 | F2 "" 0 0 50 H I C CNN 97 | F3 "" 0 0 50 H I C CNN 98 | $FPLIST 99 | Crystal* 100 | $ENDFPLIST 101 | DRAW 102 | S -45 100 45 -100 0 1 12 N 103 | P 2 0 1 0 -100 0 -75 0 N 104 | P 2 0 1 20 -75 -50 -75 50 N 105 | P 2 0 1 20 75 -50 75 50 N 106 | P 2 0 1 0 100 0 75 0 N 107 | X 1 1 -150 0 50 R 50 50 1 1 P 108 | X 2 2 150 0 50 L 50 50 1 1 P 109 | ENDDRAW 110 | ENDDEF 111 | # 112 | # Device_IMH8A 113 | # 114 | DEF Device_IMH8A U 0 20 Y N 2 F N 115 | F0 "U" 150 50 50 H V L CNN 116 | F1 "Device_IMH8A" 150 -50 50 H V L CNN 117 | F2 "" 0 0 50 H I C CNN 118 | F3 "" 0 0 50 H I C CNN 119 | $FPLIST 120 | SC?70* 121 | SC?88* 122 | SOT*363* 123 | $ENDFPLIST 124 | DRAW 125 | C 0 0 111 1 1 10 N 126 | C 0 0 111 2 1 10 N 127 | P 2 0 1 0 -30 0 -170 0 N 128 | P 2 0 1 20 -25 60 -25 -60 N 129 | P 9 0 1 0 -250 0 -240 -20 -230 20 -220 -20 -210 20 -200 -20 -190 20 -180 -20 -170 0 N 130 | P 2 1 1 0 -25 25 50 100 N 131 | P 3 1 1 0 -25 -25 50 -100 50 -100 N 132 | P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F 133 | P 2 2 1 0 -25 25 50 100 N 134 | P 3 2 1 0 -25 -25 50 -100 50 -100 N 135 | P 5 2 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F 136 | X C1 3 50 200 100 D 50 50 1 1 P 137 | X B1 4 -350 0 100 R 50 50 1 1 I 138 | X E1 5 50 -200 100 U 50 50 1 1 P 139 | X C1 1 50 200 100 D 50 50 2 1 P 140 | X B1 2 -350 0 100 R 50 50 2 1 I 141 | X E1 6 50 -200 100 U 50 50 2 1 P 142 | ENDDRAW 143 | ENDDEF 144 | # 145 | # Device_L 146 | # 147 | DEF Device_L L 0 40 N N 1 F N 148 | F0 "L" -50 0 50 V V C CNN 149 | F1 "Device_L" 75 0 50 V V C CNN 150 | F2 "" 0 0 50 H I C CNN 151 | F3 "" 0 0 50 H I C CNN 152 | $FPLIST 153 | Choke_* 154 | *Coil* 155 | Inductor_* 156 | L_* 157 | $ENDFPLIST 158 | DRAW 159 | A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50 160 | A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0 161 | A 0 25 25 -899 899 0 1 0 N 0 0 0 50 162 | A 0 75 25 -899 899 0 1 0 N 0 50 0 100 163 | X 1 1 0 150 50 D 50 50 1 1 P 164 | X 2 2 0 -150 50 U 50 50 1 1 P 165 | ENDDRAW 166 | ENDDEF 167 | # 168 | # Device_R_US 169 | # 170 | DEF Device_R_US R 0 0 N Y 1 F N 171 | F0 "R" 100 0 50 V V C CNN 172 | F1 "Device_R_US" -100 0 50 V V C CNN 173 | F2 "" 40 -10 50 V I C CNN 174 | F3 "" 0 0 50 H I C CNN 175 | $FPLIST 176 | R_* 177 | $ENDFPLIST 178 | DRAW 179 | P 2 0 1 0 0 -90 0 -100 N 180 | P 2 0 1 0 0 90 0 100 N 181 | P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N 182 | P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N 183 | P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N 184 | X ~ 1 0 150 50 D 50 50 1 1 P 185 | X ~ 2 0 -150 50 U 50 50 1 1 P 186 | ENDDRAW 187 | ENDDEF 188 | # 189 | # Diode_BAS16W 190 | # 191 | DEF Diode_BAS16W D 0 20 N N 1 F N 192 | F0 "D" 0 100 50 H V C CNN 193 | F1 "Diode_BAS16W" 0 -100 50 H V C CNN 194 | F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 0 -175 50 H I C CNN 195 | F3 "" 0 0 50 H I C CNN 196 | $FPLIST 197 | SOT?323* 198 | $ENDFPLIST 199 | DRAW 200 | P 2 0 1 10 -50 50 -50 -50 N 201 | P 2 0 1 0 50 0 -50 0 N 202 | P 4 0 1 10 50 50 50 -50 -50 0 50 50 N 203 | X A 1 150 0 100 L 50 50 1 1 P 204 | X NC 2 -50 0 100 R 50 50 1 1 N N 205 | X K 3 -150 0 100 R 50 50 1 1 P 206 | ENDDRAW 207 | ENDDEF 208 | # 209 | # Diode_RB417E 210 | # 211 | DEF Diode_RB417E D 0 40 Y Y 2 F N 212 | F0 "D" 0 0 50 H V C CNN 213 | F1 "Diode_RB417E" 0 0 50 H V C CNN 214 | F2 "" 0 0 50 H I C CNN 215 | F3 "" 0 0 50 H I C CNN 216 | DRAW 217 | P 2 0 1 10 -50 -150 -50 -50 N 218 | P 2 0 1 0 -50 -100 50 -100 N 219 | P 4 0 1 10 -50 -100 50 -150 50 -50 -50 -100 N 220 | X ~ 1 -150 -100 100 R 50 50 1 1 P 221 | X ~ 5 150 -100 100 L 50 50 1 1 P 222 | X ~ 2 -150 -100 100 R 50 50 2 1 P 223 | X ~ 3 150 -100 100 L 50 50 2 1 P 224 | ENDDRAW 225 | ENDDEF 226 | # 227 | # Interface_USB_TUSB3410 228 | # 229 | DEF Interface_USB_TUSB3410 U 0 40 Y Y 1 F N 230 | F0 "U" -750 1050 50 H V C CNN 231 | F1 "Interface_USB_TUSB3410" 0 0 50 H V C CNN 232 | F2 "Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm_ThermalVias" 1050 -1100 50 H I C CNN 233 | F3 "" 0 -400 50 H I C CNN 234 | $FPLIST 235 | LQFP*7x7mm*P0.8mm* 236 | $ENDFPLIST 237 | DRAW 238 | S -800 1000 800 -1000 0 1 10 f 239 | X ~VREGEN 1 -1000 900 200 R 50 50 1 1 I 240 | X SDA 10 -1000 -100 200 R 50 50 1 1 B 241 | X SCL 11 -1000 -200 200 R 50 50 1 1 B 242 | X ~WAKEUP 12 -1000 100 200 R 50 50 1 1 I 243 | X ~CTS 13 1000 50 200 L 50 50 1 1 I 244 | X ~DSR 14 1000 -150 200 L 50 50 1 1 I 245 | X ~DCD 15 1000 -50 200 L 50 50 1 1 I 246 | X ~RI~/CP 16 1000 -450 200 L 50 50 1 1 I 247 | X SIN/IR_SIN 17 1000 -650 200 L 50 50 1 1 I 248 | X GND 18 0 -1200 200 U 50 50 1 1 W 249 | X SOUT/IR_SOUT 19 1000 -750 200 L 50 50 1 1 O 250 | X SUSPEND 2 -1000 800 200 R 50 50 1 1 O 251 | X ~RTS 20 1000 -350 200 L 50 50 1 1 O 252 | X ~DTR 21 1000 -250 200 L 50 50 1 1 O 253 | X CLKOUT 22 -1000 -400 200 R 50 50 1 1 O 254 | X TEST0 23 1000 900 200 L 50 50 1 1 I 255 | X TEST1 24 1000 800 200 L 50 50 1 1 I 256 | X VCC 25 0 1200 200 D 50 50 1 1 W 257 | X X2 26 -1000 -750 200 R 50 50 1 1 O 258 | X X1/CLKI 27 -1000 -650 200 R 50 50 1 1 I 259 | X GND 28 200 -1200 200 U 50 50 1 1 W 260 | X P3.4 29 1000 300 200 L 50 50 1 1 B 261 | X VCC 3 -200 1200 200 D 50 50 1 1 W 262 | X P3.3 30 1000 400 200 L 50 50 1 1 B 263 | X P3.1 31 1000 500 200 L 50 50 1 1 B 264 | X P3.0 32 1000 600 200 L 50 50 1 1 B 265 | X VDD18 4 200 1200 200 D 50 50 1 1 W 266 | X PUR 5 -1000 700 200 R 50 50 1 1 O 267 | X DP 6 -1000 500 200 R 50 50 1 1 B 268 | X DM 7 -1000 400 200 R 50 50 1 1 B 269 | X GND 8 -200 -1200 200 U 50 50 1 1 W 270 | X ~RESET 9 -1000 200 200 R 50 50 1 1 I 271 | ENDDRAW 272 | ENDDEF 273 | # 274 | # Memory_EEPROM_24LC64 275 | # 276 | DEF Memory_EEPROM_24LC64 U 0 20 Y Y 1 F N 277 | F0 "U" -250 250 50 H V C CNN 278 | F1 "Memory_EEPROM_24LC64" 50 250 50 H V L CNN 279 | F2 "" 0 0 50 H I C CNN 280 | F3 "" 0 0 50 H I C CNN 281 | ALIAS 24LC02 24LC00 24LC04 24LC08 24LC01 24LC512 24LC64 24LC1025 24LC32 24LC256 24LC128 CAT24C256 CAT24C128 282 | $FPLIST 283 | DIP*W7.62mm* 284 | SOIC*3.9x4.9mm* 285 | TSSOP*4.4x3mm*P0.65mm* 286 | DFN*3x2mm*P0.5mm* 287 | $ENDFPLIST 288 | DRAW 289 | S -300 200 300 -200 1 1 10 f 290 | X A0 1 -400 100 100 R 50 50 1 1 I 291 | X A1 2 -400 0 100 R 50 50 1 1 I 292 | X A2 3 -400 -100 100 R 50 50 1 1 I 293 | X GND 4 0 -300 100 U 50 50 1 1 W 294 | X SDA 5 400 100 100 L 50 50 1 1 B 295 | X SCL 6 400 0 100 L 50 50 1 1 I 296 | X WP 7 400 -100 100 L 50 50 1 1 I 297 | X VCC 8 0 300 100 D 50 50 1 1 W 298 | ENDDRAW 299 | ENDDEF 300 | # 301 | # Regulator_Linear_TPS71533__SC70 302 | # 303 | DEF Regulator_Linear_TPS71533__SC70 U 0 10 Y Y 1 F N 304 | F0 "U" -150 125 50 H V C CNN 305 | F1 "Regulator_Linear_TPS71533__SC70" 0 125 50 H V L CNN 306 | F2 "Package_TO_SOT_SMD:SOT-353_SC-70-5" 0 225 50 H I C CNN 307 | F3 "" -300 800 50 H I C CNN 308 | ALIAS TPS71519__SC70 TPS71523__SC70 TPS71525__SC70 TPS71530__SC70 TPS71533__SC70 TPS715345__SC70 TPS71550__SC70 309 | $FPLIST 310 | *SC?70* 311 | $ENDFPLIST 312 | DRAW 313 | S -200 75 200 -200 0 1 10 f 314 | X NC 1 200 -100 100 L 50 50 1 1 N N 315 | X GND 2 0 -300 100 U 50 50 1 1 W 316 | X NC 3 -200 -100 100 R 50 50 1 1 N N 317 | X IN 4 -300 0 100 R 50 50 1 1 W 318 | X OUT 5 300 0 100 L 50 50 1 1 w 319 | ENDDRAW 320 | ENDDEF 321 | # 322 | # power_+1V8 323 | # 324 | DEF power_+1V8 #PWR 0 0 Y Y 1 F P 325 | F0 "#PWR" 0 -150 50 H I C CNN 326 | F1 "power_+1V8" 0 140 50 H V C CNN 327 | F2 "" 0 0 50 H I C CNN 328 | F3 "" 0 0 50 H I C CNN 329 | DRAW 330 | P 2 0 1 0 -30 50 0 100 N 331 | P 2 0 1 0 0 0 0 100 N 332 | P 2 0 1 0 0 100 30 50 N 333 | X +1V8 1 0 0 0 U 50 50 1 1 W N 334 | ENDDRAW 335 | ENDDEF 336 | # 337 | # power_+3.3V 338 | # 339 | DEF power_+3.3V #PWR 0 0 Y Y 1 F P 340 | F0 "#PWR" 0 -150 50 H I C CNN 341 | F1 "power_+3.3V" 0 140 50 H V C CNN 342 | F2 "" 0 0 50 H I C CNN 343 | F3 "" 0 0 50 H I C CNN 344 | DRAW 345 | P 2 0 1 0 -30 50 0 100 N 346 | P 2 0 1 0 0 0 0 100 N 347 | P 2 0 1 0 0 100 30 50 N 348 | X +3V3 1 0 0 0 U 50 50 1 1 W N 349 | ENDDRAW 350 | ENDDEF 351 | # 352 | # power_+3V3 353 | # 354 | DEF power_+3V3 #PWR 0 0 Y Y 1 F P 355 | F0 "#PWR" 0 -150 50 H I C CNN 356 | F1 "power_+3V3" 0 140 50 H V C CNN 357 | F2 "" 0 0 50 H I C CNN 358 | F3 "" 0 0 50 H I C CNN 359 | ALIAS +3.3V 360 | DRAW 361 | P 2 0 1 0 -30 50 0 100 N 362 | P 2 0 1 0 0 0 0 100 N 363 | P 2 0 1 0 0 100 30 50 N 364 | X +3V3 1 0 0 0 U 50 50 1 1 W N 365 | ENDDRAW 366 | ENDDEF 367 | # 368 | # power_GND 369 | # 370 | DEF power_GND #PWR 0 0 Y Y 1 F P 371 | F0 "#PWR" 0 -250 50 H I C CNN 372 | F1 "power_GND" 0 -150 50 H V C CNN 373 | F2 "" 0 0 50 H I C CNN 374 | F3 "" 0 0 50 H I C CNN 375 | DRAW 376 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 377 | X GND 1 0 0 0 D 50 50 1 1 W N 378 | ENDDRAW 379 | ENDDEF 380 | # 381 | # power_VBUS 382 | # 383 | DEF power_VBUS #PWR 0 0 Y Y 1 F P 384 | F0 "#PWR" 0 -150 50 H I C CNN 385 | F1 "power_VBUS" 0 150 50 H V C CNN 386 | F2 "" 0 0 50 H I C CNN 387 | F3 "" 0 0 50 H I C CNN 388 | DRAW 389 | P 2 0 1 0 -30 50 0 100 N 390 | P 2 0 1 0 0 0 0 100 N 391 | P 2 0 1 0 0 100 30 50 N 392 | X VBUS 1 0 0 0 U 50 50 1 1 W N 393 | ENDDRAW 394 | ENDDEF 395 | # 396 | #End Library 397 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_b/ti_silver_link_b.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 0, 4 | "active_layer_preset": "", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 11, 41 | 12, 42 | 13, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36, 64 | 39, 65 | 40 66 | ], 67 | "visible_layers": "fffffff_ffffffff", 68 | "zone_display_mode": 0 69 | }, 70 | "meta": { 71 | "filename": "ti_silver_link_b.kicad_prl", 72 | "version": 3 73 | }, 74 | "project": { 75 | "files": [] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_b/ti_silver_link_b.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "board_outline_line_width": 0.1, 7 | "copper_line_width": 0.2, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "other_line_width": 0.15, 12 | "silk_line_width": 0.15, 13 | "silk_text_size_h": 1.0, 14 | "silk_text_size_v": 1.0, 15 | "silk_text_thickness": 0.15 16 | }, 17 | "diff_pair_dimensions": [], 18 | "drc_exclusions": [], 19 | "rules": { 20 | "solder_mask_clearance": 0.0, 21 | "solder_mask_min_width": 0.0 22 | }, 23 | "track_widths": [], 24 | "via_dimensions": [] 25 | }, 26 | "layer_presets": [], 27 | "viewports": [] 28 | }, 29 | "boards": [], 30 | "cvpcb": { 31 | "equivalence_files": [] 32 | }, 33 | "erc": { 34 | "erc_exclusions": [], 35 | "meta": { 36 | "version": 0 37 | }, 38 | "pin_map": [ 39 | [ 40 | 0, 41 | 0, 42 | 0, 43 | 0, 44 | 0, 45 | 0, 46 | 1, 47 | 0, 48 | 0, 49 | 0, 50 | 0, 51 | 2 52 | ], 53 | [ 54 | 0, 55 | 2, 56 | 0, 57 | 1, 58 | 0, 59 | 0, 60 | 1, 61 | 0, 62 | 2, 63 | 2, 64 | 2, 65 | 2 66 | ], 67 | [ 68 | 0, 69 | 0, 70 | 0, 71 | 0, 72 | 0, 73 | 0, 74 | 1, 75 | 0, 76 | 1, 77 | 0, 78 | 1, 79 | 2 80 | ], 81 | [ 82 | 0, 83 | 1, 84 | 0, 85 | 0, 86 | 0, 87 | 0, 88 | 1, 89 | 1, 90 | 2, 91 | 1, 92 | 1, 93 | 2 94 | ], 95 | [ 96 | 0, 97 | 0, 98 | 0, 99 | 0, 100 | 0, 101 | 0, 102 | 1, 103 | 0, 104 | 0, 105 | 0, 106 | 0, 107 | 2 108 | ], 109 | [ 110 | 0, 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 0, 116 | 0, 117 | 0, 118 | 0, 119 | 0, 120 | 0, 121 | 2 122 | ], 123 | [ 124 | 1, 125 | 1, 126 | 1, 127 | 1, 128 | 1, 129 | 0, 130 | 1, 131 | 1, 132 | 1, 133 | 1, 134 | 1, 135 | 2 136 | ], 137 | [ 138 | 0, 139 | 0, 140 | 0, 141 | 1, 142 | 0, 143 | 0, 144 | 1, 145 | 0, 146 | 0, 147 | 0, 148 | 0, 149 | 2 150 | ], 151 | [ 152 | 0, 153 | 2, 154 | 1, 155 | 2, 156 | 0, 157 | 0, 158 | 1, 159 | 0, 160 | 2, 161 | 2, 162 | 2, 163 | 2 164 | ], 165 | [ 166 | 0, 167 | 2, 168 | 0, 169 | 1, 170 | 0, 171 | 0, 172 | 1, 173 | 0, 174 | 2, 175 | 0, 176 | 0, 177 | 2 178 | ], 179 | [ 180 | 0, 181 | 2, 182 | 1, 183 | 1, 184 | 0, 185 | 0, 186 | 1, 187 | 0, 188 | 2, 189 | 0, 190 | 0, 191 | 2 192 | ], 193 | [ 194 | 2, 195 | 2, 196 | 2, 197 | 2, 198 | 2, 199 | 2, 200 | 2, 201 | 2, 202 | 2, 203 | 2, 204 | 2, 205 | 2 206 | ] 207 | ], 208 | "rule_severities": { 209 | "bus_definition_conflict": "error", 210 | "bus_entry_needed": "error", 211 | "bus_to_bus_conflict": "error", 212 | "bus_to_net_conflict": "error", 213 | "conflicting_netclasses": "error", 214 | "different_unit_footprint": "error", 215 | "different_unit_net": "error", 216 | "duplicate_reference": "error", 217 | "duplicate_sheet_names": "error", 218 | "endpoint_off_grid": "warning", 219 | "extra_units": "error", 220 | "global_label_dangling": "warning", 221 | "hier_label_mismatch": "error", 222 | "label_dangling": "error", 223 | "lib_symbol_issues": "warning", 224 | "missing_bidi_pin": "warning", 225 | "missing_input_pin": "warning", 226 | "missing_power_pin": "error", 227 | "missing_unit": "warning", 228 | "multiple_net_names": "warning", 229 | "net_not_bus_member": "warning", 230 | "no_connect_connected": "warning", 231 | "no_connect_dangling": "warning", 232 | "pin_not_connected": "error", 233 | "pin_not_driven": "error", 234 | "pin_to_pin": "warning", 235 | "power_pin_not_driven": "error", 236 | "similar_labels": "warning", 237 | "simulation_model_issue": "ignore", 238 | "unannotated": "error", 239 | "unit_value_mismatch": "error", 240 | "unresolved_variable": "error", 241 | "wire_dangling": "error" 242 | } 243 | }, 244 | "libraries": { 245 | "pinned_footprint_libs": [], 246 | "pinned_symbol_libs": [] 247 | }, 248 | "meta": { 249 | "filename": "ti_silver_link_b.kicad_pro", 250 | "version": 1 251 | }, 252 | "net_settings": { 253 | "classes": [ 254 | { 255 | "bus_width": 12, 256 | "clearance": 0.2, 257 | "diff_pair_gap": 0.25, 258 | "diff_pair_via_gap": 0.25, 259 | "diff_pair_width": 0.2, 260 | "line_style": 0, 261 | "microvia_diameter": 0.3, 262 | "microvia_drill": 0.1, 263 | "name": "Default", 264 | "pcb_color": "rgba(0, 0, 0, 0.000)", 265 | "schematic_color": "rgba(0, 0, 0, 0.000)", 266 | "track_width": 0.2, 267 | "via_diameter": 0.6, 268 | "via_drill": 0.3, 269 | "wire_width": 6 270 | } 271 | ], 272 | "meta": { 273 | "version": 3 274 | }, 275 | "net_colors": null, 276 | "netclass_assignments": null, 277 | "netclass_patterns": [] 278 | }, 279 | "pcbnew": { 280 | "last_paths": { 281 | "gencad": "", 282 | "idf": "", 283 | "netlist": "", 284 | "specctra_dsn": "", 285 | "step": "", 286 | "vrml": "" 287 | }, 288 | "page_layout_descr_file": "" 289 | }, 290 | "schematic": { 291 | "annotate_start_num": 0, 292 | "drawing": { 293 | "dashed_lines_dash_length_ratio": 12.0, 294 | "dashed_lines_gap_length_ratio": 3.0, 295 | "default_line_thickness": 6.0, 296 | "default_text_size": 50.0, 297 | "field_names": [], 298 | "intersheets_ref_own_page": false, 299 | "intersheets_ref_prefix": "", 300 | "intersheets_ref_short": false, 301 | "intersheets_ref_show": false, 302 | "intersheets_ref_suffix": "", 303 | "junction_size_choice": 3, 304 | "label_size_ratio": 0.25, 305 | "pin_symbol_size": 0.0, 306 | "text_offset_ratio": 0.08 307 | }, 308 | "legacy_lib_dir": "", 309 | "legacy_lib_list": [], 310 | "meta": { 311 | "version": 1 312 | }, 313 | "net_format_name": "", 314 | "page_layout_descr_file": "", 315 | "plot_directory": "../../../../../Desktop/", 316 | "spice_adjust_passive_values": false, 317 | "spice_current_sheet_as_root": false, 318 | "spice_external_command": "spice \"%I\"", 319 | "spice_model_current_sheet_as_root": true, 320 | "spice_save_all_currents": false, 321 | "spice_save_all_voltages": false, 322 | "subpart_first_id": 65, 323 | "subpart_id_separator": 0 324 | }, 325 | "sheets": [ 326 | [ 327 | "e5c7f7c6-d5df-4ea5-b677-71f6c803368e", 328 | "" 329 | ] 330 | ], 331 | "text_variables": {} 332 | } 333 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_b/ti_silver_link_b_rev1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_silver_link_b/ti_silver_link_b_rev1.pdf -------------------------------------------------------------------------------- /schematics/ti_silver_link_b/ti_silver_link_b_rev2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_silver_link_b/ti_silver_link_b_rev2.pdf -------------------------------------------------------------------------------- /schematics/ti_silver_link_b/ti_silver_link_b_rev3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_silver_link_b/ti_silver_link_b_rev3.pdf -------------------------------------------------------------------------------- /schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # Connector_Conn_01x03_Female 5 | # 6 | DEF Connector_Conn_01x03_Female J 0 40 Y N 1 F N 7 | F0 "J" 0 200 50 H V C CNN 8 | F1 "Connector_Conn_01x03_Female" 0 -200 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | $FPLIST 12 | Connector*:*_1x??_* 13 | $ENDFPLIST 14 | DRAW 15 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 16 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 17 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 18 | P 2 1 1 6 -50 -100 -20 -100 N 19 | P 2 1 1 6 -50 0 -20 0 N 20 | P 2 1 1 6 -50 100 -20 100 N 21 | X Pin_1 1 -200 100 150 R 50 50 1 1 P 22 | X Pin_2 2 -200 0 150 R 50 50 1 1 P 23 | X Pin_3 3 -200 -100 150 R 50 50 1 1 P 24 | ENDDRAW 25 | ENDDEF 26 | # 27 | # Connector_Conn_01x05_Female 28 | # 29 | DEF Connector_Conn_01x05_Female J 0 40 Y N 1 F N 30 | F0 "J" 0 300 50 H V C CNN 31 | F1 "Connector_Conn_01x05_Female" 0 -300 50 H V C CNN 32 | F2 "" 0 0 50 H I C CNN 33 | F3 "" 0 0 50 H I C CNN 34 | $FPLIST 35 | Connector*:*_1x??_* 36 | $ENDFPLIST 37 | DRAW 38 | A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 39 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 40 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 41 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 42 | A 0 200 20 901 -901 1 1 6 N 0 220 0 180 43 | P 2 1 1 6 -50 -200 -20 -200 N 44 | P 2 1 1 6 -50 -100 -20 -100 N 45 | P 2 1 1 6 -50 0 -20 0 N 46 | P 2 1 1 6 -50 100 -20 100 N 47 | P 2 1 1 6 -50 200 -20 200 N 48 | X Pin_1 1 -200 200 150 R 50 50 1 1 P 49 | X Pin_2 2 -200 100 150 R 50 50 1 1 P 50 | X Pin_3 3 -200 0 150 R 50 50 1 1 P 51 | X Pin_4 4 -200 -100 150 R 50 50 1 1 P 52 | X Pin_5 5 -200 -200 150 R 50 50 1 1 P 53 | ENDDRAW 54 | ENDDEF 55 | # 56 | # Connector_TestPoint_Small 57 | # 58 | DEF Connector_TestPoint_Small TP 0 30 N N 1 F N 59 | F0 "TP" 0 150 50 H V C CNN 60 | F1 "Connector_TestPoint_Small" 0 80 50 H V C CNN 61 | F2 "" 200 0 50 H I C CNN 62 | F3 "" 200 0 50 H I C CNN 63 | $FPLIST 64 | Pin* 65 | Test* 66 | $ENDFPLIST 67 | DRAW 68 | C 0 0 20 0 1 0 N 69 | X 1 1 0 0 0 U 50 50 1 1 P 70 | ENDDRAW 71 | ENDDEF 72 | # 73 | # Device_C 74 | # 75 | DEF Device_C C 0 10 N Y 1 F N 76 | F0 "C" 25 100 50 H V L CNN 77 | F1 "Device_C" 25 -100 50 H V L CNN 78 | F2 "" 38 -150 50 H I C CNN 79 | F3 "" 0 0 50 H I C CNN 80 | $FPLIST 81 | C_* 82 | $ENDFPLIST 83 | DRAW 84 | P 2 0 1 20 -80 -30 80 -30 N 85 | P 2 0 1 20 -80 30 80 30 N 86 | X ~ 1 0 150 110 D 50 50 1 1 P 87 | X ~ 2 0 -150 110 U 50 50 1 1 P 88 | ENDDRAW 89 | ENDDEF 90 | # 91 | # Device_Crystal 92 | # 93 | DEF Device_Crystal Y 0 40 N N 1 F N 94 | F0 "Y" 0 150 50 H V C CNN 95 | F1 "Device_Crystal" 0 -150 50 H V C CNN 96 | F2 "" 0 0 50 H I C CNN 97 | F3 "" 0 0 50 H I C CNN 98 | $FPLIST 99 | Crystal* 100 | $ENDFPLIST 101 | DRAW 102 | S -45 100 45 -100 0 1 12 N 103 | P 2 0 1 0 -100 0 -75 0 N 104 | P 2 0 1 20 -75 -50 -75 50 N 105 | P 2 0 1 20 75 -50 75 50 N 106 | P 2 0 1 0 100 0 75 0 N 107 | X 1 1 -150 0 50 R 50 50 1 1 P 108 | X 2 2 150 0 50 L 50 50 1 1 P 109 | ENDDRAW 110 | ENDDEF 111 | # 112 | # Device_IMH8A 113 | # 114 | DEF Device_IMH8A U 0 20 Y N 2 F N 115 | F0 "U" 150 50 50 H V L CNN 116 | F1 "Device_IMH8A" 150 -50 50 H V L CNN 117 | F2 "" 0 0 50 H I C CNN 118 | F3 "" 0 0 50 H I C CNN 119 | $FPLIST 120 | SC?70* 121 | SC?88* 122 | SOT*363* 123 | $ENDFPLIST 124 | DRAW 125 | C 0 0 111 1 1 10 N 126 | C 0 0 111 2 1 10 N 127 | P 2 0 1 0 -30 0 -170 0 N 128 | P 2 0 1 20 -25 60 -25 -60 N 129 | P 9 0 1 0 -250 0 -240 -20 -230 20 -220 -20 -210 20 -200 -20 -190 20 -180 -20 -170 0 N 130 | P 2 1 1 0 -25 25 50 100 N 131 | P 3 1 1 0 -25 -25 50 -100 50 -100 N 132 | P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F 133 | P 2 2 1 0 -25 25 50 100 N 134 | P 3 2 1 0 -25 -25 50 -100 50 -100 N 135 | P 5 2 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F 136 | X C1 3 50 200 100 D 50 50 1 1 P 137 | X B1 4 -350 0 100 R 50 50 1 1 I 138 | X E1 5 50 -200 100 U 50 50 1 1 P 139 | X C1 1 50 200 100 D 50 50 2 1 P 140 | X B1 2 -350 0 100 R 50 50 2 1 I 141 | X E1 6 50 -200 100 U 50 50 2 1 P 142 | ENDDRAW 143 | ENDDEF 144 | # 145 | # Device_L 146 | # 147 | DEF Device_L L 0 40 N N 1 F N 148 | F0 "L" -50 0 50 V V C CNN 149 | F1 "Device_L" 75 0 50 V V C CNN 150 | F2 "" 0 0 50 H I C CNN 151 | F3 "" 0 0 50 H I C CNN 152 | $FPLIST 153 | Choke_* 154 | *Coil* 155 | Inductor_* 156 | L_* 157 | $ENDFPLIST 158 | DRAW 159 | A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50 160 | A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0 161 | A 0 25 25 -899 899 0 1 0 N 0 0 0 50 162 | A 0 75 25 -899 899 0 1 0 N 0 50 0 100 163 | X 1 1 0 150 50 D 50 50 1 1 P 164 | X 2 2 0 -150 50 U 50 50 1 1 P 165 | ENDDRAW 166 | ENDDEF 167 | # 168 | # Device_R_US 169 | # 170 | DEF Device_R_US R 0 0 N Y 1 F N 171 | F0 "R" 100 0 50 V V C CNN 172 | F1 "Device_R_US" -100 0 50 V V C CNN 173 | F2 "" 40 -10 50 V I C CNN 174 | F3 "" 0 0 50 H I C CNN 175 | $FPLIST 176 | R_* 177 | $ENDFPLIST 178 | DRAW 179 | P 2 0 1 0 0 -90 0 -100 N 180 | P 2 0 1 0 0 90 0 100 N 181 | P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N 182 | P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N 183 | P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N 184 | X ~ 1 0 150 50 D 50 50 1 1 P 185 | X ~ 2 0 -150 50 U 50 50 1 1 P 186 | ENDDRAW 187 | ENDDEF 188 | # 189 | # Diode_BAS16W 190 | # 191 | DEF Diode_BAS16W D 0 20 N N 1 F N 192 | F0 "D" 0 100 50 H V C CNN 193 | F1 "Diode_BAS16W" 0 -100 50 H V C CNN 194 | F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 0 -175 50 H I C CNN 195 | F3 "" 0 0 50 H I C CNN 196 | $FPLIST 197 | SOT?323* 198 | $ENDFPLIST 199 | DRAW 200 | P 2 0 1 10 -50 50 -50 -50 N 201 | P 2 0 1 0 50 0 -50 0 N 202 | P 4 0 1 10 50 50 50 -50 -50 0 50 50 N 203 | X A 1 150 0 100 L 50 50 1 1 P 204 | X NC 2 -50 0 100 R 50 50 1 1 N N 205 | X K 3 -150 0 100 R 50 50 1 1 P 206 | ENDDRAW 207 | ENDDEF 208 | # 209 | # Diode_RB417E 210 | # 211 | DEF Diode_RB417E D 0 40 Y Y 2 F N 212 | F0 "D" 0 0 50 H V C CNN 213 | F1 "Diode_RB417E" 0 0 50 H V C CNN 214 | F2 "" 0 0 50 H I C CNN 215 | F3 "" 0 0 50 H I C CNN 216 | DRAW 217 | P 2 0 1 10 -50 -150 -50 -50 N 218 | P 2 0 1 0 -50 -100 50 -100 N 219 | P 4 0 1 10 -50 -100 50 -150 50 -50 -50 -100 N 220 | X ~ 1 -150 -100 100 R 50 50 1 1 P 221 | X ~ 5 150 -100 100 L 50 50 1 1 P 222 | X ~ 2 -150 -100 100 R 50 50 2 1 P 223 | X ~ 3 150 -100 100 L 50 50 2 1 P 224 | ENDDRAW 225 | ENDDEF 226 | # 227 | # Interface_USB_TUSB3410 228 | # 229 | DEF Interface_USB_TUSB3410 U 0 40 Y Y 1 F N 230 | F0 "U" -750 1050 50 H V C CNN 231 | F1 "Interface_USB_TUSB3410" 0 0 50 H V C CNN 232 | F2 "Package_DFN_QFN:VQFN-32-1EP_5x5mm_P0.5mm_EP3.5x3.5mm_ThermalVias" 1050 -1100 50 H I C CNN 233 | F3 "" 0 -400 50 H I C CNN 234 | $FPLIST 235 | LQFP*7x7mm*P0.8mm* 236 | $ENDFPLIST 237 | DRAW 238 | S -800 1000 800 -1000 0 1 10 f 239 | X ~VREGEN 1 -1000 900 200 R 50 50 1 1 I 240 | X SDA 10 -1000 -100 200 R 50 50 1 1 B 241 | X SCL 11 -1000 -200 200 R 50 50 1 1 B 242 | X ~WAKEUP 12 -1000 100 200 R 50 50 1 1 I 243 | X ~CTS 13 1000 50 200 L 50 50 1 1 I 244 | X ~DSR 14 1000 -150 200 L 50 50 1 1 I 245 | X ~DCD 15 1000 -50 200 L 50 50 1 1 I 246 | X ~RI~/CP 16 1000 -450 200 L 50 50 1 1 I 247 | X SIN/IR_SIN 17 1000 -650 200 L 50 50 1 1 I 248 | X GND 18 0 -1200 200 U 50 50 1 1 W 249 | X SOUT/IR_SOUT 19 1000 -750 200 L 50 50 1 1 O 250 | X SUSPEND 2 -1000 800 200 R 50 50 1 1 O 251 | X ~RTS 20 1000 -350 200 L 50 50 1 1 O 252 | X ~DTR 21 1000 -250 200 L 50 50 1 1 O 253 | X CLKOUT 22 -1000 -400 200 R 50 50 1 1 O 254 | X TEST0 23 1000 900 200 L 50 50 1 1 I 255 | X TEST1 24 1000 800 200 L 50 50 1 1 I 256 | X VCC 25 0 1200 200 D 50 50 1 1 W 257 | X X2 26 -1000 -750 200 R 50 50 1 1 O 258 | X X1/CLKI 27 -1000 -650 200 R 50 50 1 1 I 259 | X GND 28 200 -1200 200 U 50 50 1 1 W 260 | X P3.4 29 1000 300 200 L 50 50 1 1 B 261 | X VCC 3 -200 1200 200 D 50 50 1 1 W 262 | X P3.3 30 1000 400 200 L 50 50 1 1 B 263 | X P3.1 31 1000 500 200 L 50 50 1 1 B 264 | X P3.0 32 1000 600 200 L 50 50 1 1 B 265 | X VDD18 4 200 1200 200 D 50 50 1 1 W 266 | X PUR 5 -1000 700 200 R 50 50 1 1 O 267 | X DP 6 -1000 500 200 R 50 50 1 1 B 268 | X DM 7 -1000 400 200 R 50 50 1 1 B 269 | X GND 8 -200 -1200 200 U 50 50 1 1 W 270 | X ~RESET 9 -1000 200 200 R 50 50 1 1 I 271 | ENDDRAW 272 | ENDDEF 273 | # 274 | # Memory_EEPROM_24LC64 275 | # 276 | DEF Memory_EEPROM_24LC64 U 0 20 Y Y 1 F N 277 | F0 "U" -250 250 50 H V C CNN 278 | F1 "Memory_EEPROM_24LC64" 50 250 50 H V L CNN 279 | F2 "" 0 0 50 H I C CNN 280 | F3 "" 0 0 50 H I C CNN 281 | ALIAS 24LC02 24LC00 24LC04 24LC08 24LC01 24LC512 24LC64 24LC1025 24LC32 24LC256 24LC128 CAT24C256 CAT24C128 282 | $FPLIST 283 | DIP*W7.62mm* 284 | SOIC*3.9x4.9mm* 285 | TSSOP*4.4x3mm*P0.65mm* 286 | DFN*3x2mm*P0.5mm* 287 | $ENDFPLIST 288 | DRAW 289 | S -300 200 300 -200 1 1 10 f 290 | X A0 1 -400 100 100 R 50 50 1 1 I 291 | X A1 2 -400 0 100 R 50 50 1 1 I 292 | X A2 3 -400 -100 100 R 50 50 1 1 I 293 | X GND 4 0 -300 100 U 50 50 1 1 W 294 | X SDA 5 400 100 100 L 50 50 1 1 B 295 | X SCL 6 400 0 100 L 50 50 1 1 I 296 | X WP 7 400 -100 100 L 50 50 1 1 I 297 | X VCC 8 0 300 100 D 50 50 1 1 W 298 | ENDDRAW 299 | ENDDEF 300 | # 301 | # Regulator_Linear_TPS71533__SC70 302 | # 303 | DEF Regulator_Linear_TPS71533__SC70 U 0 10 Y Y 1 F N 304 | F0 "U" -150 125 50 H V C CNN 305 | F1 "Regulator_Linear_TPS71533__SC70" 0 125 50 H V L CNN 306 | F2 "Package_TO_SOT_SMD:SOT-353_SC-70-5" 0 225 50 H I C CNN 307 | F3 "" -300 800 50 H I C CNN 308 | ALIAS TPS71519__SC70 TPS71523__SC70 TPS71525__SC70 TPS71530__SC70 TPS71533__SC70 TPS715345__SC70 TPS71550__SC70 309 | $FPLIST 310 | *SC?70* 311 | $ENDFPLIST 312 | DRAW 313 | S -200 75 200 -200 0 1 10 f 314 | X NC 1 200 -100 100 L 50 50 1 1 N N 315 | X GND 2 0 -300 100 U 50 50 1 1 W 316 | X NC 3 -200 -100 100 R 50 50 1 1 N N 317 | X IN 4 -300 0 100 R 50 50 1 1 W 318 | X OUT 5 300 0 100 L 50 50 1 1 w 319 | ENDDRAW 320 | ENDDEF 321 | # 322 | # power_+1V8 323 | # 324 | DEF power_+1V8 #PWR 0 0 Y Y 1 F P 325 | F0 "#PWR" 0 -150 50 H I C CNN 326 | F1 "power_+1V8" 0 140 50 H V C CNN 327 | F2 "" 0 0 50 H I C CNN 328 | F3 "" 0 0 50 H I C CNN 329 | DRAW 330 | P 2 0 1 0 -30 50 0 100 N 331 | P 2 0 1 0 0 0 0 100 N 332 | P 2 0 1 0 0 100 30 50 N 333 | X +1V8 1 0 0 0 U 50 50 1 1 W N 334 | ENDDRAW 335 | ENDDEF 336 | # 337 | # power_+3.3V 338 | # 339 | DEF power_+3.3V #PWR 0 0 Y Y 1 F P 340 | F0 "#PWR" 0 -150 50 H I C CNN 341 | F1 "power_+3.3V" 0 140 50 H V C CNN 342 | F2 "" 0 0 50 H I C CNN 343 | F3 "" 0 0 50 H I C CNN 344 | DRAW 345 | P 2 0 1 0 -30 50 0 100 N 346 | P 2 0 1 0 0 0 0 100 N 347 | P 2 0 1 0 0 100 30 50 N 348 | X +3V3 1 0 0 0 U 50 50 1 1 W N 349 | ENDDRAW 350 | ENDDEF 351 | # 352 | # power_+3V3 353 | # 354 | DEF power_+3V3 #PWR 0 0 Y Y 1 F P 355 | F0 "#PWR" 0 -150 50 H I C CNN 356 | F1 "power_+3V3" 0 140 50 H V C CNN 357 | F2 "" 0 0 50 H I C CNN 358 | F3 "" 0 0 50 H I C CNN 359 | ALIAS +3.3V 360 | DRAW 361 | P 2 0 1 0 -30 50 0 100 N 362 | P 2 0 1 0 0 0 0 100 N 363 | P 2 0 1 0 0 100 30 50 N 364 | X +3V3 1 0 0 0 U 50 50 1 1 W N 365 | ENDDRAW 366 | ENDDEF 367 | # 368 | # power_GND 369 | # 370 | DEF power_GND #PWR 0 0 Y Y 1 F P 371 | F0 "#PWR" 0 -250 50 H I C CNN 372 | F1 "power_GND" 0 -150 50 H V C CNN 373 | F2 "" 0 0 50 H I C CNN 374 | F3 "" 0 0 50 H I C CNN 375 | DRAW 376 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 377 | X GND 1 0 0 0 D 50 50 1 1 W N 378 | ENDDRAW 379 | ENDDEF 380 | # 381 | # power_VBUS 382 | # 383 | DEF power_VBUS #PWR 0 0 Y Y 1 F P 384 | F0 "#PWR" 0 -150 50 H I C CNN 385 | F1 "power_VBUS" 0 150 50 H V C CNN 386 | F2 "" 0 0 50 H I C CNN 387 | F3 "" 0 0 50 H I C CNN 388 | DRAW 389 | P 2 0 1 0 -30 50 0 100 N 390 | P 2 0 1 0 0 0 0 100 N 391 | P 2 0 1 0 0 100 30 50 N 392 | X VBUS 1 0 0 0 U 50 50 1 1 W N 393 | ENDDRAW 394 | ENDDEF 395 | # 396 | #End Library 397 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "board_outline_line_width": 0.1, 7 | "copper_line_width": 0.2, 8 | "copper_text_size_h": 1.5, 9 | "copper_text_size_v": 1.5, 10 | "copper_text_thickness": 0.3, 11 | "other_line_width": 0.15, 12 | "silk_line_width": 0.15, 13 | "silk_text_size_h": 1.0, 14 | "silk_text_size_v": 1.0, 15 | "silk_text_thickness": 0.15 16 | }, 17 | "diff_pair_dimensions": [], 18 | "drc_exclusions": [], 19 | "rules": { 20 | "solder_mask_clearance": 0.0, 21 | "solder_mask_min_width": 0.0 22 | }, 23 | "track_widths": [], 24 | "via_dimensions": [] 25 | }, 26 | "layer_presets": [], 27 | "viewports": [] 28 | }, 29 | "boards": [], 30 | "cvpcb": { 31 | "equivalence_files": [] 32 | }, 33 | "erc": { 34 | "erc_exclusions": [], 35 | "meta": { 36 | "version": 0 37 | }, 38 | "pin_map": [ 39 | [ 40 | 0, 41 | 0, 42 | 0, 43 | 0, 44 | 0, 45 | 0, 46 | 1, 47 | 0, 48 | 0, 49 | 0, 50 | 0, 51 | 2 52 | ], 53 | [ 54 | 0, 55 | 2, 56 | 0, 57 | 1, 58 | 0, 59 | 0, 60 | 1, 61 | 0, 62 | 2, 63 | 2, 64 | 2, 65 | 2 66 | ], 67 | [ 68 | 0, 69 | 0, 70 | 0, 71 | 0, 72 | 0, 73 | 0, 74 | 1, 75 | 0, 76 | 1, 77 | 0, 78 | 1, 79 | 2 80 | ], 81 | [ 82 | 0, 83 | 1, 84 | 0, 85 | 0, 86 | 0, 87 | 0, 88 | 1, 89 | 1, 90 | 2, 91 | 1, 92 | 1, 93 | 2 94 | ], 95 | [ 96 | 0, 97 | 0, 98 | 0, 99 | 0, 100 | 0, 101 | 0, 102 | 1, 103 | 0, 104 | 0, 105 | 0, 106 | 0, 107 | 2 108 | ], 109 | [ 110 | 0, 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 0, 116 | 0, 117 | 0, 118 | 0, 119 | 0, 120 | 0, 121 | 2 122 | ], 123 | [ 124 | 1, 125 | 1, 126 | 1, 127 | 1, 128 | 1, 129 | 0, 130 | 1, 131 | 1, 132 | 1, 133 | 1, 134 | 1, 135 | 2 136 | ], 137 | [ 138 | 0, 139 | 0, 140 | 0, 141 | 1, 142 | 0, 143 | 0, 144 | 1, 145 | 0, 146 | 0, 147 | 0, 148 | 0, 149 | 2 150 | ], 151 | [ 152 | 0, 153 | 2, 154 | 1, 155 | 2, 156 | 0, 157 | 0, 158 | 1, 159 | 0, 160 | 2, 161 | 2, 162 | 2, 163 | 2 164 | ], 165 | [ 166 | 0, 167 | 2, 168 | 0, 169 | 1, 170 | 0, 171 | 0, 172 | 1, 173 | 0, 174 | 2, 175 | 0, 176 | 0, 177 | 2 178 | ], 179 | [ 180 | 0, 181 | 2, 182 | 1, 183 | 1, 184 | 0, 185 | 0, 186 | 1, 187 | 0, 188 | 2, 189 | 0, 190 | 0, 191 | 2 192 | ], 193 | [ 194 | 2, 195 | 2, 196 | 2, 197 | 2, 198 | 2, 199 | 2, 200 | 2, 201 | 2, 202 | 2, 203 | 2, 204 | 2, 205 | 2 206 | ] 207 | ], 208 | "rule_severities": { 209 | "bus_definition_conflict": "error", 210 | "bus_entry_needed": "error", 211 | "bus_to_bus_conflict": "error", 212 | "bus_to_net_conflict": "error", 213 | "conflicting_netclasses": "error", 214 | "different_unit_footprint": "error", 215 | "different_unit_net": "error", 216 | "duplicate_reference": "error", 217 | "duplicate_sheet_names": "error", 218 | "endpoint_off_grid": "warning", 219 | "extra_units": "error", 220 | "global_label_dangling": "warning", 221 | "hier_label_mismatch": "error", 222 | "label_dangling": "error", 223 | "lib_symbol_issues": "warning", 224 | "missing_bidi_pin": "warning", 225 | "missing_input_pin": "warning", 226 | "missing_power_pin": "error", 227 | "missing_unit": "warning", 228 | "multiple_net_names": "warning", 229 | "net_not_bus_member": "warning", 230 | "no_connect_connected": "warning", 231 | "no_connect_dangling": "warning", 232 | "pin_not_connected": "error", 233 | "pin_not_driven": "error", 234 | "pin_to_pin": "warning", 235 | "power_pin_not_driven": "error", 236 | "similar_labels": "warning", 237 | "simulation_model_issue": "error", 238 | "unannotated": "error", 239 | "unit_value_mismatch": "error", 240 | "unresolved_variable": "error", 241 | "wire_dangling": "error" 242 | } 243 | }, 244 | "libraries": { 245 | "pinned_footprint_libs": [], 246 | "pinned_symbol_libs": [] 247 | }, 248 | "meta": { 249 | "filename": "ti_silver_link_okrayo_breadboard.kicad_pro", 250 | "version": 1 251 | }, 252 | "net_settings": { 253 | "classes": [ 254 | { 255 | "bus_width": 12, 256 | "clearance": 0.2, 257 | "diff_pair_gap": 0.25, 258 | "diff_pair_via_gap": 0.25, 259 | "diff_pair_width": 0.2, 260 | "line_style": 0, 261 | "microvia_diameter": 0.3, 262 | "microvia_drill": 0.1, 263 | "name": "Default", 264 | "pcb_color": "rgba(0, 0, 0, 0.000)", 265 | "schematic_color": "rgba(0, 0, 0, 0.000)", 266 | "track_width": 0.2, 267 | "via_diameter": 0.6, 268 | "via_drill": 0.3, 269 | "wire_width": 6 270 | } 271 | ], 272 | "meta": { 273 | "version": 3 274 | }, 275 | "net_colors": null, 276 | "netclass_assignments": null, 277 | "netclass_patterns": [] 278 | }, 279 | "pcbnew": { 280 | "last_paths": { 281 | "gencad": "", 282 | "idf": "", 283 | "netlist": "", 284 | "specctra_dsn": "", 285 | "step": "", 286 | "vrml": "" 287 | }, 288 | "page_layout_descr_file": "" 289 | }, 290 | "schematic": { 291 | "annotate_start_num": 0, 292 | "drawing": { 293 | "dashed_lines_dash_length_ratio": 12.0, 294 | "dashed_lines_gap_length_ratio": 3.0, 295 | "default_line_thickness": 6.0, 296 | "default_text_size": 50.0, 297 | "field_names": [], 298 | "intersheets_ref_own_page": false, 299 | "intersheets_ref_prefix": "", 300 | "intersheets_ref_short": false, 301 | "intersheets_ref_show": false, 302 | "intersheets_ref_suffix": "", 303 | "junction_size_choice": 3, 304 | "label_size_ratio": 0.25, 305 | "pin_symbol_size": 0.0, 306 | "text_offset_ratio": 0.08 307 | }, 308 | "legacy_lib_dir": "", 309 | "legacy_lib_list": [], 310 | "meta": { 311 | "version": 1 312 | }, 313 | "net_format_name": "", 314 | "page_layout_descr_file": "", 315 | "plot_directory": "../../../../../Desktop/", 316 | "spice_adjust_passive_values": false, 317 | "spice_current_sheet_as_root": false, 318 | "spice_external_command": "spice \"%I\"", 319 | "spice_model_current_sheet_as_root": true, 320 | "spice_save_all_currents": false, 321 | "spice_save_all_voltages": false, 322 | "subpart_first_id": 65, 323 | "subpart_id_separator": 0 324 | }, 325 | "sheets": [ 326 | [ 327 | "683ce4bc-ff39-4a7c-bc2d-3e6ddc8eca85", 328 | "" 329 | ] 330 | ], 331 | "text_variables": {} 332 | } 333 | -------------------------------------------------------------------------------- /schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard_rev1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard_rev1.pdf -------------------------------------------------------------------------------- /schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard_rev2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard_rev2.pdf -------------------------------------------------------------------------------- /schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard_rev3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/queueRAM/ti_graph_link/8adb53e1068db6b884a9f85c4928d743b3b6a07c/schematics/ti_silver_link_breadboard/ti_silver_link_okrayo_breadboard_rev3.pdf -------------------------------------------------------------------------------- /ti_graph_link_silver.asm: -------------------------------------------------------------------------------- 1 | ; Disassembly of TI silver Graph Link program data extracted from 2 | ; EEPROM connected to TUSB3410 3 | 4 | ; TUSB3410 contains 8052 microprocessor. The bootloader in ROM will 5 | ; Extract verify valid signature and program header and copy the program 6 | ; contents from EEPROM to RAM. 7 | 8 | ; Build with sdcc toolchain: 9 | ; $ make 10 | ; sdas8051 -lops ti_graph_link_silver.asm 11 | ; sdcc -mmcs51 --code-size 0x1400 ti_graph_link_silver.rel -o ti_graph_link_silver.hex 12 | ; makebin -p ti_graph_link_silver.hex ti_graph_link_silver.bin 13 | 14 | ; definitions of registers 15 | OEPCNF_2 = 0xff10 16 | OEPBBAX_2 = 0xff11 17 | OEPBCTX_2 = 0xff12 18 | OEPSIZXY_2 = 0xff17 19 | 20 | IEPCNF_1 = 0xff48 21 | IEPBBAX_1 = 0xff49 22 | IEPBCTX_1 = 0xff4a 23 | IEPSIZXY_1 = 0xff4f 24 | 25 | IEPCNFG_0 = 0xff80 26 | IEPBCNT_0 = 0xff81 27 | OEPCNFG_0 = 0xff82 28 | OEPBCNT_0 = 0xff83 29 | 30 | WDCSR = 0xff93 31 | VECINT = 0xff92 32 | 33 | I2CSTA = 0xfff0 34 | I2CDATO = 0xfff1 35 | I2CADR = 0xfff3 36 | 37 | USBCTL = 0xfffc 38 | USBMSK = 0xfffd 39 | USBSTA = 0xfffe 40 | FUNADR = 0xffff 41 | 42 | .area PSEG (PAG,XDATA) 43 | 44 | ;-------------------------------------------------------- 45 | ; data 46 | ;-------------------------------------------------------- 47 | .area DSEG (DATA) 48 | 49 | .word 0, 0, 0, 0, 0, 0, 0, 0 50 | .word 0, 0, 0, 0, 0, 0, 0, 0 51 | 52 | dat_20_start: 53 | dat_20_end: 54 | 55 | i2c_addr: ; 0x20 56 | .byte 0 57 | 58 | dat_21: 59 | .byte 0 60 | 61 | eeprom_addr: 62 | .word 0 63 | 64 | dat_24: 65 | .word 0 66 | 67 | dat_26: 68 | .byte 0 69 | dat_27: ; TODO: sometimes this is word, sometimes byte? 70 | .word 0 71 | 72 | .byte 0, 0, 0, 0, 0, 0, 0 73 | 74 | .word 0, 0, 0, 0, 0 75 | .byte 0 76 | 77 | bss_start: 78 | i2c_speed: ; 0x3b 79 | .byte 0 80 | 81 | .word 0 82 | 83 | dat_3e: 84 | .word 0 85 | 86 | .word 0, 0, 0 87 | .byte 0 88 | 89 | dat_47: 90 | .byte 0 91 | 92 | .byte 0, 0, 0, 0, 0, 0 93 | 94 | dat_4e: 95 | .byte 0 96 | 97 | .byte 0, 0, 0, 0 98 | 99 | dat_53: 100 | .byte 0 101 | .byte 0, 0, 0, 0, 0 102 | 103 | dat_59: 104 | .byte 0 105 | 106 | dat_5a: 107 | .byte 0 108 | 109 | dat_5b: 110 | .byte 0 111 | 112 | dat_5c: 113 | .byte 0 114 | 115 | dat_5d: 116 | .byte 0 117 | 118 | .byte 0, 0, 0, 0 119 | bss_end: 120 | 121 | data_start: 122 | dat_62: 123 | .word 0 124 | 125 | dat_64: 126 | .byte 0 127 | 128 | dat_65: 129 | .byte 0 130 | 131 | .byte 0, 0 132 | 133 | dat_68: 134 | .byte 0 135 | data_end: 136 | 137 | stack_start: 138 | 139 | ;-------------------------------------------------------- 140 | ; xdata 141 | ;-------------------------------------------------------- 142 | .area XSEG (XDATA) 143 | 144 | xdat_0001: 145 | 146 | ;-------------------------------------------------------- 147 | ; code 148 | ;-------------------------------------------------------- 149 | .area HOME (CODE) 150 | 151 | ; interrupt vector @ 0x0000 152 | int_vec: 153 | ljmp reset_isr ; 0x0000: Reset 154 | ljmp exti_isr ; 0x0003: External Interrupt 0 155 | nop 156 | nop 157 | nop 158 | nop 159 | nop 160 | ljmp timer0_isr ; 0x000b: Timer-0 Interrupt 161 | 162 | ;-------------------------------------------------------- 163 | ; code 164 | ;-------------------------------------------------------- 165 | .area CSEG (CODE) 166 | 167 | reset_isr: ; 0x000e 168 | mov sp, #stack_start-1 169 | lcall fcn_02c9 170 | mov a, r4 171 | orl a, r5 172 | jz lbl_0082 173 | mov r0, #bss_end-1 174 | sjmp lbl_001f 175 | lbl_001c: 176 | mov @r0, #0x00 177 | dec r0 178 | lbl_001f: 179 | cjne r0, #bss_start, lbl_001c 180 | mov r0, #0x1f 181 | sjmp lbl_0029 182 | lbl_0026: 183 | mov @r0, #0x00 184 | dec r0 185 | lbl_0029: 186 | cjne r0, #0x1f, lbl_0026 187 | mov r0, #0x1f 188 | sjmp lbl_0033 189 | lbl_0030: 190 | mov @r0, #0x00 191 | dec r0 192 | lbl_0033: 193 | cjne r0, #0x1f, lbl_0030 194 | mov dptr, #0x0001 195 | mov r6, dph 196 | mov r7, dpl 197 | mov dptr, #0x0001 198 | lbl_0040: 199 | lcall ptr_equal 200 | jz lbl_004a 201 | clr a 202 | movx @dptr, a 203 | inc dptr 204 | sjmp lbl_0040 205 | lbl_004a: 206 | mov dptr, #0x0001 207 | mov r0, dpl 208 | mov dptr, #0x0001 209 | mov r1, dpl 210 | lbl_0054: 211 | mov a, r0 212 | clr c 213 | subb a, r1 214 | jnc lbl_005e 215 | mov @r0, #0x00 216 | inc r0 217 | sjmp lbl_0054 218 | lbl_005e: 219 | mov dptr, #cdat_00e9 220 | lcall data_copy 221 | mov dptr, #cdat_00ed 222 | lcall data_copy 223 | mov dptr, #cdat_00f1 224 | lcall data_copy 225 | mov dptr, #cdat_00f5 226 | lcall xdata_copy 227 | mov dptr, #cdat_00fb 228 | lcall xdata_copy 229 | mov dptr, #cdat_0101 230 | lcall xdata_copy 231 | lbl_0082: 232 | mov psw, #0x00 233 | lcall fcn_042f 234 | ljmp loop_forever 235 | 236 | ; return 0 if (r7 == dpl) && (r6 == dph) 237 | ; else return non-zero 238 | ptr_equal: ; 008b 239 | mov a, r7 240 | xrl a, dpl 241 | jnz lbl_0093 242 | mov a, r6 243 | xrl a, dph 244 | lbl_0093: 245 | ret 246 | 247 | ; memcpy-like 248 | ; input: dptr (code) points to array of 3 pointers 249 | ; uint8 dest_start (data) 250 | ; uint8 dest_end (data) 251 | ; uint16 source (code) 252 | data_copy: ; 0094 253 | clr a 254 | movc a, @a+dptr 255 | mov r0, a ; r0 = dest_start 256 | mov a, #0x01 257 | movc a, @a+dptr 258 | mov r1, a ; r1 = dest_end 259 | mov a, #0x02 260 | movc a, @a+dptr 261 | mov r6, a 262 | mov a, #0x03 263 | movc a, @a+dptr 264 | mov dpl, a 265 | mov dph, r6 ; dptr = source 266 | lbl_00a6: 267 | mov a, r0 268 | xrl a, r1 269 | jnz lbl_00ab ; if r0 == r1, return 270 | ret 271 | lbl_00ab: 272 | clr a 273 | movc a, @a+dptr ; a = *src 274 | mov @r0, a ; *dst = a 275 | inc dptr ; src++ 276 | inc r0 ; dst++ 277 | sjmp lbl_00a6 278 | 279 | ; memcpy-like 280 | ; input: dptr (code) points to array of 3 16-bit pointers 281 | ; ptr[0] = dest (xdata) 282 | ; ptr[1] = source_end (code) 283 | ; ptr[2] = source_start (code) 284 | xdata_copy: 285 | clr a 286 | movc a, @a+dptr 287 | mov r4, a ; r4 = dest.l 288 | mov a, #0x01 289 | movc a, @a+dptr 290 | mov r5, a ; r5 = dest.h 291 | mov a, #0x02 292 | movc a, @a+dptr 293 | mov r6, a ; r6 = source_end.l 294 | mov a, #0x03 295 | movc a, @a+dptr 296 | mov r7, a ; r7 = source_end.h 297 | mov a, #0x04 298 | movc a, @a+dptr 299 | mov r0, a 300 | mov a, #0x05 301 | movc a, @a+dptr 302 | mov dpl, a 303 | mov dph, r0 ; dptr = source_start 304 | lbl_00cc: 305 | lcall ptr_equal 306 | jnz lbl_00d2 ; if source == source_end, return 307 | ret 308 | lbl_00d2: 309 | clr a 310 | movc a, @a+dptr ; a = *src 311 | inc dptr ; dptr++ 312 | mov r0, dph 313 | mov r1, dpl ; r0, r1 = dptr (src += 1) 314 | mov dph, r4 315 | mov dpl, r5 316 | movx @dptr, a ; *dest = a 317 | inc dptr 318 | mov r4, dph 319 | mov r5, dpl 320 | mov dph, r0 321 | mov dpl, r1 ; dptr = r0, r1 322 | sjmp lbl_00cc 323 | 324 | cdat_00e9: 325 | .byte dat_20_start, dat_20_end 326 | .word cdat_027e 327 | cdat_00ed: 328 | .byte dat_20_start, dat_20_end 329 | .word cdat_027e 330 | cdat_00f1: 331 | .byte data_start, data_end 332 | .word cdat_027e 333 | cdat_00f5: 334 | .word xdat_0001, cdat_0285_start, cdat_0285_end 335 | cdat_00fb: 336 | .word xdat_0001, cdat_0285_start, cdat_0285_end 337 | cdat_0101: 338 | .word xdat_0001, cdat_02c9_start, cdat_02c9_end 339 | 340 | loop_forever: ; 0107 341 | sjmp loop_forever 342 | 343 | ; jump table lookup 344 | ; dptr: points to jump table 345 | ; format: u16 jump_addr, u8 value 346 | ; a: value to compare 347 | exti_isr_jmp_table_lookup: ; 0109 348 | pop dph 349 | pop dpl 350 | mov b, a 351 | lbl_010f: 352 | clr a 353 | movc a, @a+dptr 354 | jnz lbl_011c 355 | mov a, #0x01 356 | movc a, @a+dptr 357 | jnz lbl_011c 358 | inc dptr 359 | inc dptr 360 | sjmp lbl_0128 361 | lbl_011c: 362 | mov a, #0x02 363 | movc a, @a+dptr 364 | xrl a, b 365 | jz lbl_0128 366 | inc dptr 367 | inc dptr 368 | inc dptr 369 | sjmp lbl_010f 370 | lbl_0128: 371 | mov a, #0x01 372 | movc a, @a+dptr 373 | push acc 374 | clr a 375 | movc a, @a+dptr 376 | push acc 377 | ret 378 | 379 | ; inputs: r5, r6, r7 380 | ; output: a 381 | fcn_0132: 382 | lcall fcn_01ef ; a = fcn_01ef(r5, r6, r7) 383 | ljmp lbl_0138 384 | lbl_0138: 385 | jnb acc.0, lbl_0142 386 | jb acc.3, lbl_0140 387 | mov a, @r0 ; if (a == 0x01) return *r0; 388 | ret 389 | lbl_0140: 390 | mov a, @r1 ; else if (a == 0x09) return *r1; 391 | ret 392 | lbl_0142: 393 | jnb acc.1, lbl_014c 394 | jb acc.3, lbl_014a 395 | movx a, @r0 ; else if (a == 0x02) return *(xdat)r0; 396 | ret 397 | lbl_014a: 398 | movx a, @r1 ; else if (a == 0x0a) return *(xdat)r1; 399 | ret 400 | lbl_014c: 401 | jnb acc.2, lbl_0151 402 | movx a, @dptr ; else if (a == 0x04) return *(xdat)dptr; 403 | ret 404 | lbl_0151: 405 | clr a 406 | movc a, @a+dptr ; else return *(cdat)dptr; 407 | ret 408 | 409 | fcn_0154: 410 | lcall fcn_0213 411 | ljmp lbl_015a 412 | lbl_015a: 413 | mov r3, b 414 | lcall fcn_0164 415 | xch a, r3 416 | xch a, b 417 | xch a, r3 418 | ret 419 | 420 | fcn_0164: 421 | jnb acc.0, lbl_0177 422 | jb acc.3, lbl_0170 423 | mov a, @r0 424 | mov b, a 425 | inc r0 426 | mov a, @r0 ; if (a == 0x01) return a, b = *(r0+1), *r0; 427 | ret 428 | lbl_0170: 429 | mov a, @r1 430 | mov b, a 431 | inc r1 432 | mov a, @r1 433 | dec r1 ; else if (a == 0x09) return a, b = *(r1+1), *r1; 434 | ret 435 | lbl_0177: 436 | jnb acc.1, lbl_018a 437 | jb acc.3, lbl_0183 438 | movx a, @r0 439 | mov b, a 440 | inc r0 441 | movx a, @r0 ; else if (a == 0x02) return a, b = *(xdata)(r0+1), *(xdata)r0; 442 | ret 443 | lbl_0183: 444 | movx a, @r1 445 | mov b, a 446 | inc r1 447 | movx a, @r1 448 | dec r1 ; else if (a == 0x0a) return a, b = *(xdata)(r1+1), *(xdata)r1; 449 | ret 450 | lbl_018a: 451 | jnb acc.2, lbl_0193 452 | movx a, @dptr 453 | mov b, a 454 | inc dptr 455 | movx a, @dptr ; else if (a == 0x04) return a, b = *(xdata)(dptr+1), *(xdata)dptr; 456 | ret 457 | lbl_0193: 458 | clr a 459 | movc a, @a+dptr 460 | mov b, a 461 | mov a, #0x01 462 | movc a, @a+dptr ; else return a, b = *(cdat)(dptr+1), *(cdat)dptr; 463 | ret 464 | 465 | ; inputs: r1, r2, r3 466 | ; return: a 467 | ; fcn_019b(r1, r2, r3) { 468 | ; switch (r3) { 469 | ; case 0x00: 470 | ; return 0x09; 471 | ; case 0x01: 472 | ; dptr = r2, r1; 473 | ; return 0x04; 474 | ; case 0x02: 475 | ; dptr = r2, r1; 476 | ; return 0x10; 477 | ; default: 478 | ; return 0x0a; 479 | ; } 480 | fcn_019b: 481 | cjne r3, #0x00, lbl_01a1 482 | mov a, #0x09 483 | ret 484 | lbl_01a1: 485 | cjne r3, #0x01, lbl_01ab 486 | mov dpl, r1 487 | mov dph, r2 488 | mov a, #0x04 489 | ret 490 | lbl_01ab: 491 | cjne r3, #0x02, lbl_01b5 492 | mov dpl, r1 493 | mov dph, r2 494 | mov a, #0x10 495 | ret 496 | lbl_01b5: 497 | mov a, #0x0a 498 | ret 499 | 500 | ljmp fcn_unused_01bb ; TODO: why? 501 | 502 | ; inputs: r1, r2, r3, dptr 503 | ; outputs: a, r0, dptr 504 | ; fcn_unused_01bb() { 505 | ; switch (r3) { 506 | ; case 0x00: 507 | ; r0 = dpl + r1; 508 | ; return 0x01; 509 | ; case 0x01: 510 | ; dptr += r2, r1; 511 | ; return 0x04; 512 | ; case 0x02: 513 | ; dptr += r2, r1; 514 | ; return 0x10; 515 | ; default: 516 | ; r0 = dpl + r1; 517 | ; return 0x0a; 518 | ; } 519 | fcn_unused_01bb: 520 | cjne r3, #0x00, lbl_01c5 521 | mov a, r1 522 | add a, dpl 523 | mov r0, a 524 | mov a, #0x01 525 | ret 526 | lbl_01c5: 527 | cjne r3, #0x01, lbl_01d5 528 | mov a, r1 529 | add a, dpl 530 | mov dpl, a 531 | mov a, r2 532 | addc a, dph 533 | mov dph, a 534 | mov a, #0x04 535 | ret 536 | lbl_01d5: 537 | cjne r3, #0x02, lbl_01e5 538 | mov a, r1 539 | add a, dpl 540 | mov dpl, a 541 | mov a, r2 542 | addc a, dph 543 | mov dph, a 544 | mov a, #0x10 545 | ret 546 | lbl_01e5: 547 | mov a, r1 548 | add a, dpl 549 | mov r0, a 550 | mov a, #0x02 551 | ret 552 | 553 | ljmp fcn_01ef ; TODO: why? 554 | 555 | ; switch (r7) { 556 | ; case 0: r0 = r5; a = 1; break; 557 | ; case 1: dptr = r5, r6; a = 4; break; 558 | ; case 2: dptr = r5, r6; a = 16; break; 559 | ; default: r0 = r5; a = 2; break; 560 | ; } 561 | fcn_01ef: 562 | cjne r7, #0x00, lbl_01f7 563 | mov a, r5 564 | mov r0, a 565 | mov a, #0x01 566 | ret 567 | lbl_01f7: 568 | cjne r7, #0x01, lbl_0201 569 | mov dpl, r5 570 | mov dph, r6 571 | mov a, #0x04 572 | ret 573 | lbl_0201: 574 | cjne r7, #0x02, lbl_020b 575 | mov dpl, r5 576 | mov dph, r6 577 | mov a, #0x10 578 | ret 579 | lbl_020b: 580 | mov a, r5 581 | mov r0, a 582 | mov a, #0x02 583 | ret 584 | 585 | ljmp fcn_0213 ; TODO: why? 586 | 587 | ; inputs: r7, r5, r6, dpl, dph 588 | ; switch (r7) { 589 | ; case 0x00: 590 | ; r0 = r5 + dpl; 591 | ; a = 0x01; 592 | ; return; 593 | ; case 0x01: 594 | ; dpl = r5 + dpl; 595 | ; dph = r6 + dph; 596 | ; a = 0x04; 597 | ; return; 598 | ; case 0x02: 599 | ; dpl = r5 + dpl; 600 | ; dph = r6 + dph; 601 | ; a = 0x10; 602 | ; return; 603 | ; default: 604 | ; r0 = r5 + dpl; 605 | ; a = 0x02; 606 | ; return; 607 | ; } 608 | fcn_0213: 609 | cjne r7, #0x00, lbl_021d 610 | mov a, r5 611 | add a, dpl 612 | mov r0, a 613 | mov a, #0x01 614 | ret 615 | lbl_021d: 616 | cjne r7, #0x01, lbl_022d 617 | mov a, r5 618 | add a, dpl 619 | mov dpl, a 620 | mov a, r6 621 | addc a, dph 622 | mov dph, a 623 | mov a, #0x04 624 | ret 625 | lbl_022d: 626 | cjne r7, #0x02, lbl_023d 627 | mov a, r5 628 | add a, dpl 629 | mov dpl, a 630 | mov a, r6 631 | addc a, dph 632 | mov dph, a 633 | mov a, #0x10 634 | ret 635 | lbl_023d: 636 | mov a, r5 637 | add a, dpl 638 | mov r0, a 639 | mov a, #0x02 640 | ret 641 | 642 | ljmp fcn_unused_0247 ; TODO: why? 643 | 644 | fcn_unused_0247: 645 | push acc 646 | lcall fcn_019b 647 | ljmp lbl_024f 648 | lbl_024f: 649 | jnb acc.0, lbl_025d 650 | jb acc.3, lbl_0259 651 | pop acc 652 | mov @r0, a 653 | ret 654 | lbl_0259: 655 | pop acc 656 | mov @r1, a 657 | ret 658 | lbl_025d: 659 | jnb acc.1, lbl_026b 660 | jb acc.3, lbl_0267 661 | pop acc 662 | movx @r0, a 663 | ret 664 | lbl_0267: 665 | pop acc 666 | movx @r1, a 667 | ret 668 | lbl_026b: 669 | pop acc 670 | movx @dptr, a 671 | ret 672 | 673 | ; deref dptr from cdat 674 | ; dptr = *(u16 cdat*)dptr; 675 | fcn_026f: 676 | mov a, #0x01 677 | movc a, @a+dptr 678 | mov b, a 679 | clr a 680 | movc a, @a+dptr 681 | mov dph, a 682 | mov dpl, b 683 | ret 684 | 685 | ; jump to dptr 686 | fcn_027c: 687 | clr a 688 | jmp @a+dptr 689 | 690 | cdat_027e: 691 | .word 0x00fa 692 | .byte 0x00, 0x00, 0x00, 0x00, 0x00 693 | cdat_0285_start: 694 | cdat_0285_end: 695 | ; jump table for fcn_064b 696 | .word lbl_08fd, 0x0020 697 | .word lbl_0663, 0x0021 698 | .word lbl_06e5, 0x0027 699 | .word lbl_072a, 0x002a 700 | .word lbl_06f7, 0x0028 701 | .word lbl_07cb, 0x0027 702 | .word lbl_0807, 0x0028 703 | .word lbl_07b3, 0x0027 704 | .word lbl_07f5, 0x0027 705 | .word lbl_0770, 0x0029 706 | .word lbl_099d, 0x0020 707 | .word lbl_08ac, 0x0020 708 | .word lbl_08cb, 0x0020 709 | .word lbl_0918, 0x0020 710 | .word lbl_092c, 0x0021 711 | .word lbl_0990, 0x0020 712 | ; jump for fcn_0b67 713 | .word lbl_0bb1, 0x0029 714 | cdat_02c9_start: 715 | cdat_02c9_end: 716 | 717 | ; returns 0x01, 0x00 718 | fcn_02c9: 719 | mov r4, #0x01 720 | mov r5, #0x00 721 | ret 722 | 723 | exti_isr: ; 02ce 724 | push acc 725 | push b 726 | push dpl 727 | push dph 728 | push psw 729 | mov a, r0 730 | push acc 731 | mov a, r1 732 | push acc 733 | mov a, r2 734 | push acc 735 | mov a, r3 736 | push acc 737 | mov a, r4 738 | push acc 739 | mov a, r5 740 | push acc 741 | mov a, r6 742 | push acc 743 | mov a, r7 744 | push acc 745 | mov dptr, #WDCSR 746 | movx a, @dptr 747 | orl a, #0x01 ; WDT: kick the watchdog 748 | movx @dptr, a 749 | mov dptr, #VECINT 750 | movx a, @dptr 751 | lcall exti_isr_jmp_table_lookup 752 | ; jump table 753 | .word lbl_0328 754 | .byte 0x14 755 | .word lbl_031d 756 | .byte 0x22 757 | .word lbl_0346 758 | .byte 0x32 759 | .word lbl_0356 760 | .byte 0x38 761 | .word lbl_0367 762 | .byte 0x3a 763 | .word lbl_0378 764 | .byte 0x3c 765 | .word lbl_038c 766 | .byte 0x3e 767 | .word lbl_033c 768 | .byte 0x44 769 | .word lbl_0332 770 | .byte 0x46 771 | .word 0x0000 ; default case 772 | .word lbl_03a4 773 | lbl_031d: ; 0x22 = Input endpoint 1 774 | lcall fcn_void_0b5c 775 | clr a 776 | mov dptr, #VECINT 777 | movx @dptr, a 778 | ljmp lbl_03aa 779 | lbl_0328: ; 0x14 = Output endpoint 2 780 | lcall fcn_0b5d 781 | clr a 782 | mov dptr, #VECINT 783 | movx @dptr, a 784 | sjmp lbl_03aa 785 | lbl_0332: ; 0x46 = Output endpoint 0 786 | lcall fcn_0b44 787 | clr a 788 | mov dptr, #VECINT 789 | movx @dptr, a 790 | sjmp lbl_03aa 791 | lbl_033c: ; 0x44 = Input endpoint 0 792 | lcall fcn_0b2c 793 | clr a 794 | mov dptr, #VECINT 795 | movx @dptr, a 796 | sjmp lbl_03aa 797 | lbl_0346: ; 0x32 = SETUP packet received 798 | lcall fcn_0ae0 799 | mov a, #0x04 800 | mov dptr, #USBSTA 801 | movx @dptr, a 802 | clr a 803 | mov dptr, #VECINT 804 | movx @dptr, a 805 | sjmp lbl_03aa 806 | lbl_0356: ; 0x38 = RESR interrupt 807 | mov r0, #dat_64 808 | mov @r0, #0x00 809 | mov a, #0x20 810 | mov dptr, #USBSTA 811 | movx @dptr, a 812 | clr a 813 | mov dptr, #VECINT 814 | movx @dptr, a 815 | sjmp lbl_03aa 816 | lbl_0367: ; 0x3a = SUSR interrupt 817 | mov r0, #dat_64 818 | mov @r0, #0x01 819 | mov a, #0x40 820 | mov dptr, #USBSTA 821 | movx @dptr, a 822 | clr a 823 | mov dptr, #VECINT 824 | movx @dptr, a 825 | sjmp lbl_03aa 826 | lbl_0378: ; 0x3c = RSTR interrupt 827 | mov r0, #dat_64 828 | mov @r0, #0x00 829 | lcall fcn_048e 830 | mov a, #0x80 831 | mov dptr, #USBSTA 832 | movx @dptr, a 833 | clr a 834 | mov dptr, #VECINT 835 | movx @dptr, a 836 | sjmp lbl_03aa 837 | lbl_038c: ; 0x3e = Wakeup 838 | mov r0, #dat_64 839 | mov @r0, #0x00 840 | mov a, #0x02 841 | mov dptr, #USBSTA 842 | movx @dptr, a 843 | clr a 844 | mov dptr, #VECINT 845 | movx @dptr, a 846 | mov dptr, #USBCTL 847 | movx a, @dptr 848 | orl a, #0x20 849 | movx @dptr, a 850 | sjmp lbl_03aa 851 | lbl_03a4: ; default 852 | mov a, #0xff 853 | mov dptr, #VECINT 854 | movx @dptr, a 855 | lbl_03aa: 856 | mov dptr, #WDCSR 857 | movx a, @dptr 858 | orl a, #0x01 ; WDT: kick the watchdog 859 | movx @dptr, a 860 | pop acc 861 | mov r7, a 862 | pop acc 863 | mov r6, a 864 | pop acc 865 | mov r5, a 866 | pop acc 867 | mov r4, a 868 | pop acc 869 | mov r3, a 870 | pop acc 871 | mov r2, a 872 | pop acc 873 | mov r1, a 874 | pop acc 875 | mov r0, a 876 | pop psw 877 | pop dph 878 | pop dpl 879 | pop b 880 | pop acc 881 | reti 882 | 883 | ; Timer-0 Interrupt Handler 884 | ; * kicks watchdog 885 | ; * reloads 0xF830 into th0/tl0 886 | ; * decrements 0x63, if 0, reload 0xfa and decrement dat_62 887 | timer0_isr: 888 | push acc 889 | push dpl 890 | push dph 891 | mov a, r0 892 | push acc 893 | mov dptr, #WDCSR 894 | movx a, @dptr 895 | orl a, #0x01 ; WDT: kick the watchdog 896 | movx @dptr, a 897 | mov th0, #0xf8 ; TH0: Timer0 high 898 | mov tl0, #0x30 ; TL0: Timer0 low 899 | mov r0, #dat_62 900 | mov a, @r0 901 | jnz lbl_03f9 902 | pop acc 903 | mov r0, a 904 | pop dph 905 | pop dpl 906 | pop acc 907 | reti 908 | lbl_03f9: 909 | mov r0, #0x63 910 | dec @r0 911 | mov r0, #0x63 912 | mov a, @r0 913 | jnz lbl_0408 914 | mov r0, #0x63 915 | mov @r0, #0xfa 916 | mov r0, #dat_62 917 | dec @r0 918 | lbl_0408: 919 | pop acc 920 | mov r0, a 921 | pop dph 922 | pop dpl 923 | pop acc 924 | reti 925 | 926 | initialize_hardware: ; 0412 927 | clr ie.7 ; EA: disable all interrupts 928 | lcall usb_init 929 | mov r4, #0x01 930 | lcall i2c_set_bus_speed 931 | anl tmod, #0xf0 ; TMOD: timer mode 932 | orl tmod, #0x01 ; TMOD: Timer0 = 16-bit 933 | mov th0, #0xf8 ; TH0: Timer0 high 934 | mov tl0, #0x30 ; TL0: Timer0 low 935 | clr tcon.5 ; TF0: Timer0 overflow flag 936 | setb tcon.4 ; TR0: Timer0 run control bit 937 | setb ie.1 ; ET0: Timer0 interrupt enable 938 | ret 939 | 940 | fcn_042f: 941 | mov dptr, #WDCSR 942 | movx a, @dptr 943 | orl a, #0x01 ; WDT: kick the watchdog 944 | movx @dptr, a 945 | setb p3.3 946 | setb p3.4 947 | lcall initialize_hardware 948 | setb ie.7 ; EA: enable all interrupts 949 | setb ie.0 ; EX0: external interrupt 0 enable 950 | mov dptr, #USBCTL 951 | movx a, @dptr 952 | orl a, #0x80 953 | movx @dptr, a 954 | lbl_0448: ; while (dat_65 != 0x02) { 955 | mov r0, #dat_65 956 | mov a, @r0 957 | xrl a, #0x02 958 | jz lbl_0451 959 | sjmp lbl_0448 ; } 960 | lbl_0451: 961 | lcall fcn_0d90 962 | mov r0, #dat_5c 963 | mov a, @r0 964 | jnz lbl_045e 965 | mov r0, #dat_5b 966 | mov a, @r0 967 | jz lbl_0474 968 | lbl_045e: 969 | mov r0, #dat_5c 970 | mov a, @r0 971 | mov r0, #dat_5b 972 | orl a, @r0 973 | mov r1, #dat_53 974 | mov r4, a 975 | mov a, @r1 976 | orl a, r4 977 | mov r0, #dat_53 978 | mov @r0, a 979 | mov r0, #dat_5c 980 | mov @r0, #0x00 981 | mov r0, #dat_5b 982 | mov @r0, #0x00 983 | lbl_0474: 984 | mov r0, #dat_64 985 | mov a, @r0 986 | dec a 987 | jnz lbl_048b 988 | mov dptr, #WDCSR 989 | movx a, @dptr 990 | orl a, #0x01 ; WDT: kick the watchdog 991 | movx @dptr, a 992 | orl pcon, #0x01 993 | mov dptr, #WDCSR 994 | movx a, @dptr 995 | orl a, #0x01 ; WDT: kick the watchdog 996 | movx @dptr, a 997 | lbl_048b: 998 | sjmp lbl_0448 999 | ret 1000 | 1001 | fcn_048e: 1002 | mov dptr, #WDCSR 1003 | movx a, @dptr 1004 | orl a, #0x01 ; WDT: kick the watchdog 1005 | movx @dptr, a 1006 | mov r0, #dat_3e 1007 | mov a, #0xff 1008 | mov @r0, a 1009 | inc r0 1010 | mov @r0, a 1011 | mov r0, #0x40 1012 | mov a, #0xff 1013 | mov @r0, a 1014 | inc r0 1015 | mov @r0, a 1016 | mov r0, #dat_4e 1017 | mov @r0, #0x00 1018 | mov r0, #0x44 1019 | clr a 1020 | mov @r0, a 1021 | inc r0 1022 | mov @r0, a 1023 | inc r0 1024 | mov @r0, a 1025 | mov r0, #dat_47 1026 | clr a 1027 | mov @r0, a 1028 | inc r0 1029 | mov @r0, a 1030 | inc r0 1031 | mov @r0, a 1032 | mov r0, #0x3c 1033 | mov @r0, #0x00 1034 | mov r0, #0x3d 1035 | mov @r0, #0x00 1036 | mov r0, #dat_64 1037 | mov @r0, #0x00 1038 | mov a, #0x80 1039 | mov dptr, #IEPBCNT_0 1040 | movx @dptr, a 1041 | mov a, #0x80 1042 | mov dptr, #OEPBCNT_0 1043 | movx @dptr, a 1044 | mov a, #0x8c 1045 | mov dptr, #IEPCNFG_0 1046 | movx @dptr, a 1047 | mov a, #0x8c 1048 | mov dptr, #OEPCNFG_0 1049 | movx @dptr, a 1050 | ljmp fcn_0b67 1051 | 1052 | usb_init: ; 04de 1053 | clr a 1054 | mov dptr, #FUNADR 1055 | movx @dptr, a ; *FUNADR = 0x00 1056 | mov r0, #dat_64 1057 | mov @r0, #0x00 1058 | clr a 1059 | mov dptr, #USBCTL 1060 | movx @dptr, a ; *USBCTL = 0x00 1061 | clr a 1062 | mov dptr, #IEPCNFG_0 1063 | movx @dptr, a ; *IEPCNCFG_0 = 0x00 1064 | clr a 1065 | mov dptr, #OEPCNFG_0 1066 | movx @dptr, a ; *OEPCNFG_0 = 0x00 1067 | clr a 1068 | mov dptr, #OEPCNF_2 1069 | movx @dptr, a ; *OEPCNF_2 = 0x00 1070 | mov a, #0xe6 1071 | mov dptr, #USBMSK 1072 | movx @dptr, a ; *USBMSK = RSTR | SUSR | RESR | SETUP | WAKEUP 1073 | ret 1074 | 1075 | ; void fcn_0502(void) { 1076 | ; kick_watchdog(); 1077 | ; *IEPCNFG_0 |= 0x08; // USB stall condition 1078 | ; *OEPCNFG_0 |= 0x08; // USB stall condition 1079 | ; } 1080 | fcn_0502: 1081 | mov dptr, #WDCSR 1082 | movx a, @dptr 1083 | orl a, #0x01 ; WDT: kick the watchdog 1084 | movx @dptr, a 1085 | mov dptr, #IEPCNFG_0 1086 | movx a, @dptr 1087 | orl a, #0x08 ; STALL 1088 | movx @dptr, a 1089 | mov dptr, #OEPCNFG_0 1090 | movx a, @dptr 1091 | orl a, #0x08 ; STALL 1092 | movx @dptr, a 1093 | ret 1094 | 1095 | ; void clear_output_byte_count(void) { 1096 | ; kick_watchdog(); 1097 | ; *OEPBCNT_0 = 0x00; 1098 | ; } 1099 | clear_output_byte_count: ; 0518 1100 | mov dptr, #WDCSR 1101 | movx a, @dptr 1102 | orl a, #0x01 ; WDT: kick the watchdog 1103 | movx @dptr, a 1104 | clr a 1105 | mov dptr, #OEPBCNT_0 1106 | movx @dptr, a 1107 | ret 1108 | 1109 | ; void fcn_0525(void) { 1110 | ; kick_watchdog(); 1111 | ; *OEPCNFG_0 |= 0x08; // USB stall condition 1112 | ; } 1113 | fcn_0525: 1114 | mov dptr, #WDCSR 1115 | movx a, @dptr 1116 | orl a, #0x01 ; WDT: kick the watchdog 1117 | movx @dptr, a 1118 | mov dptr, #OEPCNFG_0 1119 | movx a, @dptr 1120 | orl a, #0x08 1121 | movx @dptr, a 1122 | ret 1123 | 1124 | fcn_0534: 1125 | mov r0, #0x3f 1126 | mov a, @r0 1127 | inc a 1128 | jnz lbl_0542 1129 | dec r0 1130 | mov a, @r0 1131 | inc a 1132 | jnz lbl_0542 1133 | ljmp lbl_05e9 1134 | lbl_0542: 1135 | setb c 1136 | mov r0, #0x3f 1137 | mov a, @r0 1138 | subb a, #0x08 1139 | dec r0 1140 | mov a, @r0 1141 | subb a, #0x00 1142 | jc lbl_0563 1143 | mov r0, #0x3f 1144 | mov a, @r0 1145 | add a, #0xf8 1146 | mov @r0, a 1147 | dec r0 1148 | mov a, @r0 1149 | addc a, #0xff 1150 | mov @r0, a 1151 | mov r0, #dat_4e 1152 | mov @r0, #0x01 1153 | mov r0, #0x20 1154 | mov @r0, #0x08 1155 | sjmp lbl_05a5 1156 | lbl_0563: 1157 | clr c 1158 | mov r0, #0x3f 1159 | mov a, @r0 1160 | subb a, #0x08 1161 | dec r0 1162 | mov a, @r0 1163 | subb a, #0x00 1164 | jnc lbl_0582 1165 | mov r0, #0x3f 1166 | mov a, @r0 1167 | mov r0, #0x20 1168 | mov @r0, a 1169 | mov r0, #dat_3e 1170 | mov a, #0xff 1171 | mov @r0, a 1172 | inc r0 1173 | mov @r0, a 1174 | mov r0, #dat_4e 1175 | mov @r0, #0x00 1176 | sjmp lbl_05a5 1177 | lbl_0582: 1178 | mov r0, #0x20 1179 | mov @r0, #0x08 1180 | mov r0, #0x43 1181 | mov a, @r0 1182 | dec a 1183 | dec r0 1184 | orl a, @r0 1185 | jnz lbl_059a 1186 | mov r0, #dat_3e 1187 | clr a 1188 | mov @r0, a 1189 | inc r0 1190 | mov @r0, a 1191 | mov r0, #dat_4e 1192 | mov @r0, #0x01 1193 | sjmp lbl_05a5 1194 | lbl_059a: 1195 | mov r0, #dat_3e 1196 | mov a, #0xff 1197 | mov @r0, a 1198 | inc r0 1199 | mov @r0, a 1200 | mov r0, #dat_4e 1201 | mov @r0, #0x00 1202 | lbl_05a5: 1203 | mov dptr, #WDCSR 1204 | movx a, @dptr 1205 | orl a, #0x01 ; WDT: kick the watchdog 1206 | movx @dptr, a 1207 | mov r0, #0x21 1208 | mov @r0, #0x00 1209 | lbl_05b0: 1210 | mov r0, #0x21 1211 | mov a, @r0 1212 | clr c 1213 | mov r0, #0x20 1214 | subb a, @r0 1215 | jnc lbl_05e0 1216 | mov r0, #0x44 1217 | mov a, @r0 1218 | mov r7, a 1219 | inc r0 1220 | mov a, @r0 1221 | mov r6, a 1222 | inc r0 1223 | mov a, @r0 1224 | mov r5, a 1225 | inc a 1226 | mov @r0, a 1227 | dec r0 1228 | jnz lbl_05c9 1229 | inc @r0 1230 | lbl_05c9: 1231 | lcall fcn_0132 1232 | mov r4, a 1233 | mov r0, #0x21 1234 | mov a, @r0 1235 | add a, #0xf8 1236 | mov dpl, a 1237 | clr a 1238 | addc a, #0xfe 1239 | mov dph, a 1240 | mov a, r4 1241 | movx @dptr, a 1242 | mov r0, #0x21 1243 | inc @r0 1244 | sjmp lbl_05b0 1245 | lbl_05e0: 1246 | mov r0, #0x20 1247 | mov a, @r0 1248 | mov dptr, #IEPBCNT_0 1249 | movx @dptr, a 1250 | sjmp lbl_05ed 1251 | lbl_05e9: 1252 | mov r0, #dat_4e 1253 | mov @r0, #0x00 1254 | lbl_05ed: 1255 | mov dptr, #WDCSR 1256 | movx a, @dptr 1257 | orl a, #0x01 ; WDT: kick the watchdog 1258 | movx @dptr, a 1259 | ret 1260 | 1261 | fcn_05f5: 1262 | mov r0, #0x44 1263 | mov a, r7 1264 | mov @r0, a 1265 | inc r0 1266 | mov a, r6 1267 | mov @r0, a 1268 | inc r0 1269 | mov a, r5 1270 | mov @r0, a 1271 | mov r0, #0x24 1272 | mov a, r7 1273 | mov @r0, a 1274 | inc r0 1275 | mov a, r6 1276 | mov @r0, a 1277 | inc r0 1278 | mov a, r5 1279 | mov @r0, a 1280 | mov dptr, #0xff07 ; 0xff00-0xff07: setup packet 1281 | movx a, @dptr 1282 | mov r4, a 1283 | mov dptr, #0xff06 ; 0xff00-0xff07: setup packet 1284 | movx a, @dptr 1285 | xch a, r4 1286 | mov r7, a 1287 | xch a, r4 1288 | mov r0, #0x23 1289 | mov @r0, a 1290 | mov a, r7 1291 | dec r0 1292 | mov @r0, a 1293 | mov r0, #dat_3e 1294 | mov a, @r0 1295 | mov r5, a 1296 | inc r0 1297 | mov a, @r0 1298 | mov r0, #0x23 1299 | clr c 1300 | subb a, @r0 1301 | mov a, r5 1302 | dec r0 1303 | subb a, @r0 1304 | jc lbl_063e 1305 | mov r0, #0x22 1306 | mov a, @r0 1307 | mov r5, a 1308 | inc r0 1309 | mov a, @r0 1310 | mov r0, #0x3f 1311 | mov @r0, a 1312 | mov a, r5 1313 | dec r0 1314 | mov @r0, a 1315 | mov r0, #0x42 1316 | clr a 1317 | mov @r0, a 1318 | inc r0 1319 | mov @r0, a 1320 | sjmp lbl_0645 1321 | lbl_063e: 1322 | mov r0, #0x42 1323 | clr a 1324 | mov @r0, a 1325 | inc r0 1326 | inc a 1327 | mov @r0, a 1328 | lbl_0645: 1329 | ljmp fcn_0534 1330 | 1331 | fcn_0648: 1332 | ljmp fcn_0525 1333 | 1334 | fcn_064b: 1335 | mov dptr, #WDCSR 1336 | movx a, @dptr 1337 | orl a, #0x01 ; WDT: kick the watchdog 1338 | movx @dptr, a 1339 | mov r0, #dat_3e 1340 | mov a, #0xff 1341 | mov @r0, a 1342 | inc r0 1343 | mov @r0, a 1344 | mov r0, #dat_4e 1345 | mov @r0, #0x00 1346 | clr a 1347 | mov dptr, #IEPBCNT_0 1348 | movx @dptr, a 1349 | ret 1350 | lbl_0663: 1351 | mov dptr, #0xff04 ; 0xff00-0xff07: setup packet 1352 | movx a, @dptr 1353 | anl a, #0x0f 1354 | mov r0, #0x20 1355 | mov @r0, a 1356 | mov r0, #0x20 1357 | mov a, @r0 1358 | jnz lbl_0676 1359 | lcall fcn_064b 1360 | sjmp lbl_06dd 1361 | lbl_0676: 1362 | mov r0, #0x20 1363 | dec @r0 1364 | mov r0, #0x20 1365 | mov a, @r0 1366 | add a, #0xfd 1367 | jc lbl_06dd 1368 | mov r0, #0x20 1369 | mov a, @r0 1370 | jnz lbl_06ae 1371 | mov r0, #0x20 1372 | mov a, @r0 1373 | mov b, #0x08 1374 | mul ab 1375 | add a, #0x48 1376 | mov dpl, a 1377 | clr a 1378 | addc a, #0xff 1379 | mov dph, a 1380 | movx a, @dptr 1381 | anl a, #0xd7 1382 | movx @dptr, a 1383 | mov r0, #0x20 1384 | mov a, @r0 1385 | mov b, #0x08 1386 | mul ab 1387 | add a, #0x4a 1388 | mov dpl, a 1389 | clr a 1390 | addc a, #0xff 1391 | mov dph, a 1392 | mov a, #0x80 1393 | movx @dptr, a 1394 | sjmp lbl_06da 1395 | lbl_06ae: 1396 | mov r0, #0x20 1397 | mov a, @r0 1398 | dec a 1399 | jnz lbl_06da 1400 | mov r0, #0x20 1401 | mov a, @r0 1402 | mov b, #0x08 1403 | mul ab 1404 | add a, #0x08 1405 | mov dpl, a 1406 | clr a 1407 | addc a, #0xff 1408 | mov dph, a 1409 | movx a, @dptr 1410 | anl a, #0xd7 1411 | movx @dptr, a 1412 | mov r0, #0x20 1413 | mov a, @r0 1414 | mov b, #0x08 1415 | mul ab 1416 | add a, #0x0a 1417 | mov dpl, a 1418 | clr a 1419 | addc a, #0xff 1420 | mov dph, a 1421 | clr a 1422 | movx @dptr, a 1423 | lbl_06da: 1424 | lcall fcn_064b 1425 | lbl_06dd: 1426 | mov dptr, #WDCSR 1427 | movx a, @dptr 1428 | orl a, #0x01 ; WDT: kick the watchdog 1429 | movx @dptr, a 1430 | ret 1431 | lbl_06e5: 1432 | lcall clear_output_byte_count 1433 | mov r0, #dat_3e 1434 | clr a 1435 | mov @r0, a 1436 | inc r0 1437 | inc a 1438 | mov @r0, a 1439 | mov r5, #0x3c 1440 | clr a 1441 | mov r6, a 1442 | mov r7, a 1443 | ljmp fcn_05f5 1444 | lbl_06f7: 1445 | mov r7, #0x00 1446 | lbl_06f9: 1447 | mov a, r7 1448 | add a, #0xee 1449 | jc lbl_0713 1450 | mov a, r7 1451 | mov dptr, #cdat_0fb3 1452 | movc a, @a+dptr 1453 | mov r4, a 1454 | mov a, r7 1455 | add a, #0x40 ; 0xf840 + r7 1456 | mov dpl, a 1457 | clr a 1458 | addc a, #0xf8 ; 0xf840 + r7 1459 | mov dph, a 1460 | mov a, r4 1461 | movx @dptr, a 1462 | inc r7 1463 | sjmp lbl_06f9 1464 | lbl_0713: 1465 | mov r0, #dat_27 1466 | mov a, r7 1467 | mov @r0, a 1468 | lcall clear_output_byte_count 1469 | mov r0, #dat_3e 1470 | clr a 1471 | mov @r0, a 1472 | inc r0 1473 | mov @r0, #0x12 1474 | mov r5, #0x40 1475 | mov r6, #0xf8 1476 | mov r7, #0x01 1477 | ljmp fcn_05f5 1478 | lbl_072a: 1479 | mov r7, #0x00 1480 | lbl_072c: 1481 | mov a, r7 1482 | add a, #0xe0 1483 | jc lbl_0746 1484 | mov a, r7 1485 | mov dptr, #cdat_0fc5 1486 | movc a, @a+dptr 1487 | mov r4, a 1488 | mov a, r7 1489 | add a, #0x40 1490 | mov dpl, a 1491 | clr a 1492 | addc a, #0xf8 ; 0xf840 + r7 1493 | mov dph, a 1494 | mov a, r4 1495 | movx @dptr, a 1496 | inc r7 1497 | sjmp lbl_072c 1498 | lbl_0746: 1499 | mov r0, #dat_27 1500 | mov a, r7 1501 | mov @r0, a 1502 | mov a, #0x20 1503 | mov dptr, #0xf842 ; 0xf800-0xfeef: 2k data 1504 | movx @dptr, a 1505 | clr a 1506 | mov dptr, #0xf843 ; 0xf800-0xfeef: 2k data 1507 | movx @dptr, a 1508 | lcall clear_output_byte_count 1509 | mov r0, #dat_3e 1510 | clr a 1511 | mov @r0, a 1512 | inc r0 1513 | mov @r0, #0x20 1514 | mov r5, #0x40 1515 | mov r6, #0xf8 ; r6, r5 = 0xf840 1516 | mov r7, #0x01 1517 | lcall fcn_05f5 1518 | mov r0, #0x28 1519 | clr a 1520 | mov @r0, a 1521 | inc r0 1522 | mov @r0, #0x20 1523 | ret 1524 | lbl_0770: 1525 | lcall clear_output_byte_count 1526 | clr a 1527 | mov r6, a 1528 | mov r7, a 1529 | lbl_0776: 1530 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 1531 | movx a, @dptr 1532 | mov r4, a 1533 | dec a 1534 | movx @dptr, a 1535 | mov a, r4 1536 | jz lbl_0790 1537 | mov a, r6 1538 | mov dptr, #cdat_0fe5 1539 | movc a, @a+dptr 1540 | mov r5, #0x00 1541 | mov r4, a 1542 | mov a, r6 1543 | add a, r4 1544 | mov r6, a 1545 | mov a, r7 1546 | addc a, r5 1547 | mov r7, a 1548 | sjmp lbl_0776 1549 | lbl_0790: 1550 | mov r0, #dat_27 1551 | mov a, r7 1552 | mov @r0, a 1553 | inc r0 1554 | mov a, r6 1555 | mov @r0, a 1556 | mov r0, #0x28 1557 | mov a, @r0 1558 | mov dptr, #cdat_0fe5 1559 | movc a, @a+dptr 1560 | mov r0, #0x3f 1561 | mov @r0, a 1562 | clr a 1563 | dec r0 1564 | mov @r0, a 1565 | mov r0, #0x28 1566 | mov a, @r0 1567 | add a, #0xe5 1568 | mov r5, a 1569 | clr a 1570 | addc a, #0x0f 1571 | mov r6, a 1572 | mov r7, #0x02 1573 | ljmp fcn_05f5 1574 | lbl_07b3: 1575 | lcall clear_output_byte_count 1576 | mov r0, #dat_3e 1577 | clr a 1578 | mov @r0, a 1579 | inc r0 1580 | inc a 1581 | mov @r0, a 1582 | mov r0, #0x3d 1583 | mov a, @r0 1584 | mov r0, #0x4a 1585 | mov @r0, a 1586 | mov r5, #0x4a 1587 | clr a 1588 | mov r6, a 1589 | mov r7, a 1590 | ljmp fcn_05f5 1591 | lbl_07cb: 1592 | mov dptr, #cdat_0fcc 1593 | clr a 1594 | movc a, @a+dptr 1595 | jnb acc.6, lbl_07d7 1596 | mov r0, #0x4a 1597 | mov @r0, #0x01 1598 | lbl_07d7: 1599 | mov r0, #0x4f 1600 | mov a, @r0 1601 | dec a 1602 | jnz lbl_07e3 1603 | mov r0, #0x4a 1604 | xch a, @r0 1605 | orl a, #0x02 1606 | mov @r0, a 1607 | lbl_07e3: 1608 | lcall clear_output_byte_count 1609 | mov r0, #dat_3e 1610 | clr a 1611 | mov @r0, a 1612 | inc r0 1613 | mov @r0, #0x02 1614 | mov r5, #0x4a 1615 | clr a 1616 | mov r6, a 1617 | mov r7, a 1618 | ljmp fcn_05f5 1619 | lbl_07f5: 1620 | lcall clear_output_byte_count 1621 | mov r0, #dat_3e 1622 | clr a 1623 | mov @r0, a 1624 | inc r0 1625 | mov @r0, #0x02 1626 | mov r5, #0x4a 1627 | clr a 1628 | mov r6, a 1629 | mov r7, a 1630 | ljmp fcn_05f5 1631 | lbl_0807: 1632 | mov dptr, #0xff04 ; 0xff00-0xff07: setup packet 1633 | movx a, @dptr 1634 | anl a, #0x0f 1635 | mov r0, #dat_27 1636 | mov @r0, a 1637 | mov r0, #dat_27 1638 | mov a, @r0 1639 | jnz lbl_084d 1640 | mov dptr, #0xff04 ; 0xff00-0xff07: setup packet 1641 | movx a, @dptr 1642 | jnb acc.7, lbl_0827 1643 | mov dptr, #IEPCNFG_0 1644 | movx a, @dptr 1645 | anl a, #0x08 1646 | mov r0, #0x4a 1647 | mov @r0, a 1648 | sjmp lbl_0830 1649 | lbl_0827: 1650 | mov dptr, #OEPCNFG_0 1651 | movx a, @dptr 1652 | anl a, #0x08 1653 | mov r0, #0x4a 1654 | mov @r0, a 1655 | lbl_0830: 1656 | mov r0, #0x4a 1657 | xch a, @r0 1658 | rr a 1659 | rr a 1660 | rr a 1661 | anl a, #0x1f 1662 | mov @r0, a 1663 | lcall clear_output_byte_count 1664 | mov r0, #dat_3e 1665 | clr a 1666 | mov @r0, a 1667 | inc r0 1668 | mov @r0, #0x02 1669 | mov r5, #0x4a 1670 | clr a 1671 | mov r6, a 1672 | mov r7, a 1673 | lcall fcn_05f5 1674 | sjmp lbl_08ab 1675 | lbl_084d: 1676 | mov r0, #dat_27 1677 | dec @r0 1678 | mov r0, #dat_27 1679 | mov a, @r0 1680 | add a, #0xfd 1681 | jc lbl_0890 1682 | mov r0, #dat_27 1683 | mov a, @r0 1684 | jnz lbl_0874 1685 | mov r0, #dat_27 1686 | mov a, @r0 1687 | mov b, #0x08 1688 | mul ab 1689 | add a, #0x48 1690 | mov dpl, a 1691 | clr a 1692 | addc a, #0xff 1693 | mov dph, a 1694 | movx a, @dptr 1695 | anl a, #0x08 1696 | mov r0, #0x4a 1697 | mov @r0, a 1698 | sjmp lbl_0890 1699 | lbl_0874: 1700 | mov r0, #dat_27 1701 | mov a, @r0 1702 | dec a 1703 | jnz lbl_0890 1704 | mov r0, #dat_27 1705 | mov a, @r0 1706 | mov b, #0x08 1707 | mul ab 1708 | add a, #0x08 1709 | mov dpl, a 1710 | clr a 1711 | addc a, #0xff 1712 | mov dph, a 1713 | movx a, @dptr 1714 | anl a, #0x08 1715 | mov r0, #0x4a 1716 | mov @r0, a 1717 | lbl_0890: 1718 | mov r0, #0x4a 1719 | xch a, @r0 1720 | rr a 1721 | rr a 1722 | rr a 1723 | anl a, #0x1f 1724 | mov @r0, a 1725 | lcall clear_output_byte_count 1726 | mov r0, #dat_3e 1727 | clr a 1728 | mov @r0, a 1729 | inc r0 1730 | mov @r0, #0x02 1731 | mov r5, #0x4a 1732 | clr a 1733 | mov r6, a 1734 | mov r7, a 1735 | lcall fcn_05f5 1736 | lbl_08ab: 1737 | ret 1738 | lbl_08ac: 1739 | lcall fcn_0525 1740 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 1741 | movx a, @dptr 1742 | rlc a 1743 | jc lbl_08c7 1744 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 1745 | movx a, @dptr 1746 | mov dptr, #FUNADR 1747 | movx @dptr, a 1748 | mov r0, #dat_65 1749 | mov @r0, #0x01 1750 | lcall fcn_064b 1751 | sjmp lbl_08ca 1752 | lbl_08c7: 1753 | lcall fcn_0502 1754 | lbl_08ca: 1755 | ret 1756 | lbl_08cb: 1757 | lcall fcn_0525 1758 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 1759 | movx a, @dptr 1760 | mov r0, #0x3c 1761 | mov @r0, a 1762 | mov r0, #0x3c 1763 | mov a, @r0 1764 | jnz lbl_08ea 1765 | mov r0, #dat_65 1766 | mov @r0, #0x01 1767 | clr a 1768 | mov dptr, #IEPCNF_1 1769 | movx @dptr, a 1770 | clr a 1771 | mov dptr, #OEPCNF_2 1772 | movx @dptr, a 1773 | sjmp lbl_08fa 1774 | lbl_08ea: 1775 | mov r0, #dat_65 1776 | mov @r0, #0x02 1777 | mov a, #0x84 1778 | mov dptr, #IEPCNF_1 1779 | movx @dptr, a 1780 | mov a, #0x84 1781 | mov dptr, #OEPCNF_2 1782 | movx @dptr, a 1783 | lbl_08fa: 1784 | ljmp fcn_064b 1785 | lbl_08fd: 1786 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 1787 | movx a, @dptr 1788 | dec a 1789 | jnz lbl_0914 1790 | mov r0, #0x4f 1791 | mov @r0, #0x00 1792 | mov dptr, #USBMSK 1793 | movx a, @dptr 1794 | anl a, #0xfd 1795 | movx @dptr, a 1796 | lcall fcn_064b 1797 | sjmp lbl_0917 1798 | lbl_0914: 1799 | lcall fcn_0502 1800 | lbl_0917: 1801 | ret 1802 | lbl_0918: 1803 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 1804 | movx a, @dptr 1805 | dec a 1806 | jnz lbl_0928 1807 | mov r0, #0x4f 1808 | mov @r0, #0x01 1809 | lcall fcn_064b 1810 | sjmp lbl_092b 1811 | lbl_0928: 1812 | lcall fcn_0502 1813 | lbl_092b: 1814 | ret 1815 | lbl_092c: 1816 | lcall fcn_0525 1817 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 1818 | movx a, @dptr 1819 | jnz lbl_098c 1820 | mov dptr, #0xff04 ; 0xff00-0xff07: setup packet 1821 | movx a, @dptr 1822 | anl a, #0x0f 1823 | mov r0, #0x20 1824 | mov @r0, a 1825 | mov r0, #0x20 1826 | mov a, @r0 1827 | jnz lbl_0948 1828 | lcall fcn_064b 1829 | sjmp lbl_098a 1830 | lbl_0948: 1831 | mov r0, #0x20 1832 | dec @r0 1833 | mov r0, #0x20 1834 | mov a, @r0 1835 | add a, #0xfd 1836 | jc lbl_098a 1837 | mov r0, #0x20 1838 | mov a, @r0 1839 | jnz lbl_096d 1840 | mov r0, #0x20 1841 | mov a, @r0 1842 | mov b, #0x08 1843 | mul ab 1844 | add a, #0x48 1845 | mov dpl, a 1846 | clr a 1847 | addc a, #0xff 1848 | mov dph, a 1849 | movx a, @dptr 1850 | orl a, #0x08 1851 | movx @dptr, a 1852 | sjmp lbl_0987 1853 | lbl_096d: 1854 | mov r0, #0x20 1855 | mov a, @r0 1856 | dec a 1857 | jnz lbl_0987 1858 | mov r0, #0x20 1859 | mov a, @r0 1860 | mov b, #0x08 1861 | mul ab 1862 | add a, #0x08 1863 | mov dpl, a 1864 | clr a 1865 | addc a, #0xff 1866 | mov dph, a 1867 | movx a, @dptr 1868 | orl a, #0x08 1869 | movx @dptr, a 1870 | lbl_0987: 1871 | lcall fcn_064b 1872 | lbl_098a: 1873 | sjmp lbl_098f 1874 | lbl_098c: 1875 | lcall fcn_0502 1876 | lbl_098f: 1877 | ret 1878 | lbl_0990: 1879 | lcall fcn_0525 1880 | mov dptr, #0xff04 ; 0xff00-0xff07: setup packet 1881 | movx a, @dptr 1882 | mov r0, #0x3d 1883 | mov @r0, a 1884 | ljmp fcn_064b 1885 | lbl_099d: 1886 | mov dptr, #USBSTA 1887 | movx a, @dptr 1888 | jb acc.0, lbl_09a7 1889 | lcall fcn_0502 1890 | lbl_09a7: 1891 | ret 1892 | 1893 | fcn_09a8: 1894 | mov r7, #0x00 1895 | lbl_09aa: 1896 | mov a, r7 1897 | add a, #0xf8 1898 | jc lbl_09c3 1899 | mov dpl, r7 1900 | mov r5, #0x00 1901 | mov a, r5 1902 | add a, #0xff 1903 | mov dph, a 1904 | movx a, @dptr 1905 | mov r4, a 1906 | mov a, r7 1907 | add a, #0x30 1908 | mov r0, a 1909 | mov a, r4 1910 | mov @r0, a 1911 | inc r7 1912 | sjmp lbl_09aa 1913 | lbl_09c3: 1914 | mov r0, #0x2c 1915 | mov a, r7 1916 | mov @r0, a 1917 | mov r0, #0x2d 1918 | mov @r0, #0x02 1919 | inc r0 1920 | mov @r0, #0x10 1921 | inc r0 1922 | mov @r0, #0x31 1923 | lbl_09d1: 1924 | mov r0, #0x2d 1925 | mov a, @r0 1926 | mov r7, a 1927 | inc r0 1928 | mov a, @r0 1929 | mov r6, a 1930 | inc r0 1931 | mov a, @r0 1932 | mov r5, a 1933 | inc a 1934 | mov @r0, a 1935 | dec r0 1936 | jnz lbl_09e1 1937 | inc @r0 1938 | lbl_09e1: 1939 | lcall fcn_0132 1940 | mov r4, a 1941 | mov r0, #0x2d 1942 | mov a, @r0 1943 | mov r7, a 1944 | inc r0 1945 | mov a, @r0 1946 | mov r6, a 1947 | inc r0 1948 | mov a, @r0 1949 | mov r5, a 1950 | inc a 1951 | mov @r0, a 1952 | dec r0 1953 | jnz lbl_09f5 1954 | inc @r0 1955 | lbl_09f5: 1956 | lcall fcn_0132 1957 | mov r0, #0x39 1958 | mov @r0, a 1959 | mov dptr, #WDCSR 1960 | movx a, @dptr 1961 | orl a, #0x01 ; WDT: kick the watchdog 1962 | movx @dptr, a 1963 | mov r0, #0x38 1964 | mov a, r4 1965 | mov @r0, a 1966 | inc a 1967 | jnz lbl_0a0f 1968 | mov r0, #0x39 1969 | mov a, @r0 1970 | inc a 1971 | jz lbl_0a1c 1972 | lbl_0a0f: 1973 | mov r0, #0x30 1974 | mov a, @r0 1975 | xrl a, #0xc0 1976 | jz lbl_0a1c 1977 | mov r0, #0x30 1978 | mov a, @r0 1979 | cjne a, #0x40, lbl_0a2a 1980 | lbl_0a1c: 1981 | mov r0, #0x2f 1982 | mov a, @r0 1983 | add a, #0xfe 1984 | mov @r0, a 1985 | dec r0 1986 | mov a, @r0 1987 | addc a, #0xff 1988 | mov @r0, a 1989 | ljmp lbl_0abe 1990 | lbl_0a2a: 1991 | mov r0, #0x38 1992 | mov a, @r0 1993 | mov r0, #0x30 1994 | xrl a, @r0 1995 | jnz lbl_0ab0 1996 | mov r0, #0x39 1997 | mov a, @r0 1998 | mov r0, #0x31 1999 | xrl a, @r0 2000 | jnz lbl_0ab0 2001 | mov r0, #0x2b 2002 | mov @r0, #0xc0 2003 | mov r0, #0x2a 2004 | mov @r0, #0x20 2005 | mov r0, #0x2c 2006 | mov @r0, #0x02 2007 | lbl_0a46: 2008 | mov r0, #0x2c 2009 | mov a, @r0 2010 | add a, #0xf8 2011 | jc lbl_0a7f 2012 | mov r0, #0x2c 2013 | mov a, @r0 2014 | add a, #0x30 2015 | mov r0, a 2016 | mov a, @r0 2017 | mov r4, a 2018 | mov r0, #0x2d 2019 | mov a, @r0 2020 | mov r7, a 2021 | inc r0 2022 | mov a, @r0 2023 | mov r6, a 2024 | inc r0 2025 | mov a, @r0 2026 | mov r5, a 2027 | inc a 2028 | mov @r0, a 2029 | dec r0 2030 | jnz lbl_0a65 2031 | inc @r0 2032 | lbl_0a65: 2033 | lcall fcn_0132 2034 | xrl a, r4 2035 | jnz lbl_0a74 2036 | mov r0, #0x2b 2037 | mov a, @r0 2038 | mov r1, #0x2a 2039 | orl a, @r1 2040 | mov r1, #0x2b 2041 | mov @r1, a 2042 | lbl_0a74: 2043 | mov r0, #0x2a 2044 | xch a, @r0 2045 | clr c 2046 | rrc a 2047 | mov @r0, a 2048 | mov r0, #0x2c 2049 | inc @r0 2050 | sjmp lbl_0a46 2051 | lbl_0a7f: 2052 | mov r0, #0x2d 2053 | mov a, @r0 2054 | mov r7, a 2055 | inc r0 2056 | mov a, @r0 2057 | mov r6, a 2058 | inc r0 2059 | mov a, @r0 2060 | mov r5, a 2061 | lcall fcn_0132 2062 | mov r0, #0x2b 2063 | anl a, @r0 2064 | mov r4, a 2065 | lcall fcn_0132 2066 | xrl a, r4 2067 | jnz lbl_0aa3 2068 | mov r0, #0x2f 2069 | mov a, @r0 2070 | add a, #0xf8 2071 | mov @r0, a 2072 | dec r0 2073 | mov a, @r0 2074 | addc a, #0xff 2075 | mov @r0, a 2076 | sjmp lbl_0abe 2077 | lbl_0aa3: 2078 | mov r0, #0x2f 2079 | mov a, @r0 2080 | add a, #0x03 2081 | mov @r0, a 2082 | dec r0 2083 | mov a, @r0 2084 | addc a, #0x00 2085 | mov @r0, a 2086 | sjmp lbl_0abb 2087 | lbl_0ab0: 2088 | mov r0, #0x2f 2089 | mov a, @r0 2090 | add a, #0x09 2091 | mov @r0, a 2092 | dec r0 2093 | mov a, @r0 2094 | addc a, #0x00 2095 | mov @r0, a 2096 | lbl_0abb: 2097 | ljmp lbl_09d1 2098 | lbl_0abe: 2099 | mov dptr, #USBSTA 2100 | movx a, @dptr 2101 | jnb acc.0, lbl_0ac6 2102 | ret 2103 | lbl_0ac6: 2104 | mov r0, #0x2d 2105 | mov a, @r0 2106 | mov r7, a 2107 | inc r0 2108 | mov a, @r0 2109 | mov r6, a 2110 | inc r0 2111 | mov a, @r0 2112 | mov r5, a 2113 | mov dptr, #0x0009 2114 | lcall fcn_0154 2115 | mov dpl, a 2116 | mov dph, r3 2117 | lcall fcn_026f 2118 | ljmp fcn_027c 2119 | 2120 | fcn_0ae0: 2121 | mov a, #0x80 2122 | mov dptr, #IEPBCNT_0 2123 | movx @dptr, a 2124 | mov a, #0x80 2125 | mov dptr, #OEPBCNT_0 2126 | movx @dptr, a 2127 | lbl_0aec: 2128 | mov dptr, #USBCTL 2129 | movx a, @dptr 2130 | orl a, #0x02 2131 | movx @dptr, a 2132 | mov dptr, #0xff00 ; 0xff00-0xff07: setup packet 2133 | movx a, @dptr 2134 | jnb acc.7, lbl_0b03 2135 | mov dptr, #USBCTL 2136 | movx a, @dptr 2137 | orl a, #0x01 2138 | movx @dptr, a 2139 | sjmp lbl_0b0a 2140 | lbl_0b03: 2141 | mov dptr, #USBCTL 2142 | movx a, @dptr 2143 | anl a, #0xfe 2144 | movx @dptr, a 2145 | lbl_0b0a: 2146 | mov r0, #dat_4e 2147 | mov @r0, #0x00 2148 | mov r0, #0x4a 2149 | mov r2, #0x04 2150 | clr a 2151 | lbl_0b13: 2152 | mov @r0, a 2153 | inc r0 2154 | djnz r2, lbl_0b13 2155 | mov r2, #0x04 2156 | lcall fcn_09a8 2157 | mov dptr, #USBSTA 2158 | movx a, @dptr 2159 | jnb acc.0, lbl_0b2b 2160 | mov a, #0x01 2161 | mov dptr, #USBSTA 2162 | movx @dptr, a 2163 | sjmp lbl_0aec 2164 | lbl_0b2b: 2165 | ret 2166 | 2167 | ; *OEPBCNT_0 = 0x00; 2168 | ; if (dat_4e == 0x01) { 2169 | ; fcn_0534(); 2170 | ; } else { 2171 | ; *IEPCNFG_0 |= 0x08; // USB stall condition 2172 | ; } 2173 | fcn_0b2c: 2174 | clr a 2175 | mov dptr, #OEPBCNT_0 2176 | movx @dptr, a 2177 | mov r0, #dat_4e 2178 | mov a, @r0 2179 | dec a 2180 | jnz lbl_0b3c 2181 | lcall fcn_0534 2182 | sjmp lbl_0b43 2183 | lbl_0b3c: 2184 | mov dptr, #IEPCNFG_0 2185 | movx a, @dptr 2186 | orl a, #0x08 ; STALL 2187 | movx @dptr, a 2188 | lbl_0b43: 2189 | ret 2190 | 2191 | ; *IEPBCNT_0 = 0x00; 2192 | ; if (dat_4e == 0x02) { 2193 | ; fcn_0648(); 2194 | ; } else { 2195 | ; *OEPCNFG_0 |= 0x08; // USB stall condition 2196 | ; } 2197 | fcn_0b44: 2198 | clr a 2199 | mov dptr, #IEPBCNT_0 2200 | movx @dptr, a 2201 | mov r0, #dat_4e 2202 | mov a, @r0 2203 | cjne a, #0x02, lbl_0b54 2204 | lcall fcn_0648 2205 | sjmp lbl_0b5b 2206 | lbl_0b54: 2207 | mov dptr, #OEPCNFG_0 2208 | movx a, @dptr 2209 | orl a, #0x08 ; STALL 2210 | movx @dptr, a 2211 | lbl_0b5b: 2212 | ret 2213 | 2214 | fcn_void_0b5c: 2215 | ret 2216 | 2217 | ; dat_5a = *OEPBCTX_2 & 0x7f; // clear NAK bit 2218 | fcn_0b5d: 2219 | mov dptr, #OEPBCTX_2 2220 | movx a, @dptr 2221 | anl a, #0x7f 2222 | mov r0, #dat_5a 2223 | mov @r0, a 2224 | ret 2225 | 2226 | fcn_0b67: 2227 | clr a 2228 | mov dptr, #IEPCNF_1 2229 | movx @dptr, a 2230 | clr a 2231 | mov dptr, #IEPBBAX_1 2232 | movx @dptr, a 2233 | mov a, #0x80 2234 | mov dptr, #IEPBCTX_1 2235 | movx @dptr, a 2236 | mov a, #0x20 2237 | mov dptr, #IEPSIZXY_1 2238 | movx @dptr, a 2239 | clr a 2240 | mov dptr, #OEPCNF_2 2241 | movx @dptr, a 2242 | mov a, #0x30 2243 | mov dptr, #OEPBBAX_2 2244 | movx @dptr, a 2245 | clr a 2246 | mov dptr, #OEPBCTX_2 2247 | movx @dptr, a 2248 | mov a, #0x20 2249 | mov dptr, #OEPSIZXY_2 2250 | movx @dptr, a 2251 | mov r0, #0x52 2252 | mov @r0, #0x00 2253 | mov r0, #0x51 2254 | mov @r0, #0xb4 2255 | mov r0, #0x51 2256 | mov a, @r0 2257 | mov b, #0x0a 2258 | div ab 2259 | mov r0, #0x55 2260 | mov @r0, a 2261 | clr a 2262 | dec r0 2263 | mov @r0, a 2264 | mov r0, #0x50 2265 | mov @r0, #0x20 2266 | mov r0, #dat_53 2267 | mov @r0, #0x00 2268 | ret 2269 | lbl_0bb1: 2270 | mov dptr, #WDCSR 2271 | movx a, @dptr 2272 | orl a, #0x01 ; WDT: kick the watchdog 2273 | movx @dptr, a 2274 | mov dptr, #0xff01 ; 0xff00-0xff07: setup packet 2275 | movx a, @dptr 2276 | cjne a, #0x81, lbl_0be8 2277 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 2278 | movx a, @dptr 2279 | mov r0, #0x52 2280 | mov @r0, a 2281 | mov dptr, #0xff03 ; 0xff00-0xff07: setup packet 2282 | movx a, @dptr 2283 | mov r0, #0x56 2284 | mov @r0, a 2285 | jnb acc.7, lbl_0bd6 2286 | mov r0, #dat_53 2287 | xch a, @r0 2288 | anl a, #0x80 2289 | mov @r0, a 2290 | lbl_0bd6: 2291 | mov r0, #0x56 2292 | mov a, @r0 2293 | jnb acc.0, lbl_0be2 2294 | mov r0, #dat_53 2295 | xch a, @r0 2296 | orl a, #0x80 2297 | mov @r0, a 2298 | lbl_0be2: 2299 | lcall fcn_064b 2300 | ljmp lbl_0c9f 2301 | lbl_0be8: 2302 | mov dptr, #0xff01 ; 0xff00-0xff07: setup packet 2303 | movx a, @dptr 2304 | cjne a, #0x82, lbl_0c32 2305 | mov dptr, #0xff03 ; 0xff00-0xff07: setup packet 2306 | movx a, @dptr 2307 | add a, #0xdf 2308 | jnc lbl_0bfa 2309 | ljmp fcn_0502 2310 | lbl_0bfa: 2311 | mov dptr, #0xff03 ; 0xff00-0xff07: setup packet 2312 | movx a, @dptr 2313 | jnz lbl_0c06 2314 | mov r0, #0x50 2315 | mov @r0, #0x20 2316 | sjmp lbl_0c0d 2317 | lbl_0c06: 2318 | mov dptr, #0xff03 ; 0xff00-0xff07: setup packet 2319 | movx a, @dptr 2320 | mov r0, #0x50 2321 | mov @r0, a 2322 | lbl_0c0d: 2323 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 2324 | movx a, @dptr 2325 | jnz lbl_0c19 2326 | mov r0, #0x51 2327 | mov @r0, #0xb4 2328 | sjmp lbl_0c20 2329 | lbl_0c19: 2330 | mov dptr, #0xff02 ; 0xff00-0xff07: setup packet 2331 | movx a, @dptr 2332 | mov r0, #0x51 2333 | mov @r0, a 2334 | lbl_0c20: 2335 | mov r0, #0x51 2336 | mov a, @r0 2337 | mov b, #0x0a 2338 | div ab 2339 | mov r0, #0x55 2340 | mov @r0, a 2341 | clr a 2342 | dec r0 2343 | mov @r0, a 2344 | lcall fcn_064b 2345 | sjmp lbl_0c9f 2346 | lbl_0c32: 2347 | mov dptr, #0xff01 ; 0xff00-0xff07: setup packet 2348 | movx a, @dptr 2349 | cjne a, #0x83, lbl_0c4a 2350 | mov r0, #dat_3e 2351 | clr a 2352 | mov @r0, a 2353 | inc r0 2354 | mov @r0, #0x04 2355 | mov r5, #0x50 2356 | clr a 2357 | mov r6, a 2358 | mov r7, a 2359 | lcall fcn_05f5 2360 | sjmp lbl_0c9f 2361 | lbl_0c4a: 2362 | mov dptr, #0xff01 ; 0xff00-0xff07: setup packet 2363 | movx a, @dptr 2364 | cjne a, #0xa2, lbl_0c9c 2365 | mov a, #0x2a ; 0b0010_1010: disable watchdog 2366 | mov dptr, #WDCSR 2367 | movx @dptr, a 2368 | clr a 2369 | mov r0, #0x26 2370 | mov @r0, a 2371 | inc r0 2372 | mov @r0, a 2373 | inc r0 2374 | mov @r0, #0x66 2375 | mov r0, #0x24 2376 | clr a 2377 | mov @r0, a 2378 | inc r0 2379 | mov @r0, #0x02 2380 | clr a 2381 | mov r6, a 2382 | mov r7, a 2383 | mov r4, #0x00 2384 | lcall i2c_write_eeprom 2385 | mov a, r4 2386 | jz lbl_0c74 2387 | lbl_0c72: 2388 | sjmp lbl_0c72 2389 | lbl_0c74: 2390 | mov r0, #0x57 2391 | mov @r0, #0x13 2392 | inc r0 2393 | mov @r0, #0x88 2394 | lbl_0c7b: 2395 | mov r0, #0x57 2396 | mov a, @r0 2397 | mov r5, a 2398 | inc r0 2399 | mov a, @r0 2400 | mov r4, a 2401 | mov r0, #0x58 2402 | mov a, @r0 2403 | dec @r0 2404 | dec r0 2405 | jnz lbl_0c8a 2406 | dec @r0 2407 | lbl_0c8a: 2408 | mov a, r4 2409 | orl a, r5 2410 | jz lbl_0c90 2411 | sjmp lbl_0c7b 2412 | lbl_0c90: 2413 | mov dptr, #WDCSR 2414 | movx a, @dptr 2415 | orl a, #0x01 ; WDT: kick the watchdog 2416 | movx @dptr, a 2417 | lcall fcn_064b 2418 | sjmp lbl_0c9f 2419 | lbl_0c9c: 2420 | lcall fcn_0502 2421 | lbl_0c9f: 2422 | ret 2423 | 2424 | ; set I2C bus speed 2425 | ; input: r4, 1 = 400kHz, otherwise 100kHz 2426 | ; 2427 | ; a = r4 2428 | ; *(0x3b) = a 2429 | ; a-- 2430 | ; if (!a) { 2431 | ; *I2CSTA |= 0x10; 2432 | ; } else { 2433 | ; *I2CSTA &= 0xEF; 2434 | ; } 2435 | i2c_set_bus_speed: ; 0ca0 2436 | mov r0, #i2c_speed ; 0x3b some debug byte showing current I2C speed? 2437 | mov a, r4 2438 | mov @r0, a 2439 | dec a 2440 | jnz lbl_0cb0 2441 | mov dptr, #I2CSTA 2442 | movx a, @dptr 2443 | orl a, #0x10 ; 1/4: 1 = 400kHz 2444 | movx @dptr, a 2445 | sjmp lbl_0cb7 2446 | lbl_0cb0: 2447 | mov dptr, #I2CSTA 2448 | movx a, @dptr 2449 | anl a, #0xef ; 1/4: 0 = 100kHz 2450 | movx @dptr, a 2451 | lbl_0cb7: 2452 | ret 2453 | 2454 | ; wait for I2C TX empty 2455 | ; return (r4): 0 success, 1 bus error 2456 | ; 2457 | ; while (!(*I2CSTA & 0x08)) { // TXE 2458 | ; kick_watchdog(); 2459 | ; if (*I2CSTA & 0x20) { // I2C_ERR 2460 | ; kick_watchdog(); 2461 | ; *I2CSTA |= 0x20; // I2C_ERR 2462 | ; return 1; 2463 | ; } 2464 | ; } 2465 | ; return 0; 2466 | i2c_wait_tx_empty: ; 0cb8 2467 | lbl_0cb8: 2468 | mov dptr, #I2CSTA 2469 | movx a, @dptr 2470 | jb acc.3, lbl_0ce7 ; TXE: transmit empty 2471 | mov dptr, #WDCSR 2472 | movx a, @dptr 2473 | orl a, #0x01 ; WDT: kick the watchdog 2474 | movx @dptr, a 2475 | mov dptr, #I2CSTA 2476 | movx a, @dptr 2477 | jnb acc.5, lbl_0ce5 ; ERR: jump if no bus error 2478 | lbl_0ccd: 2479 | mov dptr, #WDCSR 2480 | movx a, @dptr 2481 | orl a, #0x01 ; WDT: kick the watchdog 2482 | movx @dptr, a 2483 | mov dptr, #I2CSTA 2484 | movx a, @dptr 2485 | orl a, #0x20 ; ERR: write to clear 2486 | movx @dptr, a 2487 | mov dptr, #I2CSTA 2488 | movx a, @dptr 2489 | jb acc.5, lbl_0ccd ; ERR: bus error 2490 | mov r4, #0x01 ; return 1 2491 | ret 2492 | lbl_0ce5: 2493 | sjmp lbl_0cb8 2494 | lbl_0ce7: 2495 | mov r4, #0x00 ; return 0 2496 | ret 2497 | 2498 | ; write to I2C EEPROM 2499 | ; dat_21: I2C bank 2500 | ; r7, r6: EEPROM address 2501 | ; dat_24: length 2502 | ; dat_26: source and source address 2503 | i2c_write_eeprom: ; 0cea 2504 | mov dptr, #I2CSTA 2505 | movx a, @dptr 2506 | anl a, #0xfc 2507 | movx @dptr, a ; *I2CSTA &= 0xFC // clear SRD/SWR 2508 | mov r0, #eeprom_addr 2509 | mov a, r7 2510 | mov @r0, a 2511 | inc r0 2512 | mov a, r6 2513 | mov @r0, a ; eeprom_addr = r7, r6 2514 | mov r0, #dat_21 2515 | mov a, r4 2516 | mov @r0, a ; dat_21 = r4 2517 | mov r0, #dat_24 2518 | mov a, @r0 2519 | inc r0 2520 | orl a, @r0 2521 | jnz lbl_0d06 ; if (dat_24[0] == 0 && dat_24[1] == 0) return 0; 2522 | mov r4, #0x00 2523 | ret 2524 | lbl_0d06: 2525 | mov r0, #dat_21 2526 | mov a, @r0 2527 | anl a, #0x07 2528 | add a, acc 2529 | orl a, #0xa0 2530 | mov dptr, #I2CADR 2531 | movx @dptr, a ; *I2CADR = (2 * (dat_21 & 0x7) | 0xa0) 2532 | mov r0, #i2c_addr 2533 | mov @r0, a 2534 | mov r0, #eeprom_addr 2535 | mov a, @r0 2536 | mov dptr, #I2CDATO 2537 | movx @dptr, a ; *I2CDATO = eeprom_addr[0] 2538 | lcall i2c_wait_tx_empty 2539 | mov a, r4 2540 | jz lbl_0d26 2541 | mov r4, #0x01 ; if (i2c_wait_tx_empty()) return 1; 2542 | ret 2543 | lbl_0d26: 2544 | mov r0, #eeprom_addr+1 2545 | mov a, @r0 2546 | mov dptr, #I2CDATO 2547 | movx @dptr, a ; *I2CDATO = eeprom_addr[1] 2548 | lcall i2c_wait_tx_empty 2549 | mov a, r4 2550 | jz lbl_0d36 2551 | mov r4, #0x01 ; if (i2c_wait_tx_empty()) return 1; 2552 | ret 2553 | lbl_0d36: ; while (dat_24 - 1 > 0) 2554 | setb c 2555 | mov r0, #dat_24+1 2556 | mov a, @r0 2557 | subb a, #0x01 2558 | dec r0 2559 | mov a, @r0 2560 | subb a, #0x00 2561 | jc lbl_0d6c 2562 | mov r0, #dat_26 2563 | mov a, @r0 2564 | mov r7, a ; r7 = dat_26 2565 | inc r0 2566 | mov a, @r0 2567 | mov r6, a ; r6 = dat_26+1 2568 | inc r0 2569 | mov a, @r0 2570 | mov r5, a ; r5 = dat_26+2 2571 | inc a 2572 | mov @r0, a ; (dat_26+2)++ 2573 | dec r0 2574 | jnz lbl_0d52 2575 | inc @r0 ; (dat_26+1)++ 2576 | lbl_0d52: 2577 | lcall fcn_0132 2578 | mov dptr, #I2CDATO 2579 | movx @dptr, a ; *I2CDATO = fcn_0132() 2580 | lcall i2c_wait_tx_empty 2581 | mov a, r4 2582 | jz lbl_0d62 2583 | mov r4, #0x01 ; if (i2c_wait_tx_empty()) return 1; 2584 | ret 2585 | lbl_0d62: 2586 | mov r0, #dat_24+1 2587 | mov a, @r0 2588 | dec @r0 2589 | dec r0 2590 | jnz lbl_0d6a 2591 | dec @r0 ; dat_24-- 2592 | lbl_0d6a: 2593 | sjmp lbl_0d36 2594 | lbl_0d6c: 2595 | mov dptr, #I2CSTA 2596 | movx a, @dptr 2597 | orl a, #0x01 2598 | movx @dptr, a ; *I2CSTA |= 0x01 SWR 2599 | mov r0, #dat_26 2600 | mov a, @r0 2601 | mov r7, a ; r7 = dat_26 2602 | inc r0 2603 | mov a, @r0 2604 | mov r6, a ; r6 = dat_26+1 2605 | inc r0 2606 | mov a, @r0 2607 | mov r5, a ; r5 = dat_26+1 2608 | lcall fcn_0132 2609 | mov dptr, #I2CDATO 2610 | movx @dptr, a ; *I2CDATO = fcn_0132() 2611 | lcall i2c_wait_tx_empty 2612 | mov a, r4 2613 | jz lbl_0d8d 2614 | mov r4, #0x01 ; if (i2c_wait_tx_empty()) return 1; 2615 | ret 2616 | lbl_0d8d: 2617 | mov r4, #0x00 ; return 0; 2618 | ret 2619 | 2620 | fcn_0d90: 2621 | jnb p3.4, lbl_0d99 2622 | jnb p3.3, lbl_0d99 2623 | ljmp lbl_0e95 2624 | lbl_0d99: 2625 | mov r0, #dat_5c 2626 | mov @r0, #0x00 2627 | mov r1, #0x00 2628 | mov r0, #0x60 2629 | mov @r0, #0x00 2630 | lbl_0da3: 2631 | mov r0, #0x60 2632 | mov a, @r0 2633 | add a, #0xf8 2634 | jc lbl_0e07 2635 | jb p3.4, lbl_0db7 2636 | jb p3.3, lbl_0db7 2637 | mov r0, #dat_5c 2638 | mov @r0, #0x10 2639 | ljmp lbl_0e1b 2640 | lbl_0db7: 2641 | mov r0, #dat_62 2642 | mov @r0, #0x09 2643 | lbl_0dbb: 2644 | jnb p3.4, lbl_0dcc 2645 | jnb p3.3, lbl_0dcc 2646 | mov r0, #dat_62 2647 | mov a, @r0 2648 | jnz lbl_0dbb 2649 | mov r0, #dat_5c 2650 | mov @r0, #0x20 2651 | sjmp lbl_0e1b 2652 | lbl_0dcc: 2653 | mov a, r1 2654 | mov c, p3.3 2655 | rrc a 2656 | mov r1, a 2657 | jb p3.3, lbl_0dec 2658 | clr p3.4 2659 | mov r0, #dat_62 2660 | mov @r0, #0x09 2661 | lbl_0dda: 2662 | jb p3.3, lbl_0de8 2663 | mov r0, #dat_62 2664 | mov a, @r0 2665 | jnz lbl_0dda 2666 | mov r0, #dat_5c 2667 | mov @r0, #0x20 2668 | sjmp lbl_0e1b 2669 | lbl_0de8: 2670 | setb p3.4 2671 | sjmp lbl_0e02 2672 | lbl_0dec: 2673 | clr p3.3 2674 | mov r0, #dat_62 2675 | mov @r0, #0x09 2676 | lbl_0df2: 2677 | jb p3.4, lbl_0e00 2678 | mov r0, #dat_62 2679 | mov a, @r0 2680 | jnz lbl_0df2 2681 | mov r0, #dat_5c 2682 | mov @r0, #0x30 2683 | sjmp lbl_0e1b 2684 | lbl_0e00: 2685 | setb p3.3 2686 | lbl_0e02: 2687 | mov r0, #0x60 2688 | inc @r0 2689 | sjmp lbl_0da3 2690 | lbl_0e07: 2691 | mov dptr, #IEPBCTX_1 2692 | movx a, @dptr 2693 | xrl a, #0x80 2694 | jnz lbl_0e07 2695 | mov r0, #dat_59 2696 | mov a, @r0 2697 | inc @r0 2698 | mov dpl, a 2699 | mov a, #0xf8 2700 | mov dph, a 2701 | mov a, r1 2702 | movx @dptr, a 2703 | lbl_0e1b: 2704 | mov r0, #dat_5c 2705 | mov a, @r0 2706 | jz lbl_0e47 2707 | setb p3.4 2708 | setb p3.3 2709 | mov dptr, #IEPCNF_1 2710 | movx a, @dptr 2711 | orl a, #0x08 2712 | movx @dptr, a 2713 | clr a 2714 | mov dptr, #IEPBCTX_1 2715 | movx @dptr, a 2716 | mov r0, #dat_59 2717 | mov @r0, #0x00 2718 | mov r0, #dat_62 2719 | mov @r0, #0x08 2720 | lbl_0e38: 2721 | mov r0, #dat_62 2722 | mov a, @r0 2723 | jz lbl_0e46 2724 | jnb p3.3, lbl_0e44 2725 | jnb p3.4, lbl_0e44 2726 | ret 2727 | lbl_0e44: 2728 | sjmp lbl_0e38 2729 | lbl_0e46: 2730 | ret 2731 | lbl_0e47: 2732 | mov r0, #dat_59 2733 | mov a, @r0 2734 | clr c 2735 | mov r0, #0x50 2736 | subb a, @r0 2737 | jc lbl_0e5b 2738 | mov r0, #dat_59 2739 | mov a, @r0 2740 | mov dptr, #IEPBCTX_1 2741 | movx @dptr, a 2742 | mov r0, #dat_59 2743 | mov @r0, #0x00 2744 | lbl_0e5b: 2745 | mov r0, #0x54 2746 | mov a, @r0 2747 | mov r5, a 2748 | inc r0 2749 | mov a, @r0 2750 | mov r0, #0x5e 2751 | xch a, r5 2752 | mov @r0, a 2753 | xch a, r5 2754 | inc r0 2755 | mov @r0, a 2756 | lbl_0e68: 2757 | mov r0, #0x5e 2758 | mov a, @r0 2759 | inc r0 2760 | orl a, @r0 2761 | jz lbl_0e82 2762 | jnb p3.4, lbl_0e75 2763 | jb p3.3, lbl_0e78 2764 | lbl_0e75: 2765 | ljmp lbl_0d99 2766 | lbl_0e78: 2767 | mov r0, #0x5f 2768 | mov a, @r0 2769 | dec @r0 2770 | dec r0 2771 | jnz lbl_0e80 2772 | dec @r0 2773 | lbl_0e80: 2774 | sjmp lbl_0e68 2775 | lbl_0e82: 2776 | mov dptr, #IEPBCTX_1 2777 | movx a, @dptr 2778 | xrl a, #0x80 2779 | jnz lbl_0e82 2780 | mov r0, #dat_59 2781 | mov a, @r0 2782 | mov dptr, #IEPBCTX_1 2783 | movx @dptr, a 2784 | mov r0, #dat_59 2785 | mov @r0, #0x00 2786 | lbl_0e95: 2787 | mov r0, #dat_68 2788 | mov a, @r0 2789 | mov r0, #dat_5d 2790 | mov @r0, a 2791 | lbl_0e9b: 2792 | mov r0, #dat_5a 2793 | mov a, @r0 2794 | jnz lbl_0ea3 2795 | ljmp lbl_0fa0 2796 | lbl_0ea3: 2797 | setb p3.4 2798 | setb p3.3 2799 | jb p3.4, lbl_0ead 2800 | ljmp lbl_0f74 2801 | lbl_0ead: 2802 | jb p3.3, lbl_0eb3 2803 | ljmp lbl_0f74 2804 | lbl_0eb3: 2805 | mov r0, #dat_5d 2806 | mov a, @r0 2807 | inc @r0 2808 | mov r5, #0x00 2809 | mov r4, a 2810 | add a, #0x80 2811 | mov dpl, a 2812 | mov a, r5 2813 | addc a, #0xf9 2814 | mov dph, a 2815 | movx a, @dptr 2816 | mov r0, #0x61 2817 | mov @r0, a 2818 | mov r0, #dat_5b 2819 | mov @r0, #0x00 2820 | mov r0, #0x60 2821 | mov @r0, #0x00 2822 | lbl_0ecf: 2823 | mov r0, #0x60 2824 | mov a, @r0 2825 | add a, #0xf8 2826 | jc lbl_0f1f 2827 | mov r0, #0x61 2828 | mov a, @r0 2829 | jnb acc.0, lbl_0ee0 2830 | clr p3.4 2831 | sjmp lbl_0ee2 2832 | lbl_0ee0: 2833 | clr p3.3 2834 | lbl_0ee2: 2835 | mov r0, #0x61 2836 | xch a, @r0 2837 | clr c 2838 | rrc a 2839 | mov @r0, a 2840 | mov r0, #dat_62 2841 | mov @r0, #0x09 2842 | lbl_0eec: 2843 | jb p3.3, lbl_0ef2 2844 | jnb p3.4, lbl_0efd 2845 | lbl_0ef2: 2846 | mov r0, #dat_62 2847 | mov a, @r0 2848 | jnz lbl_0eec 2849 | mov r0, #dat_5b 2850 | mov @r0, #0x02 2851 | sjmp lbl_0f1f 2852 | lbl_0efd: 2853 | setb p3.4 2854 | setb p3.3 2855 | mov r0, #dat_62 2856 | mov @r0, #0x09 2857 | lbl_0f05: 2858 | jnb p3.3, lbl_0f0d 2859 | jnb p3.4, lbl_0f0d 2860 | sjmp lbl_0f1a 2861 | lbl_0f0d: 2862 | mov r0, #dat_62 2863 | mov a, @r0 2864 | jnz lbl_0f18 2865 | mov r0, #dat_5b 2866 | mov @r0, #0x03 2867 | sjmp lbl_0f1f 2868 | lbl_0f18: 2869 | sjmp lbl_0f05 2870 | lbl_0f1a: 2871 | mov r0, #0x60 2872 | inc @r0 2873 | sjmp lbl_0ecf 2874 | lbl_0f1f: 2875 | mov r0, #dat_5a 2876 | dec @r0 2877 | mov r0, #dat_5a 2878 | mov a, @r0 2879 | jnz lbl_0f3c 2880 | mov r0, #dat_5b 2881 | mov a, @r0 2882 | jz lbl_0f3c 2883 | setb p3.4 2884 | setb p3.3 2885 | mov dptr, #OEPCNF_2 2886 | movx a, @dptr 2887 | orl a, #0x08 2888 | movx @dptr, a 2889 | mov r0, #dat_68 2890 | mov @r0, #0x00 2891 | ret 2892 | lbl_0f3c: 2893 | mov r0, #0x52 2894 | mov a, @r0 2895 | jnz lbl_0f44 2896 | ljmp lbl_0e9b 2897 | lbl_0f44: 2898 | mov r0, #0x52 2899 | mov a, @r0 2900 | mov b, #0x0a 2901 | div ab 2902 | mov r5, #0x00 2903 | mov r0, #0x5e 2904 | xch a, r5 2905 | mov @r0, a 2906 | xch a, r5 2907 | inc r0 2908 | mov @r0, a 2909 | lbl_0f54: 2910 | mov r0, #0x5e 2911 | mov a, @r0 2912 | inc r0 2913 | orl a, @r0 2914 | jz lbl_0f9d 2915 | mov r0, #0x5f 2916 | mov a, @r0 2917 | dec @r0 2918 | dec r0 2919 | jnz lbl_0f63 2920 | dec @r0 2921 | lbl_0f63: 2922 | jnb p3.4, lbl_0f69 2923 | jb p3.3, lbl_0f72 2924 | lbl_0f69: 2925 | mov r0, #dat_5d 2926 | mov a, @r0 2927 | mov r0, #dat_68 2928 | mov @r0, a 2929 | ljmp lbl_0d99 2930 | lbl_0f72: 2931 | sjmp lbl_0f54 2932 | lbl_0f74: 2933 | jb p3.4, lbl_0f97 2934 | jb p3.3, lbl_0f97 2935 | mov r0, #dat_62 2936 | mov @r0, #0x08 2937 | lbl_0f7e: 2938 | jnb p3.3, lbl_0f87 2939 | jnb p3.4, lbl_0f87 2940 | ljmp lbl_0eb3 2941 | lbl_0f87: 2942 | mov r0, #dat_62 2943 | mov a, @r0 2944 | jnz lbl_0f92 2945 | mov r0, #dat_5b 2946 | mov @r0, #0x02 2947 | sjmp lbl_0f1f 2948 | lbl_0f92: 2949 | sjmp lbl_0f7e 2950 | ljmp lbl_0e9b 2951 | lbl_0f97: 2952 | mov r0, #dat_5b 2953 | mov @r0, #0x01 2954 | sjmp lbl_0f1f 2955 | lbl_0f9d: 2956 | ljmp lbl_0e9b 2957 | lbl_0fa0: 2958 | mov r0, #dat_5d 2959 | mov a, @r0 2960 | jz lbl_0fb2 2961 | mov r0, #dat_68 2962 | mov @r0, #0x00 2963 | mov r0, #dat_5a 2964 | mov @r0, #0x00 2965 | clr a 2966 | mov dptr, #OEPBCTX_2 2967 | movx @dptr, a 2968 | lbl_0fb2: 2969 | ret 2970 | 2971 | ; USB standard descriptor 2972 | cdat_0fb3: 2973 | .byte 0x12 ; bLength 2974 | .byte 0x01 ; bDescriptorType (Device) 2975 | .byte 0x10, 0x01 ; bcdUSB 1.10 2976 | .byte 0x00 ; bDeviceClass (Use class information in the Interface Descriptors) 2977 | .byte 0x00 ; bDeviceSubClass 2978 | .byte 0x00 ; bDeviceProtocol 2979 | .byte 0x08 ; bMaxPacketSize0 8 2980 | .byte 0x51, 0x04 ; idVendor 0x0451 2981 | .byte 0x01, 0xE0 ; idProduct 0xE001 2982 | .byte 0x08, 0x02 ; bcdDevice 2.08 2983 | .byte 0x01 ; iManufacturer (String Index) 2984 | .byte 0x02 ; iProduct (String Index) 2985 | .byte 0x00 ; iSerialNumber (String Index) 2986 | .byte 0x01 ; bNumConfigurations 1 2987 | 2988 | ; USB Configuration 2989 | cdat_0fc5: 2990 | .byte 0x09 ; bLength 2991 | .byte 0x02 ; bDescriptorType (Configuration) 2992 | .byte 0x00, 0x00 ; wTotalLength 0 2993 | .byte 0x01 ; bNumInterfaces 1 2994 | .byte 0x01 ; bConfigurationValue 2995 | .byte 0x00 ; iConfiguration (String Index) 2996 | 2997 | cdat_0fcc: 2998 | .byte 0x80 ; bmAttributes 2999 | .byte 0x32 ; bMaxPower 100mA 3000 | 3001 | ; USB Interfaces 3002 | .byte 0x09 ; bLength 3003 | .byte 0x04 ; bDescriptorType (Interface) 3004 | .byte 0x00 ; bInterfaceNumber 0 3005 | .byte 0x00 ; bAlternateSetting 3006 | .byte 0x02 ; bNumEndpoints 2 3007 | .byte 0xFF ; bInterfaceClass 3008 | .byte 0x00 ; bInterfaceSubClass 3009 | .byte 0x00 ; bInterfaceProtocol 3010 | .byte 0x00 ; iInterface (String Index) 3011 | 3012 | .byte 0x07 ; bLength 3013 | .byte 0x05 ; bDescriptorType (Endpoint) 3014 | .byte 0x81 ; bEndpointAddress (IN/D2H) 3015 | .byte 0x02 ; bmAttributes (Bulk) 3016 | .byte 0x20, 0x00 ; wMaxPacketSize 32 3017 | .byte 0x00 ; bInterval 0 (unit depends on device speed) 3018 | 3019 | .byte 0x07 ; bLength 3020 | .byte 0x05 ; bDescriptorType (Endpoint) 3021 | .byte 0x02 ; bEndpointAddress (OUT/H2D) 3022 | .byte 0x02 ; bmAttributes (Bulk) 3023 | .byte 0x20, 0x00 ; wMaxPacketSize 32 3024 | .byte 0x00 ; bInterval 0 (unit depends on device speed) 3025 | 3026 | cdat_0fe5: 3027 | ; Serial String 3028 | .byte 0x04 ; bLength 3029 | .byte 0x03 ; bDescriptorType (String) 3030 | .byte 0x09, 0x04 3031 | ; Manufacturer String 3032 | .byte 0x24 ; bLength 3033 | .byte 0x03 ; bDescrptorType (String) 3034 | .asciz "T" 3035 | .asciz "e" 3036 | .asciz "x" 3037 | .asciz "a" 3038 | .asciz "s" 3039 | .asciz " " 3040 | .asciz "I" 3041 | .asciz "n" 3042 | .asciz "s" 3043 | .asciz "t" 3044 | .asciz "r" 3045 | .asciz "u" 3046 | .asciz "m" 3047 | .asciz "e" 3048 | .asciz "n" 3049 | .asciz "t" 3050 | .asciz "s" 3051 | ; Product String 3052 | .byte 0x24 ; bLength 3053 | .byte 0x03 ; bDescrptorType (String) 3054 | .asciz "T" 3055 | .asciz "I" 3056 | .asciz "-" 3057 | .asciz "G" 3058 | .asciz "R" 3059 | .asciz "A" 3060 | .asciz "P" 3061 | .asciz "H" 3062 | .asciz " " 3063 | .asciz "L" 3064 | .asciz "I" 3065 | .asciz "N" 3066 | .asciz "K" 3067 | .asciz " " 3068 | .asciz "U" 3069 | .asciz "S" 3070 | .asciz "B" 3071 | 3072 | ; TODO: 0x1031 3073 | .byte 0x41, 0x81, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x02, 0xc5 3074 | .byte 0x41, 0x82, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x02, 0xc5 3075 | .byte 0xc1, 0x83, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0x02, 0xc5 3076 | .byte 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x02, 0x85 3077 | .byte 0x02, 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xf7, 0x02, 0x89 3078 | .byte 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, 0x02, 0x8d 3079 | .byte 0x80, 0x06, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x02, 0x95 3080 | .byte 0x80, 0x06, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x02, 0x91 3081 | .byte 0x80, 0x06, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x02, 0xa9 3082 | .byte 0x81, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0xf3, 0x02, 0xa1 3083 | .byte 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xff, 0x02, 0x99 3084 | .byte 0x81, 0x00, 0x00, 0x00, 0xff, 0x00, 0x02, 0x00, 0xf7, 0x02, 0xa5 3085 | .byte 0x82, 0x00, 0x00, 0x00, 0xff, 0x00, 0x02, 0x00, 0xf7, 0x02, 0x9d 3086 | .byte 0x00, 0x05, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x02, 0xb1 3087 | .byte 0x00, 0x09, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x02, 0xb5 3088 | .byte 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x02, 0xb9 3089 | .byte 0x02, 0x03, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xd7, 0x02, 0xbd 3090 | .byte 0x01, 0x0b, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xd7, 0x02, 0xc1 3091 | .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x02, 0xad 3092 | 3093 | ; TODO: 0x1102 3094 | ; .blkb inserts 0xff, so use .rept + .byte 3095 | .rept 0x1400 - 0x1102 3096 | .byte 0x00 3097 | .endm 3098 | -------------------------------------------------------------------------------- /ti_graph_link_silver.sha1: -------------------------------------------------------------------------------- 1 | 6255d46f667840cccdf46e94fa7a462330076a0b ti_graph_link_silver.bin 2 | -------------------------------------------------------------------------------- /tools/csv2bin.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import csv 4 | 5 | def csv2bin(csv_filename): 6 | cf = open(csv_filename, newline='') 7 | dictread = csv.DictReader(cf) 8 | # determine which version of Logic exported the CSV 9 | if 'Read/Write' in dictread.fieldnames: 10 | return csv2_to_bin(dictread) 11 | else: 12 | return csv1_to_bin(dictread) 13 | 14 | # convert Logic v1 I2C exported CSV to binary data 15 | # name,type,start_time,duration,"ack","address","read","data" 16 | def csv1_to_bin(reader): 17 | bin_data = bytearray() 18 | state = 0 19 | # v1 has row for start, stop, addressing 20 | for row in reader: 21 | if state == 0: 22 | if row['read'] == 'true': 23 | state = 1 24 | elif state == 1: 25 | if row['type'] in ['stop', 'start']: 26 | state = 0 27 | else: 28 | bin_data.append(int(row['data'], 0)) 29 | return bin_data 30 | 31 | # convert Logic v2 I2C exported CSV to binary data 32 | # Time [s],Packet ID,Address,Data,Read/Write,ACK/NAK 33 | def csv2_to_bin(reader): 34 | bin_data = bytearray() 35 | # output all the read transactions 36 | for row in reader: 37 | if row['Read/Write'] == 'Read': 38 | bin_data.append(int(row['Data'], 0)) 39 | return bin_data 40 | 41 | def main(): 42 | import argparse 43 | parser = argparse.ArgumentParser(description='Convert Saleae Logic I2C CSV file to binary.') 44 | parser.add_argument('input', help='Input binary file name') 45 | parser.add_argument('output', help='Output binary file name') 46 | args = parser.parse_args() 47 | bin_data = csv2bin(args.input) 48 | with open(args.output, 'wb') as bin_file: 49 | bin_file.write(bin_data) 50 | 51 | if __name__ == "__main__": 52 | main() 53 | -------------------------------------------------------------------------------- /tools/generate_eeprom.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import struct 4 | 5 | def calculate_checksum(bin_data): 6 | return sum(bin_data) & 0xFF 7 | 8 | def output_eeprom_bin(input_filename, output_filename): 9 | with open(input_filename, 'rb') as in_file: 10 | in_data = in_file.read() 11 | checksum = calculate_checksum(in_data) 12 | header = struct.pack('