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.

[参考译文] RTOS/AM3359:I2C 问题

Guru**** 2553260 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/608764/rtos-am3359-i2c-issues

器件型号:AM3359

工具/软件:TI-RTOS

您好!

我目前正在尝试让 BeagleBone Black 通过 I2C 与 BNO055器件通信。  

设置:

  • CCS 版本:7.2.0.00013
  • 仿真器是 Spectrum Digital XDS200
  • 已修改 BBB 修订版 C for JTAG ->连接并工作
  • 使用 TI-RTOS

我的理解是、BBB 有3个 I2C、其中 I2C0没有输出引脚、因为 PMIC、EEPROM 等正在使用它  I2C1/2可用、并引脚连接到 P9.17/24、I2C1 P9.18/26和 I2C2 P9.19/21、P9.20/22

我尝试使用 I2C2与 BNO055通信、但 I2C_open (I2C_BNO055_instance、&i2cParams); 在 ti/drv/i2c/I2c_drv.c 中、每当 I2C_instance!= 0时、BBB 就会自由运行。  因此它会崩溃。  我通过4.7k Ω 电阻器将 SDA/SCL 上拉至3.3V、结果仍然相同。

我使用 PDK  的 I2C_Example_bbbAM335x_armExampleProject 作为参考。  此测试已编译并正常运行、但探测器测试除外、我不确定该测试的功能。  使用此示例、我针对 I2C2和我的应用修改了它(代码如下)

 

我接收 i2cParams 的正确默认值。  然后、我进入 bno055_init (...) 函数、该函数依次调用我的 BNO055_I2C_BUS_WRITE (...) 功能。  这一步以及需要根据 BNO055快速入门指南定义的读取和延迟函数。  问题是、当我调用 I2C_open 函数时。。。

 

下面我重点介绍了我的问题所在。  我已单步执行此函数、并确定实际崩溃发生在 I2C_open -> return (handle->fxnTablePtr->openFxn (handle、params))->I2CMasterDisable (hwAttrs->baseAddr)中;

其中 hwAttrs->baseAddr == 0x4819C000、通过查看存储器映射、该值是正确的。

另一个有趣的事情是、当我尝试单步执行此函数时、每当我暂停运行时、BBB 会在0x8105D010处自由运行并抛出异常。  我已 通过反汇编验证崩溃恰好发生在'BL I2CMasterDisable'。  请记住、此函数有效且具有地址。  当我为该函数包含.c 文件时、我能够"绕过"此错误。  不过、这可能是另一个主题、但我的理解是库已经与此示例项目链接、因此我不知道为什么这样做。


 

我缺少什么吗? 为其他 I2C 模块供电? 可能是 Pinmux? 时钟?  每当连接到 ARM 内核时、GEL 都会自动 运行并内联所有内容、我想、但可能不会这样。  

 

谢谢