This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430FR6043: 无法写入EEPROM里数据

Part Number: MSP430FR6043


硬件i2c中断写入EEPROM里数据,在不初始化MCLK时钟能正常写入数据,

 在初始化完MCLK时钟后无法写入数据 请问是什么问题

  • 您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!

  • 您好,请您先查看I2C 配置以了解时钟基准和 I2C 速度配置。

    以及您是怎样初始化MCLK的?两者的区别是什么?

  • static void hal_system_ClockInit(void)
    {

    FRAMCtl_A_configureWaitStateControl(FRAMCTL_A_ACCESS_TIME_CYCLES_1);
    // Set DCO frequency to default 16MHz
    CS_setDCOFreq(CS_DCORSEL_1, CS_DCOFSEL_4);
    //Set external clock frequency to 32.768 KHz
    CS_setExternalClockSource(32768,0);
    //MCLK 16MHz
    CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_2);
    //SMCLK 8MHz
    CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_2);

    //ACLK 32.768K
    CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);

    // Intializes the XT1 crystal oscillator
    CS_turnOnLFXT(CS_LFXT_DRIVE_3);

    }

    void hal_I2cInit(void)
    {


    //配置B0时钟源SMLK ,速率,
    EUSCI_B_I2C_initMasterParam param = {0};
    param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
    param.i2cClk = CS_getSMCLK();
    param.dataRate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;
    //param.byteCounterThreshold = 10;
    param.byteCounterThreshold = 0;
    param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
    //param.autoSTOPGeneration = EUSCI_B_I2C_SEND_STOP_AUTOMATICALLY_ON_BYTECOUNT_THRESHOLD;
    //设置主模式
    EUSCI_B_I2C_initMaster(EeProm_BASE, &param);
    //设置从地址
    EUSCI_B_I2C_setSlaveAddress(EeProm_BASE,EEPROM_ADDRESS);
    EUSCI_B_I2C_setMode(EeProm_BASE, EUSCI_B_I2C_TRANSMIT_MODE); //写入模式

    //使能B0
    EUSCI_B_I2C_enable(EeProm_BASE);

    //清除发送中断,应答中断
    EUSCI_B_I2C_clearInterrupt(EeProm_BASE,
    EUSCI_B_I2C_TRANSMIT_INTERRUPT0 +
    EUSCI_B_I2C_NAK_INTERRUPT
    );


    EUSCI_B_I2C_enableInterrupt(EeProm_BASE,
    EUSCI_B_I2C_TRANSMIT_INTERRUPT0 +
    EUSCI_B_I2C_NAK_INTERRUPT
    );

    }

    这是我设置的时钟初始化和I2C初始化,请帮我看一下有什么问题,谢谢

  • 好的收到您的反馈,已经跟进给工程师,有新的消息会尽快跟进给您。

  • param.dataRate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;

    您好,请确保这个速率与新的 SMCLK 相匹配。

  • 速率是正确的,用示波器测过波形

  • 您好,您看下总线上有NACK吗?EEPROM承认或者能否识别到master?与 EEPROM 通信时,波形有没有和其他波形不同的地方?