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.

[参考译文] CC3135MOD:DHCP 在工作站模式下向 CC3135返回无效地址

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1301698/cc3135mod-dhcp-returns-invalid-address-to-cc3135-in-station-mode

器件型号:CC3135MOD
主题中讨论的其他器件: CC3135UNIFLASH

我将推出一款全新的定制控制板、它采用 STM 的 STM32H50XBH6作为嵌入式 MCU、并集成 TI CC3135MOD 模块来实现 Wifi 连接。 使用相同 MCU 和 Wifi 模块的早期版本电路板运行正常、并通过 DHCP 获取合理的地址、但我无法在站点模式下使用新电路板获取有效的 IP 地址。 具体而言、CC3135MOD 始终返回地址192.168.1.101、而我的网络 DHCP 发出格式为10.0.0.xx 的地址。 模块表示已连接但无法访问 Internet。 今天我甚至尝试连接到我的 iPhone 当设置为 Wifi 热点,但仍然获得192.168.1.101作为 IP 地址.

我的期望是我会被告知更新 CC3135的固件映像、服务包等。 但这并不是那么容易、因为新控制板与其前代产品之间的唯一真正区别是、由于我们专为该接口使用 SPI、因此我们移除了与 CC3135MOD 的串行接口连接。 因此、我无法再使用 Uniflash。 因此、我想我的下一项工作将是实施 OTA 固件升级、但在此阶段我没希望需要这样做。

我花了太多的时间在这方面,并将非常感谢任何人可以给我的任何指示。 我在硬件设计和固件开发方面拥有丰富的经验、但我的网络技能很少、因此我可能会遗漏一些显而易见的东西。 提前感谢!

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

    必须使用有效的服务包运行。  

    最好使用 CC32xx-SDK7.10中的最新 SP  (CC32xx 和 CC31xx 使用相同的 SP、并且您可以将最新的 SP 与旧的 C31xx 或 cc32xx 主机驱动程序结合使用)。

    在您的器件上编程了什么 SP?  

    按照 cc32xx-OTA 示例中的说明、您只需使用 CC31xx 文件系统 API (写入/sys/servicepack.ucf)来替换 SP (您可以参阅 /source/ti/net/ota/source/OtaArchive.c、用于实施-具体而言、您需要使用 TI 提供的 base64格式 SP 签名)。

    也就是说、该问题可能与在系统上配置的静态 IP 地址(通过 uniflash 或通过使用 sl_NetCfgSet 的代码)有关。 您可以使用 sl_NetCfgGet 对此进行验证

            _u16 len = sizeof(SlNetCfgIpV4Args_t);
            _u16 ConfigOpt = 0;   //return value could be one of the following: SL_NETCFG_ADDR_DHCP / SL_NETCFG_ADDR_DHCP_LLA / SL_NETCFG_ADDR_STATIC
            SlNetCfgIpV4Args_t ipV4 = {0};
            sl_NetCfgGet(SL_NETCFG_IPV4_STA_ADDR_MODE,&ConfigOpt,&len,(_u8 *)&ipV4);
    
            printf("DHCP is %s IP %d.%d.%d.%d MASK %d.%d.%d.%d GW %d.%d.%d.%d DNS %d.%d.%d.%d\n",
                (ConfigOpt == SL_NETCFG_ADDR_DHCP) ? "ON" : "OFF",
                SL_IPV4_BYTE(ipV4.Ip,3),SL_IPV4_BYTE(ipV4.Ip,2),SL_IPV4_BYTE(ipV4.Ip,1),SL_IPV4_BYTE(ipV4.Ip,0),
                SL_IPV4_BYTE(ipV4.IpMask,3),SL_IPV4_BYTE(ipV4.IpMask,2),SL_IPV4_BYTE(ipV4.IpMask,1),SL_IPV4_BYTE(ipV4.IpMask,0),
                SL_IPV4_BYTE(ipV4.IpGateway,3),SL_IPV4_BYTE(ipV4.IpGateway,2),SL_IPV4_BYTE(ipV4.IpGateway,1),SL_IPV4_BYTE(ipV4.IpGateway,0),
                SL_IPV4_BYTE(ipV4.IpDnsServer,3),SL_IPV4_BYTE(ipV4.IpDnsServer,2),SL_IPV4_BYTE(ipV4.IpDnsServer,1),SL_IPV4_BYTE(ipV4.IpDnsServer,0));

    或者简单地使用以下命令通过 DHCP (客户端)配置设备:

    sl_NetCfgSet(SL_NETCFG_IPV4_STA_ADDR_MODE,SL_NETCFG_ADDR_DHCP,0,0);
    sl_Stop(0);
    sl_Start(NULL,NULL,NULL);

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

    Kobi、感谢快速回复。 我现在设法使 DHCP 正常工作(通过将消息末尾的行添加到我的代码中)、现在、我用于器件接口的 MQTT 可以正常工作。 我还在代码中添加了一个选项来更新似乎有效的服务包。

    我的版本详细信息现在为:
    芯片0x31100000
    Mac 3.7.0.1
    PHY 3.1.0.26
    NWP 4.13.0.2
    ROM 8738
    主机3.0.1.65
    但出于某种原因、我仍然无法让我的路由器为 DNS 请求提供服务。 返回的错误是-6152,这显然表示没有指定 DNS 服务器。 是否需要通过 CC3135指定 DNS 地址? 我预计路由器会选择一个、但如果需要指定、我该如何操作? 我找到了有关如何设置第二个 DNS 地址的文档、但没有关于如何设置主地址的示例。 我怀疑如果能够让配置程序正常运行、我可能会找到一种方法进行设置。 我的配置问题主要是、无论我尝试过什么、我的 iPhone 都无法连接到"mysimplelink-DBB25"。 显然,iPhone 对与不安全的网络通信十分挑剔。
    我怀疑我已经非常接近于100%完成该工作、希望这是最后一个障碍。 还有其他提示吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    否、您说的是  CC31xx (作为 DNS 客户端)尝试连接到本地路由器的工作站用例、还是手机尝试连接到 CC31xx (运行 DNS 服务器)的接入点用例?

    对于第一种情况 (工作站模式中的 CC31xx)-您无需在器件上启用任何功能、只需确保路由器支持 DNS。 请注意、当 CC31xx 连接 到本地路由器时-可以使用 MDNS (SL_NETAPP_MDNS_ID)找到它  需要通过 sl_NetAppStart 启用、而不是通过 DNS 启用。

    对于第2种情况 (CC31xx 处于 AP 模式)-确保启用 DNS 服务器(SL_NETAPP_MDNS_ID)  需要通过 sl_NetAppStart 启用)。

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

    很抱歉我不清楚。 主应用作为客户端在工作站模式下运行、使用 MQTT 发送和接收数据。 开始时、它会尝试从 NIST 服务器获取日期和时间、并需要将" time.nist.gov "转换为 IP 地址。 (推荐使用这种方法在多个不同的 IP 地址之间分配访问以实现相同的功能。) 直到今天,代码才从 sl_NetAppDnsGetHostByName()成功返回,但我怀疑这是由于另一个 FreeRTOS 进程的干扰,因为当我阻止该进程运行时, DNS 开始工作。

    谢谢、我认为我现在很好、直到下一次...