52820 esb rx cannot send ack

project:
nRF5_SDK_17.1.0_ddde560\examples\proprietary_rf\esb_ptx \pca10100e\blank\arm5_no_packs
nRF5_SDK_17.1.0_ddde560\examples\proprietary_rf\esb_prx\pca10100e\blank\arm5_no_packs
I need esb_rx to reply ack to esb_tx, but I can't do it with demo.
Then I made the following modifications:

esb_prx project:
.selective_auto_ack=true;
nrf_esb_payload_t tx_payload = NRF_ESB_CREATE_PAYLOAD(0, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00);
tx_payload.noack = true;
err_code = nrf_esb_write_payload(&tx_payload);
APP_ERROR_CHECK(err_code);

esb.ptx project:
.selective_auto_ack=true;
The result is still the same. What should I do to enable esb_tx to receive ack from esb_rx?
Attached is the code.esb_tx_rx.rar

Parents
  • Hello,

    It is the PTX that control whether it want to receive an ACK or not from the PRX. Both PTX and PRX should be configured with:
    nrf_esb_config.selective_auto_ack = true; // allow ack or no ack from the PRX.

    When the PTX transmit a packet it can set either:
    tx_payload.noack = false; // ack is sent from the PRX
    tx_payload.noack = true; // no ack is received from the PRX

    Best regards,
    Kenneth

  • Thank you, after setting and adding the following configuration according to your configuration, I received the ack of RX at tx.
    static nrf_esb_payload_t tx_payload = NRF_ESB_CREATE_PAYLOAD(0, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00);
    case NRF_ESB_EVENT_RX_RECEIVED:
    uint32_t err_code = nrf_esb_write_payload(&tx_payload);
    APP_ERROR_CHECK(err_code);

    But my product is to do RX with 52840 do TX 52820. So I put the same code to the 52840 project.
    Then something happened:
    The rx side has triggered NRF_ESB_EVENT_TX_SUCCESS, but the 52840 has not triggered NRF_ESB_EVENT_RX_RECEIVED.

    52840  SDK version:nRF5_SDK_16.0.0_98a08e2。

    Where did I set it wrong?Attachment is 52840esb code。52840_tx.rar

Reply
  • Thank you, after setting and adding the following configuration according to your configuration, I received the ack of RX at tx.
    static nrf_esb_payload_t tx_payload = NRF_ESB_CREATE_PAYLOAD(0, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00);
    case NRF_ESB_EVENT_RX_RECEIVED:
    uint32_t err_code = nrf_esb_write_payload(&tx_payload);
    APP_ERROR_CHECK(err_code);

    But my product is to do RX with 52840 do TX 52820. So I put the same code to the 52840 project.
    Then something happened:
    The rx side has triggered NRF_ESB_EVENT_TX_SUCCESS, but the 52840 has not triggered NRF_ESB_EVENT_RX_RECEIVED.

    52840  SDK version:nRF5_SDK_16.0.0_98a08e2。

    Where did I set it wrong?Attachment is 52840esb code。52840_tx.rar

Children
Related