我想将I2C C库用于'byte paradigm'I2C express设备。这是字典范例网站中的示例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();
我已经阅读了字典范例库文档,但信息非常有限。请提前帮助,谢谢:)
答案 0 :(得分:2)
快速谷歌搜索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设备读/写数据的例子。
设置了一些设备,您必须为它们写一个特殊值(例如寄存器或命令值),然后读回数据。这是通过发送写命令然后在命令之间没有STOP的读命令来设置的。
您正在与之交互的设备应该具有特殊命令等的详细信息。 库I2C库没有这些细节。
答案 1 :(得分:1)
添加到Freds帖子
I2C规范将为您提供物理层,开始和停止模式,ack落在哪里以及谁在线上驱动什么。
要了解所遵循的协议,您通常必须查看设备本身的文档(通常还包括物理层的图纸)。
要了解别人的I2C代码,您需要在您面前提供该设备的文档。要编写自己的I2C代码,需要在您面前提供设备的文档。如果设备是像eeprom这样的通用设备,例如许多供应商制造兼容部件,那么在您面前有几个设备的文档可能是个好主意,以防有一些供应商特定的事情需要支持或避免。