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.

[参考译文] RTOS/MSP432P401R:I2C 主设备读取

Guru**** 2575025 points
Other Parts Discussed in Thread: ENERGIA, MSP430FR2355, LMP90100

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/809510/rtos-msp432p401r-i2c-master-read

器件型号:MSP432P401R
主题中讨论的其他器件:MSP430FR2355MSP430FR2433ENERGIALMP90100

工具/软件:TI-RTOS

您好!

我执行了一个与 MSP430FR2355 (从器件)通信的项目。 我使用 Energia 让主器件读取从器件通过 I2C 发送的3个字节(从器件代码由 CCS 编写)。 现在、我不使用 FR2433、而是使用使用 CCS 和 TI RTOS 的 MSP432P401R。
我尝试编写一个代码、但没有成功。

有人可以帮助我将以下代码转换为 TI-RTOS 吗?

代码:

----------------------------------------------------

#include

int i2caddress = 0x48;
void setup()

Wire.begin();//加入 i2c 总线(主机的可选地址)
Serial.begin(9600);//开始串行输出

void loop()

serial.print("\nValor recibido:");
wire.requestFrom (i2caddress、4);//从从设备请求3个字节
while (1 <Wire.available())

int ReceivedValue = Wire.Read();
serial.print (ReceivedValue、hex);
serial.print (");

延迟(2000年);

----------------------------------------------------


我非常感谢你们的帮助。

谢谢、

Mikel

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

    我尝试的代码:

    ------------------------------------------

    #include
    #include
    #include

    /*驱动程序头文件*/
    #include
    #include

    /*示例/板头文件*/
    #include "Board.h"

    静态 Display_Handle 显示;


    /*此代码示例中使用的缓冲区*/
    uint8_t rxBuffer[3];
    uint8_t txBuffer[1];


    /*
    *==== mainThread ====
    *
    void * mainThread (void * arg0)

    display_init();
    bool ret = false;
    I2C_Handle i2c;
    I2C_Params i2cParams;
    I2C_Transaction i2cTransaction;


    I2C_init();
    I2C_Params_init (&i2cParams);
    i2cParams.transferMode = I2C_MODE_BLOCKING;
    i2cParams.transferCallbackFxn =空;
    i2cParams.bitrate = I2C_400kHz;
    I2C = I2C_open (Board_I2C_TMP、&i2cParams);// Board_I2C_TMP = UCB1

    /*打开 UART 显示屏以输出*/
    Display = Display_open (Display_Type_UART、NULL);
    if (display =NULL){
    while (1);

    if (i2c == NULL){
    Display_printf (display、0、0、"Error Initializing I2C!\n"\});
    while (1){}

    display_printf (display、0、0、"I2C initialized!\n"\});


    i2cTransaction.slaveAddress = 0x48;
    i2cTransaction.writeBuf = 0x00;
    i2cTransaction.writeCount = 1;
    i2cTransaction.readBuf = rxBuffer;
    i2cTransaction.ReadCount = 3;

    RET = I2C_transfer (i2c、&i2cTransaction);
    如果(!ret){
    display_printf (display、0、0、"unsuccessful I2C transfer\n");

    display_printf (display、0、0、"adc:%d\n"、rxBuffer[0]);
    display_printf (display、0、0、"adc:%d\n"、rxBuffer[1]);
    display_printf (display、0、0、"adc:%d\n"、rxBuffer[2]);

    I2C_Close (i2c);
    返回(0);

    --------------------------------------------------

    它以 "unsuccessful I2C transfer (I2C 传输失败)"进行响应。

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

    Mikel、

    2355经过编程后可以做什么?

    您是否曾尝试使用示波器或逻辑分析仪来读取 I2C 信号? 您在这里看到了什么?  

    您使用什么上拉值?

    应将 i2cTransaction.writeCount 更改为0。  

    BR、

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

    尊敬的 Seong:

    2355通过 SPI 从 LMP90100接收3个字节。  

    我使用的是4、7k 欧姆上拉电阻器、使用逻辑分析仪、我只能看到以下信号:START、Slave address、NACK 和 STOP。

    我还尝试了 writecount 0、但没有任何变化。

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

    我不知道昨天发生了什么、但今天正在工作。 也许我给从器件严重充电。

    由此给您带来的不便、我们深表歉意。

    此致、

    Mikel

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

    很高兴您能正常工作!
    BR、