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.

[参考译文] LAUNCHXL2-570LC43:了解 I2C 模块工作原理和放大器时需要帮助;有关 Hercules 开发的其他问题

Guru**** 2463330 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/658722/launchxl2-570lc43-help-needed-in-understanding-how-the-i2c-module-works-additional-question-regarding-hercules-development

器件型号:LAUNCHXL2-570LC43
主题中讨论的其他器件:HALCOGENTMS570LC4357

大家好、

这是我在社区中的第一篇帖子、因此我要提前感谢大家、欢迎大家为我提供帮助!

我是 MCU 编程的初学者(我以前做过一些 Arduino 和一些 Micropython)以及 TI ARM 相关的东西。  

目前、我正在尝试将 Hercules LauchPad 与我放置的一些 I2C 传感器连接、以便从其中获取一些数据。 我更充分的目标是在 Launchpad 上创建一个 FreeRTOS 平台、用于在使用 FlexRay 协议进行通信的公式车的分布式控制系统内进行数据采集、处理和车辆控制(因此、为该项目选择了 LaunchPad TMS570LC43板)。  

我认为我几乎阅读了在线找到的每一位文档、但我很难理解 I2C 模块在此板上的工作原理。  

我已经设置了 Halcogen 中的所有内容、并且我的项目按照它应有的方式构建和编译、问题是我无法理解如何使用该模块与我的传感器进行通信。  

传感器是来自 ST 的 LSM9DSO、它期望通信周期如下所示:

主 ST       SAD + W       子部分      数据 SP
从器件       SAK          SAK      SAK

是:

ST -> Start、SAD -> Slave Address、SAK -> Slave Ack、SUB -> Register SubAddress、SP -> Stop bit

此时、这是我用于发送3个字节数据的代码(写入模式中的从器件地址、从器件寄存器、数据):

//将 i2cREG1设置为主
i2cSetMode (i2cREG1、I2C_MASTER);

//将 i2cREG1设置为发送器
件 i2cSetDirection (i2cREG1、I2C_transmitter);
//在 i2c1Reg 中设置 slaveAddress
// i2cSetSlaveAdd (i2cREG1

、i2cREG1)

;*将 slaveAddress 设置为发送* 1、* 1、i2c1、i2cRemaster3;*。 发送开始
* 2. 在写入模式下发送从器件地址(最后一位为低电平)
* 3. 发送从机寄存器以写入
* 4. 发送从机寄存器内容以写入
* 5。 发送停止位
*/
i2cSetStart (i2cREG1);
i2cSendByte (i2cREG1、slaveAddress);
i2cSendByte (i2cREG1、deviceRegister);
i2cSendByte (i2cREG1、dataByte);

//等待直到总线忙被清除*/
while (i2cIsBusBusy (i2cREG1)=true);

//等待直到检测到停止*/
while (i2cIsStopDetected (i2cREG1)=0);
//清除
i2cSCG1条件;* i2cClearStop (i2cSCG1)* 

代码会编译、当我启动调试会话时、不会发生任何情况、因为程序卡在 i2cSendByte 函数内的这个无限循环中、此循环位于 Halcogen 生成的文件 hl_i2c.c 中

 while (((i2c->STR &(UINT32) I2C_TX_INT)== 0U)  

这可能意味着该模块无法在总线上发送这些数据、但我不知道原因、因为传感器已正确连接并经过测试、可在另一个电路板上工作。  

我不知道如何正确检查这个问题、因为我没有任何 I2Cbus 分析仪或类似工具。  

但是、我发现的主要问题是缺少适当的编程文档、以便使这些模块启动并运行。 由于需要创建驱动程序、并且没有用于访问此类器件的简单且足够高的 API、因此我不知道为什么没有任何可突出显示如何使用 I2C、SPI、FlexRay 等 MCU 模块的编程指南、参考或文档。  

因此、我并不是说我需要一个涵盖我的特定需求的示例、而是记录这些过程、这样您就能够了解如何与提供其协议的每个器件进行正确通信、这将非常有用。  

这足以说明 i2cSetCount、i2cSendBytes、i2c 中断寄存器执行了什么操作、如何发送字节并等待器件的 ACK、或者 i2cRepeatat 模式如何工作。

因此、如果您能够温柔和善良地阐明如何执行这些操作、或者至少提供有关工作原理以及如何使用 TMS570上的 I2C 开发传感器通信的说明、我们将不胜感激。

感谢您的帮助和处置、

最棒的

Giacomo

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

    您好、Giacomo、

    编程人员指南是 器件的 TRM (SPNU563)、可在 TMS570LC4357器件的产品页面上找到、我假设您已根据自己的意见阅读了该指南。 有关 I2C 的一章介绍了模块的详细操作、但它不用作 I2C 协议的指令手册。 I2C 是最初由飞利浦公司开发的标准协议,它有公共白皮书、文本书籍和其他此类材料,用于了解其背后的原则。

    也就是说、当您是初学者时、最佳做法是尝试设置一个简单的回送应用、该应用将简单地从同一器件发送和接收数据、其中 I2C 的一个实例是主器件、另一个是从器件。 这种方法消除了通常为"黑盒"的传感器通信带来的额外复杂问题、需要使用范围或协议分析器进行更详细的分析。

    同时、为了便于学习和熟悉 I2C 模块以及编写 Hercules 器件上的程序、 Halcogen 工具中包含多个 I2C 示例。下图显示了 Halcogen 工具中包含的帮助内容、其中可以选择每个示例、然后包含分步说明、以在 Halcogen 中生成示例。 另请注意、 如果您安装到默认目录路径、每个示例的源代码也包含在位于 C:\ti\Hercules \HALCoGen\v04.07.00\examples\TMS570LC43x 的示例目录中。

    希望这些 HalCoGen 中的示例和信息能帮助您快速入门。 当然、我们在此过程中会尽可能多地提供帮助。 您可能还希望通过以下链接了解有关 I2C 协议的一些一般信息: