请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:CC2538 大家好! 我使用CC2538作为i2c主控,从EEPROM 24lc16b读取字节时遇到问题。 此EEPROM始终响应0xFF,我不知道原因。 SDA和SCL引脚上有两个上拉电阻器2.5k。 我附上了三个示波器图表:第一个是写字节0x1,第二个是读之前发送EEPROM地址(相同),第三个是读时。 我的代码在此处:
// // I2C外设必须在使用前启用。 // SysCtrlPeripheralEnable(SYS_CTRL_Periph_I2C); // //配置I2C引脚 // GPIODIRModeSet (GPIO _I2C_BASE,PIN_I2C_SCL,GPIO _ DIR_MODE_HW); GPIOPinTypeI2C (GPIO _I2C_BASE,PIN_I2C_SCL); GPIODIRModeSet (GPIO _ I2C_BASE,PIN_I2C_SDA,GPIO _ DIR_MODE_HW); GPIOPinTypeI2C (GPIO _I2C_BASE,PIN_I2C_SDA); // //将引脚配置为外设输入和输出 // IOCPinConfigPeriphInput (GPIO _I2C_BASE,PIN_I2C_SCL, IOC_I2CMSSCL); IOCPinConfigPeriphInput (GPIO _I2C_BASE,PIN_I2C_SDA, IOC_I2CMSSDA); IOCPinConfigPeriphOutput (GPIO _I2C_BASE,PIN_I2C_SCL, IOC_MUX_OUT _SEL_I2C_CMSSCL); IOCPinConfigPeriphOutput (GPIO_I2C_BASE,PIN_I2C_SDA, IOC_MUX_OUT SEL_I2C_CMSSDA); // //启用并初始化I2C主模块。 使用的系统时钟 // I2C模块。 最后一个参数设置I2C数据传输速率。 //如果为false,则数据速率设置为100kbps;如果为true,则数据速率将为 //设置为400kbps。 在此示例中,我们将使用100kbps的数据速率。 // I2CMasterInitExpClk(SysCtrlClockGatet(),false); #define I2C_ADDR_24LC16 (0xA0UL) I2C_addr =(DWORD)((I2C_ADDR_24LC16 & 0xF0)>1>1); //正在写入 // EEPROM地址+内存块地址。 最后参数表示书写 I2CMasterSlaveAddrSet(i2c_addr|0x1, false); //将一个字节0x1放置到DR寄存器中 I2CMasterDataPut(0x1); //发送EEPROM地址,内存块地址和一个字节 I2CMasterControl(I2C_MASTER_CMD_SINGLE_SEND); //等待直至完成 while (I2CMasterBusy()); //读数 // EEPROM地址+内存块地址。 最后参数表示书写 I2CMasterSlaveAddrSet(i2c_addr|0x1, false); //发送EEPROM地址和内存块地址 I2CMasterControl(I2C_MASTER_CMD_SINGLE_SEND); // EEPROM地址+内存块地址。 最后参数表示读数 I2CMasterSlaveAddrSet(i2c_addr|0x1, true); //发送EEPROM地址和内存块地址 I2CMasterControl(I2C_MASTER_CMD_SINGLE_SEND); //从DR寄存器读取字节 UINT32_t ans = I2CMasterDataSet(); //等待直至完成 while (I2CMasterBusy());
书写:
发送地址:
读数:
请帮助他人解决这个问题。


