你好,
我的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传输的内部引体向上,从而有助于当前的消耗?您能提供任何关于调试的额外输入吗?
关键词:
设备:
嗨vmore,
您可以在GPIO_ConfigurePin()中将I2C线路配置为INPUT或INPUT_PULLUP或INPUT_PULLDOWN。请注意,当设备进入休眠状态时,包括iC2块在内的所有外设都将关闭电源。你能告诉我在你的定制板上你还在使用哪些外设吗?例如,如果您正在使用一个外部SPI flash,并且您没有关闭它的电源,那么在睡眠模式下正确的消耗将会增加。请注意,在我们的示例中,我们有相同的I2C线路配置。
谢谢,PM_Dialog
在i2c总线上有一个eeprom,没有spi线。i2c主要用于eeprom通信,另一个i2c设备很少使用,如果需要的话。i2c的引脚配置为:
这和我在其他例子中看到的是一致的,所以我不认为我在做一些非常不同的事情。如果i2c模块在睡眠模式下断电,我不清楚为什么下拉会导致如此多的电流流失。去掉引体向上可以大大减少当前的消耗,所以问题可能是在i2c线路上。
嗨vmore,
GPIO在进入睡眠前的状态被保留,而不是GPIO的配置或功能,所以这就是为什么当设备唤醒时,会调用外围init()函数,以便在每次唤醒时重新配置引脚,并且引脚返回默认的应用程序状态。例如,如果GPIO在休眠前处于高位,则在休眠期间会保持高位,并在wake中由外围init()函数重新配置。请您在睡觉前检查一下I2C线是否过高?
谢谢,PM_Dialog
你好,谢谢你的回复。i2c线路在睡觉前不会被关闭(它们总是被高高举起)。然而,去除外上拉就不是这样了。如果这是一个固件问题,它应该在添加引体向上之前和之后都存在?如何在睡觉前或不使用时明确停用这些功能?
嗨vmore,
很抱歉耽搁了。我来问你点事。你说过你有外部引体向上,是吗?有没有可能把它们拿下来,然后使用内部引体向上?你有同样的问题吗?还有,睡觉前是什么状态?两条线都在高状态?
谢谢,PM_Dialog