0

我想将 I2C C 库用于“字节范式”I2C 快速设备。这是字节范式网站中存在的示例 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();

我已经浏览了字节范式库文档,但那里的信息非常有限。请帮助,在此先感谢:)

4

2 回答 2

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 设备读取/写入数据的示例。

某些设备设置为您必须向它们写入特殊值(例如寄存器或命令值),然后再读回数据。这是通过发送一个写命令和一个读命令来设置的,命令之间没有停止。

您正在与之交互的设备应该具有特殊命令等的详细信息。库 I2C 库没有这些详细信息。

于 2011-11-14T19:34:31.400 回答
1

添加到 Freds 帖子

I2C 规范将为您提供物理层、开始和停止模式、ack 到达的位置以及谁在线路上驱动什么。

要了解所依赖的协议,您通常必须查看设备本身的文档(通常还包括物理层的图纸)。

要了解其他人的 I2C 代码,您需要您面前的设备的文档。要编写自己的 I2C 代码,您需要面前的设备文档。如果设备是通用的,例如 eeprom,例如许多供应商制造兼容的部件,那么将几个设备的文档放在您面前可能是个好主意,以防您想要一些供应商特定的东西支持或避免。

于 2011-11-14T22:20:56.953 回答