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: Unable to Transmit data in Transceiver mode on 5G channels

Part Number: CC3135


I using two BOOSTXL-CC3135 as devboards to implement radio exchange in transceiver on 5 GHz channels

Code for initialization:

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;
}


Code for receiving frames

    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);

code to send data

    #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));

As transmitter_addr I use mac of current cc module, for  receiver_addr and bssid_addr I use broadcast mac FF:FF:FF:FF:FF:FF

This code produce header like in examples: 0x88, 0x00, 0x2c, 0x00 receiver, transmitter, bssid mack

For ch form 1 to 13, i.e 2,4 GHz channels this code work correct, for ch 36, 40 and any other 5GHz subrange I did not receive any packets form transceiver  (but still receive some from air from another wifi devices)

I try to play with 

        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;
        }

with countrycode = "US" but this didn`t help(

Did I miss something in configuration/sending/receiving ?