工具/软件: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 都会自动 运行并内联所有内容、我想、但可能不会这样。
谢谢