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.

[参考译文] TM4C129ENCZAD:I2C 写入事务未锁存到被写入的从器件中。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/610475/tm4c129enczad-i2c-write-transaction-not-latched-into-slave-device-written-to

器件型号:TM4C129ENCZAD
主题中讨论的其他器件: ADS7924

您好!

希望这是某人以前可能遇到的代码问题。 我可以使用从器件(运行 CCS v7.1.0.00016调试器、无 RTOS、使用 TM4C129ENCZAD 主器件和从器件 IIS2DH)通过 I2C 成功读取各种控制和状态寄存器。

当我写入从器件上的其中一个控制寄存器(例如 CTRL_REG1)、然后读回新状态时、将返回原始(加电默认值)值、而不是刚写入的新值。

该寄存器的上电默认值为0x07。 对于我提出的任何写操作、它都不会改变。 在研究了此处的论坛之后、现在请在本帖子的末尾插入代码。

代码首先读取 ctrl1的当前(默认值0x07)状态。 然后、一个新值(0x23)被写入 ctrl1。 最后、回读 ctrl1的新状态。

问题:

1) 1)对控制寄存器的写入似乎不被器件锁存。 这可能是器件问题、而不是代码问题、但我想知道它是否属于我到达的写入序列(请参阅下面的代码...)

2) 2)最后一次读取操作重复2次。 不知道为什么。

以下屏幕截图显示了在上述3个操作中通过 I2C SDA/SCL 传输的位序列。

可以看到、ctrl1的状态不会因写入操作而改变 最后的读取操作重复2次。

以下是代码:

//程序 CTRL_REG1[7:4]至0111 - 400Hz HR/正常/低功耗模式(def = 0000 - PowerDn)
//读取 CTRL_REG1
的当前状态 SlaveAddress = 32;//CTRL_REG1地址(x20)
//SlaveAddress = 15;//whoami 地址(x0F)
I2CMBQ_REG1地址(x20)/ADDRBb = 15;// DSCL DAL_CL_CL_ADDR_CL_CL_CL_CLB (FALSE
);/ADC1000 (USC129_ADDR_CL_CL_CL_CL_CL_CL_CL_CL_CLB = //设置忙标志(来自 TI 论坛的 TM4C129延迟问题。 不执行此操作、后续代码步骤将无法可靠地工作!!!)
//while (!(I2CMasterBusy (I2C2_base)));
while (I2CMasterBusy (I2C2_base));

I2CMasterDataPut (I2C2_base、SlaveAddress);
I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);
SysCtlDelay (1000); //允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base));
while (I2CMasterBusy (I2C2_base));

I2CMasterSlaveAddrSet (I2C2_base、Board_FBB_TM4C129_ACCEL_RATE_ADDR);TRUE; //true =读取
SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base)));
while (I2CMasterBusy (I2C2_base));

I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_Receive);
SysCtlSlaveDelay (1000);//允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base)));
while (I2CMasterData_RegBusy (I2C2_CR_BASE





)


= 0x2CMST_DR_012_CL_DR_ST_012_CL_CL_ST_CL_CL_CL_CLUS_CLB = 0x2 (I2CMST_CL_CL_CL_CL_CL_CL_CL_CL_CL_STAT_1);[I2USB_CL_CL_1 = 0xCMST_CL_SL_CL_SL_CL_STAT_0 = 0x2 * 0 = 0x2 Slav_CL_CL_CL_CL_CL_CL_CL_CL_CL_STAT_1;TM2_1 (I1_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_CL_1 当 I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND)运行
SysCtlDelay (1000)时、此传输正确;//允许设置忙标志(TM4C129问题)
//while (!(I2CMasterBusy (I2C2_base)));
while (I2CMasterBusy (I2CMasterBusy)(IC2);IC2 (base);

I2CMasterDataPut (I2C2_base、SlaveAddress);
I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);
SysCtlDelay (1000); //允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base));
while (I2CMasterBusy (I2C2_base));

I2CMasterDataPut (I2C2_base);//写入更新后的 I2CMasterBusy (I2C2_Base_D+/I2CMC129_BASE







);/I2CM2CMasterC129_CC2CL_RESH (I2CM24_CL_RESH);/I2CM24_CL_CL_CL_CL_CL_RESH (I2CM24_CL_CL_CL_RESH (I2USB_RESH);/I2CM24_CL_CL_RESH (I2USB_RESH)
SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base)));
while (I2CMasterBusy (I2C2_base));

I2CMasterDataPut (I2C2_base、SlaveAddress);
I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);
SysCtlDelay (1000); //允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base));
while (I2CMasterBusy (I2C2_base));

I2CMasterSlaveAddrSet (I2C2_base、Board_FBB_TM4C129_ACCEL_ADDR、true);//true =读取。
SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base)));
while (I2CMasterBusy (I2C2_base));

I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_Receive);
SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)
// while (!(I2CMasterBusy (I2C2_base)));
while (I2MasterasterVerify DataBusy (I2C2_base


);I2CMST_CL_STATE_1 (I2CMTCL_CL_SL_STAT_1);I2PRIVE_CL_STATE_1 (I2_CL_1)
{
System_printf ("I2C RD/WR 至 CTRL_Reg1错误");
返回0;
} 

阅读、重新阅读并再次阅读 I2C 从设备外设的用户指南。 未提及用于启用寄存器更改的特殊命令。 我发布到该器件的技术支持网站、但尚未收到任何反馈。 希望在我的代码中出现错误。

提前感谢您。

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

    嗯、我的屏幕截图没有做到这一点。 再试一次:

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

    [引用 USER="Erik skullerude"]以下屏幕截图显示了在上述3个操作中通过 I2C SDA/SCL 传输的位序列。[/引用]

    甚至——“小 Stevie Wonder”也看不到那个帽子!   (稍后-公布第二个帖子)

    在执行取证代码检查之前-应询问:

    • 您是否在 JTAG 信号线上采用了外部上拉电阻器?   ("0x07"的到达 可能不需要成功写入!)
    • 您是否"确定了"这些行的范围?   (逻辑分析仪未正确显示波形)
    • 您是否尝试写入(其他)从机寄存器-并注意此问题是否仍然存在?
    • 从器件与 MCU 之间的间隔距离是多少?   它们是否一起在同一个板上?
    • 您是否测试了"第二个此类从属设备"以确定问题是否仍然存在-并且未发生变化?    应在"帮助请求"之前消除单个器件的异常。
    • 您是否可以使用(非常)小型/简单的基于 I2C 的 EEPROM 来增强您的故障排除功能?   (即认为"kiss"-更简单的器件更容易/更快地进行调试)

    希望我能有更多的数据、但我觉得这些新数据可能会"引领"您的成功...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查看 ST 数据表、您需要将从器件地址(0x18或0x19、具体取决于您连接 SA0引脚的方式)作为写操作发送、然后发送寄存器地址。
    免责声明:作为 TI 员工、我不是 ST 器件的专家。 有关 ST IIS2DH 的更多信息、请联系 ST。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 CB1_MOBILE、

    上拉就位(探头引线焊接到上拉 R 的线侧)。 上拉电阻与 TM4C 器件的过孔之间的布线长度为~0.5英寸
    -需要范围跟踪;今天的某个时候。
    -write to SlaveAddress = 30、Act_ths、address (x1E)具有相同的结果、回读中未观察到任何更改。
    MCU 到从设备的布线长度总共可能为1.25英寸、外加3个过孔。
    -使用稍微不同版本的此器件切换到不同的电路板。 行为相同。
    -切换到 TM4C129EXL 评估板、连接到 BME280 PTH 传感器(此传感器具有更简单的接口)。 结果相同(运行相同的代码、只需使用更新的地址重新编译)。
    -没有任何其他方便测试的器件。 此时、3个器件具有3个不同的电路板-我的写入方法中确实出现了一些错误、但我没有看到。 我们将查看一些 DSO 捕获。

    我有上述交易的屏幕截图、但在这篇文章中插入的图像不会显示。

    再次感谢您的意见。

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

    [报价用户="Erik skullerude"]我有上述事务的屏幕截图,但在该帖子中插入的图像不显示。

    有时会发生这种情况-但"以防万一"、我将概述一个(通常)对我们有效的过程。

    • 您必须处于"使用 RTF 格式"屏幕模式、才能显示此图标分组(上面) (位于"活动"帖子的右下角)
    • 环绕项使您能够将您的帽子"粘贴"到您的帖子中-(在当前光标位置)。   CAP 必须是“已保存并驻留”,并且必须位于此“插入/编辑介质”图标指向的目录中。

    你最近的帖子太棒了——没有人(至少是我所有的人)可以要求你做更多的事——谢谢——非常系统和清晰的详细!

    最常使用-降低 I2C 数据速率很有帮助。  (我没有抱太高的希望-但"值得一试。")

    到目前为止-我已经(未)适当地努力阅读/审查您的代码-在您的范围上限到达时-(除非它们提供"Eureka")-我将读取/审查此类代码。

    您的"捕获探头"是 MCU 的"0.5"-它们的放置方式是否不理想@从器件证明是值得使用的?  (两个电容器-具有2个不同的探头放置位置-理想)

    I2C 具有这样的"承诺"-但足以证明 MCU 用户的"尝试"灵魂...  (即感受疼痛)

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

    感谢您澄清文件上传。 事实上,这正是我一再尝试的。 我最终得到的是您在原始帖子中记下的内容、这是一个小图标、图像应该位于该位置。

    还尝试从 Word 以及"插入文件"粘贴(通过回形针图标)。 全部失败。 您是否有我可以将其推入的面向公众的 FTP 站点?

    关于 部件是 BGA。 顶层没有通孔、因此这不是一个选项。

    关于 请记住、我发布的代码是基元;仅用于确定如何使该接口正常运行。 最终、这一切都必须作为任务在 TIRTOS 中运行。 我正在研磨我的牙齿、预测我将如何对其进行翻译。 在 RTOS 中运行 I2C 任务的第一次尝试在第一个事务时崩溃。

    稍后将再次尝试发布这些捕获。 它以前就工作过。 也许它只能在一天的特定时间工作(也许是太阳的角度?)。

    再次感谢。

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

    您的态度仍然很好-尽管问题让人沮丧-在来自3个不同供应商的4个不同 ARM MCU 中、我"从未失败"过"连接 I2C 外设以执行任务"。   (其中一个是我们的"最喜欢的"- Cortex M7)

    我们仅使用了"插入/编辑介质"以及保存为"JPG 或 TIF"的文件-同样、论坛的插入函数(要求)您的"CAP"驻留在所指向的文件中。   (不能通过更简单/更快的"Ctrl_C"来"插入/编辑"、然后是"Ctrl_V"。

    昨天我成功地戴了手腕—“走路”。   Sidewalk 有一个2英寸的凸缘-我没有注意到-我很快就走了。 (租赁卡车以访问我们的外部仓库。)   然后、我"单手"驾驶叉车(只会"略微"降级"的"车道维护")。   (谁在乎?    如果疼痛再次出现、这是我的"树篱"-我不能单手键入...)

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

    很遗憾听到您的手腕-我做过一次。 非常痛苦。 希望你能给它锦上添花...

    使用 DSO 探测 SCLK -看起来合适。 似乎线路上有足够的电容和较低(I Guess)的驱动强度、可导致一个经过良好圆角处理的上升沿。 读操作没有问题。 我仍然需要弄清楚如何降低速度;我记得在其中一条命令描述中看到了有关这一点的内容。

    此外、我还有一个问题-这在细节上确实很详细。 对于我测试过的所有三个器件、数据表在每种情况下都清晰地显示了、对于一个到从器件地址的写入周期、顺序如下:
    设置从器件地址、我们正在进行写入
    设置相应的子地址
    写入数据

    有一个很好的交易序列图清楚地显示了这一点(我可以附加在这里,但该功能不起作用)。 如果可以、请下载以下数据表并转至第24页、然后查看表15 -主信号字节写入序列。

    此处为数据表:www.st.com/.../en.DM00171283.pdf

    将其与 LA 捕获进行比较(这很难、但如果放大、并使用手指或纸张滑动边缘将时钟脉冲与数据对齐)、您将看到在子地址周期和数据字节写入之间存在额外的起始/地址周期。 我们对这个额外周期感到困惑、它肯定与上述数据表中的表15不匹配。

    为清楚起见、此处重复执行写入序列的代码部分:

    //设置从器件地址和写入周期
    I2CMasterSlaveAddrSet (I2C2_base、Board_FBB_TM4C129_ACCEL_ADDR、false);//false =写入
    SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)
    //while (!(I2CMasterBusy (I2C2_base)));
    while (I2CMasterBusy (I2C2_base));

    //设置子地址
    I2CMasterDataPut (I2C2_base、SlaveAddress);
    I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);
    SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)
    //while (!(I2CMasterBusy (I2C2_base)));
    while (I2CMasterBusy (I2C2_base));

    //发送数据-写入更新的 CTRL_REG1设置
    I2CMasterDataPut (I2C2_base、MasterTxData_S);
    I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);
    SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)
    //while (!(I2CMasterBusy (I2C2_base)));
    while (I2CMasterBusy (I2C2_base));

    你怎么看?

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此处的几篇文章与您的文章相匹配、以实现清晰和详细的信息-非常感谢。 我会尽最大努力查看您的大写字母和代码、我以前是工程师经理。 @您注意到的公司-他们提供 Cortex M7。

    我记得、区分"重复开始"(接洽与脱离)通常存在挑战。 这种情况发生在多字节 I2C 传输期间-已"跳闸"其在受保护对象中的份额。 请务必了解我们的(其他 M4和 M7的运行速度远远超过您的129、因此我们从未发现它有吸引力-请不要错过! (令人愉快的是、I2C 设置代码、资质认证以及其他元素代表了新的学习内容、但我会尽力而为。

    冰确实-我的手腕比"不紧张"的双腕大1.25英寸、我的"轻微运动范围"也扩大了。 我现在回到了我们的外部仓库-可疑的是、在我可以返回之前的5个小时左右。 (我们的后室在后室办公设施后面、太"高租金"、无法证明是存储/仓库-因此我们使用的是温度受控但有点远的外部设施...)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您想了解我如何初始化 I2C、这里是 init 函数(这是上面发布的事务代码之前的最后一次调用):

    void TM4C129_initI2C (void)

    /* I2C2 Init -启用外设*/

    uint32_t ui32SysClock;

    //Config IO -启用 GPIO 以配置 I2C 接口引脚
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);

    //
    //等待外设为编程做好准备
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOG));

    //
    //为 I2C2主接口配置引脚
    //
    GPIOPinConfigure (GPIO_PG2_I2C2SCL);
    GPIOPinConfigure (GPIO_PG3_I2C2SDA);
    GPIOPinTypeI2C (GPIO_PORTG_base、GPIO_PIN_3);
    GPIOPinTypeI2CSCL (GPIO_PORTG_BASE、GPIO_PIN_2);

    //Config I2C 控制器:
    //设置120MHz 的系统时钟
    //
    //ui32SysClock = SysCtlClockFreqSet ((SYSCTL_OSC_main | SYSCTL_USE_PLL | SYSCTL_XTAL_25MHz | SYSCTL_CFG_VCO_480)、120000000);
    ui32SysClock = SysCtlClockFreqSet (SYSCTL_OSC_INT | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_320、40000000);

    //
    //停止时钟、复位和启用 I2C 模块
    //在主函数中
    //
    SysCtlPeripheralDisable (SYSCTL_Periph_I2C2);
    SysCtlPeripheralReset (SYSCTL_Periph_I2C2);//清除 I2C_SCL 焊盘、允许上拉至"1"
    SysCtlPeripheralEnable (SYSCTL_Periph_I2C2);

    //
    //等待外设为编程做好准备
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C2));

    //
    //初始化和配置主模块
    //
    I2CMasterInitExpClk (I2C2_base、ui32SysClock、true);//false
    SysCtlDelay (10000);//此处必须延迟

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

    下面是 对 ctrl reg1进行分步(通过 CCS 调试)读、写和读回的 LA 捕获。 从器件 I2C 地址为0x19、子地址(reg1)为0x20。

    请注意写入的地址周期和 数据字节被发送(第3和第4个波形)之间的"额外"起始/地址周期。 数据表显示了序列应紧跟在数据字节后面的子地址。 在数据字节之前发送第二个起始/地址时、从器件是否可能会发生混乱?

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

    [引用用户="Erik skullerude"]... 序列应紧跟在数据字节后面。   在数据字节之前发送第二个起始地址/地址时、从器件是否可能会发生混乱?

    您的原始帖子似乎包含的设备编号 Device (设备)-随后消失。   我刚才记下了您的规格链接-将在今天晚些时候进行回顾。

    您必须尽可能"重复"从属方的要求 、您的报价表明您已做出了这种认可。

    请注意、您的大部分 I2C 代码看起来(非常)类似于我公司的"4C123 I2C 代码"。    尽管如此、我认为存在差异、尤其是129类器件需要背靠背"检查状态标志"。  (虽然 这可能只需要在 I2C 中断操作期间最大化吞吐量。)   我将找到并查看您最近的链接-然后回复。

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

    大家好、听起来很棒-非常感谢您的观看。

    对于它的价值、我发布了一个有关我已开了一周的 STM 案例的后续问题(尚未回复...)、具体询问第二个启动/寻址周期(我认为只是重新启动)是否是一个问题。

    这是我第一次尝试 STM、所以不知道他们是否总是回答问题。

    我学到的任何东西都将发布在这里。

    您的手腕如何? 国际恢复研究中心,我要在几个星期内重新获得一些合理的动议范围。

    再次感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的-我的7年级,纽约的“触摸打字”老师会“翻进她的坟墓”看着我“一个手指”这篇文章。

    我已尝试您的新链接-至少5次-结果始终为"404 -找不到文件!" 我注意到我的屏幕页面上的链接"溢出"、并且您的帖子中没有"水平滚动箭头"、因此我不清楚是否复制整个链接。

    我们已经使用 I2C 器件多次-需要从器件地址-然后是目标寄存器-然后是多字节数据。 (SX1505和12位、该供应商提供的 I2C ADC:"7924是最重要的-也许 ADC7924是器件型号。") 通过比较我的器件的访问要求-与您的-可以获得一个简单的解决方案(我将为您提供成功的 I2C 代码)。

    您选择的"片外"I2C 器件(如我们的器件)可能会寻求"低引脚数"的方法来添加或扩展功能。 在本例中、我们耗尽了 MCU 的所有 ADC 通道、必须"芯片外"才能满足客户的需求。 这起作用了。 (在(部分)疼痛/痛苦之后。)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    关于 链接至器件 DS、请转至 Digikey.com、然后在器件型号搜索框中输入:IIS2DH。 将有3个结果-选择列表中的第二个结果。 在该页面的"Documents and Media"下、有一个指向数据表的链接。 打开后、向下滚动到第24页、查看表15 -与我昨天晚上发布的捕获进行比较(波形3和4)。

    我想查看您的代码-如何安全地共享 PM???

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

    如果您安装了 TivaWare、您可能需要查看以下示例:"c:\ti\TivaWare_C_Series-2.1.4.178\examples\peripherals\i2c\SOFT_i2c_Atmel.c"。 此 Atmel 器件示例还使用从器件地址和子地址。 本示例中的实现使用突发模式在写入时发送地址、子地址和数据。 它使用中断和静态变量来避免写入之间的拖延、这使得跟踪操作更加复杂、但我认为这将对您有所帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bob、感谢您的参与。 我认为我看了这个例子-就是 tmp006 (温度传感器?)。 下周我会再来看看。 离开城镇几天。 再次感谢您的参与和支持。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    随着供应商的返回、您最好专注于他的方向、内部信息和兴趣。

    通过"将鼠标悬停在"供应商或我的头像/id 上、您会注意到"发送私人邮件"。

    该功能是在您为本论坛进行"设置"期间实现的、您应该能够返回、然后"单击该 PM 框"。

    有一个"消息显示"图标(位于论坛页面顶部的右侧第三个图标)、可在消息到达时发出警报。

    我将充当"后备"-如果和同时我的手腕、或者(应该)您的问题仍然存在...

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

    虽然我的手腕"磅"(无法入睡)感觉更好(有点)。   现在已阅读/查看您的从器件手册。

    修订版2规范列出了以下内容(必须注意此图的清晰度和细节(向从器件发送多个字节)。)

    可疑-没有指示"重新启动"!   (图例:ST=Start、SAD=Slave ADR、sub=ADR;SAK=Slave Ack;SP=Stop) (IMO -非常有效、(xtal clear)的数据序列表示。)

    为简单起见-您应从向从器件写入单字节数据开始。   (此处-为清晰起见-是此类任务的图表指导。)  再次-不显示"Restart (重新启动)"。

    该表回顾了各种从器件地址。   (受从器件上 R/W 和 SA0焊盘的影响)

    现在、在您最近的帖子中、您写道:"从器件 I2C 地址为0x19、子地址(reg1)为0x20。"   0x19是从机地址-必须符合上面的图表。   然而-当您(之前)能够读取"子地址"时、您必须(至少一次)输入正确的从地址。

    现在您的解决方案...   如您所问-您必须"单个寄存器写入从机事务!"中阻止第二个开始条件的生成   由于公司/我不喜欢也不使用4C129 -我不确定我们过去(成功)的 I2C 代码(适用于4C123)是否完全合适。  (但我仍会将其发送给您的 PM 函数)  您必须扫描驱动程序库文件:"I2C.c"-搜索"多字节"(供应商可能会将此"突发"事务称为"突发"事务、这肯定会启用" 写入从设备"级联、而不嵌入(破坏性/不需要)启动条件!   (毫无疑问、"额外"启动条件-"您是否参与了!")

    我们应该注意到、您的代码仅使用 "I2C_MASTER_CMD_SINGLE_SEND ()"函数调用(near)-并且您必须问:"此 函数(始终)是否嵌入了"开始条件"?   然后-如果是-可以提供哪些备选方案(如果有)?

    现在、我们过去使用的"StellarisWare"下的函数-发送多个基于 I2C 的字节-同时"避免"(始终)破坏"额外"启动条件。

    14.2.2.5 I2CMasterControl                    ***这是驱动程序库用户指南- Stellaris 9453的摘录。 ***
    控制 I2C 主模块的状态。

    原型:
    无效
    I2CMasterControl (无符号长 ulBase、
    无符号超长整型 ulCmd)

    参数:
    ulBase 是 I2C 主机模块的基址。
    向 I2C 主模块发出 ulCmd 命令。

    描述:
    此函数用于控制主机模块发送和接收操作的状态。
    ucCmd 参数可以是以下值之一:

    I2C_MASTER_CMD_SINGLE_SEND .................................................................................................. 嵌入启动冷凝   CB1     
    I2C_MASTER_CMD_SINGLE_Receive
    I2C_MASTER_CMD_BURST_SEND_START  .................................. 嵌入启动冷凝   CB1
    I2C_MASTER_CMD_BURST_SEND_CONT   无嵌入式启动!    CB1.
    I2C_MASTER_CMD_BURST_SEND_FINISH   嵌入停止冷凝   器 CB1
    I2C_MASTER_CMD_BURST_SEND_ERROR_STOP
    I2C_MASTER_CMD_BURST_Receive_start
    I2C_MASTER_CMD_BURST_Receive_CONT
    I2C_MASTER_CMD_BURST_Receive_finish
    I2C_MASTER_CMD_BURST_RUSE_ERROR_STOP
    I2C_MASTER_CMD_QUICT_COMMAND
    I2C_MASTER_CMD_HS_MASTER_CODE_SEND

    我相信、您(正确)使用这些参数(突出显示和斜体)将会"驯服"您的问题。

    请注意,您必须在每个这样的“突发”函数之前正确调用“I2CMasterDataPut ()”。

    我们过去/成功地与供应商的 ADS7924进行了"多字节和/或单字节"事务、证明了这种方法的成功。

    您对文件"I2C.c"源和(快速/脏/宽松)实验的审阅将轻松确认这些方法、而不是"破坏"一个"教学时刻"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、这是我需要的一个可靠的指导帖子。 非常感谢。 在 Tiva 库 ug 中的 I-20部分中搜索之后、我没有建立此连接。 我在城外呆了几天;下周回来时、我会尝试您的建议。 BTW、ST Micro 支持响应。 我说我的波形看起来不正确、并提出了几个问题。 将在下周发布更新。 感谢您抽出宝贵时间为您提供帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢您-希望"冷静一下"(至少有点)、从而实现03:00 (星期五的明天)攻击。

    供应商的文献可以(更好)通过各种"I2CMasterControl()"参数来注明"何时"和"何时"出现"开始"条件。   (您将注意到我已经做出了这一努力)

    您应该检查您对从机地址"0x19"的选择-不能正确。 (并且不太可能是"拼写错误"。)   我再次以图表形式向您展示了定义从地址矩阵。  (即在一个地方"方便"的所有关键数据(即单个帖子)-"正如我的小公司所规定的")

    当您将我的"修复"描述为"建议"-我们已"运行代码"-注意到不需要/零不需要的启动条件!    (根据您的准则、这种方法非常丰富、因此"破坏"了"写入您的奴隶"。) (这并不是说您是"无主页"、而是关键/关键的"不需要的启动冷凝器"。 已经本地化-"向上"应该(现在)充分利用您的能力。)

    正如论坛声明的(升级?) 已"禁止了"-您是否可以将"建议的答案解决了我的问题"授予03:00 (令人痛苦)、但"可靠"(您的单词)想法和数据指南 -代表您完成...  

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

    很抱歉我很晚才回复。 我在上一篇帖子中提到、我将外出几天。 但是、一件事又导致了另一件事、一个月过去了... 最后、我们甚至有机会了解这一点并应用之前帖子中建议的更改 CB1_MOBILE。 这解决了问题。 那么、我用于写入从器件寄存器的序列:

    //设置写入到从机

     //SlaveAddress = 32; //CTRL_REG1地址(x20)

     I2CMasterSlaveAddrSet (I2C2_base、Board_TM4C129_ACCEL_ADDR、false); //false =写入。

     SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)

     while (I2CMasterBusy (I2C2_base));

    //将数据写入从设备

     I2CMasterDataPut (I2C2_base、SlaveAddress);

     I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_START); //每个 CB1_Mobile

     SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)

     I2CMasterDataPut (I2C2_base、MasterTxData_S); //写入更新的 CTRL_REG1设置

     //I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_SEND);

     I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_CONT);  //每个 CB1_Mobile

     SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)

     I2CMasterDataPut (I2C2_base、SlaveAddress);  

     I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_FINISH);  //每个 CB1_Mobile

     SysCtlDelay (1000);//允许设置忙标志(TM4C129问题)

     while (I2CMasterBusy (I2C2_base));  

    在从器件子地址 x20的读取-写入-读取序列期间、SDA/SCL 的 LA 捕捉:

    再次感谢 CB1_MOBILE。