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 件のコメント:
コメントを投稿