Mandatory Laptop Software/Hardware drivers

We are using your NRF52810-QFAA chip with our firmware inside which provides the ability to create services and characteristics from the host microcontroller via UART. This chip is soldered on the mother board of our prosthetic devices. With some Microsoft laptops we have excellent connectivity via Bluetooth. With other Microsoft laptops we cannot routinely connect, Ie connects then disconnects.  Is there a mandatory minimum laptop hardware software driver, software revision etc. level that is needed for your product to function properly?

Thank you.


  • Here is another session of work through BLE. And here, as always, we get the BLE error code - 40
    The picture is a part of log from a prosthetic
    If the BLE session ends normally, then on the device we see the BLE code - 19
  • We have seen diconnected, reason 40 before mostly when there are issues in the lfclk accuracy. There is a good list for you to check for the probably cause as mentioned by my colleague here.

    Please check which clock you are using for the device (internal RC or XTAL) and the accuracy of the clock. Can you tell me more about the software you are using? It looks like you are using cpp files, are you using our deprecated nRF5SDK or our latest nRF Connect SDK?

  • Hello.
    Below is an answer for Nordic support.
    The project for nRF51810 is written in C++ using nRF5_SDK_15.3.0_59ac345.
    The project for STM32H723 is also written in C++. I do not think this is the problem.
    Also, I would like to add that the project for nRF51810 is a firmware unified within our company, which has been successfully used many times in other projects.
    Also, I will add that there are absolutely no such problems as previously described if I use the nRF Connect application running on a phone for testing. It can keep a connection for hours.
    If it did not work stably, then the nRF Connect application on a phone would also have similar problems.
    Maybe I have to change some settings for the nRF51810 firmware and this will help keep a connection stable?

    #define MSEC_TO_UNITS(TIME, RESOLUTION) (((TIME) * 1000) / (RESOLUTION))
    enum
    {
    kUnit_0_625_ms = 625, /**< Number of microseconds in 0.625 milliseconds. */
    kUnit_1_25_ms = 1250, /**< Number of microseconds in 1.25 milliseconds. */
    kUnit_10_ms = 10000 /**< Number of microseconds in 10 milliseconds. */
    };
    /* The advertising interval (in units of 0.625 ms. This value corresponds to 187.5 ms). */
    #define APP_ADV_INTERVAL 300
    /* The advertising duration (180 seconds) in units of 10 milliseconds. */
    #define APP_ADV_DURATION ADVERTISEMENT_PERIOD_SEC * 100 /*BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED*//*18000*/
    /* A tag identifying the SoftDevice BLE configuration. */
    #define APP_BLE_CONN_CFG_TAG 1
    /* Minimum acceptable connection interval (0.4 seconds). */
    #define MIN_CONN_INTERVAL MSEC_TO_UNITS(8, kUnit_1_25_ms)
    /* Maximum acceptable connection interval (0.65 second). */
    #define MAX_CONN_INTERVAL MSEC_TO_UNITS(50, kUnit_1_25_ms)
    /* Slave latency. */
    #define SLAVE_LATENCY 1/*0*/
    /* Connection supervisory timeout (4 seconds). */
    //#define CONN_SUP_TIMEOUT MSEC_TO_UNITS(500/*4000*/, kUnit_10_ms)
    #define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, kUnit_10_ms)
    /* Time from initiating event (connect or start of notification)
    to first time sd_ble_gap_conn_param_update is called (5 seconds). */
    #define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000)
    /* Time between each call to sd_ble_gap_conn_param_update after
    the first call (30 seconds). */
    #define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000)
    /* Number of attempts before giving up the connection parameter negotiation. */
    #define MAX_CONN_PARAMS_UPDATE_COUNT 3
    #define SEC_PARAM_BOND 1 /* Perform bonding. */
    #define SEC_PARAM_MITM 0 /* Man In The Middle protection requirement. */
    #define SEC_PARAM_LESC 0 /* LE Secure Connections not enabled. */
    #define SEC_PARAM_KEYPRESS 0 /* Keypress notifications not enabled. */
    #define SEC_PARAM_IO_CAPABILITIES BLE_GAP_IO_CAPS_NONE /* I/O capabilities. */
    #define SEC_PARAM_OOB 0 /* Out Of Band data availability. */
    #define SEC_PARAM_MIN_KEY_SIZE 7 /* Minimum encryption key size. */
    #define SEC_PARAM_MAX_KEY_SIZE 16 /* Maximum encryption key size. */
    About "slave latency".
    I have fount this code in the nRF51810 firmware:
    BleErrorCode_t BleServer::initGapParams()
    {
    if (this->m_devName == nullptr) {
    return BleErrorCode_t::kErrorServerNameNotSet;
    }
    BleGapConnParams_t l_gapConnParams {};
    BleGapConnSecMode_t l_secMode;

    BLE_GAP_CONN_SEC_MODE_SET_OPEN(&l_secMode);
    BleErrorCode_t l_errCode;
    l_errCode = this->m_bleCore.setDeviceName(l_secMode, (const uint8_t *) this->m_devName,
    static_cast<uint16_t>(strlen(this->m_devName)));
    if (BleErrorCode_t::kSuccess != l_errCode) {
    return l_errCode;
    }
    //Bluetooth Appearance value
    l_errCode = this->m_bleCore.setAppearance(BLE_APPEARANCE_UNKNOWN);
    if (BleErrorCode_t::kSuccess != l_errCode) {
    return l_errCode;
    }
    l_gapConnParams.minConnInterval = MIN_CONN_INTERVAL;
    l_gapConnParams.maxConnInterval = MAX_CONN_INTERVAL;
    l_gapConnParams.slaveLatency = SLAVE_LATENCY;
    l_gapConnParams.connSupTimeout = CONN_SUP_TIMEOUT;
    l_errCode = this->m_bleCore.setPpcp(l_gapConnParams);
    return l_errCode;
    }
    Here SLAVE_LATENCY is defines as
    #define SLAVE_LATENCY 1/*0*/
    Should I make any changes here?
  • Are you able to reproduce this on the nRF52810DK? I think it is important to do that if you have not done that already This ensures we focus either on hardware or software issue.

    If you have project that I can run on nRF52810 DK, then please share it so that I can reproduce it here.

Related