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.

[参考译文] TM4C1294NCPDT:I2C 问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/836299/tm4c1294ncpdt-i2c-issue

器件型号:TM4C1294NCPDT

您好!

我使用的是 TM4C1294NCPDT 微控制器、我有一个可通过 I2C 配置的从 IC。 下面是我用来配置和读取从器件 ID 的代码。

void I2C_Init(){

//启用 I2C 模块1
SysCtlPeripheralEnable (SYSCTL_Periph_I2C1);

//复位模块
SysCtlPeripheralReset (SYSCTL_Periph_I2C1);

//启用包含 I2C 1的 GPIO 外设
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);

//为端口 B2和 B3上的 I2C0功能配置引脚复用。
GPIOPinConfigure (GPIO_PG0_I2C1SCL);
GPIOPinConfigure (GPIO_PG1_I2C1SDA);

//为这些引脚选择 I2C 功能。
GPIOPinTypeI2CSCL (GPIO_PORTG_BASE、GPIO_PIN_0);
GPIOPinTypeI2C (GPIO_PORTG_base、GPIO_PIN_1);

//启用并初始化 I2C1主机模块。 使用的系统时钟
// I2C1模块。 最后一个参数设置 I2C 数据传输速率。
//如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为
//设置为400kbps。
I2CMasterInitExpClk (I2C1_base、(SysCtlClockGet ())、true);

//清除 I2C FIFO
HWREG (I2C1_base + I2C_O_FIFOCTL)= 80008000;

}

uint32_t I2C_read (uint8_t slave_addr、uint8_t reg)
{
uint32_t ERROR = 0;
//指定我们正在向从器件写入(寄存器地址)
I2CMasterSlaveAddrSet (I2C1_base、slave_addr、false);

//指定要读取的寄存器
I2CMasterDataPut (I2C1_base、reg);

//将控制字节和寄存器地址字节发送到从器件
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START);

//等待 MCU 完成事务
while (I2CMasterBusy (I2C1_base));

错误= I2CMasterErr (I2C1_base);

//指定我们将从从从器件读取
I2CMasterSlaveAddrSet (I2C1_base、slave_addr、true);

//发送控制字节并从我们指定的寄存器中读取
I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_Receive);

//等待 MCU 完成事务
while (I2CMasterBusy (I2C1_base));

//返回从指定寄存器提取的数据
返回 I2CMasterDataGet (I2C1_base);

} 

从器件地址为0xCE、当我将此作为参数传递给读取函数时、我没有读取 ID、因此探测了 SCL 和 SDA 线路。

发现示波器捕获的从地址为0x9C、但我配置的是0xCE。 因此、从器件可能不会被确认。

上拉电阻器存在、SCL/SDA 看起来很干净。

上述代码是否存在任何问题? 我在哪里错误配置总线?

谢谢、

Janardan

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

    您好!

     您要连接的从 IC 器件是什么? 您能否共享您的从器件 I2C 数据表?

     请注意、I2C 从地址是一个7位地址。 这意味着您只能具有0-127之间的地址。 当您说从地址为0xCE 时、它已经超过128。  

     当从器件地址被驱动到总线时、它被左移1。 在示波器上看到的总线上的位0是事务的方向(读取或写入)。 在确定从器件地址时、不应考虑总线上的位0。 我猜您的从 I2C 器件地址是0x67。 如果您将0x67左移1位、将得到0xCE。

     尝试使用从地址0x67并查看它是否起作用。