I am writing a single byte value to a cypress module using write with response (BLE_GATT_OP_WRITE_REQ). For some reason the peripheral will receive the value but will not carry out the action I expect as a result of the write. When I do the write from the nRF connect app, the peripheral receives the byte and actions accordingly.
BLE_GATT_OP_WRITE_CMD returns invalid op so I think it needs to be a write with response. Does anyone have any idea why this would be the case?
What could the nRF app be doing that I am not when carrying out this simple write?
Thanks in advance for any help!
Could you try to capture a sniffer trace of the communication ? You only need a NRF52 DK to use as a sniffer. With that we can see the difference when you do a write request from the nRF52840 and when you do write request from nRF Connect.
Could you explain what exactly you meant by "but will not carry out the action I expect as a result of the write." What exactly missing ? Did you receive the event BLE_GATTC_EVT_WRITE_RSP ?
Hi Hung Bui,
I am waiting for a sniffer I have ordered to arrive as currently I do not have one. It should be with me in the next day or so and I will update then.
The Cypress module (peripheral) is attached to a servo and moves in response to a characteristic value being written to. It is a production item and I know there is nothing wrong with this side of things. As proof, things happen as I expect when using the mobile apps (nRF connect, BLE Hero, CySmart etc...).
When I write to the same characteristic from my Adafruit nRF52 feather, I do indeed receive the BLE_GATTC_EVT_WRITE_RSP along with a GATT_SUCCESS. When I then check the value of the characteristic, it has indeed changed. BUT for some reason the servo does not move UNLESS I disconnect the two devices and then re-connect.
Is there anything you can think of that would cause this behaviour? It feels like a connection event is not terminating?