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.

[参考译文] LP-EM-CC2340R5:数据传输速度太慢

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1415600/lp-em-cc2340r5-the-data-transfer-speed-is-too-slow

器件型号:LP-EM-CC2340R5
主题中讨论的其他器件:SysConfig

工具与软件:

您好!

我有两块 Launchpad 板、一块用作中央板、另一块用作外设。 当中央设备发送 GATT_WriteNoRsp (APP_CONNECTION_Handle、&req)时、我发现外设在2到3秒后接收到数据。 这是否正常? 如何加快此过程?

 SDK 版本:7.40.0.64

            Central Send data (中央发送数据)

/*********************************************************************
 * @fn      SimpleGattProfile_writeAttrCB
 *
 * @brief   Validate attribute data prior to a write operation
 *
 * @param   connHandle - connection message was received on
 * @param   pAttr - pointer to attribute
 * @param   pValue - pointer to data to be written
 * @param   len - length of data
 * @param   offset - offset of the first octet to be written
 * @param   method - type of write message
 *
 * @return  SUCCESS, blePending or Failure
 */
bStatus_t SimpleGattProfile_writeAttrCB( uint16_t connHandle,
                                     gattAttribute_t *pAttr,
                                     uint8_t *pValue, uint16_t len,
                                     uint16_t offset, uint8_t method )
{
  bStatus_t status = SUCCESS;
  uint8 notifyApp = 0xFF;

  if ( pAttr->type.len == ATT_BT_UUID_SIZE )
  {
    // 16-bit UUID
    uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
    switch ( uuid )
    {
      case SIMPLEGATTPROFILE_CHAR1_UUID:
      case SIMPLEGATTPROFILE_CHAR3_UUID:
        {
          //Validate the value
          // Make sure it's not a blob oper
          if ( offset == 0 )
          {
//            if ( len != 1 )
//            {
//              status = ATT_ERR_INVALID_VALUE_SIZE;
//            }

            if( (   (uuid == SIMPLEGATTPROFILE_CHAR1_UUID) && ( len != 1 )  )
               || (   (uuid == SIMPLEGATTPROFILE_CHAR3_UUID) && ( len == 0)  )
              )
            {

                status = ATT_ERR_INVALID_VALUE_SIZE;
            }
          }
          else
          {
            status = ATT_ERR_ATTR_NOT_LONG;
          }

          if ( status == SUCCESS )
          {
            uint8 *pCurValue = (uint8 *)pAttr->pValue;
            *pCurValue = pValue[0];

            if( pAttr->pValue == &simpleGattProfile_Char1 )
            {
              notifyApp = SIMPLEGATTPROFILE_CHAR1;
            }
            else
            {
              //user add get data.
              memcpy(simpleGattProfile_Char3,pValue,len);

              user_peripheral_receive.P_Rx_data_len = len;
              user_peripheral_receive.P_Rx_data_ptr = simpleGattProfile_Char3;

              notifyApp = SIMPLEGATTPROFILE_CHAR3;

            }
          }
        }
        break;

      case GATT_CLIENT_CHAR_CFG_UUID:
        status = GATTServApp_ProcessCCCWriteReq( connHandle, pAttr, pValue, len,
                                                 offset, GATT_CLIENT_CFG_NOTIFY );
        user_peripheral_receive.P_notify_flag = *pValue;
        //notify the App that a change has occurred in Char 4

        notifyApp = SIMPLEGATTPROFILE_CHAR4;
        break;

      default:
        // Should never get here! (characteristics 2 and 4 do not have write permissions)
        status = ATT_ERR_ATTR_NOT_FOUND;
        break;
    }
  }
  else
  {
    // 128-bit UUID
    status = ATT_ERR_INVALID_HANDLE;
  }

  // If a characteristic value changed then callback function to notify application of change
  if ((notifyApp != 0xFF ) && simpleGattProfile_appCBs && simpleGattProfile_appCBs->pfnSimpleGattProfile_Change)
  {
      SimpleGattProfile_callback( notifyApp );
  }

  // Return status value
  return ( status );
}

       外设接收数据

/*********************************************************************
 * @fn      SimpleGatt_ChangeCB
 *
 * @brief   Callback from Simple Profile indicating a characteristic
 *          value change.
 *
 * @param   paramId - parameter Id of the value that was changed.
 *
 * @return  None.
 */
static void SimpleGatt_changeCB( uint8_t paramId )
{
  uint8_t newValue = 0;

  switch( paramId )
  {
    case SIMPLEGATTPROFILE_CHAR1:
      {
        SimpleGattProfile_getParameter( SIMPLEGATTPROFILE_CHAR1, &newValue );

//        evaluateNewCharacteristicValue(newValue); //add
        // Print the new value of char 1
        MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE, 0, "Profile status: Simple profile - "
                          "Char 1 value = " MENU_MODULE_COLOR_YELLOW "%d " MENU_MODULE_COLOR_RESET,
                          newValue);
      }
      break;

    case SIMPLEGATTPROFILE_CHAR3:
      {
        //SimpleGattProfile_getParameter(SIMPLEGATTPROFILE_CHAR3, &newValue);
          //user_peripheral_receive.P_Rx_data_len = len;
          //user_peripheral_receive.P_Rx_data_ptr = simpleGattProfile_Char3;

          UART2_write(uart, (char*)user_peripheral_receive.P_Rx_data_ptr, user_peripheral_receive.P_Rx_data_len, NULL);
          //UART2_write(uart, (char*)"\r\n", strlen((char*)"\r\n"), NULL);


        // Print the new value of char 3
        MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE, 0, "Profile status: Simple profile - "
                          "Char 3 value = " MENU_MODULE_COLOR_YELLOW "%d " MENU_MODULE_COLOR_RESET,
                          newValue);

        //SimpleGatt_notifyChar4();
      }
      break;
    case SIMPLEGATTPROFILE_CHAR4:
      {
          // Print Notification registration to user
          if(user_peripheral_receive.P_notify_flag == 1 )
              UART2_write(uart, (char*)"\r\nnotify = On\r\nOK\r\n", strlen((char*)"\r\nnotify = On\r\nOK\r\n"), NULL);
          else
              UART2_write(uart, (char*)"\r\nnotify = Off\r\nOK\r\n", strlen((char*)"\r\nnotify = Off\r\nOK\r\n"), NULL);

          MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE, 0, "Profile status: Simple profile - "
                                    "Char 4 = Notification registration");

          //SimpleGatt_notifyChar4();
          break;
      }
    default:
      // should not reach here!
      break;
  }
}

       外设接收数据(充电盒 SIMPLEGATTPROFILE_CHAR3)

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

    您好!

    您使用的连接间隔可能非常高、这会导致延迟问题。 我建议将连接间隔减小到7.5ms (最小值)、以开始查看延迟是否有所改善。 这可以通过 SysConfig 或通过连接参数更新来完成。

    此致、

    1月