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.

[参考译文] CC3220SF-LAUNCHXL:通过 I2C 与传感器通信

Guru**** 2595770 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/781847/cc3220sf-launchxl-communicating-to-sensor-with-i2c

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220SF

您好!

我在使用 I2C 与传感器通信时遇到一些问题。 我已采用"i2ctmp006_CC3220SF_LAUNCHXL_tirtos_ccs"代码、并进行了非常细微的修改、以便与 Keller 压力/温度传感器进行通信。 为了从上述传感器获取数据、我必须先请求读取数据、然后传输数据、我认为这是正确的、但我收到 "I2C 总线故障"错误。

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

    您能否提供您正在执行的操作(i2ctmp006.c)的完整源代码? 这样、我就可以验证您是否正在初始化并正确执行传输。 我只能看到您在设置事务的位置。

    此外、为什么要设置两个不同的事务结构?


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

    您好!

    我已成功连接到器件。 问题是我的传输速度太快(400kHz 与100kHz)。 但这里是代码。  

    /*********
    *
    *克里斯托弗·布鲁德里克
    *凯勒传感器*
    
    (KellerSensor.c)*(******* /
    
    ///*库*/
    #include 
    #include 
    #include 
    #include 
    #include 
    
    
    /*头文件*/
    #include 
    #include 
    #include 
    
    #include 
    #include 
    #include 
    #include 
    
    #include "Board.h"
    #include "CC3220SF_LAUNCHXL.h"
    
    /*温度传感器十六进制地址*/
    #define KELLER_SENSOR 0x40
    
    #ifndef Board_TMP_ADDR
    #define Board_TMP_ADDR Keller_sensor
    #endif
    
    static Display_Handle display;
    
    /*十进制精密温度*
    /双精度 temp_p;
    //double Pres_p;
    
    /*
    ========================= mainThread ===========================
    //
    void * mainThread (void * arg0)
    {
    /*函数变量*/
    unsigned int 一;
    
    内部16_t 温度;
    // int16_t 压力;
    
    uint8_t txBuffer[2];
    uint8_t rxBuffer[5];
    
    uint8_t configWrite[2];
    uint8_t CONFIGRad[5];
    
    /* I2C 结构*/
    I2C_Handle I2C;
    I2C_Params i2cParams;
    I2C_Transaction i2c 分次1;
    I2C_Transaction i2c 分次4;
    
    /*调用驱动程序初始化函数*/
    display_init();
    GPIO_init();
    I2C_init();
    
    /*打开主机显示屏以输出*/
    Display = Display_open (Display_Type_UART、NULL);
    if (display =NULL){
    /*无法打开显示驱动程序*/
    while (1);
    }
    
    /*创建 I2C 以供使用*/
    I2C_Params_init (&i2cParams);
    i2cParams.bitrate = I2C_100kHz;
    I2C = I2C_open (Board_I2C_TMP、&i2cParams);
    
    /*发送读取命令*//*-------------------------------------------------------
    */
    configWrite[0]= 0xAC;
    i2cTransaction4.slaveAddress = KELLER_SENSOR;
    i2cTransaction4.writeBuf = configWrite;
    i2cTransaction4.writeCount = 2;
    i2cTransaction4.readBuf = configRead;
    i2cTransaction4.ReadCount = 0;
    i2C_transfer (i2c、&i2cTransaction4);
    /*--------------- *
    
    睡眠(1);
    
    /*读取该寄存器*/*------------------
    */
    txBuffer[0]= 0x81;
    i2cTransaction1.slaveAddress = KELLER_SENSOR;
    i2cTransaction1.writeBuf = txBuffer;
    i2cTransaction1.writeCount = 0;
    i2cTransaction1.readBuf = rxBuffer;
    i2cTransaction1.ReadCount = 5;
    /*------------------ */
    
    Display_printf (display、0、0、"\n_________________ 测试_________________ \n");
    对于(i = 1;i <= 20;i++){
    if (I2C_transfer (i2c、&i2cTransaction1)){
    /*
    *编辑此 if 语句以正确解释数据
    *字节0 =状态
    *字节1/2 =压力
    *字节3/4 =温度
    *
    温度=(rxBuffer[3]<<8)|(rxBuffer[4]);
    temp_p =(((温度>> 4)-24)*0.05)-50;
    display_printf (display、0、0、"温度为:%f [C]"、temp_p);
    }
    否则{
    display_printf (display、0、0、"I2C 总线故障");
    }
    
    /*重新发送读取命令*/
    /*------------------ *
    CONFIGWrite[0]= 0xAC;
    i2cTransaction4.slaveAddress = KELLER_SENSOR;
    i2cTransaction4.writeBuf = configWrite;
    i2cTransaction4.writeCount = 2;
    i2cTransaction4.readBuf = configRead;
    i2cTransaction4.ReadCount = 0;
    i2C_transfer (i2c、&i2cTransaction4);
    /*------------------ *
    
    睡眠(1);
    }
    /*已取消初始化 I2C */
    I2C_Close (i2c);
    Display_printf (display、0、0、"_________________________ ");
    
    返回(0);
    }