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 的 BOOSTXL-SENSHUB 问题

Guru**** 2756835 points

Other Parts Discussed in Thread: TM4C1294NCPDT, LDC1614

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/878601/tm4c1294ncpdt-boostxl-senshub-issue-with-i2c

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: LDC1614

我正在努力通过 I2C 协议将 MPU9-150传感器集线器升压与 TM4C1294NCPDT Launchpad 相连。  

//系统时钟120000000

 SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |SYSCTL_OSC_MAIN |SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);

//I2C 配置

//1. 使能 I2C0的时钟

SET_BIT (SYSCTL_RCGCI2C_R、0);

//2. 使能 s GPIOB 模块的时钟。 第2页。
SET_BIT (SYSCTL_RCGCGPIO_R、1);

//3. 启用 I2C 引脚以实现其交替功能。 第671/1344页。
SET_BIT (HWREG (GPIO_PORTB_BASE + GPIO_O_AFSEL)、2);
SET_BIT (HWREG (GPIO_PORTB_BASE + GPIO_O_AFSEL)、3);

SET_BIT (HWREG (GPIO_PORTB_BASE + GPIO_O_DEN)、2);
SET_BIT (HWREG (GPIO_PORTB_BASE + GPIO_O_DEN)、3);

//4. 启用 SDA (PB3)引脚以进行开漏操作。 第676...页
SET_BIT (HWREG (GPIO_PORTB_BASE + GPIO_O_ODR)、3);

//5. 配置 PMCn 域以分配 I2C 信号
//连接到适当的引脚。 第8.6821351页。
HWREG (GPIO_PORTB_BASE + GPIO_O_PCTL)|=(2<<(4*2))|(2<<(4*3));

//6. 初始化 I2C 主设备。 第1031页
I2CMasterEnable (I2C0_BASE);

//用于标准模式

 ptrIIC->IIC_MTPR=(uint8_t)(120000000 /(2*(10)*100000 ))-1 ;

当我从传感器读取作为一个封装的12个字节时、I2C 只能读取三个或四个正确的值、而其他字节始终为零。

LDC1614传感器也出现了同样的问题。 对于 LDC1614、它仅在超快模式下工作!!

那么、我的问题是什么?

  

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

    我们强烈建议您在配置 I2C 时不要直接写入寄存器(HWREG())。 请使用 TivaWare 函数、因为它将极大地简化代码并减少出错的几率。 请查看 "C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c1294xl-bootstxl-senshub\compdcm_mpu9150"中的 TivaWare 示例、了解如何配置和使用 MPU9150。

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

    Bob、您好!

    我已经使用了 TIvaWare 函数、但它不起作用。 从任何传感器读取多个字节时遇到问题、每当我减小 MTPR 的值时、都会增加正确的字节数量。

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

    您是否成功运行了我指向的示例?

    "C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c1294xl-bootstxl-senshub\compdm_mpu9150" 

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

    该示例成功运行、但我不想使用中断配置传感器。

    我只是想知道这个问题是什么? 为什么当我读取多个字节时,需要减小 MTPR 的值?

    请注意、我从您之前提到的示例中获取了 I2C 配置。

    谢谢。   

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

    您好!

     Bob 不在办公室。

     您是否有用于监控总线事务的逻辑分析仪?

     您对 MTPR 进行了哪些更改、使其读取更多字节? 请确保主器件和从器件必须以相同的波特率运行。 您确定主设备和从设备都以100kbps 的速率运行吗?  

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

    您好!

    我已经通过示波器检查了信号, 当我将主器 件配置为100kbps 时、通信完成、但主器件读取的值完全不正确、但当我将波特率更改为1Mbps 时、主器件开始读取一些正确的值、并且每次我增加波特率时、正确的值都会增加。

    你怎么看?

    谢谢。

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

     当我阅读 MPU-9150数据表时、它说它的 I2C 接口以400kHz 的频率运行。 您不能以100kbps 的速率运行。 您需要更改为400kbps。  

    https://www.invensense.com/wp-content/uploads/2015/02/MPU-9150-Datasheet.pdf

     

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

    它只能在1Mbps 下工作、但在进行一些更改后、现在可以成功工作。 感谢您的款待。

    此致、

    穆罕默德