乐鑫技术交流
直播中

王飞

8年用户 1194经验值
私信 关注
[问答]

DS3231 RTC模块的I2C通信失败的原因?怎么解决?

安装程序:SDK 版本 2.0.0
硬件:ESP-12E

我已连接DS3231 RTC模块http://www.ebay.in/itm/252641600523使用 ESP-12E 如下所示
法典:全选
ESP-VCC -> DS3231-VCC
ESP-GND -> DS3231-GND
ESP-GPIO2 -> DS3231-SDA
ESP-GPIO14 -> DS3231-SCL



我希望我的连接是正确的,因为 i2c_master.h
法典:全选
#define I2C_MASTER_SDA_MUX PERIPHS_IO_MUX_GPIO2_U
#define I2C_MASTER_SCL_MUX PERIPHS_IO_MUX_MTMS_U
#define I2C_MASTER_SDA_GPIO 2
#define I2C_MASTER_SCL_GPIO 14
#define I2C_MASTER_SDA_FUNC FUNC_GPIO2
#define I2C_MASTER_SCL_FUNC FUNC_GPIO14C FUNC_GPIO14



我在 user_main.c 中有以下代码。
法典:全选
void user_rf_pre_init(void)
{
}

uint32 ICACHE_FLASH_ATTR
user_rf_cal_sector_set(无效)
{
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 8;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        default:
            rf_cal_sec = 0;
            break;
    }

    return rf_cal_sec;
}

/******************************************************************************
* FunctionName : user_init
*******************************************************************************/
void user_init(void)
{
    uart_reattach();

    os_printf("rnrn============SDK version:%s============rn", system_get_sdk_version());

    i2c_master_gpio_init();
    i2c_master_init();

    i2c_master_start();

    // write address & direction
    i2c_master_writeByte((uint8)(0x68 << 1));
    if (!i2c_master_checkAck()) {
      os_printf("在 i2C 上写入 DS3231 时出错rn");
      i2c_master_stop();
      return;
   }
    i2c_master_stop();
}



我正在打印
在 i2C 上写入 DS3231 时出错
这意味着 i2c_master_checkAck() 是 returnnig false。

我可以请求专家告诉我为什么此代码不起作用。
                    

回帖(1)

郭大

2024-7-11 11:58:38
DS3231 RTC模块的I2C通信失败可能有以下几个原因:

1. 连接问题:请确保您的连接是正确的,根据您的描述,您的连接应该是正确的。但是,建议您再次检查线路和焊点,确保没有松动或短路。

2. 电源问题:确保DS3231模块和ESP-12E模块的电源电压匹配。DS3231通常使用3.3V电源,而ESP-12E可以使用3.3V或5V电源。如果电源电压不匹配,可能会导致通信失败。

3. 引脚配置问题:您提供的代码片段显示了I2C引脚的配置。请确保这些配置与您的硬件连接相匹配。如果引脚配置错误,可能会导致通信失败。

4. 软件问题:请检查您的代码是否正确初始化了I2C接口,并使用了正确的时钟频率。如果时钟频率设置不正确,可能会导致通信失败。

5. 模块故障:如果以上原因都排除了,可能是DS3231模块本身存在问题。您可以尝试更换一个模块进行测试。

解决方法:

1. 重新检查连接和焊点,确保没有松动或短路。

2. 确保电源电压匹配,如果需要,使用电压转换器。

3. 检查引脚配置代码,确保与硬件连接相匹配。

4. 检查I2C初始化代码,确保使用了正确的时钟频率。

5. 如果可能,请更换DS3231模块进行测试。

6. 您还可以尝试使用其他库(如RTClib)来简化I2C通信的实现。

7. 如果问题仍然存在,您可以尝试在论坛或社区寻求帮助,可能有其他用户遇到过类似的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分