2015年1月16日金曜日

I2CをやるためにPSoC 4 Prototyping Kitを使ってみた

PSoC 4 Prototyping Kitとは
正月にでんでんタウンで仕入れてきた800円のPSoC 4のボードだ


オシロも手に入れたことだしI2CのLCDを「動けばいい」という感じで使うのではなくて
I2Cの規格自体を多少は理解して使うことにした

PSoC CreatorのExampleを探すとPSoC 4 Pioneer Kitを2枚使って
I2Cで通信させるサンプルがあった

PSoC 4 Creator KitとPSoC 4 Protyping Kitを持っているので
これで通信さればいいかなあという目論見でPSoC 4 Prototyping Kitも使ってみることにした

PSoC 4 Prototyping KitのExample

PSoC Creatorやその他もろもろのツールはすでにインストールしてあるので
付属のフライヤーにある通りwww.cypress.com/CY8CKIT-049-42xxから

CY8CKIT-049-42xx Kit Only (Kit Design Files, Documentation, Examples) 

というのを見つけてインストールしてみたが、フルキットをInstallするように指示された

CY8CKIT-049-42xx Kit Setup (Kit Design Files, Creator, Programmer, Documentation, Examples)

をインストールすると、どうもCypress USB-Serial Driverというのが必要らしくて
フルキットじゃないとダメなんだろう

Pioneer KitのほうはPSoC 5 LPを書き込み(&その他もろもろ)に使っているが
Prototyping KitはCY7C65211というUSBコントローラーを使っているのでこれのドライバーだ

800円だしさすがにPSoC 5 LPは載せられないということか(^q^;

最初よくわからなかったがドキュメントを読んでExampleをやってみると
プログラムにUSBコントローラーを制御するブートローダーをくっつけた状態で
PSoC 4に書き込まないといけないようだ

デフォルトのブートローダーだと
基板上のボタンを押しながらPCのUSBコネクタに差し込むと書き込み待機状態
ボタンを押さないで差し込めば書き込んだプログラムが動くという仕組みになっている

初期状態だと

押す→基板上のLEDが早く点滅(約0.5秒サイクル)→書き込み待機状態 
押さない→基板上のLEDがゆっくり点滅(約1秒サイクル)→ユーザープログラムの実行状態
となっている

プログラムを書き込むときは、標準のPSoC Programmerではなくて
PSoC CreatorのToolメニューから起動できるBooltloder Hostを使わないといけない

もしPSoC Programmerで書き込むと2度とプログラムを書き込めなくなる。たぶん(^q^;

Mini Prog 3という書き込み器を使えばブートローダーを復活できると思うが
Digi-keyとかじゃないと売ってないし、1万円以上する(@q@;

なので最初に使うときはPrototyping Kitではなくて多少高いけどPioneer Kitをお勧めします

高いといってもArduino Unoとほとんど同じ値段だ

I2Cのプロトコル

I2Cについても多少調べた

ちょっと端折っていうと
通信の開始時にMasterデバイスがSlaveデバイスのアドレス(7bit)を指定してSDAに流す

Slaveが自分のアドレスだったら、「あ、俺だわwww」と思ってACKを同じSDAに流してマスターからの通信開始を促す

Slaveが自分のアドレスではなかったら、「おまえらにまかせたwww」と思って何もしない

Masterは返事がないとNACK(「しくじったか(^q^;」)と理解する

NACKの場合Masterは(プログラム次第だが)返事がくるまで最初からまた同じことを繰り返す

前回オシロで波形を見てみた図だと

ArduinoでI2C-LCDとの通信がうまくいった場合


上がSDA、下がSCL

9bit目のSDAがLに引っ張られている(LがACKです)

<追記:2017/02/08>
おそらくオシロのプローブの倍率設定がx1側になっていたようで、電圧値が10倍になって波形もなまって表示されています。
</追記>

PSoCでI2C-LCDとの通信が失敗している場合



9bit目のSDAがHのまま!

アドレスの7bitとACK/NACKの9bit目の間の8bit目は何かというと
HがRead(SlaveからMasterへ)
LがWrite(MasterからSlaveへ)
とMasterが指定するbitだ

このI2C通信のExampleがうまく動かせれば
3.3V⇔5Vのレベルシフトについてももう少し調べてみたい思います

0 件のコメント:

コメントを投稿