{"id":26433757,"url":"https://github.com/charlysan/vctpi","last_synced_at":"2025-03-18T07:18:41.399Z","repository":{"id":250499741,"uuid":"825495980","full_name":"charlysan/vctpi","owner":"charlysan","description":"Python tool for communicating with Micronas VCT video controller via I2C","archived":false,"fork":false,"pushed_at":"2024-07-28T02:08:57.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-28T22:49:46.254Z","etag":null,"topics":["49xyi","i2c","micronas","python","rasberry-pi","vct"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/charlysan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-07T23:58:47.000Z","updated_at":"2024-07-28T02:09:00.000Z","dependencies_parsed_at":"2024-07-27T22:59:45.811Z","dependency_job_id":null,"html_url":"https://github.com/charlysan/vctpi","commit_stats":null,"previous_names":["charlysan/vctpi"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlysan%2Fvctpi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlysan%2Fvctpi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlysan%2Fvctpi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/charlysan%2Fvctpi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/charlysan","download_url":"https://codeload.github.com/charlysan/vctpi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244173576,"owners_count":20410301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["49xyi","i2c","micronas","python","rasberry-pi","vct"],"created_at":"2025-03-18T07:18:40.806Z","updated_at":"2025-03-18T07:18:41.392Z","avatar_url":"https://github.com/charlysan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vctpi\n\nThis tool is the result of reverse-engineering the I2C bus of a Panasonic CRT, and can be used to communicate with Micronas VCT video controller via i2c using a Raspberry Pi. A detailed explanation of the process can be found on [this wiki](https://github.com/charlysan/crt_stuff/wiki/I2C-Data-Injection-In-Panasonic-CRT).\n\n\n## Table of contents\n- [Disclaimer](#disclaimer)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Connection to the TV](#connection-to-the-tv)\n- [Usage](#usage)\n  - [Access VCT registers](#access-vct-registers)\n    - [Read 16bit register at sub-address `0x4B` from VSP (`0x58`):](#read-16bit-register-at-sub-address-0x4b-from-vsp-0x58)\n    - [Write word `0x81 0x08` to register located at sub-address `0x4B` of VSP (`0x58`):](#write-word-0x81-0x08-to-register-located-at-sub-address-0x4b-of-vsp-0x58)\n  - [Access external EEPROM memory](#access-external-eeprom-memory)\n    - [Read byte (page 0, offset 0x10) from external EEPROM that is mapped from address 0x50 to 0x57](#read-byte-page-0-offset-0x10-from-external-eeprom-that-is-mapped-from-address-0x50-to-0x57)\n    - [Ready byte (page 3, offset 0xFA) from external EEPROM:](#ready-byte-page-3-offset-0xfa-from-external-eeprom)\n    - [Write byte to external EEPROM (page 0, offset 0x10):](#write-byte-to-external-eeprom-page-0-offset-0x10)\n    - [Dump external EEPROM memory to binary file](#dump-external-eeprom-memory-to-binary-file)\n    - [Read EEPROM memory from offset 0x10 to offset 0x1F](#read-eeprom-memory-from-offset-0x10-to-offset-0x1f)\n    - [Read EEPROM memory from offset 0x100 to offset 0x10F (page 1)](#read-eeprom-memory-from-offset-0x100-to-offset-0x10f-page-1)\n    - [Read first 32 bytes from EEPROM memory](#read-first-32-bytes-from-eeprom-memory)\n    - [Write EEPROM memory from binary file (can be used to restore TV settings)](#write-eeprom-memory-from-binary-file-can-be-used-to-restore-tv-settings)\n  - [Multi purpose commands](#multi-purpose-commands)\n    - [Pull `SCL` low for 5 seconds (this can be used to put IC in bootloader mode)](#pull-scl-low-for-5-seconds-this-can-be-used-to-put-ic-in-bootloader-mode)\n\n\n## Disclaimer\n\nThis tool is provided under the MIT License and is intended for experimental use. Users are advised to proceed at their own risk. The author assumes no responsibility or liability for any damage, data loss, hardware malfunction, or any issues that may render your TV inoperable as a result of using this tool. By using this tool, you acknowledge and accept that the author shall not be held responsible for any adverse effects or issues arising from its use.\n\n## Requirements\n\n- Raspberry Pi\n- Python 3.11 or above\n- [pigpio](https://abyz.me.uk/rpi/pigpio/python.html)\n  \n\n\n## Installation\n\n1. Install `pigpio` following [this instructions](https://abyz.me.uk/rpi/pigpio/download.html)\n2. Clone this repository:\n```\ngit clone https://github.com/charlysan/vctpi.git\n```\n3. Run `pigpio` daemon\n```\nsudo pigpiod\n```\n\n## Connection to the TV\n\nBy default, [vcti2clib](https://github.com/charlysan/vctpi/blob/main/vcti2clib/vcti2c.py#L6), is using the following pinout:\n```\nSDA_GPIO_PIN = 2\nSCL_GPIO_PIN = 3\n```\n\nYou need to connect those two lines, along with GND, to TV's i2c service port.\n\n## Usage\n\nThe tool can be used to read/write to VCT registers, as well as read/write to external memories connected to the bus.\n\n**WARNING**: you must never run a read/write command while i2c bus is busy, this means that you first need to put the controller in bootloader mode. To put the controller in bootloader mode you have to turn the TV on while `SCL` is being pulled low.\n\n\n### Access VCT registers\n\n#### Read 16bit register at sub-address `0x4B` from VSP (`0x58`):\n```\npython vct_cli.py --rwas 0x58 0x4b\n0x81 0x00\n```\n\n#### Write word `0x81 0x08` to register located at sub-address `0x4B` of VSP (`0x58`):\n```\npython vct_cli.py --wwas 0x58 0x4b 0x81 0x08\n```\n\n### Access external EEPROM memory\n\n#### Read byte (page 0, offset 0x10) from external EEPROM that is mapped from address 0x50 to 0x57\n\n```\npython vct_cli.py --rbo 0x50 0x10\n0x36\n```\n\n#### Ready byte (page 3, offset 0xFA) from external EEPROM:\n```\npython vct_cli.py --rbo 0x53 0xfa\n0x10\n```\n\n#### Write byte to external EEPROM (page 0, offset 0x10):\n```\npython vct_cli.py --wbo 0x50 0x10 0x37\n```\n\n#### Dump external EEPROM memory to binary file\n```\npython vct_cli.py --rmr 0x50 0x57 \u003e e2_dump.bin\n```\n\n#### Read EEPROM memory from offset 0x10 to offset 0x1F\n```\npython vct_cli.py --rmb 0x50 0x10 0x1f | xxd -g 1\n00000000: 36 10 02 01 00 10 02 0f 90 a1 00 00 00 08 05 00  6...............\n```\n\n#### Read EEPROM memory from offset 0x100 to offset 0x10F (page 1)\n```\npython vct_cli.py --rmb 0x51 0x00 0x0f | xxd -g 1\n00000000: 1b 00 06 00 b9 00 06 00 ba 00 06 00 bb 00 06 00  ................\n```\n\n#### Read first 32 bytes from EEPROM memory\n```\npython vct_cli.py --rmr 0x50 0x51 | xxd -g 1\n00000000: bd 10 00 00 04 00 00 00 00 00 00 00 00 00 00 46  ...............F\n00000010: 36 10 02 01 00 10 02 0f 90 a1 00 00 00 08 05 00  6...............\n00000020: 80 00 06 00 81 00 06 00 82 00 06 00 83 00 06 00  ................\n00000030: 84 00 06 00 85 00 06 00 86 00 86 09 87 00 06 00  ................\n00000040: 88 10 06 00 89 00 06 00 8a 10 06 00 8b 00 06 00  ................\n00000050: 8c 00 06 00 8d 00 06 00 8e 00 06 00 8f 10 06 00  ................\n00000060: 90 00 06 00 91 00 06 00 92 00 06 00 93 00 06 00  ................\n00000070: 94 00 06 00 95 00 06 00 96 00 06 00 97 00 06 00  ................\n00000080: 98 00 06 00 99 00 06 00 9a 00 06 00 9b 00 06 00  ................\n00000090: 9c 10 06 00 9d 00 06 00 9e 00 06 00 9f 10 06 00  ................\n000000a0: a0 00 06 00 a1 00 06 00 a2 00 06 00 a3 00 06 00  ................\n000000b0: a4 00 06 00 a5 00 06 00 a6 00 06 00 a7 00 06 00  ................\n000000c0: a8 00 06 00 a9 00 06 00 aa 00 06 00 ab 00 06 00  ................\n000000d0: ac 00 06 00 ad 00 06 00 ae 00 06 00 af 00 06 00  ................\n000000e0: b0 00 06 00 b1 00 06 00 b2 00 06 00 b3 00 06 00  ................\n000000f0: b4 00 06 00 b5 00 06 00 b6 00 06 00 b7 00 06 00  ................\n00000100: 1b 00 06 00 b9 00 06 00 ba 00 06 00 bb 00 06 00  ................\n00000110: bc 00 06 00 bd 00 06 00 be 00 06 00 bf 00 06 00  ................\n00000120: c0 00 06 00 c1 00 06 00 c2 00 06 00 c3 00 06 00  ................\n00000130: c4 00 86 f6 c5 00 06 00 c6 00 86 f6 c7 00 06 00  ................\n00000140: c8 00 06 00 c9 00 06 00 ca 00 06 00 cb 00 06 00  ................\n00000150: cc 00 06 00 cd 00 06 00 ce 00 06 00 cf 00 06 00  ................\n00000160: d0 00 06 00 d1 00 06 00 d2 00 06 00 d3 00 06 00  ................\n00000170: d4 00 06 00 d5 00 06 00 d6 00 06 00 d7 00 06 00  ................\n00000180: d8 00 06 00 d9 00 06 00 da 00 06 00 db 00 06 00  ................\n00000190: dc 00 06 00 dd 00 06 00 de 00 06 00 df 00 06 00  ................\n000001a0: e0 00 06 00 e1 00 06 00 e2 00 06 00 e3 00 06 00  ................\n000001b0: e4 00 06 00 e5 00 06 00 e6 00 06 00 e7 00 06 00  ................\n000001c0: e8 00 06 00 e9 00 06 00 ea 00 06 00 eb 00 06 00  ................\n000001d0: ec 00 86 f6 ed 00 06 00 ee 00 06 00 ef 00 06 00  ................\n000001e0: f0 00 06 00 f1 00 06 00 f2 00 06 00 f3 00 06 00  ................\n000001f0: f4 00 06 00 f5 00 06 00 f6 00 06 00 f7 00 06 00  ................\n```\n\n#### Write EEPROM memory from binary file (can be used to restore TV settings)\n```\npython vct_cli.py --wmf 0x50 0x57 ./e2_dump.bin\n```\n\n### Multi purpose commands\n\n#### Pull `SCL` low for 5 seconds (this can be used to put IC in bootloader mode)\n```\npython vct_cli.py --pull-scl 0 5\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlysan%2Fvctpi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcharlysan%2Fvctpi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcharlysan%2Fvctpi/lists"}