I setup gatt like the following:
static void gatt_init(void)
{
ret_code_t err_code = nrf_ble_gatt_init(&m_gatt, gatt_evt_handler);
APP_ERROR_CHECK(err_code);
err_code = nrf_ble_gatt_att_mtu_central_set(&m_gatt, NRF_SDH_BLE_GATT_MAX_MTU_SIZE);
APP_ERROR_CHECK(err_code);
err_code = nrf_ble_gatt_att_mtu_periph_set(&m_gatt, NRF_SDH_BLE_GATT_MAX_MTU_SIZE);
APP_ERROR_CHECK(err_code);
err_code = nrf_ble_gatt_data_length_set(&m_gatt, BLE_CONN_HANDLE_INVALID, NRF_SDH_BLE_GAP_DATA_LENGTH);
APP_ERROR_CHECK(err_code);
}
where NRF_SDH_BLE_GATT_MAX_MTU_SIZE is 247
When I connect to a macOS 10.13 computer, it seems the MTU negotiation fails and it uses the default minimum of 23. With other devices I am not seeing this problem. I attached the capture from the sniffer. It looks like nRF requests 247, master requests 104, master responds 104, nRF responds 247. Shouldn't nRF respond 104? Am I missing some call in the code to make it respond 104?
<html> <head> <title>FTS Generated HTML</title> <style type="text/css">@import "style.css";</style> <style type="text/css" media="print">@import "print.css";</style> </head> <body><div id="ftsdiv" align=center> <p class="title">ATT Summary Pane</p> <table><thead><tr><td>Bookmark</td> <td>Frame#</td> <td>Role</td> <td>Opcode</td> <td>Handle</td> <td>UUID</td> <td>Database</td> <td>Direction</td> <td>Error code</td> <td>Frame Size</td> <td>Delta</td> <td>Timestamp</td> </tr> </thead> <tfoot><tr><td colspan="12">ATT Summary Pane</td> </tr> </tfoot> <tr bgcolor=#ffffff><td></td> <td>9,489</td> <td>Slave</td> <td>Exchange MTU Request</td> <td></td> <td></td> <td>506563a9(M)</td> <td>M<<S</td> <td></td> <td>25</td> <td></td> <td>8/12/2020 5:23:21.998675 PM</td> </tr> <tr bgcolor=#ffffff><td></td> <td>9,501</td> <td>Slave</td> <td>Exchange MTU Request</td> <td></td> <td></td> <td>506563a9(M)</td> <td>M<<S</td> <td></td> <td>25</td> <td> 00:00:00.015000</td> <td>8/12/2020 5:23:22.013675 PM</td> </tr> <tr bgcolor=#ffffff><td></td> <td>9,525</td> <td>Master</td> <td>Exchange MTU Request</td> <td></td> <td></td> <td>506563a9(S)</td> <td>M>>S</td> <td></td> <td>25</td> <td> 00:00:00.029771</td> <td>8/12/2020 5:23:22.043446 PM</td> </tr> <tr bgcolor=#ffffff><td></td> <td>9,527</td> <td>Master</td> <td>Exchange MTU Response</td> <td></td> <td></td> <td>506563a9(M)</td> <td>M>>S</td> <td></td> <td>25</td> <td> 00:00:00.000516</td> <td>8/12/2020 5:23:22.043962 PM</td> </tr> <tr bgcolor=#ffffff><td></td> <td>9,528</td> <td>Slave</td> <td>Exchange MTU Response</td> <td></td> <td></td> <td>506563a9(S)</td> <td>M<<S</td> <td></td> <td>25</td> <td> 00:00:00.000286</td> <td>8/12/2020 5:23:22.044248 PM</td> </tr> <tr bgcolor=#ffffff><td></td> <td>9,529</td> <td>Master</td> <td>Read by Group Type Request</td> <td>1</td> <td>Primary Service</td> <td>506563a9(S)</td> <td>M>>S</td> <td></td> <td>29</td> <td> 00:00:00.014198</td> <td>8/12/2020 5:23:22.058446 PM</td> </tr> </table> </div> <html> <head> <title>FTS Generated HTML</title> <style type="text/css">@import "style.css";</style> <style type="text/css" media="print">@import "print.css";</style> </head> <body><div id="ftsdiv" align=center> <p class="title">ATT Summary Pane</p> <table><thead><tr><td>Bookmark</td> <td>Frame#</td> <td>Role</td> <td>Opcode</td> <td>Handle</td> <td>UUID</td> <td>Database</td> <td>Direction</td> <td>Error code</td> <td>Frame Size</td> <td>Delta</td> <td>Timestamp</td> </tr> </thead> <tfoot><tr><td colspan="12">ATT Summary Pane</td> </tr> </tfoot> <ul class="ftstree" id="frame9,489">Frame 9,489: Len=25<li class="liOpen" style="color:#7d005f">LE BB<ul><li class="liBullet">Header Length: 13</li> <li class="liBullet">Header Version: 3</li> <li class="liBullet">CP #: 1</li> <li class="liBullet">RF Channel: 9 - 2420 MHz</li> <li class="liBullet">Channel Index: 8</li> <li class="liBullet">Meets Predefined Filter Criteria for BT low energy devices: No</li> <li class="liBullet">Receive Status: Received without errors</li> <li class="liBullet">Decryption Initiated: No</li> <li class="liBullet">Signal Strength: 12 (strong)</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liOpen">Packet Length: 17 bytes<ul><li class="liBullet">Preamble Length: 1 byte</li> <li class="liBullet">Access Address Length: 4 bytes</li> <li class="liBullet">PDU Length: 9 bytes</li> <li class="liBullet">CRC Length: 3 bytes</li> </ul> </li> </ul> </li> <li class="liOpen" style="color:#357d00">LE PKT<ul><li class="liBullet">Preamble: 0x55</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liBullet">CRC: 0x38263d</li> </ul> </li> <li class="liOpen" style="color:#aa5e5e">LE DATA<ul><li class="liBullet">LLID: Start</li> <li class="liBullet">NESN: 1</li> <li class="liBullet">SN: 0</li> <li class="liBullet">SN+NESN: 2</li> <li class="liBullet">MD: 0</li> <li class="liBullet">CP: No CTEInfo</li> <li class="liBullet">Payload Length: 7</li> </ul> </li> <li class="liOpen" style="color:#67aa5e">L2CAP<ul><li class="liBullet">PDU Length: 3</li> <li class="liBullet">Channel ID: 0x0004 (Attribute Protocol)</li> </ul> </li> <li class="liOpen" style="color:#aa8d5e">ATT<ul><li class="liBullet">Role: Slave</li> <li class="liBullet">Signature Present: No</li> <li class="liBullet">PDU Type is Command: No</li> <li class="liBullet">Opcode: Exchange MTU Request</li> <li class="liBullet">*Database: 506563a9(M)</li> <li class="liBullet">Client Rx MTU: 247</li> </ul> </li> </ul> <ul class="ftstree" id="frame9,501">Frame 9,501: Len=25<li class="liOpen" style="color:#7d005f">LE BB<ul><li class="liBullet">Header Length: 13</li> <li class="liBullet">Header Version: 3</li> <li class="liBullet">CP #: 1</li> <li class="liBullet">RF Channel: 18 - 2438 MHz</li> <li class="liBullet">Channel Index: 16</li> <li class="liBullet">Meets Predefined Filter Criteria for BT low energy devices: No</li> <li class="liBullet">Receive Status: Received without errors</li> <li class="liBullet">Decryption Initiated: No</li> <li class="liBullet">Signal Strength: 12 (strong)</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liOpen">Packet Length: 17 bytes<ul><li class="liBullet">Preamble Length: 1 byte</li> <li class="liBullet">Access Address Length: 4 bytes</li> <li class="liBullet">PDU Length: 9 bytes</li> <li class="liBullet">CRC Length: 3 bytes</li> </ul> </li> </ul> </li> <li class="liOpen" style="color:#357d00">LE PKT<ul><li class="liBullet">Preamble: 0x55</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liBullet">CRC: 0x3fd04f</li> </ul> </li> <li class="liOpen" style="color:#aa5e5e">LE DATA<ul><li class="liBullet">LLID: Start</li> <li class="liBullet">NESN: 0</li> <li class="liBullet">SN: 0</li> <li class="liBullet">SN+NESN: 0</li> <li class="liBullet">MD: 0</li> <li class="liBullet">CP: No CTEInfo</li> <li class="liBullet">Payload Length: 7</li> </ul> </li> <li class="liOpen" style="color:#67aa5e">L2CAP<ul><li class="liBullet">PDU Length: 3</li> <li class="liBullet">Channel ID: 0x0004 (Attribute Protocol)</li> </ul> </li> <li class="liOpen" style="color:#aa8d5e">ATT<ul><li class="liBullet">Role: Slave</li> <li class="liBullet">Signature Present: No</li> <li class="liBullet">PDU Type is Command: No</li> <li class="liBullet">Opcode: Exchange MTU Request</li> <li class="liBullet">*Database: 506563a9(M)</li> <li class="liBullet">Client Rx MTU: 247</li> </ul> </li> </ul> <ul class="ftstree" id="frame9,525">Frame 9,525: Len=25<li class="liOpen" style="color:#7d005f">LE BB<ul><li class="liBullet">Header Length: 13</li> <li class="liBullet">Header Version: 3</li> <li class="liBullet">CP #: 1</li> <li class="liBullet">RF Channel: 34 - 2470 MHz</li> <li class="liBullet">Channel Index: 32</li> <li class="liBullet">Meets Predefined Filter Criteria for BT low energy devices: No</li> <li class="liBullet">Receive Status: Received without errors</li> <li class="liBullet">Decryption Initiated: No</li> <li class="liBullet">Signal Strength: 9 (medium)</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liOpen">Packet Length: 17 bytes<ul><li class="liBullet">Preamble Length: 1 byte</li> <li class="liBullet">Access Address Length: 4 bytes</li> <li class="liBullet">PDU Length: 9 bytes</li> <li class="liBullet">CRC Length: 3 bytes</li> </ul> </li> </ul> </li> <li class="liOpen" style="color:#357d00">LE PKT<ul><li class="liBullet">Preamble: 0x55</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liBullet">CRC: 0x9cca71</li> </ul> </li> <li class="liOpen" style="color:#aa5e5e">LE DATA<ul><li class="liBullet">LLID: Start</li> <li class="liBullet">NESN: 0</li> <li class="liBullet">SN: 1</li> <li class="liBullet">SN+NESN: 1</li> <li class="liBullet">MD: 1</li> <li class="liBullet">CP: No CTEInfo</li> <li class="liBullet">Payload Length: 7</li> </ul> </li> <li class="liOpen" style="color:#67aa5e">L2CAP<ul><li class="liBullet">PDU Length: 3</li> <li class="liBullet">Channel ID: 0x0004 (Attribute Protocol)</li> </ul> </li> <li class="liOpen" style="color:#aa8d5e">ATT<ul><li class="liBullet">Role: Master</li> <li class="liBullet">Signature Present: No</li> <li class="liBullet">PDU Type is Command: No</li> <li class="liBullet">Opcode: Exchange MTU Request</li> <li class="liBullet">*Database: 506563a9(S)</li> <li class="liBullet">Client Rx MTU: 104</li> </ul> </li> </ul> <ul class="ftstree" id="frame9,527">Frame 9,527: Len=25<li class="liOpen" style="color:#7d005f">LE BB<ul><li class="liBullet">Header Length: 13</li> <li class="liBullet">Header Version: 3</li> <li class="liBullet">CP #: 1</li> <li class="liBullet">RF Channel: 34 - 2470 MHz</li> <li class="liBullet">Channel Index: 32</li> <li class="liBullet">Meets Predefined Filter Criteria for BT low energy devices: No</li> <li class="liBullet">Receive Status: Received without errors</li> <li class="liBullet">Decryption Initiated: No</li> <li class="liBullet">Signal Strength: 9 (medium)</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liOpen">Packet Length: 17 bytes<ul><li class="liBullet">Preamble Length: 1 byte</li> <li class="liBullet">Access Address Length: 4 bytes</li> <li class="liBullet">PDU Length: 9 bytes</li> <li class="liBullet">CRC Length: 3 bytes</li> </ul> </li> </ul> </li> <li class="liOpen" style="color:#357d00">LE PKT<ul><li class="liBullet">Preamble: 0x55</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liBullet">CRC: 0x933204</li> </ul> </li> <li class="liOpen" style="color:#aa5e5e">LE DATA<ul><li class="liBullet">LLID: Start</li> <li class="liBullet">NESN: 1</li> <li class="liBullet">SN: 0</li> <li class="liBullet">SN+NESN: 2</li> <li class="liBullet">MD: 0</li> <li class="liBullet">CP: No CTEInfo</li> <li class="liBullet">Payload Length: 7</li> </ul> </li> <li class="liOpen" style="color:#67aa5e">L2CAP<ul><li class="liBullet">PDU Length: 3</li> <li class="liBullet">Channel ID: 0x0004 (Attribute Protocol)</li> </ul> </li> <li class="liOpen" style="color:#aa8d5e">ATT<ul><li class="liBullet">Role: Master</li> <li class="liBullet">Signature Present: No</li> <li class="liBullet">PDU Type is Command: No</li> <li class="liBullet">Opcode: Exchange MTU Response</li> <li class="liBullet">*Database: 506563a9(M)</li> <li class="liBullet">Server Rx MTU: 104</li> </ul> </li> </ul> <ul class="ftstree" id="frame9,528">Frame 9,528: Len=25<li class="liOpen" style="color:#7d005f">LE BB<ul><li class="liBullet">Header Length: 13</li> <li class="liBullet">Header Version: 3</li> <li class="liBullet">CP #: 1</li> <li class="liBullet">RF Channel: 34 - 2470 MHz</li> <li class="liBullet">Channel Index: 32</li> <li class="liBullet">Meets Predefined Filter Criteria for BT low energy devices: No</li> <li class="liBullet">Receive Status: Received without errors</li> <li class="liBullet">Decryption Initiated: No</li> <li class="liBullet">Signal Strength: 12 (strong)</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liOpen">Packet Length: 17 bytes<ul><li class="liBullet">Preamble Length: 1 byte</li> <li class="liBullet">Access Address Length: 4 bytes</li> <li class="liBullet">PDU Length: 9 bytes</li> <li class="liBullet">CRC Length: 3 bytes</li> </ul> </li> </ul> </li> <li class="liOpen" style="color:#357d00">LE PKT<ul><li class="liBullet">Preamble: 0x55</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liBullet">CRC: 0xb1d68b</li> </ul> </li> <li class="liOpen" style="color:#aa5e5e">LE DATA<ul><li class="liBullet">LLID: Start</li> <li class="liBullet">NESN: 1</li> <li class="liBullet">SN: 1</li> <li class="liBullet">SN+NESN: 3</li> <li class="liBullet">MD: 0</li> <li class="liBullet">CP: No CTEInfo</li> <li class="liBullet">Payload Length: 7</li> </ul> </li> <li class="liOpen" style="color:#67aa5e">L2CAP<ul><li class="liBullet">PDU Length: 3</li> <li class="liBullet">Channel ID: 0x0004 (Attribute Protocol)</li> </ul> </li> <li class="liOpen" style="color:#aa8d5e">ATT<ul><li class="liBullet">Role: Slave</li> <li class="liBullet">Signature Present: No</li> <li class="liBullet">PDU Type is Command: No</li> <li class="liBullet">Opcode: Exchange MTU Response</li> <li class="liBullet">*Database: 506563a9(S)</li> <li class="liBullet">Server Rx MTU: 247</li> </ul> </li> </ul> <ul class="ftstree" id="frame9,529">Frame 9,529: Len=29<li class="liOpen" style="color:#7d005f">LE BB<ul><li class="liBullet">Header Length: 13</li> <li class="liBullet">Header Version: 3</li> <li class="liBullet">CP #: 1</li> <li class="liBullet">RF Channel: 4 - 2410 MHz</li> <li class="liBullet">Channel Index: 3</li> <li class="liBullet">Meets Predefined Filter Criteria for BT low energy devices: No</li> <li class="liBullet">Receive Status: Received without errors</li> <li class="liBullet">Decryption Initiated: No</li> <li class="liBullet">Signal Strength: 9 (medium)</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liOpen">Packet Length: 21 bytes<ul><li class="liBullet">Preamble Length: 1 byte</li> <li class="liBullet">Access Address Length: 4 bytes</li> <li class="liBullet">PDU Length: 13 bytes</li> <li class="liBullet">CRC Length: 3 bytes</li> </ul> </li> </ul> </li> <li class="liOpen" style="color:#357d00">LE PKT<ul><li class="liBullet">Preamble: 0x55</li> <li class="liBullet">Access Address: 0x506563a9</li> <li class="liBullet">CRC: 0xb2007b</li> </ul> </li> <li class="liOpen" style="color:#aa5e5e">LE DATA<ul><li class="liBullet">LLID: Start</li> <li class="liBullet">NESN: 0</li> <li class="liBullet">SN: 1</li> <li class="liBullet">SN+NESN: 1</li> <li class="liBullet">MD: 0</li> <li class="liBullet">CP: No CTEInfo</li> <li class="liBullet">Payload Length: 11</li> </ul> </li> <li class="liOpen" style="color:#67aa5e">L2CAP<ul><li class="liBullet">PDU Length: 7</li> <li class="liBullet">Channel ID: 0x0004 (Attribute Protocol)</li> </ul> </li> <li class="liOpen" style="color:#aa8d5e">ATT<ul><li class="liBullet">Role: Master</li> <li class="liBullet">Signature Present: No</li> <li class="liBullet">PDU Type is Command: No</li> <li class="liBullet">Opcode: Read by Group Type Request</li> <li class="liBullet">*Database: 506563a9(S)</li> <li class="liBullet">Starting Attribute Handle: 1</li> <li class="liBullet">Ending Attribute Handle: 65535</li> <li class="liBullet">Attribute Group Type: Primary Service</li> </ul> </li> </ul> </body> </html>