Microchip 的 MCP23017 是一款基于 I2C 的 16 引脚 IO 扩展器。我已经能够设置设备一次(设置引脚方向和值),但之后我无法按预期更改值,除非我重置/重启设备。这是我用来初始化它并第一次设置引脚的代码:
I2C_Start(); I2C_Write(0x40); // 从机地址 I2C_Write(0x00); //地址寄存器 ...(顺序模式,因此接下来的 10 个设置为 I2C_Write(0x00); I2C_Write(0x08); // IOCON:HAEN=1 I2C_Write(0x08); // IOCON:HAEN=1 ...(顺序模式,因此接下来的 6 个设置为 I2C_Write(0x00); I2C_Write(0xFEu); // GPIOA I2C_Write(0x01u); // 通用输入输出接口 I2C_Stop();
在此之后,我希望能够切换输出值(0xFE <-> 0x01)。我尝试了这段代码:
I2C_Start(); I2C_Write(0x40); // 从机地址 I2C_Write(0x12); //地址寄存器 I2C_Write(0x01u); // GPIOA I2C_Write(0xFEu); // 通用输入输出接口 I2C_Stop();
此时似乎要出去吃午饭了,引脚的值似乎是随机的(输入与输出,输出高与低)。如果有人使用过这个 I2C IO 扩展器,请帮帮我。即使您不完全确定您也非常欢迎发表评论。注意:此处显示的 I2C API 是一个位爆炸算法,所有时钟周期都有一个近似值。它们之间的权重为 1ms。
有用的文件(种类):http ://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf