我正在尝试为似乎与典型设备略有不同的 I2C 设备编写 Linux 驱动程序。具体来说,我需要连续读取两个字节,中间不发送停止位,如下所示:
[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(),但我不确定它们是否支持这些。有没有什么方法可以直接使用这些功能而不是非常痛苦?到目前为止,我发现的文档对此事还不是很清楚。
EDIT#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.