你好,
我的I2C总线上有两个设备(eeprom和另一个设备),总线上有外部上拉-scl,sda(4.7k)。在添加外部上拉之后,我观察到电流消耗有一个起伏——大约500uA的连续消耗(也在芯片休眠时)。一旦外部上拉被移除,这种情况就会消失。一个潜在的原因可能是i2c线路没有被停用。
我初始化i2c的代码如下:
GPIO_ConfigurePin(GPIO_PORT_0,GPIO_PIN_6,INPUT,PID_I2C_SCL,false);GPIO_ConfigurePin(GPIO_PORT_0,GPIO_PIN_7,INPUT,PID_I2C_SDA,false);I2C_eeprom_init();I2C_eeprom_read_data();I2C_eeprom_release();
我试图将scl、sda行重新配置回gpio状态,但这对当前的消耗没有帮助。
有没有一种方法可以停用i2c传输的内部上拉,从而有助于降低电流消耗?你能提供关于调试这个的任何额外的输入吗?
关键词:
设备:
嗨,V摩尔,
您可以将GPIO\u ConfigurePin()中的I2C行配置为INPUT或INPUT\u PULLUP或INPUT\u PULLDOWN。请注意,当设备进入睡眠状态时,包括iC2块在内的所有外围设备都已关机。您能告诉我您在定制板上使用的其他外围设备吗?例如,如果您使用的是外部SPI闪存,而您没有关闭它的电源,则在睡眠模式下的正确消耗量将增加。请注意,在我们的示例中,我们有相同的I2C线路配置。
谢谢,下午好
i2c总线上有一个eeprom,没有spi线。i2c主要用于eeprom通信,如果需要的话,很少使用其他i2c设备。i2c的引脚配置为:
这与我在其他例子中看到的一致,所以我不认为我在做一些非常不同的事情。如果i2c模块在睡眠模式下断电,我不清楚为什么上拉会导致如此大的电流消耗。移除上拉可以大幅降低电流消耗,因此问题可能出在i2c线路上。
嗨,V摩尔,
GPIO在进入睡眠状态之前的状态是保留的,而不是GPIO的配置或功能,因此当设备唤醒时,会调用periph_init()函数,以便在每次唤醒时重新配置管脚,管脚返回其默认应用程序状态。例如,如果在进入睡眠前GPIO为高电平,则它将在睡眠期间保持高电平,并将在唤醒时由periph_init()函数重新配置。你能在睡觉前检查一下I2C线是否高吗?
谢谢,下午好
嗨,谢谢你的回复。i2c线路在睡觉前没有关闭(它们总是保持在高位)。然而,移除外部上拉时,情况并非如此。如果是固件问题,它应该在添加上拉之前和之后都存在?如何在睡觉前或不使用时显式停用这些功能?
嗨,V摩尔,
抱歉耽搁了。我问你件事。你说过你有外引体向上,是吗?是否可以拆除它们并使用内部上拉?你有同样的问题吗?还有,睡觉前的状态是什么?两条线都处于高位?
谢谢,下午好