h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ

メタ情報
RSS
Login

FT232Hボード動かす

FT232HボードでI2C接続を試す。 ドライバー、ライブラリー等を Adafruitのページの説明に従い インストール。 SSD1336使用のOLEDに表示できる。 1000回繰り返してもエラーは出ない。 安定している。


プログラムを以下に示す。

import os
os.environ['BLINKA_FT232H'] = '1'
import time
from random import randrange
import adafruit_ssd1306
import busio
from board import SCL, SDA
i2c = busio.I2C(SCL, SDA)
t0 = time.time()
w,h = 128,64
oled = adafruit_ssd1306.SSD1306_I2C(w, h, i2c)
oled.fill(0)
for i in range(1000):
    x0 = randrange(w)
    y0 = randrange(h)
    x1 = randrange(w)
    y1 = randrange(h)
    oled.line(x0, y0, x1, y1, 1)
    t1 = time.time()
    oled.show()
    t2 = time.time()
    print("%4d %.0fms" % (i, 1000*(t2-t1)))

しかし、表示が遅い。 計測するとが128x64dotの 画面更新に 250mSぐらいかかっている。 FT232Hは Hispeed (480Mbps)接続。 4KのFifoを持ち、 MPSSE(Multi-Protocol Synchronous Serial Engine)という専用ハードウェアを搭載しているので、 I2Cの 400Kbpsなんて楽勝だろうと思っていたのだが そうではなかったようだ。

I2Cの波形をオシロスコープで確認する。 確かに 400Kbpsで通信しているが、 バイトが連続しない。 300us毎に1byte通信している感じ。

MPSSEについて調べると、 I2CやSPI,JTAGのプロトコルを 直接扱えるのかと思っていたが そうではなく、データをコマンドとして 解釈実行することで、さまざまなシリアル 通信を行えるというハードウェアらしい。 I2Cで1byte送信するにも数byteのコマンド+データを 送る必要があるようだ。

それでも,もっとI2Cを高速化できるのでは ないかという思いはあるのだが、 I2Cは、速度を追求するようなプロトコルではないし、 自分の用途的にも速度はいらないので、 動作が安定しているこの FT232Hを使って行こうかと思う。

調べていてわかったのだが、 このボードはI2Cのclock stretchingには対応していない。 FT232H自体は対応可能なのだが、それには追加の配線が 必要で、このボードでは行われていない。 自分としてはclock strechingは必要ないので問題ない。