主题中讨论的其他器件: UNIFLASH
您好!
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.
您好!
您好!
不可以、 这不是 OTA 更新。
使用 CC3235S 的定制板、并通过 Uniflash 对 SFLASH 进行编程。
由于定制板的硬件设计中缺少外部引脚硬件复位、 因此我将使用使用使用 GPIO 中断的软件复位、以便用户可以复位模块。 我没有尝试运行新映像、我正在尝试运行现有映像。
我甚至检查了 GPIO 回调函数在 GPIO 的下降沿工作、并在回调函数中调用 MAP_PRCMHibernateCycleTrigger ()或 MAP_PRCMPCuRESET ()、但它不会重新启动。
您好!
我 没有考虑防止再次进入。 根据您的建议,我在 回调函数的开头添加了 GPIO_disal反反复 Int() API。
void softResetGPIOCallback(uint8_t index) { GPIO_disableInt(CONFIG_GPIO_CTS); UART_PRINT("\n\rDetect Falling trigger at CTS Pin!!\n\r"); sl_Stop(SL_STOP_TIMEOUT); MAP_PRCMMCUReset(1); return; }
但是,调用 map_PRCMMCUREset() API 后,它仍然不会重新启动。 (调用后、所有操作都停止)
您能给我一些关于软件复位的建议吗?
您好!
在我的代码中,我使用 SoC 休眠复位,其工作方式与 API PRCMHibernateCycleTrigger()类似。 我的代码是:
MAP_PRCMHibernateIntervalSet(330); MAP_PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR); MAP_PRCMHibernateEnter();
从中断上下文调用 sl_Stop() API 通常不是最佳做法。 更安全的方法是在 ISR 处理程序中设置事件、并在线程中处理复位。
1月
除了 Jan 提到的内容、在 复位之前、需要在 OTA 之后(即、如果您更新了 MCU 映像文件)将器件进入测试模式、然后才需要 sl_Stop。 但这目前与您无关。
您是否已经完成了硬件审查流程? https://www.ti.com/tool/SIMPLELINK-WIFI-DESIGN-REVIEWS
我们在 sl_Stop 方面遇到了几个问题、但在过去一两年中没有。 因此、如果您使用的是最新的驱动程序和 SP、则不会出现这种情况。
是否有其他线程与触发复位的线程并行运行? 如果是、他们在做什么?
建议在 调用 PRCMHibernateCycleTrigger()之前禁用所有中断(Hwi_disable()。
您好!
经过多次测试、我们得到了以下结果。
如果在 main_tirtos.c 中创建的主线程中调用 sl_Stop ()进行复位、sl_Stop 不会卡在内部。 但是,当在主线程中创建的 resetMonitor 线程上调用 sl_Stop()时,它确实会卡在内部。 (resetMonitor 线程由 GPIO 回调中发生的事件驱动、并停止 GPIO 回调中的所有中断。)
在 resetMonitor 线程正在运行的情况下(当 sl_Stop 卡在内部时)、主线程在用户命令接口的 while 循环中执行命令解析和处理。
您好!
从您的 resetMonitor 线程调用 sl_Stop()时,此类问题不应有任何特定的原因。
几个问题:
1月
您好!
是的、我使用的是 TI-RTOS。 我的项目基于 \examples\rtos\cC3235S_LAUNCHXl\demos\network_termina\tirtos\ccs。
在处理用户命令接口时,请根据命令使用 SL_* API,并且在使用与套接字相关的连接命令时,结束用户命令接口并创建用于数据处理的套接字线程。
但是,我没有在用户命令界面中使用 SL_* API,因为在上述测试情况下,我们没有使用任何命令。
在初始化过程中、执行了 SlNetConn_init()、WiFi_if_init()和 OTA_if_init()。
更具体地说,我的项目使用了 SL_* API,但 SlNetConn API 也用于使用 OTA_IF 模块。 更改与 slNetConn API 相关的连接,并将现有的 SL_* API 用于其余函数。
线程为主线程、sl_Task、workQ (在创建 OTA 模块中)、SlNetConn_Process、SlWiFiConn (在创建 WiFi 鼠标中)、UART 读取、LED 显示屏、ResetMonitor。
优先事项如下。
主线程:1.
SL_Task:9.
工作问:2.
SlNetConn_Process:1.
SlWiFiConn:9.
UART 读取:7
LED 显示:5.
resetMonitor:7.
您好!
调用 slNetConn_Stop 之前调用了 slNetConn_Stop。
但它也是如此。
卡在 SL_Stop 或 SL_WlanDISCONNECT 内部。 连接到 WiFi 后、它卡在 SlNetConn_Stop 内(sl_Wlandisconnect 在 SlNetConn_Stop 内调用)
OTA 升级在我实现的用户命令界面中实现、并使用 OTA_IF 模块实现。 如果可以进行 OTA 安装、则会调用 OTA_IF_INSTALL () API、而不会卡在 sl_Stop 内。
可能预计这是我实施的代码中的问题、并且在短时间内不可能找到原因。
是的、我现在唯一可以建议的是发送 NWP 日志(请参阅 编程人员指南中的第20章)、我将检查是否可以看到任何内容。
从理论上讲、从不同线程调用 sl_Stop 时应该有任何差异。 只需确保非主线程实际上是一个线程(即代码不是从中断上下文中执行的)-但根据您的描述、应该是可以的。
您好!
我的代码是在线程中调用 sl_Stop 而不是中断上下文。
... void * mainThread(void * arg) { GPIO_setCallback(CONFIG_GPIO_SOFTRESET, resetGPIOCallback); GPIO_enableInt(CONFIG_GPIO_SOFTRESET); ... pthread_t resetMonitorThread; softResetThread = OS_createTask(7, 256, resetMonitorThread, NULL, 0); ... } ... void resetGPIOCallback(uint8_t index) { GPIO_disableInt(CONFIG_GPIO_SOFTRESET); UART_readCancel(uartHandle); HwiP_disable(); DBG_PRINT("\n\rDetect Falling trigger at CTS Pin!!\n\r"); gSoftReset = 1; return; } ... void * resetMonitorThread(void* arg) { while(1) { usleep(100000); if (gSoftReset) { SlNetConn_stop(SlNetConnEventHandler); DBG_PRINT("1\n\r"); // sl_WlanDisconnect(); // DBG_PRINT("2\n\r"); // sl_Stop(SL_STOP_TIMEOUT); // DBG_PRINT("3\n\r"); DBG_PRINT("reseting the platform...\n\n\n\r"); MAP_PRCMHibernateCycleTrigger(); } } }
下面是按案例列出的 NWP 日志。
"10.28_reset_without slstop":它仅在 resetModtor 线程中调用 MAP_PRCMHibernateCycletTrigger()。 它可以进行重置
"10.28_reset_with _slstop":它在 MAP_PRCMHibernateCycletTrigger()之前调用 sl_Stop()。 卡住。
"10.28_reset_with _slwlandisconnect":在 MAP_PRCMHibernateCycleTrigger()之前调用 sl_WlanDisconnect ()。 卡住。
"10.28_reset_With_slnetconnstop":连接到 AP 后,在 MAP_PRCMHibernateCycleTrigger()之前调用 SlNetConnstop()。 它可以进行重置。
"10.28_RESET_OTA":它使用 OTA_IF 进行 OTA 升级。 它可以重置和 OTA 提交。 (新图像的波特率不是921600bps。 因此、OTA 后不会写入日志。)
e2e.ti.com/.../10.28_5F00_cc3235s_5F00_logs.zip
"10.28_reset_With_slnetconnstop":连接到 AP 后,在 MAP_PRCMHibernateCycleTrigger()之前调用 SlNetConnstop()。 它可以进行重置。
如果这个可以正常工作、那么这就是您应该使用的内容。 您使用 SL_WlanConnect/Disconnect 或 SlNetConn_Start/Stop 进行连接(不要在两种方法之间混用)。
如果连接到 AP、则似乎会调用 slnetconn_stop ()内的 sl_WlanDisconnect ()、但不会调用 sl_Stop。
是否可以在 MAP_PRCMHibernateCycletrigger()之前不调用 sl_Stop()?