Skip to content

irvankris/MCP2221A-more-than-64Byte

Repository files navigation

MCP2221A-more-than-64Byte

Akses python ke I2C device menggunakan USB HID I2C, MCP2221A
dengan Kirim-Terima lebih dari 64 byte (termasuk 4 byte overhead dan 60 byte-data-length-netto)

modul yang saya gunakan : Adafruit MCP2221A Breakout - General Purpose USB to GPIO ADC I2C - Stemma QT / Qwiic

[Adafruit MCP2221A Breakout link] (https://www.adafruit.com/product/4471)

Latar belakang:

pengalaman mengakses I2C device menggunakan interface USB. Karena dengan menggunakan USB, implementasi I2C device tidak perlu "membongkar" perangkat Host (antara lain solder langsung ke mother board), serta saat ini konektivitas USB banyak diterapkan pada perangkat PC/SBC/USB-OTG-smartphone

tantangan:

dalam standard USB-HID, maksimum kirim-terima data adalah 64 byte. Padahal terkadang kita memerlukan kirim terima data lebih dari 64 byte. Saya mencari di banyak forum dan github, untuk kirim terima data lebih dari 64 byte pada HID, belum menemukan contoh yang berhasil.

Titik terang ...

Dalam datasheet MCP2221A dituliskan bahwa datalength maksimum adalah 0xFF. setelah kirim data, bila mana datalength lebih dari 60byte, maka "SubSequent I2C Write Data Commands will transport the reminder of the user data- till requested length ".

Serta saya telah berhasil dalam mengirimkan data lebih dari 60byte, dengan menggunakan utility tool, MCP2221 I2C SMBUS terminal.

file perintah MCP2221 I2C SMBUS terminal dapat diimport pada file Terminal_multiwrite.csv.

hasil capture logic analyzer pada file Terminal_Multiwrite.sr .

hasil capture logic analyzer dapat dibuka menggunakan aplikasi PulseView.

Lalu bagaimana kalau interfacing MCP2221 menggunakan python?

Berikut ini adalah pengalaman saya, berhasil transfer kirim-terima data lebih dari 64 byte, adalah dengan menjalankan :

python3 test10.py

Saya juga merekam digital signal saat mengeksekusi perintah tersebut menggunakan logic Analyzer (Test10_multiwrite.sr).

I2C Signal saat read multiple times

I2C Signal saat write multiple times

untuk terima data lebih dari 60 byte, ternyata sangat mudah, setelah perintah proses ke I2C device telah sukses dikirim, anda hanya perlu perintah membaca berulang2 dan tiap-tiap pembacaan maksimum 60 byte.

untuk pengiriman data lebih dari 60 byte anda hanya perlu perintah Write berulang2. Perintah pertama (first chunk) adalah dikirim sebanyak 60 byte dari total perintah, namun data length adalah total keseluruhan data yang akan dikirim (misalnya 72 byte/0x48 ). Segera (perlu time.sleep) setelah pengiriman pertama, dilanjutkan dengan pengiriman byte sisa nya,

Hal penting yang mungkin mempengaruhi kesuksesan kirim-terima-lebihdari-64byte adalah:
kemampuan/fitur dari I2C device untuk kirim/terima data terpisah-pisah (chunk)
serta trial-error nilai dari time.sleep.

pada Python Code yang saya buat, saya mengambil beberapa code pada

https://github.com/nonNoise/PyMCP2221A/blob/master/PyMCP2221A/PyMCP2221A.py

(The MIT License (MIT) Copyright (c) 2017 Yuta Kitagami (kitagami@artifactnoise.com,@nonnoise)

Lisensi:

saya belum belajar dan belum terlalu mengerti tentang lisensi. Saya memilih MIT License.

License

The MIT License (MIT) Copyright (c) 2021 Irvan Kristianto (irvan.kristianto@gmail.com)

About

Akses python ke I2C device menggunakan USB HID MCP2221A untuk kirim terima data lebih dari 64 byte

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages