2015年1月24日土曜日

I2Cの5V↔3.3Vレベルシフト 妥協するのが手っ取り早い?

<追記:2015.01.27 この投稿は一切信用しないでください(^q^;>

I2Cのレベルシフト(http://dad8893.blogspot.jp/2014/09/i2c5v33v.html)についていろいろ暗中模索したがオシロを使って多少見えてきた

Arduino Unoで使われているATMega328PのDataSheet
(Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdf)を見るとI2CのHigh値の入力下限は0.7 Vccとなっている


もし5V駆動していれば5V×0.7なので3.5V以下は読みこぼしても知りませんよということだろう

PSoC 4 Pioneer Kitに載っているCY8C4245AXI-483の
DataSheet(PSoC4_PSoC_4200_Family_Datasheet_001-87197_0D_V.pdf)を見ても
GPIOの下限は0.7 × VDDDとなっている
PSoC 4はSCB(Sirial Communication Block)というブロックがあってGPIOのうち限られたPINだけSCBの入出力に割り当てることができるようだ

DataSheetの10ページあたりから詳細が載っているが
SCBで使えるPINのうちでもI2Cに使えるPINはさらに限られる

が、結局I2CのDC特性はGPIOに従うということになる

と思う(^q^;

なのでどちらにしても5V駆動していたらI2Cの入出力は3.5V以下だとHighだと認めなくても知りませんよということだろう

でも、実際に動かしてみると(ある程度)いい加減なPull-Upでも意外と通信できるようだ

PSoC 4 Pioneer Kit と PSoC 4 Prototyping Kitで条件を変えてテストしてみた

Prototyping KitはV-Busの5Vの駆動しかできないが
Pioneer Kitはジャンパの設定でMPUの駆動電圧が3.3Vと5Vに切り替えられる

Pioneer Kit 3.3V - Prototyping Kit 5V - Pullup 3.3V



Pioneer Kit 3.3V - Prototyping Kit 5V - Pullup 5V



Pioneer Kit 5V - Prototyping Kit 5V - Pullup 3.3V


3.3VでPullUpしていてもなぜだか3.6V付近までHigh値があがっている
5VでPullUpしてもなぜだか4V近辺www

PullUp用に使っている3.3Vの端子はテスターで計ったら3.39Vだったが

3.6Vもあれば5V駆動していても5V×0.7=3.5Vを上回る

というわけでデバイスの5V駆動と3.3V駆動はあまり気にせず3.3VでPullUpしておけば
PSoC 4の場合は問題ないと思います

AVRの場合も余力があれば調べたいと思う

もちろんお金もらって仕事でやる場合とか車や産業用みたいな人体に悪影響が出る場合は
ちゃんと考えないとダメですが

ここ10年ぐらいはお金もらっててもベータ版というので逃げてた企業も多いみたいなので(^q^;;;

0 件のコメント:

コメントを投稿