字节范例c库的用法

时间:2011-11-14 11:12:40

标签: visual-c++ embedded i2c

我想将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();

我已经阅读了字典范例库文档,但信息非常有限。请提前帮助,谢谢:)

2 个答案:

答案 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这样的通用设备,例如许多供应商制造兼容部件,那么在您面前有几个设备的文档可能是个好主意,以防有一些供应商特定的事情需要支持或避免。