你好,
我在i2c总线(EEPROM和另一个设备)上有两个设备,我在总线上附加了外部拉动UPS - SCL,SDA(4.7k)。邮政添加外部上拉我观察电流消耗的凹凸 - 大约500A连续消费(芯片睡眠也是如此)。一旦移除外部上拉,就会消失。潜在的原因可能是I2C线路没有被停用。
我的初始化I2C的代码就像这样:
gpio_configurepin(gpio_port_0,gpio_pin_6,输入,pid_i2c_scl,false);gpio_configurepin(gpio_port_0,gpio_pin_7,输入,pid_i2c_sda,false);i2c_eeprom_init();i2c_eeprom_read_data();i2c_eeprom_release();
我试图重新配置SCL,SDA行回到GPIO状态,但这并没有帮助目前的消耗。
有没有办法停用I2C传输的内部上拉,可以帮助目前的消耗?您可以在调试中提供任何其他输入吗?
关键词:
设备:
嗨vmore,
您可以将GPIO_CONFIGUREPIN()中的I2C行配置为输入或INPUT_PULLUP或INPUT_PULLDOWN。请注意,当设备睡眠时,包括IC2块的所有外围设备都已关闭。你能告诉我你的定制板中使用哪些其他外围设备吗?例如,如果您使用的是外部SPI闪光灯,并且不向下向下电,则会增加睡眠模式的正确消耗。请注意,在我们的示例中,我们具有相同的I2C行配置。
谢谢,PM_DIALOG.
I2C总线上有一个EEPROM,没有SPI线。I2C主要用于EEPROM通信,如果完全需要,则其他I2C设备很少使用。i2c的引脚配置是:
这符合我在其他例子中看到的内容,所以我不认为我正在做一些非常不同的事情。如果I2C块在睡眠模式下断电,我对我来说尚不清楚为什么下拉导致如此多的电流漏极。删除上拉速度急剧降低了当前消耗,因此问题可能在I2C线上。
嗨vmore,
保留了GPIO之前的GPIO状态,而不是GPIO的配置或功能,因此这就是为什么当设备唤醒时,调用periph_init()函数以便在每个唤醒中重新配置引脚引脚返回其默认应用程序状态。例如,如果在睡眠之前,GPIO很高,它会在睡眠期间保持高位,并将通过PERIPH_INIT()函数唤醒重新配置。您可以检查i2c线是否高睡觉前?
谢谢,PM_DIALOG.
你好,谢谢你的回复。在睡眠前,I2C线路没有停用,即它们总是保持高位。但是,外部上拉的情况并非删除了。如果是一个固件问题,它应该在添加上拉的之前和之后存在?在睡觉之前,这些如何明确停用,或者在未使用时?
嗨vmore,
为延迟道歉。让我问你一件事。你提到你有外部上拉,不是吗?是否有可能删除它们并使用内部上拉?你有同样的问题吗?还有,这是睡觉前的国家?这两条线都在Hight State?
谢谢,PM_DIALOG.