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.

[参考译文] MSP430FR5043:I2C 配置

Guru**** 2380860 points
Other Parts Discussed in Thread: MSP430FR5043
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1086343/msp430fr5043-i2c-configuration

部件号:MSP430FR5043

你(们)好  

我正在尝试使用 MSP430FR5043配置 Renesas ZMOD4410,他们没有提供与传感器连接的命令,而是提供了 Arduino 库和 MSP430库,我们无法将 MSP430库包括在 CCS 中, 因此,我们最初将 Arduino 与传感器和解码 I2C 命令集成,然后尝试通过我们的自定义板(i.e) MSP430FR5043传输命令

在 Arduino 中,写入和读取命令之间有10毫秒的延迟,数据处于同步状态,但 MSP430数据在延迟后出现,请查找快照以供参考  

是否可以重新创建为 Arduino I2C 输出

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    有关 I2C 的调试和学习信息,请参阅以下资源。

    MSP 学院- I2C 概念

    MSP430 MCU 上常见 eUSCI 和 USCI 串行通信问题的解决方案

    如果您对与 I2C 上的微控制器的连接有更多疑问,我们还提供了一段涵盖以下主要概念的超精密实验室视频:  

    https://training.ti.com/i2c-i2c-microcontroller-basics 

    这看起来像是一个相当正常的 I2C 时钟拉伸(允许)。 如果要减少这种情况,则需要考虑如何缩短 MSP430的响应时间。 您需要从整体上查看您的应用程序,以确定代码是否阻止您更快地维修 I2C 中断,或者您正在等待唤醒速度较慢的 LPM 模式,或者即使您只需要更快地运行 MSP430。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以在这里找到一个代码,该代码与 ZMOD4410一起使用,但我的主要问题是使用了他们编译的库。

    boolean I2CB0_Rd_2SLA(u8 slave_adress_zmod, u8 reg_adr, u8* dest, u8 nb)
    {
        u8 nb_data = nb;
        boolean nack = False;
        
    	
        UCB0I2CSA = slave_adress_zmod;                      // load slave adress
        UCB0CTLW0 |= (UCTR | UCTXSTT);                     // I2C Tx  + start condition
        UCB0IFG &= ~(UCNACKIFG);
    
    
        while ((UCB0IFG & UCTXIFG) != UCTXIFG)    /// attente buffer libre
        {
            if ((UCB0IFG & UCNACKIFG) == UCNACKIFG)
            {
                nack = True;
                break;
            }
        }   
    
        if (nack == False)
        {
            UCB0TXBUF = reg_adr;                      // place datas in Tx Buffer  
            while((UCB0IFG & UCTXIFG) != UCTXIFG)    /// attente buffer libre
            {
                if ((UCB0IFG & UCNACKIFG) == UCNACKIFG)
                {
                    nack = True;
                    break;
                }
            }
        }
    
    
        if (nack == False)
        {
            UCB0I2CSA = slave_adress_zmod;                   // load slave adress
            UCB0CTLW0 &= ~UCTR ;                       // I2C RX  
            UCB0CTLW0 |= UCTXSTT ;                     // start condition
        
            if(nb_data == 1)                        // if only one byte to receive
            {
    
                while((UCB0CTLW0 & UCTXSTT) == UCTXSTT)                  // attente adr et start transmit avant envoi stop
                {
                }
    
                UCB0CTLW0 |= UCTXSTP ;                    // stop condition
                while((UCB0IFG & UCRXIFG) != UCRXIFG)
                {
                    if ((UCB0IFG & UCNACKIFG) == UCNACKIFG)
                    {
                        nack = True;
                        break;
                    }
                }
                *dest = UCB0RXBUF;                    // read data   
            }
            else
            {
            	
                while(nb_data != 1)
                {      
                    nb_data-- ;
    
                    while((UCB0IFG & UCRXIFG) != UCRXIFG)
                    {
                        if ((UCB0IFG & UCNACKIFG) == UCNACKIFG)
                        {
                            nack = True;
                            UCB0CTLW0 |= UCTXSTP ;                    // stop condition
                            break;
                        }
                    }
                    *dest++ = UCB0RXBUF;                   // read data
                    
                }
                UCB0CTLW0 |= UCTXSTP ;                    // stop condition
                while((UCB0IFG & UCRXIFG) != UCRXIFG)
                {
                    if ((UCB0IFG & UCNACKIFG) == UCNACKIFG)
                    {
                        nack = True;
                        break;
                    }
                }
                *dest = UCB0RXBUF;                         // read final data
            }
        }
        else
        	{
            UCB0CTLW0 |= UCTXSTP ;// stop condition
        	}
         
        return nack;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,MichRFT

    感谢您的回复,如果您能够将传感器与 MSP430集成,您是否有用于解码32字节十六进制值以计算 TVOC 和 eCO2数据的库

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不,我从未收到正确的库。 尽管我给他们发送了一个完整的模拟项目,允许他们检查它是否正常工作,但中国的支持人员总是给我发送了同一个库。 我在几个无用的失望之后就失望了。