我想在‘字节范例’的I2C express设备上使用I2C C库。这是byte范型网站中的示例API。
//
// Executing I2C write transfer
//
pDataWr[0] = 0x12;
pDataWr[1] = 0x34;
printf("\nWriting 0x%02X to address 0x%02x...\n", pDataWr[1], pDataWr[0]);
i2c_CmdBufAppend(2, 0x50, 1, 2, (char *)pDataWr, true, true); // Cmd = 2 : I2C write
// Address = 0x50
// AddrType = 1 : 7-bit address
// Length = 2 : 2 byte payload
// pDataWr : buffer with 2 bytes payload (0x1234)
// STA = true : generate start
// STO = true : generate stop
i2c_RunMaster();
i2c_CmdBufDeleteAll();这是什么意思?它写了什么,写在哪里?它与下面给出的API有什么不同?
//
// Executing dummy write to set EEPROM address
//
printf("\nExecuting dummy write to set EEPROM address...\n");
pDataWr[0] = 0x12;
i2c_CmdBufAppend(2, 0x50, 1, 1, (char *)pDataWr, true, true); // Cmd = 2 : I2C write
// Address = 0x50
// AddrType = 1 : 7-bit address
// Length = 1 : 1 byte payload
// pDataWr : buffer with 1 byte payload (0x12)
// STA = true : generate start
// STO = true : generate stop
i2c_RunMaster();
i2c_CmdBufDeleteAll();我已经浏览了byte范例库文档,但那里的信息非常有限。感谢您的帮助,提前感谢:)
发布于 2011-11-15 03:34:31
在谷歌上快速搜索I2C规范会得到这样的结果:http://i2c2p.twibright.com/spec/i2c.pdf
我已经很久没有使用i2c设备了(我必须为一个专门的芯片组编写自己的驱动程序)。
执行代码的芯片是I2C主机。
i2c_CmdBufAppend(2, 0x50, 1, 2, (char *)pDataWr, true, true); // Cmd = 2 : I2C write
// Address = 0x50
// AddrType = 1 : 7-bit address
// Length = 2 : 2 byte payload
// pDataWr : buffer with 2 bytes payload (0x1234)
// STA = true : generate start
// STO = true : generate stop我对您正在使用的库一无所知,但注释充分说明您正在寻址地址为0x50的设备(使用7位寻址),并且正在写入2个字节的数据,并且还会生成一个启动和停止条件。
您需要参考与之交互的I2C规范和EEPROM。
一旦你理解了规范,它就真的不难了。顺便说一句,这本书充满了向I2C设备读取/写入数据的示例。
某些设备设置为您必须向其写入一个特殊值(如寄存器或命令值),然后再读回数据。这是通过在命令之间没有停止的情况下发送写命令然后是读命令来设置的。
您正在与之交互的设备应该包含有关特殊命令的详细信息。库I2C库不会包含这些细节。
发布于 2011-11-15 06:20:57
添加到Freds帖子中
I2C规范将为您提供物理层、启动和停止模式、ack的位置以及谁在线路上驱动什么。
要理解所依赖的协议,通常必须查看设备本身的文档(通常还包括物理层的图纸)。
要理解某人的I2C代码,您需要您面前的设备的文档。要编写您自己的I2C代码,您需要您面前的设备的文档。如果设备是通用的,如eeprom,例如,许多供应商生产兼容的部件,那么在您面前放几个设备的文档可能是一个好主意,以防您想要支持或避免一些供应商特定的东西。
https://stackoverflow.com/questions/8120722
复制相似问题