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.

[参考译文] CC3220MOD:WLAN 传输时的电流消耗

Guru**** 2560470 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/714538/cc3220mod-current-consumption-at-wlan-transmission

器件型号:CC3220MOD
主题中讨论的其他器件:CC3220SF

您好!

示例程序使用 sl_Send API 每0.16秒发送24KB TCP 流量。

此图是 ITEMER-BOOST 捕获的电流图。


(1)显示 TCP 流量的传输。
(2)传输完成后、模块继续 RX 大约50ms。
(3)则 TX 约为0.5ms。
(4)最后、RX 大约为15ms。

(2)...(4)导致电流消耗增加。

我有一些问题。
什么是(2)...(4)?
为什么 NWP 不会在(1)之后立即恢复空闲状态?

目标:CC3220MODSF 定制板
SDK:simplelink_cc32xx_sdk_2_10_00_04

此致、
Nobihiro

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

    您可以向我发送您正在使用的示例程序的代码吗?


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

    您好 Alexis、

    感谢您的快速响应。

    该尖峰也会出现在 network_terminal_CC3220SF_LAUNCHXL_tirtos_ccs 演示应用程序中。
    此图片显示了应用程序中的"发送-c IP 地址-u -n 100"时的当前图形。


    SDK:simplelink_cc32xx_sdk_2_10_00_04

    此致、
    Nobihiro

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

    您好 Alexis、

    我附上了下面的示例程序。

    示例程序用法:

    1) 1)从 SDK 2.10导入 serial_wi_CC3220SF_LAUNCHXL_tirtos_ccs。

    2) 2)将工程中的 serial_wifi.c 替换为附加文件。

    3) 3)构建、加载和运行。

    此外、该示例程序假定...

    -IP 地址为192.168.0.108的任何接收器,侦听 TCP 5001端口。

    -第22行定义的 AP (安全:开放)。

    此致、

    Nobihiro

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include "pthread.h"
    #include "Board.h"
    
    
    #define INTR_PERIOD_Counts_value 16000 // 200us
    #define AP_SSID"XXXXXXXXXXXXXXX"//接入点(开放安全)
    #define PAYLOAD_SIZE 24576 // 24KB
    #define SEND_PERIOD_INT 800 // WLAN 发送每800个中断(160ms)发生一次。
    
    Timer_Params timerParams;
    Timer_handle timerHandle = 0;
    
    pthread_t gSpawnThread =(pthread_t) NULL;
    pthread_attrs_t pAttrs_spawn;
    struct sched_param primRAM;
    
    Task_Params;
    Task_Structurt taskStructurt;
    char taskStack[4096];
    
    Semaphore_Params semParams;
    Semaphore_Structt semStruct;
    Semaphore_handle semHandle;
    
    Int32_t sock;
    
    
    
    
    
    
    
    
    
    
    
    
    void NetCfgIpV4Args_t IPv4;SlSockAddrIn_t sAddr;SlWlanSecParams_t secParams;unsigned long send_count = 0;unsigned char PAYLOAD[PAYLOAD_SIZE]={};unsigned long interruptCount = 0;// SimpleLink Wifi 驱动程序的回调函数-必须定义* SimpleLinkEventSpropHandler* SimpleLinkSpt Event SwpLinkEvent_Spt Event SpinSpanEvent {* SpinSpinEvent_SpanEvent} {}
    void SimpleLinkSockEventHandler (slSockEvent_t *pSock){}
    void SimpleLinkFatalErrorEventHandler (slDeviceFatal_t *slFatalErrorEvent){}
    void SimpleLinkNetAppRequestEventHandler (SlNetErrorRequest_t *pNetAppRequests、SlNetRequestResponse_t *slAppRequest_t *AppRequest0
    
    
    
    )
    * void SimpleLinkAppEventHandler 8 (*无中断)/uLinkAppArsewan *
    
    int i;
    unsigned char dummy_data;
    
    对于(;;){
    Semaphore_pend (semHandle、BIOS_wait_forever);
    SEND_COUNT++;
    dummy_data = send_count % 64;
    对于(i = 0;i < PAYLOAD_SIZE / 2;i++){
    PAYLOAD[I * 2]= dummy_data;
    }
    有效载荷[0]= 99;//标记
    sl_Send (sock、payload、sizeof (payload)、0);
    }
    }
    
    
    void timerCallback (void)
    {
    MAP_TimerIntClear (TIMERRA2_BASE、0x2FFF);
    
    interruptCount++;
    if (interruptCount > 10000){//忽略 init spike
    if (interruptCount % send_period_INT = 0){
    Semaphore_post (semHandle);
    }
    }
    
    
    
    void *mainThread (void *arg0)
    {
    spi_init();
    
    Semaphore_Params_init (semParams);
    semParams.mode = Semaphore_Mode_binary;
    Semaphore_construction (&semStruct, 0, semParams);
    SemHandle = Semaphore_handle (semStructt);
    
    //创建 sl_Task
    pthread_attr_init (&pAttrs_spawn);
    priParam.sched_priority = 9;
    pthread_attr_setschedparam (&pAttrs_spawn、&priParam);
    pthread_attr_setstacksize (&pAttrs_spawn、4096);
    pthread_create (&gSpawnThread、&pAttrs_spawn、sl_Task、NULL);
    
    //创建发送任务
    Task_Params_init (&taskParams);
    taskParams.STACKSIZE = 4096;
    taskParams.stack = taskStack;
    taskParams.priority = 10;
    Task_construct(&taskStruct,(Task_FuncPtr) sendTask、&taskParams、NULL);
    
    //建立与 AP 的连接
    sl_Stop (10000);
    SL_Start (0、0、0);
    IPVL.IP = (_u32) sl_IPv4_VAL (192、168、0、6);// my (sender) IP
    IPVL.IpsMask =(_u32) sl_IPV4_VAL (255、255、255、0);
    IPv4.IpsGateway =(_u32) sl_IPv4_VAL (192、168、0、1);//虚拟
    IPv4.IpsServer=(_u32) sl_IPv4_VAL (192、168、0、1);//虚拟
    sl_NetCfgSet (sl_netcfg_IPV4_STA_ADDR_MODE、sl_netcfg_ADDR_STATIC、sizeof (SlNetCfgIpV4Args_t)、(uint8_t *)&IPv4);
    secParams.Key ="";
    secParams.KeyLen = 0;
    secParams.Type = sl_WLAN_SEC_TYPE_OPEN;
    sl_WlanConnect (AP_SSID、strlen (AP_SSID)、0、secParams、0);
    
    Task_sleep (5000);//等待5s
    
    //创建套接字
    sAddr.sin 系列= sl_AF_iNet;
    sAddr.sin 端口= sl_Htons (5001);
    sAddr.sin addr.s_addr = sl_Htonl (sl_IPv4_VAL (192、168、0、108));//接收器的 IP
    sock = sl_Socket (sl_AF_iNet、sl_sock_stream、0);
    sl_Connect (sock、(const SlSockAddr_t *)和 sAddr、sizeof (SlSockAddrIn_t));
    
    //创建计时器
    
    /*初始化硬件计时器*/
    MAP_PRCMPeripheralClkEnable (PRCM_TIMERA2、PRCM_RUN_MODE_CLK);
    MAP_IntDisable (INT_TIMERA2A);
    MAP_IntDisable (INT_TIMERA2B);
    MAP_TimerIntDisable (TIMERERA2_base、TIMER_CAPB_EVENT | TIMER_CAPB_MATCH | TIMER_TIMB_TIMEOUT | TIMER_CAPA_EVENT | TIMER_CAPA_MATCH | TIMER_TINA_TIMEOUT);
    MAP_TimerDisable (TIMERERA2_base、TIMER_Both);
    MAP_TimerIntClear (TIMERERA2_base、TIMER_CAPB_EVENT | TIMER_CAPB_MATCH | TIMER_TIMB_TIMEOUT | TIMER_CAPA_EVENT | TIMER_CAPA_MATCH | TIMER_TINA_TIMEOUT);
    
    /*将计时器中断设置为0、最高应用程序优先级*/
    MAP_IntPrioritySet (INT_TIMERA2A、0<5);
    MAP_IntPrioritySet (INT_TIMERA2B、0<5);
    
    /*将计时器配置为周期递减计数、周期为 INTR_PERIOD_COUNT_VALUE 节拍*/
    MAP_TimerConfigure (TIMERERA2_base、TIMER_CFG_PERIODICRACASE);
    MAP_TimerLoadSet (TIMERERA2_base、TIMER_A、INTR_PERIOD_Counts_value);
    MAP_TimerIntRegister (TIMERERA2_base、TIMER_A、timerCallback);
    
    /*启动计时器*/
    MAP_IntEnable (INT_TIMERA2A);
    MAP_TimerIntEnable (TIMERERA2_base、TIMER_TINA_TIMEOUT);
    MAP_TimerEnable (TIMERERA2_base、TIMER_A);
    
    返回(NULL);
    }
    

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

    您好 Alexis、

    您能否在您的环境中重现此问题?

    我尝试在 SDK 2.20上运行此示例程序。
    首先、传输工作正常、几秒钟后、它突然停止。
    当 PAYLOAD_SIZE 设置为较小的值时、它会很好地工作。

    规格是否从 SDK 2.10更改为2.20?

    此致、
    Nobihiro

    P.S. 在我的示例程序中、可能需要在第118行之后插入"sl_WlanSetMode (Role_STA)"。

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

    是的、我将尝试在我的末尾重现此问题、看看我是否可以确定该尖峰是什么。


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

    您好!

    为了重现此问题、我认为最简单的方法是在 network_terminal 应用程序上使用"send -c address -u -n 100"命令。
    即使传输已完成、电流仍会持续50-60ms。
    这是正常行为吗?
    在您的站点中、电流消耗是否会立即降至基准水平?
    在我们的应用中、TX 每160ms 发生一次、该跟踪电流会消耗很多能量。
    即使使用 SDK 2.20也会出现此问题。

    此致、
    Nobihiro

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

    您好 Alexis、

    我同时获得了当前数据和 Wi-Fi 数据包捕获数据。

    操作:发送-c 192.168.0.108 -u -n 100 (network_terminal app)

    下面是 TX 启动时的数据包捕获结果。

    以下是 TX 完成时的数据包捕获结果。


    帧编号 时间偏移描述
    32        2.9530844 第一个 UDP 封包
    187.       3.0301390 最后(100)个 UDP 封包

    IMETER 屏幕截图中的尾部尖峰不会出现在数据包捕获文件中。

    条件

    Launch-CC3220MODASF、CCS 8.1.0、SDK 2.20、network_terminal_CC3220SF_tirtos_ccs

    此致、
    Nobihiro

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

    我对延迟答复表示歉意。 我已经在我的结尾处重新创建了行为、在查看您的数据包捕获并运行了一些测试后、我相信我了解正在发生的情况。

    这种行为似乎发生在允许 NWP 进入睡眠状态的电源策略中。 尖峰似乎出现在器件转换到低功耗模式之前。 我将与我们的研发人员交谈、看看他们是否能为我提供更确切的信息。

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

    事实上、CC3220会发送一个空数据包、通知 AP 它正在进入802.11省电模式。 这就是尖峰。

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

    您好 Alexis、

    更重要的是、在传输完成后、高电流会持续很长时间(50-60ms)以降低能耗、而不是尖峰。

    此致、

    Nobihiro

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

    在考虑当前活动并预测未来活动后、默认电源策略将进入低功耗模式。 我认为、在发送空数据包并进入低功耗模式之前的50-60ms 是尝试预测未来活动的 NWP。


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

    感谢您的回复。

    它是该模块的规格吗?
    用于预测的电流消耗对于我们的应用而言是关键问题。
    此问题是否有任何替代方案?

    此致、
    Nobihiro