- I2C 接続の構成
MCU は2つあり,SBC とデバイス (モータ, IMU, 接地センサ) のそれぞれと,つぎのようにつながる:
移動覚NN 接地覚NN 歩行脳NN
ストア ストア ストア
└───↑───────↑────────┼───┘
I2C I2C I2C
┌───┼───────┼───┐ ┌──↓──┐
│ I2C2 I2C4 │ │ I2C1│
│ 0x20 0x40 │ │ 0x10│
│┌‥‥┼‥‥‥‥‥‥‥┼‥‥┐│ │ │ │
│ OUT OUT │ │ IN │
│︙ ‖ SC ‖ ︙│ │ ‖ │
│︙ IMU 接地セ ︙│ │ モータ │
│︙ ストア ストア ︙│ │ ストア │
│└‥‥┼‥‥‥‥‥‥‥┼‥‥┘│ │ │
└───↑───────↑───┘ └↓───↑┘
I2C I2C PWM ADC
┌──┼──┐ ┌──┼──┐ ┌┼───┼┐
│ I2C1│ │ I2C3│ │ │
│ 0x10│ │ 0x30│ │ │
│ │ │ │ │ │ │ │
│ OUT │ │ OUT │ │ │
│ ‖ │ │ ‖ │ │ │
│ IMU │ │ 接地セ │ │ モータ │
└─────┘ └─────┘ └─────┘
中段の2つの枠が,2つのMCU。
「モータ」 は,モータドライバ IC +モータ。
- master と slave
I2C 通信は,master と slave の通信。
中枢 (歩行脳NN) に近い側が master になる:
SBC─MCU 間 : SBC 側のストアが master
MCU─デバイス 間 : MCU 側のストアが master
master であるとは,つぎのこと:
| 1. |
slave は,master が読み書きするメモリ領域 (ここでは 「バッファ」 と呼ぶ)
*_buffer
を作成する
|
| 2. |
master は,*_buffer の読み/書きを,
slave に無断で行う
(物理層では,送信リクエストと了承のダイアログがある)
|
*_buffer は,I2C で直接送受信するデータが入る。
I2C で送れるのは byte 列だから,そのデータは byte 列である。
- ストアの IN/OUT と *_buffer の関係
図中の IN, OUT は,master に対する *_buffer のタイプを示している。
master が専ら書き込みに使っているのを IN,専ら読み出しに使っているのを OUT,と表している。
データの流れを神経系と見立てると, *_buffer が求心性であるのが OUT,遠心性であるのが IN。
"IN"・"OUT" と表現は違うが,実体は *_buffer であり,master が読み書きの両方をできる。
.
"*_buffer" のネーミングは,ここではつぎのようにする:
モータストア IN : mootor_store_buffer
IMUストア OUT : imu_store_buffer
接地センサスト OUTア : foot_store_buffer
- I2C回路と slave アドレス
図中の I2C(m) は,I2C ハードウェア回路の名前。
0x(n) は,master 側から見た slave のアドレス。
この設定が,ストアの I2C 通信のプログラミングに先行する。
プログラミンは,この設定に準じる。
|