如何在mbed上的同一引脚上从I2C切换到OneWire

How can I switch from I2C to OneWire on the same pin on mbed?

本文关键字:I2C OneWire 引脚 mbed      更新时间:2023-10-16

我有一个项目,涉及通过I2C开关(PCA9548)与OneWire芯片(DS2431)通信。我想做的是正确配置交换机(只需将一个字节写入其状态寄存器),然后使用mbed SDA引脚进行OneWire通信。交换机不关心SDA线(它甚至可以在两个方向上通过直流电),我已经用OneWire成功测试了它。问题是在同一引脚上将软件从I2C切换到OneWire。
我尝试过简单的方法:创建一个全局I2C实例,然后创建一个OneWire实例,但最后一个实例总是破坏前一个实例,以便我可以让I2C工作或OneWire。有没有办法破坏一个实例并再次创建它?

您可以通过几种方式来实现它,但最简单的方法之一是在主函数中声明 I2C 和 OneWire 实例。

如果需要在 main 外部访问 OneWire 实例,可以将其分配给指针。

下面是一些伪代码:

OneWire *oneWireGlobal;
void func1() {
    oneWireGlobal->writeBit(0xFF);
}
void main() {
    I2C i2c(I2C_SDA, I2C_SCL);
    [I2C operations here...]
    OneWire oneWire(I2C_SDA);
    oneWireGlobal = &oneWire; // Be sure to do this before accessing "oneWireGlobal"
    [oneWire operations here...]
    func1();
}