1

組み込みデバイスで i2c インターフェイスを使用しようとしています。

(i2c-dev.hカーネルと同じ名前のファイルではなく、ユーザー空間のヘッダー ファイルです!) で、i2c_msg は次のように定義されます。

struct i2c_msg {
    __u16 addr; // slave address
    unsigned short flags;
    short len;      // msg length
    char *buf;      // pointer to msg data
};

struct i2c_msgから読ん<kernel root>/Documentation/i2cでいますが、配列がどれくらいの大きさになるかについてはどこにも言及していないようです*buf(つまり、最大サイズはどうなりlenますか)。

私が遭遇した最も近い答えは doc-filewriting-clients:327にあり、次のように述べられています。

...、3 番目は読み書きするバイト数 (バッファの長さより小さくなければならず、msg.len が u16 であるため、64k より小さくなければなりません。)

ただし、これは i2c 関数「i2c_master_send」を指します。そのため、何が起こっているのかは明らかではありませんが、

buf[len-1]本当に64kまでいけるの?すなわち。i2c バスを介して 1 回の書き込み操作 (および 1 つのデバイス) で最大 64kBytes のデータを送信できますか?

ご協力ありがとうございました。

4

2 に答える 2

0

GeertVc は非常に良い回答をしてくれました。EEPROM を扱う場合、64K バイトのデータを持つことができます。ただし、通常は内部バッファーがあり、このバッファーを使用して書き込みを実行します。例として、4K バイト デバイスである AT24C32 は、それぞれ 32 バイトの 128 ページとして編成されます。一度に書き込むことができる最大のメモリ ブロックは、ページ境界の先頭から始まる 32 バイトです。いずれの場合も、I2C バスに接続されているデバイスを調査する必要があります。

于 2017-01-07T00:43:58.047 に答える