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.

[参考译文] CC3120MOD:启动初始化序列的主机行为

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/784589/cc3120mod-host-behaviour-to-start-the-init-sequence

器件型号:CC3120MOD
主题中讨论的其他器件:CC3100CC3120CC3100SDK

您好!

 https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/673781/2480241帖子中的 Michael Reymond 表示 

他说:"主机 IRQ 线路变为高电平表示 CC3120 期望主机 MCU 做出一些响应。 如果主机 IRQ 在复位后首次被置位、它将期望主机通过 UART/SPI 发送同步字来启动初始化序列。"

我在任何 TI 文档中都找不到它。  那么、这是预期的主机行为吗?  

即使在 sl_Start()返回 Role_AP 后,主机 IRQ 仍保持高电平也会出现问题。

我将主机驱动程序移植到不使用 RTOS 的 MCU。

谢谢、

Wai

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

    CC3100主机接口指南中涉及了主机 IRQ 线路:
    processors.wiki.ti.com/.../CC3100_Host_Interface
    本指南对 CC3120仍然有效、因为 CC3100和 CC3120之间的低级主机驱动程序操作是相同的。

    如果您看到在 sl_Start()返回后主机 IRQ 仍然为高电平,则应检查以下几点:
    1.您是否正在调用 sl_Task()来处理非 RTOS 程序中的异步事件?
    2.您是否看到主机将相应的同步字发送到 CC3120作为主机 IRQ 处理程序流程的一部分?
    3.在 sl_Start()转换为高电平之前,您是否看到主机 IRQ 线路从低电平开始? 如果从高电平开始、则可能需要调查硬件问题。

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

    您好、Michael、

    感谢您的快速响应。

    1.是的,它在主循环中。 在 CC3100SDK_1.3.0示例中,我看到调用_SlNonOsMainLoopTask(),它与 CC3120 SDK 中的 sl_task()等效(simplelink_sdk_wi_plugin_2_40_00_22),就像在主操作系统实现中一样,sl_Task()被定义为_NonHandleSpawTask(在主任务中执行相同的功能。 在 CC3100SDK_1.3.0示例中、我看到以下内容:

    lRetVal = sl_Start (0、0、0);
    ASSERT_ON_ERROR (lRetVal);

    //检查设备是否处于 AP 模式
    如果(Role_AP == lRetVal)

    //如果器件处于 AP 模式,我们需要等待该事件
    //然后再执行任何操作
    while (!is_ip_acquired (g_Status))

    #ifndef sl_platform_multi_threaded
    _slNonOsMainLoopTask();
    其他
    OSI_SLEEP (1);
    #endif



    您是否建议也调用 sl_task()? 如果是、将相当于什么

    while (!is_ip_acquired (g_Status))

    有何影响?

    没有。在初始化期间、我看不到主机将相应的同步字发送到 CC3120、这是主机 IRQ 处理程序流程的一部分。 主机驱动程序正在使用 UART 与 CC3120通信、如果我正确理解初始化流程(processors.wiki.ti.com/.../CC3100_Host_Interface)、则仅在使用 SPI 时调用 sl_IfWrite()。 因此、作为初始化流程的一部分、主机是否仍应将同步字发送到 CC3120? 还考虑到 sl_Start 返回了 Role_AP、这是否表示初始化已成功完成?

    3.是的,主机 IRQ 线路在 sl_Start()之后转换为高电平之前从低电平开始。

    编辑:进一步到(1)、如果我在 sl_Start ()完成后放置一个断点、g_SlNonOsCB.SpawnEntry[].IsAllocated 全部为0x00。


    谢谢、
    Wai

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

    1。ITS_IP_ACQUIRED 标志是一个应用程序级全局标志、用于 CC3100示例、作为主应用程序等待特定 IP ACQUIRED 异步事件的一种方式。 通过将该全局标志添加到 SimpleLinkNetAppEventHandler()中,您可以在 CC3120上执行类似操作,该全局标志将在 SL_NetApp_EVENT_IPv4_Acquired 事件上设置。
    至于 sl_Task(),如果你没有使用 RTOS,在这里你可以生成一个低优先级线程来运行 sl_Task(),你需要在你的应用程序中定期调用它。 一般而言、查看 SDK 中的非 RTOS 示例中调用它的位置是一个有关何时调用它的好指南。

    UART 主机驱动程序指南可在以下位置找到: processors.wiki.ti.com/.../CC3100_UART_Host_Interface
    即使您使用的是 UART,也绝对应该调用 sl_IfWrite(),除非您已经用自己的 UART 特定函数替换了该函数。 还有一个用于 UART 的同步字、因此如果您在 UART 线路上看不到该同步字、则会出现问题。

    3.好的,这表示主机 IRQ 按预期运行,并且可能没有硬件解释您不处理主机 IRQ 事件的原因。

    尝试定期运行 sl_task(),并查看它是否有助于解决您的问题。

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

    我假设您已经解决了您的问题、因为我没有听到您的反馈。 如果没有、请随时发布对此主题的响应、或打开有关此问题的新主题。

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

    您好、Michael、

    感谢后续行动。 我能够使它正常工作。

    但是、您在第2点中指出"sl_IfWrite()绝对应该被调用、即使您使用的是 UART 也是如此"。  您是否意味着它应该作为 UART 初始化序列的一部分进行调用、因为这是我的问题的上下文?   如果是这种情况,我没有看到这种情况,即使在"UART 初始化序列"图中,它也不显示 正在使用的 sl_IfWrite()。

    如果您能澄清这一点、那么我会对我执行初始化的方式感到满意。

    谢谢、

    Wai

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

    除非您更详尽地修改了主机驱动程序文件,否则应在 user.h 中将 sl_IfWrite()定义为在主机 MCU 和 CC3120之间的 UART 接口上实现 UART 写入的某些函数。 这是在您向 CC3120发送数据时调用的函数,因此在与 CC3120进行交互时,应始终使用 sl_IfWrite()。 如果您在 sl_IfWrite()设置了断点,然后在调试模式下运行主机驱动程序,您将看到该函数如何用于与 CC3120的低级通信。

    此致、
    Michael