3

一般的なデバイスとは少し異なるように思われる I2C デバイス用の Linux ドライバーを作成しようとしています。具体的には、次のように、間にストップ ビットを送信せずに 2 バイトを連続して読み取る必要があります。

[S] [Slave Addr | 0] [A] [Reg Addr 1] [A] [Sr] [Slave Addr | 1] [Data Byte 1] [NA]  
[Sr][Slave Addr | 0] [A] [Reg Addr 2] [A] [Sr] [Slave Addr | 1] [Data Byte 2] [NA] [P]

i2c_transfer()、i2c_master_send()、i2c_master_recv() など、これを行ういくつかの方法を見てきましたが、それらがこれらをサポートするかどうかはわかりません。これらの機能を直接使用して、それほど苦痛ではない方法はありますか? 私がこれまでに見つけた文書は、この問題について完全に明確ではありませんでした。

編集#1:読みやすくするために記号キーを追加します。http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/i2c/i2c-protocolへの礼儀

 Key to symbols
==============

S     (1 bit) : Start bit
P     (1 bit) : Stop bit
Rd/Wr (1 bit) : Read/Write bit. Rd equals 1, Wr equals 0.
A, NA (1 bit) : Accept and reverse accept bit. 
Addr  (7 bits): I2C 7 bit address. Note that this can be expanded as usual to 
                get a 10 bit I2C address.
Comm  (8 bits): Command byte, a data byte which often selects a register on
                the device.
Data  (8 bits): A plain data byte. Sometimes, I write DataLow, DataHigh
            for 16 bit data.
Count (8 bits): A data byte containing the length of a block operation.
[..]: Data sent by I2C device, as opposed to data sent by the host adapter.
4

1 に答える 1

0

同じ読み取り/書き込み操作では、バイト間でストップ ビットは送信されません。i2c_master_recv はおそらく必要なものです。

于 2012-07-21T21:07:41.777 に答える