主题中讨论的其他器件: TMP116
您好!
我在 I2C 线路上使用 CC3220SF-LAUNCHXL LP 和24C02 EEPROM 时遇到了一个非常简单的问题。 我的任务是在 I2C EEPROM 的内部存储器0x00写入一个字节的数据 、然后将其读回并通过 UART 日志显示。 我浏览了资源浏览器中给出的 TMP116温度传感器示例,并修改了 i2ctmp.c 中的代码。 我在重新启动条件生成方面遇到问题、需要使用虚拟写入来设置 EEPROM (I2C)的内部地址。
我正在使用 ti/drivers/I2C.h 并且我正在使用 I2C_transfer ()函数从 EEPROM 发送和读取数据。 但写入操作和读取操作不成功。 代码如下所示、如有任何帮助、请予以帮助:
/* === i2ctmp116.c === */ #include #include #include /*驱动程序头文件*/ #include #include #include /*驱动程序配置*/ #include "ti_drivers_config.h" #define TASKSTACKSIZE 640 /* ===== tmp 寄存器====== */ #define _24C64_REG 0x00;//对于 C64、最大寄存器 val 为0b0001111111111111 = 0x1fff #define _24C64_ADDR 0x50;//在7位地址 静态 Display_Handle 显示之前附加0; // *=== mainThread ==== // void * mainThread (void * arg0) { uint16_t 样本; uint16_t 温度; uint8_t txBuffer[3]; uint8_t rxBuffer[10]; I2C_Handle I2C; I2C_Params i2cParams; I2C_Transaction i2cTransaction; /*调用驱动程序初始化函数*/ display_init(); GPIO_init(); I2C_init(); /*配置 LED 以及 TMP116_EN 引脚(如果适用)*/ GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); #ifdef CONFIG_GPIO_TMP116_EN GPIO_setConfig (CONFIG_GPIO_TMP116_EN、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_HIGH); TMP116的/* 1.5ms 复位时间*/ 睡眠(1); #endif /*打开主机显示屏以输出*/ Display = Display_open (Display_Type_UART、NULL); if (display =NULL){ while (1); } /*打开用户 LED */ GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON); display_printf (display、0、0、"启动 i2c24C64示例\n"); /*创建 I2C 以供使用*/ I2C_Params_init (&i2cParams); i2cParams.bitrate = I2C_100kHz; I2C = I2C_open (CONFIG_I2C_TMP、&i2cParams); if (i2c == NULL){ Display_printf (display、0、0、"Error Initializing I2C\n"); while (1); } 否则{ display_printf (display、0、0、"I2C initialized!\n"\}); } /*通用 I2C 事务设置*/ i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 2; i2cTransaction.readBuf = rxBuffer; i2cTransaction.ReadCount = 0; Display_printf (display、0、0、"使用数据0x32写入 EEPROM 的地址0x00"); TxBuffer[0]= 0x00; txBuffer[1]='2'; i2cTransaction.slaveAddress =_24C64_ADDR; if (!I2C_transfer (i2c、&i2cTransaction)) { Display_printf (display、0、0、"错误。 未找到24C64从 EEPROM! NACK 错误"); } display_printf (display、0、0、"Write successful"); /*睡眠1秒*/ 睡眠(1); /* *读取地址集和读取数据 * i2cTransaction.writeBuf = txBuffer; i2cTransaction.writeCount = 2; i2cTransaction.readBuf = rxBuffer; i2cTransaction.ReadCount = 10; display_printf (display、0、0、"设置 EEPROM 的地址= 0x50"); TxBuffer[0]= 0x00; txBuffer[1]= 0xA1;//读取 EEPROM 的 I2C 芯片地址 i2cTransaction.slaveAddress =_24C64_ADDR; IF (I2C_transfer (i2c、&i2cTransaction)) { Display_printf (display、0、0、"找到24C02从设备 EEPROM!"); 对于(采样= 0;采样< 10;+sample) { 温度= rxBuffer[采样]; display_printf (display、0、0、"value for read[%d]:%d -\r\n、sample、temperature); } } I2C_Close (i2c); display_printf (display、0、0、"I2C closed!"); 返回(NULL); }