配線図
スレーブ側は中華製のArduino Pro Mini(3.3V/8MHz版)でPCとUART通信するために、秋月の「FT232RL USBシリアル変換モジュール」をつないでいます。
Nucleo(マスター側)
https://os.mbed.com/users/ryood/code/Nucleo_i2c_master_writer/
Arduino(スレーブ側)はArduino-ArduinoのI2C通信の場合と同じです。
https://github.com/ryood/Arduino_I2C/tree/master/Arduino/Wire_Slave_Resiver_NoPullup
Arduinoのスケッチでは、
pinMode(A4, INPUT); // disable pullup
pinMode(A5, INPUT); // disable pullup
として、内部プルアップを無効化しています。配線図のように外付けの2.2kΩの抵抗でプルアップしています。
ArduinoのI2Cアドレスは7bitですが、mbedでは8bitです。mbedではアドレスを1bit左シフトします。
mbedの「I2C::write()」の引数の最後に「bool repeated=false」があります。このrpeatedをtureにすると、I2C通信で「STOPコンディション」が送信されません。
repeated=trueの場合
ch1:SDA ch2:SCL
repeated=falseの場合
ch1:SDA ch2:SCL
「repeated=false」の場合は最後の1バイトを送出する前に「STOPコンディション」が入っています。
「repeated=false」の場合は受信側のArduinoのスケッチでは正常に受信できず、コンソールには「x is32」と表示され続けました。
「repeated=true」の場合は前回のArduino同士のI2C通信のように、8bitカウンタがインクリメントされる様子が表示されます。
「STOPコンディション」は、SCLがHの間に、SDAがL→Hに変化するものです。
ch1:SDA ch2:SCL
0 件のコメント:
コメントを投稿