2018年03月24日

I2C/SPIプロトコルブリッジIC その2

先日、紹介したI2C/SPIプロトコルブリッジICの
SC18IS602BIPW/S8HP でちょっと引っかかった点について紹介します。

SC18IS602BIPW/S8HP はSPI接続のデバイスを
I2Cデバイス化する変換ICです。

GPIOの出力や入力はすんなり動いたのですが、
SPIの転送がなかなかできない問題が発生しました。

原因を調査するとI2CでSPI転送をしているにも関わらず、
SPIのクロック、信号が出ていない感じでした。


原因はGPIOの設定にありました。
4つGPIOがある中ですべてGPIOモードにするとSPI転送できないようです。
もう少し厳密に言うとSPI転送時は自動的にCSのIOが制御されるため、
SPI転送時で使用するCSはGPIO Enableにしてはいけないということです。


GPIOの設定はGPIO Enable (Function ID F6h)で行います。
SPI転送時にCSとして使用するGPIOは無効にして
SlaveSelectとして使用します。
SPI転送時のアドレスがSlaveSelectとして機能します。



普段のマイコンの感覚ではSPIのCSはGPIOで別途制御するのが一般的なので
I2C/SPIプロトコルブリッジICでもGPIOモードで全部制御する
ということを考えてしまいました...


ということでI2Cなので画面書き換え速度がSPIの約4倍以上要しますが、
WaveShare製の電子ペーパーをI2C化成功しました。

IMG_0015-2.jpg

IMG_0016-2.jpg

書き換え速度は遅いですが、I2C(Grove)接続で
簡単に制御できるのは魅力的です。
WaveShare製の電子ペーパーはSPIの配線の他に
Cmd/Data線、Reset線、Busy線の3つの配線が必要です。
SC18IS602BIPW/S8HP にはGPIOが4つあるため、
CS含めてすべてソフトで制御できます。

完全にI2C(Grove)接続のみで電子ペーパーを制御できます。
近日中にライブラリの公開とI2C電子ペーパーモジュールの販売を開始したいと思います。

ラベル:部品
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2018年03月10日

I2C/SPIプロトコルブリッジIC

今回はI2C/SPIプロトコルブリッジICの
SC18IS602BIPW/S8HP を紹介します。


SPI接続のデバイスをI2Cデバイス化する変換ICです。
つまりSPI接続のデバイスをGrove接続化できるデバイスです。


SPI接続のスレーブデバイス選択用にGPIOが4つあるため、
スレーブデバイスを最大4つまで選択する用途以外にも
リセットやデータコマンド切替IO等にも使用できます。


他の特徴として
SPI転送速度は最大1.8 Mbit/s、200-byteのデータバッファを搭載しています。


I2Cなので速度には全く期待できませんが、
WaveShare製の電子ペーパーをI2C化させることを検討中です。

もう少し、I2C/SPIプロトコルブリッジICが安ければよいのですが...
マイコンで代替もできますが、
毎度の書き込みの手間を考えると
やはり専用ICを使うのが良さそうです。


I2Cになると接続の容易さが際立つので、
より電子ペーパーの用途が広がると考えています。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2018年02月25日

One-Wireインタフェース

今回はOne-Wireインタフェースについて紹介します。

One-Wireインタフェースはその名の通り、
1本の信号線とGNDで通信するシリアル通信規格です。


信号線から電力を受けることができるため、
信号とGNDの2本のみで通信できます。
また、One-Wireのデバイス1つ1つに固有ID(識別番号、64bit)があるため、
1つのデータライン上の複数デバイスから特定デバイスを呼び出すことができます。

I2Cも7bitの固有アドレスがあります。
同じデバイスの場合は基本的に同じアドレスとなります。
そのため、同じデータライン上に同じデバイスは1つしか繋げることができません。
一方、One-Wireはネットワーク機器のMACアドレスの様に
完全に固有のIDのため、同じデータラインに同じデバイスを複数繋ぐことができます。


便利なOne-Wireインタフェースですが、
1つのデータラインでやり取りするため、
通信速度は期待できません。



入手性のよいOne-Wireデバイスは
他にEEPROM、NVRAMなどがOne-Wireデバイスとしてあります。


急激な温度変化のない環境で定期的に温度を監視する場合などに
1つのデータラインに複数のOne-Wire温度計を設置して
監視すると配線を減らすことができるので効果的です。


STM32マイコンでOne-Wireデバイス(One-Wireデバイス)と通信する

One-Wireデバイスを呼び出す場合、
2種類の方法があります。
データライン上に1つのデバイスしかない場合は
SKIP_ROM_CMDで固有ID指定なしで呼び出します。

データライン上に複数のデバイスがある場合は
MATCH_ROM_CMDで固有IDを指定して該当するデバイスのみ呼び出します。



今回のサンプルコードの場合、
DS18B20_GetTemperature()では
SKIP_ROM_CMDで固有ID指定なしで温度を取得します。
DS18B20_GetSelectDeviceTemperature(***)では
MATCH_ROM_CMDで固有IDを指定して温度を取得します。


ICの配線を簡易化できるOne-Wireインタフェースは面白いと思いました。
2本の配線なので配線の存在感を消すことができます。

現状の課題としては温度計くらいしかデバイスがないことでしょうか。
今後のOne-Wireセンサデバイス種類の拡充に期待です。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2018年02月16日

PS2/USB変換アダプタ

今回は現在開発中のデバイスについて紹介します。


プログラミング専用こどもパソコンichigojamやサーバマシンなどでは
キーボードのインタフェースとしてUSBでなく、PS2がまだ使われています。
一方でUSBが広まり、PS2のキーボードが入手しづらい状況です。

そこで開発しているものがPS2/USB変換アダプタです。


世の中で販売されているPS2/USB変換アダプタ
PS2のキーボードをUSBデバイス化して
古いキーボードを最新のPCで使える変換アダプタです。
これではichigojamやサーバマシンでは使えません。


今回、開発しているPS2/USB変換アダプタは
USBキーボードをPS2化する変換アダプタです。
世の中で販売されている変換アダプタとは変換の向きが逆です。


調べる限り、このような変換アダプタは販売されていないようです。
USBのHostの処理は面倒なため、コストもかかるのが要因でしょうか。


構成としては
[市販USBキーボード]<-USB->[USB Host(Vinculum)]
<-UART->[STM32マイコン]<-PS2->[PC,ichigojam]
です。


本当はVinculumのみでPS2も扱えればよいのですが、
現行のVinculumUはPS2ポートがなく、
GPIOで処理する必要があります。

VinculumTはPS2ポート搭載していますが、
チップ単価が高いため却下。
Vinculumは独自RTOSが搭載されているため、
GPIOでus単位のPS2の処理を実装するのが厳しいため、
STM32を搭載してPS2の処理をさせています。

設計中の基板はこんな感じ。
PS2USBChanger.jpg
裏と表にVinculumとSTM32のチップをそれぞれ搭載しています。
両側にUSBとPS2のポートが搭載される感じです。
電源はPS2から給電のため、挿せば使えるという感じです。
一般的なキーの動作確認ができましたが、
特殊キーのデバッグがまだ残っている状況です。

ただ、PS2は規格がざっくりなところがあり、
あるPCで動いても他で動くかどうか...


上手くいけば3月、4月頃に2千円前後で販売開始する予定です。

ラベル:IchigoJam 部品 HAL STM32
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2018年02月02日

VinculumU 開発環境

以前にVinculumというUSBコントローラを紹介しました。

VinculumがというUSBコントローラかという説明は割愛して、
今回はVinculumの開発環境のインストールと簡単な使用方法を紹介します。


Vinculumの開発環境はVinculum II Toolchainを使用します。
18年2月時点ではV2.0.2-SP2が最新のようです。

ダウンロードしてインストールしましたが、
インストール途中でエラーが発生し、
インストールが完了したものの、
サンプルコードのビルドができない状況でした。

インストール途中のエラーは

path.jpg

「Environment Variable PATH too long to modify」
で環境変数が長く処理できないということのようです。

様々な開発環境をインストールしているため、
このようなエラーが発生したと思われます。
同じWin7でも別のPCではエラーが発生せずに
すんなりインストールが完了しました。


ビルドツールのディレクトリは64bitPCでは
C:\Program Files (x86)\FTDI\Vinculum II Toolchain\Tools\bin
のため、システムのプロパティの環境変数に上記を手動で追加することで解決できます。


path3.jpg

path2.jpg


既に設定された変数値を消さないように
;C:\Program Files (x86)\FTDI\Vinculum II Toolchain\Tools\bin
を末尾に追加します。


これでビルドが通るようになります。




サンプルプロジェクトを開きます。

vin1.jpg



Vinculumと書込みツールを接続して、
Connectボタンをクリックするとデバッガのリストが表示されます。
デバッガが正常に認識されると1つ表示されるはずです。

vin3.jpg

vin2.jpg

選択してconnectをクリックします。

Flashボタンをクリックしてファームを書き込みます。
初回のビルドやコードに変更がある場合は自動的にビルドされたあとに
書込みが実行されます。

vin4.jpg

書込みが完了した後にSTARTをクリックすると
プログラムが動き始めます。



ポイントは環境変数と書込み後のStartだと思いました。
環境変数はともかく、
書き込んだら勝手に走り始めてほしいものです笑

Vinculumはサンプルプログラムが豊富に用意されているため、
サンプルプログラムそのままでも十分な感じです。


開発環境のVinculum Toolchainはシンプルで使いやすいと思いました。
また、後日、Vinculumを使用したUSBデバイス、
USBホストの開発例を紹介したいと思います。
ラベル:部品 開発環境
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする