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.

[参考译文] CC3135:无法在5G 通道上以收发器模式传输数据

Guru**** 2393725 points
Other Parts Discussed in Thread: BOOSTXL-CC3135

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1022676/cc3135-unable-to-transmit-data-in-transceiver-mode-on-5g-channels

器件型号:CC3135

我使用两 个 BOOSTXL-CC3135作为开发板、在5GHz 通道的收发器中实现无线电交换

初始化代码:

SL_DEBUG("start SimpleLink\n");
ret = sl_Start(NULL, comm_sl_ctx.spi_dev, NULL);

SL_DEBUG("SL role %d\n", ret);

if(ret == start_role){
 printf("role is correct, waiting to acquiring ip ... \n");
 if(start_role == ROLE_AP && (ret = comm_simplelink_wait_acqured_ip())){
  SL_DEBUG("Error wait SimpleLink ipv4 aquired, ret %d\n", ret);
  break;
 }
 printf("\ndone\n");
}else if(ret != start_role){
 printf("switching in %s mode\n", (start_role == ROLE_AP) ? "AP" : "STA");
 if((ret = comm_simplelink_switch_mode(start_role)) != start_role){
  SL_DEBUG("Error set SimpleLink role to AP, ret %d\n", ret);
  break;
 }
}

SL_DEBUG("get version\n");

pConfigLen = sizeof(ver);
pConfigOpt = SL_DEVICE_GENERAL_VERSION;
if((ret = sl_DeviceGet(SL_DEVICE_GENERAL, &pConfigOpt, &pConfigLen, (_u8 *)(&ver)))){
SL_DEBUG("Error get SimpleLink version info, ret %d\n", ret);
break;
}

SL_DEBUG("\nCHIP %d, "
"MAC 31.%d.%d.%d.%d, "
"PHY %d.%d.%d.%d, "
"NWP %d.%d.%d.%d, "
"ROM %d, "
"HOST %d.%d.%d.%d\n",
ver.ChipId,
ver.FwVersion[0], ver.FwVersion[1],
ver.FwVersion[2], ver.FwVersion[3],
ver.PhyVersion[0], ver.PhyVersion[1],
ver.PhyVersion[2], ver.PhyVersion[3],
ver.NwpVersion[0], ver.NwpVersion[1], ver.NwpVersion[2], ver.NwpVersion[3],
ver.RomVersion,
SL_MAJOR_VERSION_NUM, SL_MINOR_VERSION_NUM, SL_VERSION_NUM, SL_SUB_VERSION_NUM);
SL_DEBUG("set enable 5G\n");
if((ret = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_ENABLE_5G, sizeof(enable), (_u8 *)&enable))){
 SL_DEBUG("Error set SimpleLink 5G enable, ret %d\n", ret);
 break;
}

_u16 macAddressLen = sizeof(comm_sl_ctx.mac);
_u16 ConfigOpt = 0;
if((ret = sl_NetCfgGet(SL_NETCFG_MAC_ADDRESS_GET,&ConfigOpt,&macAddressLen,(_u8 *)comm_sl_ctx.mac))){
 SL_DEBUG("Error get MAC addr, ret %d\n", ret);
 break;
}

SL_DEBUG("MAC addr %02X:%02X:%02X:%02X:%02X:%02X:\n", comm_sl_ctx.mac[0], comm_sl_ctx.mac[1], comm_sl_ctx.mac[2],
comm_sl_ctx.mac[3], comm_sl_ctx.mac[4], comm_sl_ctx.mac[5]);

SL_DEBUG("set device name\n");

if((ret = sl_NetAppSet(SL_NETAPP_DEVICE_ID, SL_NETAPP_DEVICE_URN, strlen(device_name), device_name))){
 SL_DEBUG("Error set SimpleLink name, ret %d\n", ret);
 break;
}

SL_DEBUG("set enable 5G\n");
if((ret = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_ENABLE_5G, sizeof(enable), (_u8 *)&enable))){
 SL_DEBUG("Error set SimpleLink 5G enable, ret %d\n", ret);
 break;
}


SL_DEBUG("reset SimpleLink\n");
if((ret = comm_simplelink_reset()) != start_role){
 SL_DEBUG("Error SimpleLink interface reset, ret %d\n", ret);
 break;
}


SL_DEBUG("opening raw socket for ch %d\n", ch);
if((comm_sl_ctx.sl_raw_socket = sl_Socket(SL_AF_RF ,SL_SOCK_RAW, ch)) < 0){
 SL_DEBUG("Error opening RAW socket %d\n", ret);
 break;
}

if(!(comm_sl_ctx.raw_tx_frame = (uint8_t *)malloc(SL_RAW_FRAME_TX_BUFF_SIZE))){
 SL_DEBUG("Error allocating memory for raw tx frame\n");
 ret = -ENOMEM;
 break;
}

if(!(comm_sl_ctx.raw_rx_frame = (uint8_t *)malloc(SL_RAW_FRAME_RX_BUFF_SIZE))){
 SL_DEBUG("Error allocating memory for raw tx frame\n");
 ret = -ENOMEM;
 break;
}


接收帧的代码

    do{
        if((ret = sl_Recv(comm_sl_ctx.sl_raw_socket, comm_sl_ctx.raw_rx_frame, len, 0)) < 0){
            SL_DEBUG("Error receiving frame %d\n", ret);
            break;
        }
          SL_DEBUG("receive packet with len %d: rate %d, ch %d, rssi %d, timestamp %d\n", ret, packet->ti_header.rate, packet->ti_header.channel, packet->ti_header.rssi, packet->ti_header.timestamp );

        if(ret < sizeof(comm_sl_raw_rx_packet_t)){
            SL_DEBUG("packet size less than expected\n");
            continue;
        }

        if(memcmp(packet->mac_header.receiver_addr, comm_sl_ctx.mac, sizeof(comm_sl_ctx.mac)) &&  memcmp(packet->mac_header.receiver_addr, SL_BROADCAST_BSSID, sizeof(comm_sl_ctx.mac))){ //this packet not for us
            printf("skip packet\n");
            continue;
        }
    }while(0);

发送数据的代码

    #define SL_SEND_FRAME_OPT(ch) SL_WLAN_RAW_RF_TX_PARAMS(ch, SL_WLAN_RATE_1M, 0 ,SL_WLAN_LONG_PREAMBLE)

    comm_sl_raw_tx_packet_t *packet = (comm_sl_raw_tx_packet_t *)comm_sl_ctx.raw_tx_frame;

    memset(packet, 0, sizeof(*packet));

    packet->mac_header.frame_control.proto_version = SL_TRANSCIVER_FRAME_PROTO;
    packet->mac_header.frame_control.type = SL_TRANSCIVER_FRAME_TYPE;
    packet->mac_header.frame_control.subtype = SL_TRANSCIVER_FRAME_SUBTYPE;
    packet->mac_header.frame_control.from_ds = 0;

    packet->mac_header.duration = SL_FRAME_DURATION;

    memcpy(packet->mac_header.transmitter_addr, comm_sl_ctx.mac, sizeof(packet->mac_header.transmitter_addr));
    memcpy(packet->mac_header.receiver_addr, dst_mac, sizeof(packet->mac_header.receiver_addr));
    memcpy(packet->mac_header.bssid_addr, bssid, sizeof(packet->mac_header.bssid_addr));

    memcpy(comm_sl_ctx.raw_tx_frame + sizeof(*packet), data, to_send);

    ret = sl_Send(comm_sl_ctx.sl_raw_socket, comm_sl_ctx.raw_tx_frame, sizeof(*packet) + to_send,  SL_SEND_FRAME_OPT(comm_sl_ctx.ch));

作为 发射器地址我使用当前 cc 模块的 Mac、对于  接收器地址和 BSSID_addr、我使用广播 MAC FF:FF:FF:FF:FF:FF:FF

此代码生成的标头如示例中的0x88、0x00、0x2C、0x00接收器、发送器、 BSSID Mack

对于通道1至13、即2、4 GHz 通道、此代码起作用正确;对于通道36、40和任何其他5GHz 子范围、我未接收到来自收发器的任何数据包 (但仍从其他 WiFi 设备接收部分来自空中的数据包)

我尝试使用  

        SL_DEBUG("set country code\n");

        if((ret = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_COUNTRY_CODE, strlen(CountryCode), CountryCode))){
             SL_DEBUG("Error set SimpleLink country code, ret %d\n", ret);
             break;
        }

        SL_DEBUG("set channel\n");

        if((ret = sl_WlanSet(SL_WLAN_CFG_AP_ID, SL_WLAN_AP_OPT_CHANNEL, sizeof(channel), &channel))){
            SL_DEBUG("Error set SimpleLink channel, ret %d\n", ret);
            break;
        }

如果 countrycode ="US"、但这没有n`t Help (

我是否错过了配置/发送/接收中的内容?

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

    如果这样做可能会有帮助-版本信息
    芯片822083584、MAC 31.3.0.0.25、PHY 3.1.0.0、NWP 4.0.1.33、ROM 0、 主机3.0.1.65

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

    请从 SDK5.20更新到最新的服务包(sp_4.11.0.0)。

    确保 已启用 SL_WLAN_General_Param_opt_enable_5G (请参阅 SL_WlanGet)。

    此外、使用 NetworkTerminal 收发器(在 transc_cmd.c + radio_tool.c 中实现)作为参考。

    BR、

    Kobi  

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

    请向我指出要下载的示例

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

    最好能够从 Linux 中获取、不带 exe 安装程序

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

    NetworkTerminal 是 SDK 中的一个演示示示例。

    BR、

    Kobi

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

    SDK 包含 Linux 安装程序。

    您还可以在云上进行检查:

    https://dev.ti.com/tirex/explore/node?node=AMxL0.NVox.4SyZ32ksw7Q__fc2e6sr__LATEST

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

    关于 wlanget  sl_WLAN_General_Param_opt_enable_5G:
    我已经在初始 化流程的与处添加了此代码  

                _u8 is_enable;
                _u16 is_enable_len = sizeof(is_enable);
                _u16 option = SL_WLAN_GENERAL_PARAM_OPT_ENABLE_5G;
    
    
                if((ret = sl_WlanGet(SL_WLAN_CFG_GENERAL_PARAM_ID, &option, &is_enable_len, &is_enable))){
                     SL_DEBUG("Error get SimpleLink 5G enable, ret %d\n", ret);
                     break;
                }
    
                SL_DEBUG("5g status is %d\n", is_enable);

    在两侧、我都得到了  
    COMM_simplelink.c:388:5G 状态为1  
    5G 看起来是已启用的

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

    将研究该示例并尝试找出方法中的差异   

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

    好的、请告诉我们。